From e797cee74eb83d4892c6c7c8a1c45d0f659b22bc Mon Sep 17 00:00:00 2001 From: Erez Zadok Date: Thu, 5 Nov 1998 02:04:18 +0000 Subject: [PATCH] Initial revision --- AUTHORS | 213 + BUGS | 92 + COPYING | 37 + ChangeLog | 1434 + INSTALL | 118 + MIRRORS | 46 + Makefile.am | 300 + Makefile.in | 601 + NEWS | 644 + README | 105 + README.autofs | 113 + README.y2k | 18 + TODO | 177 + amd/Makefile.am | 147 + amd/Makefile.in | 480 + amd/am_ops.c | 441 + amd/amd.8 | 352 + amd/amd.c | 536 + amd/amd.h | 302 + amd/amfs_auto.c | 1596 + amd/amfs_direct.c | 106 + amd/amfs_error.c | 150 + amd/amfs_host.c | 686 + amd/amfs_inherit.c | 200 + amd/amfs_link.c | 141 + amd/amfs_linkx.c | 103 + amd/amfs_nfsl.c | 237 + amd/amfs_nfsx.c | 532 + amd/amfs_program.c | 191 + amd/amfs_root.c | 99 + amd/amfs_toplvl.c | 355 + amd/amfs_union.c | 124 + amd/amq_subr.c | 501 + amd/amq_svc.c | 157 + amd/autil.c | 418 + amd/clock.c | 247 + amd/conf.c | 949 + amd/conf_parse.y | 159 + amd/conf_tok.l | 186 + amd/get_args.c | 389 + amd/info_file.c | 265 + amd/info_hesiod.c | 163 + amd/info_ldap.c | 465 + amd/info_ndbm.c | 141 + amd/info_nis.c | 405 + amd/info_nisplus.c | 321 + amd/info_passwd.c | 195 + amd/info_union.c | 149 + amd/map.c | 1112 + amd/mapc.c | 1227 + amd/mntfs.c | 335 + amd/nfs_prot_svc.c | 250 + amd/nfs_start.c | 472 + amd/nfs_subr.c | 617 + amd/ops_TEMPLATE.c | 293 + amd/ops_autofs.c | 1276 + amd/ops_cachefs.c | 247 + amd/ops_cdfs.c | 206 + amd/ops_efs.c | 164 + amd/ops_lofs.c | 154 + amd/ops_mfs.c | 55 + amd/ops_nfs.c | 799 + amd/ops_nfs3.c | 55 + amd/ops_nullfs.c | 55 + amd/ops_pcfs.c | 179 + amd/ops_tfs.c | 55 + amd/ops_tmpfs.c | 55 + amd/ops_ufs.c | 173 + amd/ops_umapfs.c | 55 + amd/ops_unionfs.c | 55 + amd/ops_xfs.c | 164 + amd/opts.c | 1304 + amd/restart.c | 208 + amd/rpc_fwd.c | 476 + amd/sched.c | 300 + amd/srvr_amfs_auto.c | 214 + amd/srvr_nfs.c | 851 + amq/Makefile.am | 50 + amq/Makefile.in | 451 + amq/amq.8 | 214 + amq/amq.c | 938 + amq/amq.h | 63 + amq/amq_clnt.c | 208 + amq/amq_xdr.c | 259 + amq/pawd.1 | 72 + amq/pawd.c | 295 + buildall | 285 + conf/checkmount/checkmount_aix.c | 89 + conf/checkmount/checkmount_bsd44.c | 78 + conf/checkmount/checkmount_default.c | 110 + conf/checkmount/checkmount_osf.c | 90 + conf/checkmount/checkmount_svr4.c | 101 + conf/checkmount/checkmount_ultrix.c | 80 + conf/fh_dref/fh_dref_aix3.h | 2 + conf/fh_dref/fh_dref_aix42.h | 2 + conf/fh_dref/fh_dref_bsd44.h | 2 + conf/fh_dref/fh_dref_default.h | 2 + conf/fh_dref/fh_dref_freebsd22.h | 2 + conf/fh_dref/fh_dref_hpux.h | 2 + conf/fh_dref/fh_dref_irix.h | 2 + conf/fh_dref/fh_dref_isc3.h | 2 + conf/fh_dref/fh_dref_linux.h | 2 + conf/fh_dref/fh_dref_nextstep.h | 2 + conf/fh_dref/fh_dref_osf2.h | 2 + conf/fh_dref/fh_dref_osf4.h | 2 + conf/fh_dref/fh_dref_sunos3.h | 2 + conf/fh_dref/fh_dref_sunos4.h | 2 + conf/fh_dref/fh_dref_svr4.h | 2 + conf/hn_dref/hn_dref_default.h | 2 + conf/hn_dref/hn_dref_isc3.h | 5 + conf/hn_dref/hn_dref_linux.h | 2 + conf/mount/mount_aix.c | 223 + conf/mount/mount_bsdi3.c | 53 + conf/mount/mount_freebsd3.c | 66 + conf/mount/mount_hpux.c | 91 + conf/mount/mount_irix5.c | 103 + conf/mount/mount_irix6.c | 99 + conf/mount/mount_isc3.c | 77 + conf/mount/mount_linux.c | 513 + conf/mount/mount_mach3.c | 87 + conf/mount/mount_stellix.c | 76 + conf/mount/mount_svr4.c | 133 + conf/mtab/mtab_aix.c | 154 + conf/mtab/mtab_bsd.c | 145 + conf/mtab/mtab_file.c | 446 + conf/mtab/mtab_isc3.c | 281 + conf/mtab/mtab_mach3.c | 493 + conf/mtab/mtab_osf.c | 151 + conf/mtab/mtab_svr4.c | 298 + conf/mtab/mtab_ultrix.c | 117 + conf/nfs_prot/nfs_prot_aix3.h | 217 + conf/nfs_prot/nfs_prot_aix4.h | 215 + conf/nfs_prot/nfs_prot_aix4_2.h | 308 + conf/nfs_prot/nfs_prot_bsdi2.h | 485 + conf/nfs_prot/nfs_prot_bsdi3.h | 223 + conf/nfs_prot/nfs_prot_default.h | 171 + conf/nfs_prot/nfs_prot_freebsd2.h | 146 + conf/nfs_prot/nfs_prot_freebsd3.h | 212 + conf/nfs_prot/nfs_prot_hpux.h | 390 + conf/nfs_prot/nfs_prot_hpux11.h | 489 + conf/nfs_prot/nfs_prot_irix5.h | 454 + conf/nfs_prot/nfs_prot_irix6.h | 419 + conf/nfs_prot/nfs_prot_linux.h | 254 + conf/nfs_prot/nfs_prot_ncr2.h | 481 + conf/nfs_prot/nfs_prot_netbsd.h | 222 + conf/nfs_prot/nfs_prot_netbsd1_3.h | 212 + conf/nfs_prot/nfs_prot_nextstep.h | 600 + conf/nfs_prot/nfs_prot_openbsd.h | 216 + conf/nfs_prot/nfs_prot_osf2.h | 315 + conf/nfs_prot/nfs_prot_osf4.h | 419 + conf/nfs_prot/nfs_prot_sunos3.h | 406 + conf/nfs_prot/nfs_prot_sunos4.h | 406 + conf/nfs_prot/nfs_prot_sunos5_3.h | 269 + conf/nfs_prot/nfs_prot_sunos5_4.h | 266 + conf/nfs_prot/nfs_prot_sunos5_5.h | 384 + conf/nfs_prot/nfs_prot_sunos5_6.h | 406 + conf/nfs_prot/nfs_prot_svr4.h | 406 + conf/nfs_prot/nfs_prot_ultrix.h | 309 + conf/sa_dref/sa_dref_386bsd.h | 4 + conf/sa_dref/sa_dref_aix3.h | 2 + conf/sa_dref/sa_dref_aoi.h | 6 + conf/sa_dref/sa_dref_bsd44.h | 5 + conf/sa_dref/sa_dref_default.h | 2 + conf/sa_dref/sa_dref_isc3.h | 6 + conf/sa_dref/sa_dref_linux.h | 2 + conf/sa_dref/sa_dref_svr4.h | 6 + conf/transp/transp_sockets.c | 400 + conf/transp/transp_tli.c | 789 + conf/trap/trap_aix3.h | 3 + conf/trap/trap_aux.h | 2 + conf/trap/trap_default.h | 2 + conf/trap/trap_dgux.h | 2 + conf/trap/trap_freebsd3.h | 3 + conf/trap/trap_hcx.h | 2 + conf/trap/trap_hpux.h | 15 + conf/trap/trap_hpux11.h | 3 + conf/trap/trap_irix.h | 3 + conf/trap/trap_isc3.h | 3 + conf/trap/trap_linux.h | 3 + conf/trap/trap_mach3.h | 3 + conf/trap/trap_news4.h | 2 + conf/trap/trap_rtu6.h | 2 + conf/trap/trap_stellix.h | 3 + conf/trap/trap_svr4.h | 3 + conf/trap/trap_ultrix.h | 3 + conf/umount/umount_bsd44.c | 89 + conf/umount/umount_default.c | 150 + conf/umount/umount_osf.c | 92 + configure | 145292 +++++++++++++++ doc/Makefile.am | 63 + doc/Makefile.in | 376 + doc/am-utils.dvi | Bin 0 -> 518804 bytes doc/am-utils.info | 272 + doc/am-utils.info-1 | 1203 + doc/am-utils.info-2 | 1428 + doc/am-utils.info-3 | 1363 + doc/am-utils.info-4 | 1372 + doc/am-utils.info-5 | 1230 + doc/am-utils.info-6 | 789 + doc/am-utils.ps | 20379 ++ doc/am-utils.texi | 7837 + doc/hlfsd.ps | 2718 + doc/stamp-vti | 3 + doc/texinfo.tex | 4935 + doc/version.texi | 3 + fixmount/Makefile.am | 40 + fixmount/Makefile.in | 367 + fixmount/fixmount.8 | 159 + fixmount/fixmount.c | 613 + fsinfo/Makefile.am | 84 + fsinfo/Makefile.in | 413 + fsinfo/fsi_analyze.c | 670 + fsinfo/fsi_data.h | 235 + fsinfo/fsi_dict.c | 138 + fsinfo/fsi_gram.y | 419 + fsinfo/fsi_lex.l | 270 + fsinfo/fsi_util.c | 693 + fsinfo/fsinfo.8 | 101 + fsinfo/fsinfo.c | 293 + fsinfo/fsinfo.h | 131 + fsinfo/wr_atab.c | 334 + fsinfo/wr_bparam.c | 109 + fsinfo/wr_dumpset.c | 96 + fsinfo/wr_exportfs.c | 108 + fsinfo/wr_fstab.c | 342 + hlfsd/Makefile.am | 45 + hlfsd/Makefile.in | 374 + hlfsd/hlfsd.8 | 310 + hlfsd/hlfsd.c | 954 + hlfsd/hlfsd.h | 171 + hlfsd/homedir.c | 799 + hlfsd/nfs_prot_svc.c | 250 + hlfsd/stubs.c | 530 + include/am_compat.h | 260 + include/am_defs.h | 1332 + include/am_utils.h | 957 + include/am_xdr_func.h | 203 + include/amq_defs.h | 157 + libamu/Makefile.am | 66 + libamu/Makefile.in | 352 + libamu/amu.h | 78 + libamu/clnt_sperrno.c | 147 + libamu/hasmntopt.c | 119 + libamu/memcmp.c | 72 + libamu/misc_rpc.c | 168 + libamu/mount_fs.c | 892 + libamu/mtab.c | 121 + libamu/nfs_prot_xdr.c | 59 + libamu/strcasecmp.c | 64 + libamu/strdup.c | 65 + libamu/strstr.c | 98 + libamu/strutil.c | 176 + libamu/ualarm.c | 73 + libamu/wire.c | 404 + libamu/xdr_func.c | 1155 + libamu/xutil.c | 826 + m4/GNUmakefile | 72 + m4/acconfig.h | 1083 + m4/acinclude.m4 | 3902 + m4/aclocal.m4 | 4297 + m4/amindent | 328 + m4/autopat | 36 + m4/aux_conf.h.in | 56 + m4/chop-aclocal.pl | 19 + m4/config.guess | 890 + m4/config.h.in | 1939 + m4/config.sub | 952 + m4/configure.in | 977 + m4/install-sh | 238 + m4/ltconfig | 1512 + m4/ltmain.sh | 2453 + m4/macros/HEADER | 13 + m4/macros/TRAILER | 2 + m4/macros/c_void_p.m4 | 22 + m4/macros/cache_check_dynamic.m4 | 24 + m4/macros/check_am_fs.m4 | 40 + m4/macros/check_checkmount_style.m4 | 28 + m4/macros/check_extern.m4 | 77 + m4/macros/check_fhandle.m4 | 25 + m4/macros/check_field.m4 | 69 + m4/macros/check_fs_headers.m4 | 53 + m4/macros/check_fs_mntent.m4 | 148 + m4/macros/check_hide_mount_type.m4 | 31 + m4/macros/check_lib2.m4 | 72 + m4/macros/check_lib_funcs.m4 | 32 + m4/macros/check_map_funcs.m4 | 47 + m4/macros/check_mnt2_cdfs_opt.m4 | 74 + m4/macros/check_mnt2_gen_opt.m4 | 72 + m4/macros/check_mnt2_nfs_opt.m4 | 47 + m4/macros/check_mnttab_file_name.m4 | 57 + m4/macros/check_mnttab_location.m4 | 18 + m4/macros/check_mnttab_opt.m4 | 39 + m4/macros/check_mnttab_style.m4 | 33 + m4/macros/check_mnttab_type.m4 | 132 + m4/macros/check_mount_style.m4 | 48 + m4/macros/check_mount_trap.m4 | 49 + m4/macros/check_mount_type.m4 | 159 + m4/macros/check_mtype_printf_type.m4 | 22 + m4/macros/check_mtype_type.m4 | 19 + m4/macros/check_network_transport_type.m4 | 25 + m4/macros/check_nfs_fh_dref.m4 | 50 + m4/macros/check_nfs_hn_dref.m4 | 21 + m4/macros/check_nfs_prot_headers.m4 | 81 + m4/macros/check_nfs_sa_dref.m4 | 31 + m4/macros/check_nfs_socket_connection.m4 | 28 + m4/macros/check_os_libs.m4 | 28 + m4/macros/check_restartable_signal_handler.m4 | 22 + m4/macros/check_umount_style.m4 | 24 + m4/macros/check_unmount_args.m4 | 21 + m4/macros/check_unmount_call.m4 | 27 + m4/macros/expand_cpp_hex.m4 | 40 + m4/macros/expand_cpp_int.m4 | 44 + m4/macros/expand_cpp_string.m4 | 40 + m4/macros/expand_run_string.m4 | 25 + m4/macros/extern_optarg.m4 | 36 + m4/macros/extern_sys_errlist.m4 | 31 + m4/macros/field_mntent_t_mnt_time_string.m4 | 36 + m4/macros/func_bad_memcmp.m4 | 20 + m4/macros/func_bad_yp_all.m4 | 27 + m4/macros/host_macros.m4 | 93 + m4/macros/localconfig.m4 | 13 + m4/macros/mount_headers.m4 | 159 + m4/macros/msg.m4 | 5 + m4/macros/name_package.m4 | 8 + m4/macros/name_version.m4 | 8 + m4/macros/opt_amq_mount.m4 | 16 + m4/macros/opt_amu_cflags.m4 | 32 + m4/macros/opt_cppflags.m4 | 21 + m4/macros/opt_debug.m4 | 27 + m4/macros/opt_ldflags.m4 | 21 + m4/macros/opt_libs.m4 | 21 + m4/macros/os_cflags.m4 | 60 + m4/macros/os_cppflags.m4 | 18 + m4/macros/os_ldflags.m4 | 22 + m4/macros/save_state.m4 | 12 + m4/macros/struct_field_nfs_fh.m4 | 34 + m4/macros/struct_mntent.m4 | 21 + m4/macros/struct_mnttab.m4 | 21 + m4/macros/struct_nfs_args.m4 | 47 + m4/macros/struct_nfs_fh.m4 | 63 + m4/macros/struct_nfs_fh3.m4 | 54 + m4/macros/struct_nfs_gfs_mount.m4 | 22 + m4/macros/struct_nfs_mount_data.m4 | 22 + m4/macros/try_compile_anyfs.m4 | 144 + m4/macros/try_compile_nfs.m4 | 150 + m4/macros/try_compile_rpc.m4 | 23 + m4/macros/type_auth_create_gidlist.m4 | 18 + m4/macros/type_autofs_args.m4 | 33 + m4/macros/type_cachefs_args.m4 | 23 + m4/macros/type_cdfs_args.m4 | 57 + m4/macros/type_efs_args.m4 | 25 + m4/macros/type_lofs_args.m4 | 30 + m4/macros/type_mfs_args.m4 | 23 + m4/macros/type_pcfs_args.m4 | 50 + m4/macros/type_recvfrom_fromlen.m4 | 18 + m4/macros/type_rfs_args.m4 | 23 + m4/macros/type_svc_in_arg.m4 | 39 + m4/macros/type_time_t.m4 | 5 + m4/macros/type_tmpfs_args.m4 | 23 + m4/macros/type_ufs_args.m4 | 41 + m4/macros/type_xdrproc_t.m4 | 20 + m4/macros/type_xfs_args.m4 | 25 + m4/macros/type_yp_order_outorder.m4 | 21 + m4/mdate-sh | 92 + m4/missing | 188 + m4/mk-aclocal | 26 + m4/mkconf | 20 + m4/mkinstalldirs | 36 + m4/rmtspc | 6 + m4/stamp-h.in | 1 + m4/update_build_version | 22 + mk-amd-map/Makefile.am | 41 + mk-amd-map/Makefile.in | 368 + mk-amd-map/mk-amd-map.8 | 62 + mk-amd-map/mk-amd-map.c | 389 + scripts/Makefile.am | 49 + scripts/Makefile.in | 381 + scripts/am-eject.in | 52 + scripts/amd.conf-sample | 94 + scripts/amd.conf.5 | 539 + scripts/amd2ldif.in | 58 + scripts/amd2sun.in | 51 + scripts/ctl-amd.in | 113 + scripts/ctl-hlfsd.in | 101 + scripts/expn.1 | 1370 + scripts/expn.in | 1370 + scripts/fix-amd-map.in | 52 + scripts/fixrmtab.in | 24 + scripts/lostaltmail.conf-sample | 84 + scripts/lostaltmail.in | 648 + scripts/wait4amd.in | 45 + scripts/wait4amd2die.in | 49 + tasks | 70 + wire-test/Makefile.am | 41 + wire-test/Makefile.in | 368 + wire-test/wire-test.8 | 70 + wire-test/wire-test.c | 134 + 397 files changed, 280773 insertions(+) create mode 100644 AUTHORS create mode 100644 BUGS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 MIRRORS create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 README.autofs create mode 100644 README.y2k create mode 100644 TODO create mode 100644 amd/Makefile.am create mode 100644 amd/Makefile.in create mode 100644 amd/am_ops.c create mode 100644 amd/amd.8 create mode 100644 amd/amd.c create mode 100644 amd/amd.h create mode 100644 amd/amfs_auto.c create mode 100644 amd/amfs_direct.c create mode 100644 amd/amfs_error.c create mode 100644 amd/amfs_host.c create mode 100644 amd/amfs_inherit.c create mode 100644 amd/amfs_link.c create mode 100644 amd/amfs_linkx.c create mode 100644 amd/amfs_nfsl.c create mode 100644 amd/amfs_nfsx.c create mode 100644 amd/amfs_program.c create mode 100644 amd/amfs_root.c create mode 100644 amd/amfs_toplvl.c create mode 100644 amd/amfs_union.c create mode 100644 amd/amq_subr.c create mode 100644 amd/amq_svc.c create mode 100644 amd/autil.c create mode 100644 amd/clock.c create mode 100644 amd/conf.c create mode 100644 amd/conf_parse.y create mode 100644 amd/conf_tok.l create mode 100644 amd/get_args.c create mode 100644 amd/info_file.c create mode 100644 amd/info_hesiod.c create mode 100644 amd/info_ldap.c create mode 100644 amd/info_ndbm.c create mode 100644 amd/info_nis.c create mode 100644 amd/info_nisplus.c create mode 100644 amd/info_passwd.c create mode 100644 amd/info_union.c create mode 100644 amd/map.c create mode 100644 amd/mapc.c create mode 100644 amd/mntfs.c create mode 100644 amd/nfs_prot_svc.c create mode 100644 amd/nfs_start.c create mode 100644 amd/nfs_subr.c create mode 100644 amd/ops_TEMPLATE.c create mode 100644 amd/ops_autofs.c create mode 100644 amd/ops_cachefs.c create mode 100644 amd/ops_cdfs.c create mode 100644 amd/ops_efs.c create mode 100644 amd/ops_lofs.c create mode 100644 amd/ops_mfs.c create mode 100644 amd/ops_nfs.c create mode 100644 amd/ops_nfs3.c create mode 100644 amd/ops_nullfs.c create mode 100644 amd/ops_pcfs.c create mode 100644 amd/ops_tfs.c create mode 100644 amd/ops_tmpfs.c create mode 100644 amd/ops_ufs.c create mode 100644 amd/ops_umapfs.c create mode 100644 amd/ops_unionfs.c create mode 100644 amd/ops_xfs.c create mode 100644 amd/opts.c create mode 100644 amd/restart.c create mode 100644 amd/rpc_fwd.c create mode 100644 amd/sched.c create mode 100644 amd/srvr_amfs_auto.c create mode 100644 amd/srvr_nfs.c create mode 100644 amq/Makefile.am create mode 100644 amq/Makefile.in create mode 100644 amq/amq.8 create mode 100644 amq/amq.c create mode 100644 amq/amq.h create mode 100644 amq/amq_clnt.c create mode 100644 amq/amq_xdr.c create mode 100644 amq/pawd.1 create mode 100644 amq/pawd.c create mode 100755 buildall create mode 100644 conf/checkmount/checkmount_aix.c create mode 100644 conf/checkmount/checkmount_bsd44.c create mode 100644 conf/checkmount/checkmount_default.c create mode 100644 conf/checkmount/checkmount_osf.c create mode 100644 conf/checkmount/checkmount_svr4.c create mode 100644 conf/checkmount/checkmount_ultrix.c create mode 100644 conf/fh_dref/fh_dref_aix3.h create mode 100644 conf/fh_dref/fh_dref_aix42.h create mode 100644 conf/fh_dref/fh_dref_bsd44.h create mode 100644 conf/fh_dref/fh_dref_default.h create mode 100644 conf/fh_dref/fh_dref_freebsd22.h create mode 100644 conf/fh_dref/fh_dref_hpux.h create mode 100644 conf/fh_dref/fh_dref_irix.h create mode 100644 conf/fh_dref/fh_dref_isc3.h create mode 100644 conf/fh_dref/fh_dref_linux.h create mode 100644 conf/fh_dref/fh_dref_nextstep.h create mode 100644 conf/fh_dref/fh_dref_osf2.h create mode 100644 conf/fh_dref/fh_dref_osf4.h create mode 100644 conf/fh_dref/fh_dref_sunos3.h create mode 100644 conf/fh_dref/fh_dref_sunos4.h create mode 100644 conf/fh_dref/fh_dref_svr4.h create mode 100644 conf/hn_dref/hn_dref_default.h create mode 100644 conf/hn_dref/hn_dref_isc3.h create mode 100644 conf/hn_dref/hn_dref_linux.h create mode 100644 conf/mount/mount_aix.c create mode 100644 conf/mount/mount_bsdi3.c create mode 100644 conf/mount/mount_freebsd3.c create mode 100644 conf/mount/mount_hpux.c create mode 100644 conf/mount/mount_irix5.c create mode 100644 conf/mount/mount_irix6.c create mode 100644 conf/mount/mount_isc3.c create mode 100644 conf/mount/mount_linux.c create mode 100644 conf/mount/mount_mach3.c create mode 100644 conf/mount/mount_stellix.c create mode 100644 conf/mount/mount_svr4.c create mode 100644 conf/mtab/mtab_aix.c create mode 100644 conf/mtab/mtab_bsd.c create mode 100644 conf/mtab/mtab_file.c create mode 100644 conf/mtab/mtab_isc3.c create mode 100644 conf/mtab/mtab_mach3.c create mode 100644 conf/mtab/mtab_osf.c create mode 100644 conf/mtab/mtab_svr4.c create mode 100644 conf/mtab/mtab_ultrix.c create mode 100644 conf/nfs_prot/nfs_prot_aix3.h create mode 100644 conf/nfs_prot/nfs_prot_aix4.h create mode 100644 conf/nfs_prot/nfs_prot_aix4_2.h create mode 100644 conf/nfs_prot/nfs_prot_bsdi2.h create mode 100644 conf/nfs_prot/nfs_prot_bsdi3.h create mode 100644 conf/nfs_prot/nfs_prot_default.h create mode 100644 conf/nfs_prot/nfs_prot_freebsd2.h create mode 100644 conf/nfs_prot/nfs_prot_freebsd3.h create mode 100644 conf/nfs_prot/nfs_prot_hpux.h create mode 100644 conf/nfs_prot/nfs_prot_hpux11.h create mode 100644 conf/nfs_prot/nfs_prot_irix5.h create mode 100644 conf/nfs_prot/nfs_prot_irix6.h create mode 100644 conf/nfs_prot/nfs_prot_linux.h create mode 100644 conf/nfs_prot/nfs_prot_ncr2.h create mode 100644 conf/nfs_prot/nfs_prot_netbsd.h create mode 100644 conf/nfs_prot/nfs_prot_netbsd1_3.h create mode 100644 conf/nfs_prot/nfs_prot_nextstep.h create mode 100644 conf/nfs_prot/nfs_prot_openbsd.h create mode 100644 conf/nfs_prot/nfs_prot_osf2.h create mode 100644 conf/nfs_prot/nfs_prot_osf4.h create mode 100644 conf/nfs_prot/nfs_prot_sunos3.h create mode 100644 conf/nfs_prot/nfs_prot_sunos4.h create mode 100644 conf/nfs_prot/nfs_prot_sunos5_3.h create mode 100644 conf/nfs_prot/nfs_prot_sunos5_4.h create mode 100644 conf/nfs_prot/nfs_prot_sunos5_5.h create mode 100644 conf/nfs_prot/nfs_prot_sunos5_6.h create mode 100644 conf/nfs_prot/nfs_prot_svr4.h create mode 100644 conf/nfs_prot/nfs_prot_ultrix.h create mode 100644 conf/sa_dref/sa_dref_386bsd.h create mode 100644 conf/sa_dref/sa_dref_aix3.h create mode 100644 conf/sa_dref/sa_dref_aoi.h create mode 100644 conf/sa_dref/sa_dref_bsd44.h create mode 100644 conf/sa_dref/sa_dref_default.h create mode 100644 conf/sa_dref/sa_dref_isc3.h create mode 100644 conf/sa_dref/sa_dref_linux.h create mode 100644 conf/sa_dref/sa_dref_svr4.h create mode 100644 conf/transp/transp_sockets.c create mode 100644 conf/transp/transp_tli.c create mode 100644 conf/trap/trap_aix3.h create mode 100644 conf/trap/trap_aux.h create mode 100644 conf/trap/trap_default.h create mode 100644 conf/trap/trap_dgux.h create mode 100644 conf/trap/trap_freebsd3.h create mode 100644 conf/trap/trap_hcx.h create mode 100644 conf/trap/trap_hpux.h create mode 100644 conf/trap/trap_hpux11.h create mode 100644 conf/trap/trap_irix.h create mode 100644 conf/trap/trap_isc3.h create mode 100644 conf/trap/trap_linux.h create mode 100644 conf/trap/trap_mach3.h create mode 100644 conf/trap/trap_news4.h create mode 100644 conf/trap/trap_rtu6.h create mode 100644 conf/trap/trap_stellix.h create mode 100644 conf/trap/trap_svr4.h create mode 100644 conf/trap/trap_ultrix.h create mode 100644 conf/umount/umount_bsd44.c create mode 100644 conf/umount/umount_default.c create mode 100644 conf/umount/umount_osf.c create mode 100755 configure create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/am-utils.dvi create mode 100644 doc/am-utils.info create mode 100644 doc/am-utils.info-1 create mode 100644 doc/am-utils.info-2 create mode 100644 doc/am-utils.info-3 create mode 100644 doc/am-utils.info-4 create mode 100644 doc/am-utils.info-5 create mode 100644 doc/am-utils.info-6 create mode 100644 doc/am-utils.ps create mode 100644 doc/am-utils.texi create mode 100644 doc/hlfsd.ps create mode 100644 doc/stamp-vti create mode 100644 doc/texinfo.tex create mode 100644 doc/version.texi create mode 100644 fixmount/Makefile.am create mode 100644 fixmount/Makefile.in create mode 100644 fixmount/fixmount.8 create mode 100644 fixmount/fixmount.c create mode 100644 fsinfo/Makefile.am create mode 100644 fsinfo/Makefile.in create mode 100644 fsinfo/fsi_analyze.c create mode 100644 fsinfo/fsi_data.h create mode 100644 fsinfo/fsi_dict.c create mode 100644 fsinfo/fsi_gram.y create mode 100644 fsinfo/fsi_lex.l create mode 100644 fsinfo/fsi_util.c create mode 100644 fsinfo/fsinfo.8 create mode 100644 fsinfo/fsinfo.c create mode 100644 fsinfo/fsinfo.h create mode 100644 fsinfo/wr_atab.c create mode 100644 fsinfo/wr_bparam.c create mode 100644 fsinfo/wr_dumpset.c create mode 100644 fsinfo/wr_exportfs.c create mode 100644 fsinfo/wr_fstab.c create mode 100644 hlfsd/Makefile.am create mode 100644 hlfsd/Makefile.in create mode 100644 hlfsd/hlfsd.8 create mode 100644 hlfsd/hlfsd.c create mode 100644 hlfsd/hlfsd.h create mode 100644 hlfsd/homedir.c create mode 100644 hlfsd/nfs_prot_svc.c create mode 100644 hlfsd/stubs.c create mode 100644 include/am_compat.h create mode 100644 include/am_defs.h create mode 100644 include/am_utils.h create mode 100644 include/am_xdr_func.h create mode 100644 include/amq_defs.h create mode 100644 libamu/Makefile.am create mode 100644 libamu/Makefile.in create mode 100644 libamu/amu.h create mode 100644 libamu/clnt_sperrno.c create mode 100644 libamu/hasmntopt.c create mode 100644 libamu/memcmp.c create mode 100644 libamu/misc_rpc.c create mode 100644 libamu/mount_fs.c create mode 100644 libamu/mtab.c create mode 100644 libamu/nfs_prot_xdr.c create mode 100644 libamu/strcasecmp.c create mode 100644 libamu/strdup.c create mode 100644 libamu/strstr.c create mode 100644 libamu/strutil.c create mode 100644 libamu/ualarm.c create mode 100644 libamu/wire.c create mode 100644 libamu/xdr_func.c create mode 100644 libamu/xutil.c create mode 100644 m4/GNUmakefile create mode 100644 m4/acconfig.h create mode 100644 m4/acinclude.m4 create mode 100644 m4/aclocal.m4 create mode 100755 m4/amindent create mode 100755 m4/autopat create mode 100644 m4/aux_conf.h.in create mode 100755 m4/chop-aclocal.pl create mode 100755 m4/config.guess create mode 100644 m4/config.h.in create mode 100755 m4/config.sub create mode 100644 m4/configure.in create mode 100755 m4/install-sh create mode 100755 m4/ltconfig create mode 100644 m4/ltmain.sh create mode 100644 m4/macros/HEADER create mode 100644 m4/macros/TRAILER create mode 100644 m4/macros/c_void_p.m4 create mode 100644 m4/macros/cache_check_dynamic.m4 create mode 100644 m4/macros/check_am_fs.m4 create mode 100644 m4/macros/check_checkmount_style.m4 create mode 100644 m4/macros/check_extern.m4 create mode 100644 m4/macros/check_fhandle.m4 create mode 100644 m4/macros/check_field.m4 create mode 100644 m4/macros/check_fs_headers.m4 create mode 100644 m4/macros/check_fs_mntent.m4 create mode 100644 m4/macros/check_hide_mount_type.m4 create mode 100644 m4/macros/check_lib2.m4 create mode 100644 m4/macros/check_lib_funcs.m4 create mode 100644 m4/macros/check_map_funcs.m4 create mode 100644 m4/macros/check_mnt2_cdfs_opt.m4 create mode 100644 m4/macros/check_mnt2_gen_opt.m4 create mode 100644 m4/macros/check_mnt2_nfs_opt.m4 create mode 100644 m4/macros/check_mnttab_file_name.m4 create mode 100644 m4/macros/check_mnttab_location.m4 create mode 100644 m4/macros/check_mnttab_opt.m4 create mode 100644 m4/macros/check_mnttab_style.m4 create mode 100644 m4/macros/check_mnttab_type.m4 create mode 100644 m4/macros/check_mount_style.m4 create mode 100644 m4/macros/check_mount_trap.m4 create mode 100644 m4/macros/check_mount_type.m4 create mode 100644 m4/macros/check_mtype_printf_type.m4 create mode 100644 m4/macros/check_mtype_type.m4 create mode 100644 m4/macros/check_network_transport_type.m4 create mode 100644 m4/macros/check_nfs_fh_dref.m4 create mode 100644 m4/macros/check_nfs_hn_dref.m4 create mode 100644 m4/macros/check_nfs_prot_headers.m4 create mode 100644 m4/macros/check_nfs_sa_dref.m4 create mode 100644 m4/macros/check_nfs_socket_connection.m4 create mode 100644 m4/macros/check_os_libs.m4 create mode 100644 m4/macros/check_restartable_signal_handler.m4 create mode 100644 m4/macros/check_umount_style.m4 create mode 100644 m4/macros/check_unmount_args.m4 create mode 100644 m4/macros/check_unmount_call.m4 create mode 100644 m4/macros/expand_cpp_hex.m4 create mode 100644 m4/macros/expand_cpp_int.m4 create mode 100644 m4/macros/expand_cpp_string.m4 create mode 100644 m4/macros/expand_run_string.m4 create mode 100644 m4/macros/extern_optarg.m4 create mode 100644 m4/macros/extern_sys_errlist.m4 create mode 100644 m4/macros/field_mntent_t_mnt_time_string.m4 create mode 100644 m4/macros/func_bad_memcmp.m4 create mode 100644 m4/macros/func_bad_yp_all.m4 create mode 100644 m4/macros/host_macros.m4 create mode 100644 m4/macros/localconfig.m4 create mode 100644 m4/macros/mount_headers.m4 create mode 100644 m4/macros/msg.m4 create mode 100644 m4/macros/name_package.m4 create mode 100644 m4/macros/name_version.m4 create mode 100644 m4/macros/opt_amq_mount.m4 create mode 100644 m4/macros/opt_amu_cflags.m4 create mode 100644 m4/macros/opt_cppflags.m4 create mode 100644 m4/macros/opt_debug.m4 create mode 100644 m4/macros/opt_ldflags.m4 create mode 100644 m4/macros/opt_libs.m4 create mode 100644 m4/macros/os_cflags.m4 create mode 100644 m4/macros/os_cppflags.m4 create mode 100644 m4/macros/os_ldflags.m4 create mode 100644 m4/macros/save_state.m4 create mode 100644 m4/macros/struct_field_nfs_fh.m4 create mode 100644 m4/macros/struct_mntent.m4 create mode 100644 m4/macros/struct_mnttab.m4 create mode 100644 m4/macros/struct_nfs_args.m4 create mode 100644 m4/macros/struct_nfs_fh.m4 create mode 100644 m4/macros/struct_nfs_fh3.m4 create mode 100644 m4/macros/struct_nfs_gfs_mount.m4 create mode 100644 m4/macros/struct_nfs_mount_data.m4 create mode 100644 m4/macros/try_compile_anyfs.m4 create mode 100644 m4/macros/try_compile_nfs.m4 create mode 100644 m4/macros/try_compile_rpc.m4 create mode 100644 m4/macros/type_auth_create_gidlist.m4 create mode 100644 m4/macros/type_autofs_args.m4 create mode 100644 m4/macros/type_cachefs_args.m4 create mode 100644 m4/macros/type_cdfs_args.m4 create mode 100644 m4/macros/type_efs_args.m4 create mode 100644 m4/macros/type_lofs_args.m4 create mode 100644 m4/macros/type_mfs_args.m4 create mode 100644 m4/macros/type_pcfs_args.m4 create mode 100644 m4/macros/type_recvfrom_fromlen.m4 create mode 100644 m4/macros/type_rfs_args.m4 create mode 100644 m4/macros/type_svc_in_arg.m4 create mode 100644 m4/macros/type_time_t.m4 create mode 100644 m4/macros/type_tmpfs_args.m4 create mode 100644 m4/macros/type_ufs_args.m4 create mode 100644 m4/macros/type_xdrproc_t.m4 create mode 100644 m4/macros/type_xfs_args.m4 create mode 100644 m4/macros/type_yp_order_outorder.m4 create mode 100755 m4/mdate-sh create mode 100755 m4/missing create mode 100755 m4/mk-aclocal create mode 100755 m4/mkconf create mode 100755 m4/mkinstalldirs create mode 100755 m4/rmtspc create mode 100644 m4/stamp-h.in create mode 100755 m4/update_build_version create mode 100644 mk-amd-map/Makefile.am create mode 100644 mk-amd-map/Makefile.in create mode 100644 mk-amd-map/mk-amd-map.8 create mode 100644 mk-amd-map/mk-amd-map.c create mode 100644 scripts/Makefile.am create mode 100644 scripts/Makefile.in create mode 100644 scripts/am-eject.in create mode 100644 scripts/amd.conf-sample create mode 100644 scripts/amd.conf.5 create mode 100755 scripts/amd2ldif.in create mode 100755 scripts/amd2sun.in create mode 100755 scripts/ctl-amd.in create mode 100755 scripts/ctl-hlfsd.in create mode 100644 scripts/expn.1 create mode 100755 scripts/expn.in create mode 100755 scripts/fix-amd-map.in create mode 100755 scripts/fixrmtab.in create mode 100644 scripts/lostaltmail.conf-sample create mode 100755 scripts/lostaltmail.in create mode 100755 scripts/wait4amd.in create mode 100755 scripts/wait4amd2die.in create mode 100644 tasks create mode 100644 wire-test/Makefile.am create mode 100644 wire-test/Makefile.in create mode 100644 wire-test/wire-test.8 create mode 100644 wire-test/wire-test.c diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..b83ebeb --- /dev/null +++ b/AUTHORS @@ -0,0 +1,213 @@ +# -*- text -*- +PRIMARY AUTHORS AND MAJOR CONTRIBUTORS TO AM_UTILS: + +Original authors of amd were the Berkeley team and especially Jan-Simon +Pendry. Since then many people have contributed patches. + +This file lists the ones who contributed major code changes, in no +particular order, and I thank them all. This is of course not to diminish +the smaller contributes of the many others. Thank you all. + +* Erez Zadok + +The most significant changes were made by Erez Zadok in terms of bug fixes, +ports, and new features added. Erez Zadok is the current maintainer of +am-utils, as of January 1997. + +There is a mailing list dedicated to developers of am-utils. To subscribe +to it, send mail to majordomo@majordomo.cs.columbia.edu, with the body of +the message having the single line "subscribe amd-dev". + +* Randall S. Winchester + +May 7, 1997: contributed a special version of upl102 that included NFS V.3 +support. Some of the code was contributed by Christos Zoulas +. I (Erez) ported these changes to am-utils. + +September 12, 1997: lots of small prototype cleanups and fixes to numerous +files. + +January 27, 1998: support pid files in the amd.conf file. Provide base name +for hesiod zone files. Always use /etc/amd.conf if exists. + +August 8, 1998: add detection support for NFS V.3 for NetBSD 1.3F. + +* Hannes Reinecke + +Back in 1995, contributed code for linux. A new parser for file system +specific options that only exist under linux. + +* Leif Johansson + +June 22, 1997: minor patch to ensure that systems without an RE library work. + +June 23, 1997: mount options should be properly comma limited. + +July 10, 1997: info_ldap.c and prototype changes to all map _init and _mtime +functions. Contributed scripts/amd2ldif.pl. + +August 4, 1997: info_ldap.c fixes and adding two new amd.conf ldap +variables: ldap_cache_seconds and ldap_cache_maxmem. + +* Andreas Stolcke + +June 22, 1997: patches to ensure that proto= and vers= options work +properly in mount tables and can be overridden. Later on, more code +contribued to optimize the best combination of proto/vers. + +July 4, 1997: patches to get NFS V.3 working under irix5. + +September 9, 1997: initialize all fields of mntent_t structures to 0. + +October 2, 1997: don't log an RPC timeout as an error but only as an info +message. + +December 19, 1997: detected an FMR (Free Memory Read) in amd/mntfs.c, +uninit_mntfs(). + +* Danny Braniss + +July, 6 1997: contributed patches to hesiod on bsdi3. + +* Tom Schmidt + +July 10, 1997: Recommdation to include libgdbm if libc has no dbm_open. +Patches for netgrp(host) command. Mods to aux/config.guess to recognize +sun3. + +January 19, 1998: print correct -l option depending if system supports +syslog and/or syslog facilities. + +January 29, 1998: fix for 0.0.0.0 loopback on SunOS 3.X which defines +IFF_ROUTE instead of IFF_LOOPBACK. + +* Daniel S. Riley + +July 11, 1997: fixes to DU-4.0 to support string POSIX.1 signals, and struct +sockaddr with sa_len field. + +July 13, 1997: Move amd.conf parsing to before switch_option() on log/debug +options. Minor type wrt "ro" option in libamu/mount_fs.c. Added more +fillers of mnttab options, for acdirmax, acdirmin, acregmax, acregmin, noac, +grpid, nosuid, and actimo. + +August 15, 1998: fix memory leak in processing of /defaults, and avoid +accessing uninitialized memory in osf1. + +* Roman Hodek + +July 23, 1997: Got lots of patches from the Debian Linux folks, who fixed +several generic bugs, and one serious one for Linux. The latter involved +using connected sockets for NFS mounts on kernels 1.3.10 and older. Roman's +work is baed on amd-upl102, and work from Ian Murdock +and Dominik Kubla . + +* Rainer Orth + +August 6, 1997: assorted fixes to support hesiod-1.3, solaris 2.4 (which I +already fixed but did not release yet), and support for $LDFLAGS at +configure/compile time. + +February 24, 1998: lots of patches for ultrix 4.3 port. + +February 28, 1998: lots of documentation fixes! + +* Jason Thorpe + +August 25, 1997: make amd work when talking to NIS+ servers in NIS +compatibility mode. Fix originally came from Matthieu Herrb +. + +* Chris Metcalf + +August 29, 1997: patch to make amd use FQHN for NFS/RPC authentication, +useful esp. for cross-domain NFS mounts. +September 2, 1997: if plock() succeeded, don't display errno string. + +* Enami Tsugutomo + +September 4, 1997: don't ping remote servers with NFS V.3 always, but V.2, +regardless of client's NFS version. (conf/transp/transp_sockets.c) + +* Dan Riley + +September 19, 1997: make sure that amd works with more secure portmappers +that do not allow forwarding of RPC messages to other services. + +* Wolfgang Rupprecht + +August 10, 1997: netbsd and other bsd systems have a mask flag for +pcfs_args (msdos mount). + +* Christos Zoulas + +September 25, 1997: fix to initialize uid/gid fields of pcfs_args_t on +netbsd. + +October 10, 1997: compile time cleanups of printf()s in hlfsd code. If nfs +server is down or does not support a portmapper call, then mark it down as +version 2, and try again later. + +* Bill Paul + +November 5, 1997: NFS v.3 support for AIX 4.2.1, which does *not* include +headers for this. Bill had to guess at the right structures, field names, +sizes, alignment, etc. + +* Stefan Vogel + +November 14, 1997: typo in the subscription instructions to amd-dev. + +* Guntram Wolski + +November 15, 1997: pointed out mismatching documentation for the -o option. + +* Michael Hucka + +January 11, 1997: pointed out reversed definition of NFS mount options vers +and proto. + +* Albert Chin + +January 12, 1998: minor bug in output of amd -H. + +* Thomas Richter + +January 13, 1998: use case insensitive comparisons for variables that need +it (such as all hostname related ones, and more). + +July 20, 1998: don't leak memory in the private version of yp_all (when +vendor yp_all is bad). + +* Fred Korz + +January 30, 1998: minor typo fixed to tftp example in am-utils.texi. + +* Donald Buczek + +March 6, 1998: correctly inherit existing NFS V.3 mounts upon restart. + +March 17, 1998: compare log file name and syslog string with correct length. + +March 20, 1998: do not close stdout in case it gets reused elsewhere and to +allow startup script to redirect it. Set a temporary secure umask(0022) +before writing log file and restore it afterwards. + +* Matthew Crosby + +April 20, 1998: allow arbitrary number of interfaces in wire listing. + +* David O'Brien + +September 4, 1998: bug fix to avoid overrunning hostname buffer, and minor +amd.conf man page typo correction. + +* Danny Rathjens + +October 29, 1998: swap arguments to kill(2) in amd.c. + +* Mike Mitchell + +November 3, 1998.* amd/nfs_subr.c (nfsproc_lookup_2_svc): try to avoid a +race condition between unmounting and re-mounting an entry, by increasing +the ttl of a looked up entry before unmounting it. diff --git a/BUGS b/BUGS new file mode 100644 index 0000000..88027b2 --- /dev/null +++ b/BUGS @@ -0,0 +1,92 @@ +# -*- text -*- + + LIST OF KNOWN BUGS IN AM-UTILS OR OPERATING SYSTEMS + + +(1) mips-sgi-irix* + +[1A] known to have flakey NFS V.3 and TCP. Amd tends to hang or spin +infinitely after a few hours or days of use. Users must install recommended +patches from vendor. Patches help, but not all the time. Otherwise avoid +using NFS V.3 and TCP on these systems, by setting + + /defaults opts:=vers=2,proto=udp + +[1B] yp_all() leaks a file descriptor. Eventually amd runs out of file +descriptors and hangs. Am-utils circumvents this by using its own version +of yp_all which uses udp and iterats over NIS maps. The latter isn't as +reliable as yp_all() which uses TCP, but it is better than hanging. + + +(2) alpha-unknown-linux-gnu (RedHat Linux 4.2) + +hasmntopt(mnt, opt) can goes into an infinite loop if opt is any substring +of mnt->mnt_opts. Redhat 5.0 does not have this libc bug. Here is an +example program: + +#include +#include +main() +{ + struct mntent mnt; + char *cp; + mnt.mnt_opts = "intr,rw,port=1023,timeo=8,foo=br,retrans=110,indirect,map=/usr/local/AMD/etc/amd.proj,boo"; + cp = hasmntopt(&mnt, "ro"); + printf("cp = %s\n", cp); + exit(0); +} + + +(3) mips-dec-ultrix4.3 + +Rainer Orth reports + +[3A] At least the gcc 2.7.0 fixincludes-mangled needs a +forward declaration of struct utsname to avoid lots of gcc warnings: + +RCS file: RCS/utsname.h,v +retrieving revision 1.1 +diff -u -r1.1 utsname.h +--- utsname.h 1995/06/19 13:07:01 1.1 ++++ utsname.h 1998/01/27 12:34:26 +@@ -59,6 +59,7 @@ + #ifdef KERNEL + #include "../h/limits.h" + #else /* user mode */ ++struct utsname; + extern int uname _PARAMS((struct utsname *)); + #endif + #define __SYS_NMLN 32 + +[3B] It autoconfigures and compiles cleanly, but currently hangs after a +couple of hours without leaving any traces in the syslog output. + + +(4) powerpc-ibm-aix4.2.1.0 + +[4A] "Randall S. Winchester" reports that for amd to +start, you need to kill and restart rpc.mountd and possibly also make sure +that nfsd is running. Normally these are not required. + +[4B] "Stefan Vogel" reports that if your amq +executable dump core unexpectedly, then it may be a bug in gcc 2.7.x. +Upgrade to gcc 2.8.x or use IBM's xlC compiler. + +[C] Do not link amd with libnsl. It is buggy and causes amd to core dump +in strlen inside strdup inside svc_register(). + + +(5) *-linux-gnu (RedHat Linux 5.1) + +There's a UDP file descriptor leak in libnsl in RedHat Linux 5.1. This +library part of glibc2. Am-utils currently declares redhat 5.1 systems as +having a "broken yp_all" and using an internal, slower, leak-free version. +The leak is known to the glibc maintainers and a fix from them is due soon, +but it is not yet in the glibc-2.0.7-19 RPM. + + +(6) rs6000-ibm-aix4.1.x + +A bug in libc results in an amq binary that doesn't work; amq -v dumps core +in xdr_string. There is no known fix (source code or vendor patch) at this +time. (Please let amd-dev know if you know of a fix.) diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..49783ec --- /dev/null +++ b/COPYING @@ -0,0 +1,37 @@ +Copyright (c) 1997-1998 Erez Zadok +Copyright (c) 1989 Jan-Simon Pendry +Copyright (c) 1989 Imperial College of Science, Technology & Medicine +Copyright (c) 1989 The Regents of the University of California. +All rights reserved. + +This code is derived from software contributed to Berkeley by +Jan-Simon Pendry at Imperial College, London. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgment: + This product includes software developed by the University of + California, Berkeley and its contributors, as well as the Trustees of + Columbia University. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..41e73b4 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,1434 @@ +1998-11-04 Erez Zadok + + * released snapshot am-utils-6.0b2s2 + + * amd/nfs_subr.c (nfsproc_lookup_2_svc): try to avoid a race + condition between unmounting and re-mounting an entry, by + increasing the ttl of a looked up entry before unmounting it. + Patch from Mike Mitchell . + + * All files: spell the word 'acknowledgment' correctly. + +1998-11-03 Erez Zadok + + * aux/configure.in: look for yp_all in libnsl only if yp_all not + already found elsewhere (in libc or other default libraries). + This is so RedHat 5.1 systems could find yp functions in libnsl, + but also so AIX 4.2.1 will NOT include libnsl, because the latter + has broken nis functionality that also exists and works ok in libc. + +1998-10-29 Erez Zadok + + * amd/amd.c (main): bug fix: swapped argumets to kill(2). Fix + from Danny Rathjens . + +1998-10-28 Erez Zadok + + * released snapshot am-utils-6.0b2s1 + +1998-10-27 Erez Zadok + + * aux/macros/*.m4: support bsdi4 as bsdi3. + + * aux/macros/os_ldflags.m4: enable detection of LDAP on solaris + 2.7 (libraries located in /usr/lib/fn). This is off until Sun + includes LDAP header information. + +1998-10-20 Erez Zadok + + ******************************************************************* + *** Released am-utils-6.0b1 *** + ******************************************************************* + +1998-10-18 Erez Zadok + + * mk-amd-map/mk-amd-map.c (main): use perror not strerror. + (main): set return type to int if no ndbm maps. + + * include/am_defs.h: avoid conflicts with in 2.1 + kernels. + +1998-10-18 Erez Zadok + + * A.i386-unknown-netbsd1.3.2/amu_nfs_prot.h: trim down and cleanup + for netbsd 1.3.2. + +1998-10-17 Erez Zadok + + * aux/configure.in: check for yp_all in libnsl, b/c redhat 5.1 + systems put NIS functions there. + + * mk-amd-map/mk-amd-map.c: patch from "David O'Brien" + merged in. Use POSIX -1 return code from + getopt(), not EOF. Use .db extentions for systems that use it, + instead of .{pag,dir}. + +1998-10-15 Erez Zadok + + * wire-test/wire-test.c, hlfsd/hlfsd.c, fixmount/fixmount.c, + amd/amd.c (main): avoid overrunning hostname buffer. Bug fix from + "David O'Brien" . + + * scripts/amd.conf.5: minor typo reported by "David O'Brien" + in .TH section of man page. + + * amd/info_nis.c (am_yp_all): don't leak key-val entries. Patch + from Thomas Richter . + +1998-10-12 Erez Zadok + + * doc/am-utils.texi (Program Filesystem): minor typo fixed as per + Andreas Stolcke . + + * minor new ports: sparc64-unknown-linux-gnu, i386-pc-solaris2.7, + and sparc-sun-solaris2.7. + + * conf/mount/mount_freebsd3.c (mount_freebsd3): freebsd 3.0 is now + a 4.4lite kernel, and somethings were removed, such as + INITMOUNTNAMES. + + * amd/ops_autofs.c (autofs_lookuppn): don't leak memory while + processing /defaults. Free temporary opts. Patch from + dsr@mail.lns.cornell.edu (Daniel S. Riley) + + * amd/amfs_auto.c (amfs_auto_lookuppn): don't leak memory while + processing /defaults. Free temporary opts. Patch from + dsr@mail.lns.cornell.edu (Daniel S. Riley) + + * conf/mtab/mtab_osf.c (read_mtab): patch from + dsr@mail.lns.cornell.edu (Daniel S. Riley) not to access + uninitialized memory on Digital Unix. + +1998-10-09 Erez Zadok + + * aux/macros/{check_mtype_type,check_mtype_printf_type}.m4: most + systems now use "char *" as their mount type. + +1998-10-08 Erez Zadok + + * amd/conf.c (gopt_map_type, ropt_map_type): check if map type + exists. + + * amd/mapc.c (mapc_type_exists): function to test if a map of + certain type exists. + +1998-10-08 Erez Zadok + + * aux/macros/{mount_headers,try_compile_anyfs,try_compile_nfs}.m4, + include/am_defs.h: Avoid a conflict in definitions of ntohl/htonl + in RH-5.1 sparc64 between and + (2.1 kernels). + +1998-09-28 Erez Zadok + + * aux/macros/func_bad_yp_all.m4 (ac_cv_func_yp_all_clean): RedHat + 5.1 systems with glibc glibc-2.0.7-19 or below leak a UDP socket + from yp_all(). + +1998-09-25 Erez Zadok + + * conf/mount/mount_linux.c (parse_opts): check for pcfs support + only if autoconfigured. + +1998-09-18 Erez Zadok + + * Makefile.am (EXTRA_DIST): distribute README.yk2 file. + + * README.y2k: explain y2k compliance status of am-utils. + +1998-09-16 Erez Zadok + + * amd/amfs_host.c (fetch_fhandle, amfs_host_fmount, + amfs_host_umounted): clnt_sperrno() may return a const. + +Sat Aug 8 23:28:32 1998 Erez Zadok + + * aux/configure.in: check for , as per Christos + Zoulas. Turned on checking for mount options: async, synchronous, + deadthresh, leasterm, nqnfs, and readahead. + + * amd/info_nis.c: patch from christos@zoulas.com (Christos Zoulas) + to include prototype definition for nis_isup(). + +Sun Jul 19 18:50:10 1998 Erez Zadok + + * hlfsd/stubs.c (getcreds): force sscanf arg to u_long. + +Tue Jul 14 20:34:25 1998 Erez Zadok + + * released snapshot am-utils-6.0a17s1 + +Wed Jul 8 21:49:15 1998 Erez Zadok + + * aux/macros/host_macros.m4: all x86 hosts should have $arch be + i386, not i[456]86. + +Tue Jul 7 18:55:09 1998 Erez Zadok + + * aux/macros/{mount_headers,try_compile_anyfs,try_compile_nfs}.m4, + include/am_defs.h: include before + because on redhat 5.1, there is a bug (misuse) of + headers in (it defines _LINUX_TYPES_H instead of + __KERNEL_STRICT_NAMES). + + * aux/configure.in: check for because it is + need for RedHat 5.1. + +Wed Jun 17 00:05:33 1998 Erez Zadok + + * scripts/Makefile.am (EXTRA_DIST): have fixrmtab generated from + .in as well, so it doesn't get removed by make clean. + +Tue Jun 16 22:00:15 1998 Erez Zadok + + * aux/macros/{check_fs_mntent.m4, check_mnttab_type.m4, + check_mount_type.m4}: redhat 5.1 puts some modules in + /lib/modules/preferred/. + +Wed May 13 16:33:57 1998 Erez Zadok + + * amd/ops_autofs.c (mount_autofs): cast pid to long. + +Thu Apr 23 00:22:17 1998 Erez Zadok + + ******************************************************************* + *** Released am-utils-6.0a16 *** + ******************************************************************* + +Wed Apr 22 01:20:39 1998 Erez Zadok + + * aux/macros/check_mount_style.m4: define freebsd3 mount style. + + * aux/macros/check_mount_trap.m4: new mount trap for freebsd3. + + * aux/macros/check_mtype_printf_type.m4, + aux/macros/check_mtype_type.m4 (ac_cv_mtype_type,): freebsd3 (as + of snapshot 3.0-980311-SNAP) uses char * types for mount(2), not + integers, but I'll keep them as integers and do the mapping in + conf/mount/mount_freebsd3.c + + * minor new port to i386-pc-bsdi3.1. + + * minor new port to i386-unknown-netbsd1.3.1. + + * amd/opts.c: new option addopts:=ARG, which smartly merges ARG + options with whatever the /default ones for a key are. This + allows adding or overriding /default options individual keys. + + * amd/am_ops.c (ops_match): strdup/malloc string assigned to + opt_opts because it'll get free()'d upon next use. + (merge_opts): new function to merge two sets of options. + (ops_match): if addopts option exist, append and merge it to the + current default options. + +Tue Apr 21 12:54:59 1998 Erez Zadok + + * wire-test/wire-test.c (main): use dynamically allocated returned + string with list of interfaces. + + * amd/get_args.c (get_version_string): allocate enough space for + header version string and a list of network interfaces of any + length. + + * libamu/wire.c (print_wires): return dynamically allocated string + containing list of networks. Must be dynamic because some sites + had potentially dozens of network interfaces. Patch from Matthew + Crosby slightly modified. + +Mon Apr 20 00:37:20 1998 Erez Zadok + + * conf/nfs_prot/nfs_prot_irix5.h: underfine MNTTYPE_XFS because + irix 5.3 does not have full header definitions for it. + + * fsinfo/fsi_lex.l (yywrap): define yywrap if needed, and + undefined it when not needed (similar to amd/conf_tok.l) + + * hlfsd/hlfsd.h (ROOTID, SLINKID, INVALID): reduced maximum size + of these to unsigned short (because uid_t on some linux systems is + small). + + * released snapshot am-utils-6.0a16s10 + + * doc/am-utils.texi (opts Option): documented resvport mount + option. + +Sun Apr 19 18:17:03 1998 Erez Zadok + + * doc/am-utils.texi (-D-Option): document behavior of -D info and + especially what it does to hesiod (turn on RES_DEBUG). + + * scripts/amd.conf.5: document info debugging option. + + * libamu/xutil.c (dbg_opt): parse info debugging option. + + * include/am_utils.h (D_INFO): define new trace option. + + * Makefile.am (EXTRA_DIST): include list of official mirrors in + distribution. + + * libamu/wire.c (SIZE): in the simple case, just compute + sizeof(struct ifreq). + +Sun Apr 19 16:30:35 1998 Erez Zadok + + * amd/amd.c (daemon_mode): set a temporary secure umask(0022) + before writing log file and restore it afterwards. Patch from + Donald Buczek . + + * amd/get_args.c (get_args): + + * doc/am-utils.texi (-F Option), amd/amd.8: mention that amd.conf + file specified by -F is always processed last. + + * amd/amd.c (daemon_mode): do not fclose(stdout) so that the fd + won't be reused. Allows startup script to redirect stdout. Patch + from Donald Buczek . + + * libamu/xutil.c (switch_to_logfile): compare logfile name and + syslog string with correct length. Patch from Donald Buczek + . + + * amd/restart.c (restart): correctly inherit existing NFS V.3 + mounts upon restart. Patch from Donald Buczek + . + +Sat Apr 18 19:01:19 1998 Erez Zadok + + * using libtool 1.2 and automake 1.3 (with my patches). + + * aux/macros/opt_am_cflags.m4, */Makefile.in: rename AM_CFLAGS to + AMU_CFLAGS to avoid conflicts with automake-1.3. + +Sun Apr 5 23:09:08 1998 Erez Zadok + + * converted to using libtool-1.2. + +Tue Mar 10 16:52:09 1998 Erez Zadok + + * fsinfo/fsi_analyze.c (fixup_required_mount_info): replaced silly + for loop (ITER) which used to run only to initialize the variable + dd once and then break; with a simple assignment. + + * hlfsd/hlfsd.h: cleanup so it compiles with Solaris + /opt/SUNWspro/bin/cc, and use gid_t not int. + + * amd/mapc.c (mapc_sync): don't dereference pointer (so it + compiles with Solaris /opt/SUNWspro/bin/cc) + +Sun Mar 8 15:54:22 1998 Erez Zadok + + * aux/config.{guess,sub}: used from gcc-2.8.1. + +Sat Mar 7 15:33:27 1998 Erez Zadok + + * released snapshot am-utils-6.0a16s9 + + * INSTALL, doc/am-utils.texi (Supported Platforms): updated names + based on new output of new config.guess. + + * aux/config.{sub,guess}: used newer versions from gcc-2.8.0. + + * amd/amd.8,doc/am-utils.texi: document correct usage of default + /etc/amd.conf file. + + * fixmount/fixmount.c (inetresport,privsock): use some more + portable code from amq/amq.c. + + * amd/get_args.c (get_args): use default /etc/amd.conf file only + if no arguments had been passed to amd. + + * fixmount/fixmount.c (clnt_create_timeout): use tli/socket code + ala amq/amq.c so that fixmount will work on both types of systems. + + * amq/amq.c (main): do no close tcp socket before running udp try, + because we're not sure if it was opened at all. + + * mips-dec-ultrix* port merged in and cleaned up. + + * aux/configure.in: up minor shared library revision number, since + it has changed enough. + + * hlfsd/hlfsd.c (main): don't check for overlay mount option here, + as it is now done in compute_nfs_args(). Remove ultrix specific + code also because it was moved to compute_nfs_args(). + + * conf/mount/mount_svr4.c: removed DEBUG_MOUNT_SVR4 code, now that + we have more generic code in print_nfs_args(). + + * libamu/mount_fs.c (print_nfs_args): print maxlen of + nfs_args.addr, and also syncaddr (which is mostly NULL). Print + struct knetconfig from nfs_args->knconf. + + * aux/macros/mount_headers.m4 (define): do not check for ufs/cdfs + headers here, but in try_compile_anyfs.m4. + + * aux/macros/type_ufs_args.m4: move test for struct ufs_specific + (for ultrix) here from its own macro. + + * aux/macros/type_cdfs_args.m4: move test for struct iso_specific + (for ultrix) here from its own macro. + + * amd/ops_nfs.c (mount_nfs_fh): no need to run code again checking + for overlay mount option. Remove code which checks for overlay + option, as it is now done in compute_nfs_args(). + + * libamu/mount_fs.c (compute_mount_flags): move here code which + checks for overlay mount option which was in amd/amfs_toplvl.c: + mount_amfs_toplvl(). + +Wed Feb 7 15:35:51 1998 Rainer Orth + + * The following are Rainer's ChangeLog entries for his ultrix + port, added manually. -Erez. + + * merged Ultrix port with am-utils 6.0 a16s5: amd/ops_afs.c + (mount_toplvl) -> amd/amfs_toplvl.c (mount_amfs_toplvl) + + * include/am_defs.h: include cdfs specific mount headers avoid + duplication definition of gt_names[] in (Ultrix) + + * include/am_compat.h: define several mount options corresponding + to mount flags: pgthresh, hard (nfs), defperm, nodefperm, + noversion, rrip (cdfs), nocache, quota, sync (generic) removed + duplicate MNTTAB_OPT_RO definition + + * aux/macros/try_compile_anyfs.m4: include Ultrix specific + ufs/cdfs mount headers + + * aux/macros/mount_headers.m4: include several Ultrix/Digital UNIX + specific mount headers + + * aux/macros/check_{fs_mntent, mount_type}.m4: check for GT_* + mount types in mount headers (Ultrix) + + * aux/configure.in: Ultrix/Digital UNIX specific checks: new + headers, mount structures and fields, filesystem and mount types, + mount flags + + * aux/acconfig.h: placeholders for new mount options: quota + (generic), ro (nfs), defperm, nodefperm, noversion, rrip (cdfs) + cdfs, nfs, ufs mount structure fields new ufs, cdfs mount + structures + + * amd/ops_ufs.c (mount_ufs): Ultrix stores generic mount flags in + ufs_args.ufs_flags and has ufs specific pgthresh option + + * amd/ops_cdfs.c (mount_cdfs): handle Ultrix/Digital UNIX specific + CDFS mount flags and options + + * amd/ops_afs.c (mount_toplvl), amd/ops_nfs.c (mount_nfs_fh), + hlfsd/hlfsd.c (main): store generic mount flags in + nfs_args.gfs_flags, handle separate NFS ro flag + + * aux/macros/{check_mnt2_cdfs_opt, struct_iso_specific, + struct_ufs_specific}.m4: new files; check for Ultrix specific + mount structures + + * conf/trap/trap_ultrix.h: arg 3 to mount(2) is rwflag + + * aux/macros/type_auth_create_gidlist.m4 (ultrix*): + AUTH_CREATE_GIDLIST_TYPE is int (not short == gid_t) from a + comment in + + * include/am_defs.h: #define KERNEL to avoid definition of + gt_names[] conf/mtab/mtab_ultrix.c: #include before + to force single definition here +Ù-Lã\ +Y Éôðault + nfs_args.gfs_flags moved to callers store mount options in + nap->optstr + * fixmount/fixmount.c (inetresport,privsock): use some more + portable code from amq/amq.c. + +ent mnt_{type, opts} field + descriptions + + * aux/macros/mount_headers.m4, aux/macros/try_compile_nfs.m4: + include before AMU_NFS_PROTOCOL_HEADER for svc_req + definition in prototypes + + * aux/macros/mount_headers.m4: include before + + * aux/aclocal: adapt for local perl path and $prefix + AMU_NFS_PROTOCOL_HEADER: needs it for NFSERR_* + definitions + + * aux/macros/check_nfs_prot_headers.m4: use nfs_prot_ultrix.h + + * aux/macros/check_nfs_prot_headers.m4: use nfs_prot_ultrix.h + + * aux/macros/mount_headers.m4, aux/macros/try_compile_nfs.m4, + aux/macros/try_compile_rpc.m4, include/am_defs.h: avoid multiple + inclusion of + +Sat Mar 7 13:56:05 1998 Erez Zadok + + * aux/configure.in: save state of config.cache and confdefs.h + (as dbgcf.h) at various points of the configure. + + * aux/macros/save_state.m4: new macro to save state of configure, + esp. useful in long ones. Saves confdefs.h and write $ac_cv_* + cache variables that are known so far. + + * released snapshot am-utils-6.0a16s8 + +1998-03-06 Erez Zadok + + * fsinfo/fsi_lex.l,amd/conf_tok.l: define ECHO after undefining + it, but only for flex. + +Fri Mar 6 17:23:17 1998 Erez Zadok + + * hlfsd/homedir.c (plt_print): change pathname of hlfsd dump file + to /usr/tmp/hlfsd.dump.XXXXXX, and use a safe method (if possible) + to write the dump file. + + * doc/am-utils.texi,amd/opts.c: rename all references to nomadic + functions to boolean functions, which is what they really are. + + * aux/configure.in: don't look for strcasecmp in libucb at all, + but rather complete it from libamu/strcasecmp.c as needed. + +Fri Mar 6 03:29:20 1998 Erez Zadok + + * conf/nfs_prot/nfs_prot_osf4.h: avoid conflicts with Irix's EFS. + + * libamu/wire.c (getwire): fix for 0.0.0.0 loopback on SunOS 3.X + which defines IFF_ROUTE instead of IFF_LOOPBACK. Patch from Tom + Schmidt . + + * released snapshot am-utils-6.0a16s7 + + * conf/nfs_prot/nfs_prot_hpux11.h: a first working port of amd to + hppa1.0-hp-hpux11.00.tgz. + +Thu Mar 5 21:59:03 1998 Erez Zadok + + * converted all sources to use mntent field names, and map mnttab + field names to mntent's. + + * include/am_defs.h (mnt_special): map struct mnttab field names + to struct mntent field names. + + * aux/macros/check_mount_trap.m4: hpux11's mount trap style is + identical to svr4/solaris2. + + * aux/macros/check_mount_style.m4: hpux11's mount style is + identical to svr4/solaris2. + + * aux/macros/check_network_transport_type.m4: hpux11 is a TLI + system! + + * aux/macros/check_nfs_sa_dref.m4: hpux11's NFS host address + dereferencing style is same as svr4. + + * aux/macros/check_nfs_fh_dref.m4: hpux11's NFS file fh + dereferencing style is same as svr4. + + * conf/transp/transp_tli.c (create_nfs_service): if failed to + getnetconfigent() of ticlts, then try udp (hpux11). + + * conf/nfs_prot/nfs_prot_hpux11.h: added correct definitions for + struct nfs_args, nfs_fh, and NFSMNT_* flags, taken from solaris + 2.5.1 (HP used them). + + * amd/rpc_fwd.c (fwd_init): don't use O_NDELAY for t_open() + because hpux11 doesn't like it. if t_open failed, print error + based on t_errlist, not sys_errlist. + +Wed Mar 4 22:01:55 1998 Erez Zadok + + * doc/am-utils.texi: lots of documentation fixes from Rainer Orth + . + +Sat Feb 28 22:16:35 1998 Erez Zadok + + * fsinfo/fsi_lex.l: undefine ECHO again, so it doesn't get used + later. + + * include/am_defs.h: defined the extern for ualarm() if it isn't + found, regardless if the function isn't found in standard + libraries, because otherwise libamu will include it. + +1998-02-28 Erez Zadok (per Ron Snyder) + + * initial port to hpux-11 completed. Compiles cleanly, but + probably does not work, because of missing NFS V.2/3 headers. + + * amd/conf_tok.l: cast yytext to char* when passed to strlen and + strdup, for hpux-11's ansi-cc compiler. + + * include/am_utils.h: renamed all xfree() to XFREE() to avoid + conflict with hpux-11's system headers. Also move (voidp) cast + from sources to inside the macro itself. + +Sat Feb 28 13:44:21 1998 Erez Zadok + + * released snapshot am-utils-6.0a16s6 + + * amd/info_nis.c (nis_isup): new function to test if NIS is up + without hanging amd. Used to ensure that amd does not clear the + maps when the expiration period arrived, if the service is down. + Otherwise it would be left with empty maps. It is better to stay + with possibly old information than none at all. + + * amd/mapc.c (mapc_sync): check to see if map service is up. + +Tue Feb 24 02:19:42 1998 Erez Zadok + + * aux/macros/check_lib2.m4 (AC_CHECK_LIB2): fix macro so it + includes auxiliary library only if needed. + +1998-02-22 Erez Zadok + + * amd/conf_tok.l: undefine ECHO again, so it doesn't get used + later. + +Sun Feb 22 01:41:08 1998 Erez Zadok + + * conf/nfs_prot/nfs_prot_osf2.h: port to alpha-dec-osf2.1 + completed. + + * conf/mtab/mtab_osf.c (mnt_dup): not all OSF have NFS3. + +Sat Feb 21 19:45:48 1998 Erez Zadok + + * doc/am-utils.texi (Network Host Filesystem): correct example for + type:=host map. + + * aux/macros/os_cflags.m4: only osf4 should compile with + -D_SOCKADDR_LEN. + + * aux/macros/check_nfs_prot_headers.m4: distinguish between OSF2 + and OSF4. + + * BUGS: include a new file listing known bugs. + +Sat Feb 21 03:50:48 1998 Erez Zadok + + * conf/nfs_prot/nfs_prot_linux.h: turn DES off on all linux + versions. + + * aux/macros/type_recvfrom_fromlen.m4: linux alpha should use + size_t for recvfrom fromlen arg. + +Sat Feb 21 03:33:59 1998 Erez Zadok + + * scripts/ctl-hlfsd.in: turn -D fork so primary process never + hangs. + +Sat Feb 21 02:45:51 1998 Erez Zadok + + * include/am_defs.h: don't include and + , just remaining definitions in + +Thu Jan 29 00:44:28 1998 Erez Zadok + + * released snapshot am-utils-6.0a16s5 + + * conf/mount/mount_irix6.c (mount_irix): pass {u,e,x}fs_args to + mount(2). + + * check for and include it when needed. + + * conf/mount/{mount_irix5.c,mount_irix6.c} (mount_irix): recognize + efs and xfs separately from "ufs". + + * amd/{ops_xfs.c,ops_efs.c}: new support for irix xfs/efs. + + * aux/configure.in: look for irix efs and xfs file systems. + + * scripts/amd.conf.5: new unmount_on_exit option documented. + + * doc/am-utils.texi (unmount_on_exit): new option documented. + + * amd/conf.c (gopt_unmount_on_exit): new function to handle new + amd.conf option. + + * amd/map.c (umount_exported): if global amd.conf flag + unmount_on_exit is on, then try to unmount all mounted (or + restartable) file systems. + + * amd/amd.c: if print_pid option is on, then normally print it to + stdout. If also pid_file is specified, then print the process ID + into that file. + + * amd/get_args.c (get_args): print correct -l option depending if + system supports syslog and/or syslog facilities. Patch from + Tom Schmidt . + + * doc/am-utils.texi (opts Option): updates for documentation for + new cdfs options defperm, nodefperm, noversion, rrip. + + * amd/ops_cdfs.c (mount_cdfs): support cdfs options defperm, + nodefperm, noversion, rrip. + + * conf/nfs_prot/nfs_prot_osf.h: need to look at + on osf. + + * aux/macros/{expand_cpp_hex.m4, expand_cpp_int.m4, + expand_cpp_string.m4}: use #error to make failed compilations + fail faster, rather than have the program fail during a run. + + * include/am_compat.h: added a few new cdfs options: rrip, + noversion, defperm, and nodefperm (used in OSF). + +Wed Jan 28 20:24:09 1998 Erez Zadok + + * released snapshot am-utils-6.0a16s4 + + * doc/am-utils.texi (Global Parameters): update manual for new + amd.conf global variable hesiod_base. + + * scripts/amd.conf.5: update man page for new amd.conf global + variable hesiod_base. + + * amd/get_args.c (get_args): use /etc/amd.conf file if exists by + default, else try command line options. Patch from Randall + S. Winchester . + +Wed Jan 28 12:20:56 1998 Erez Zadok + + * amd/info_hesiod.c (hesiod_search), amd/conf.c + (gopt_hesiod_base), amd/amd.h, amd/amd.c (init_global_options): + included patch from Randall S. Winchester , to + support a hesiod base name in the amd.conf file. + + * doc/am-utils.texi (pid_file Parameter): document new global + amd.conf parameter. + + * scripts/amd.conf.5: document new global option pid_file. + + * amd/amd.c (daemon_mode): if cannot open pid_file, continue to + run, but print error message. + + * amd/conf.c (gopt_pid_file), amd/amd.h, amd/amd.c (daemon_mode, + init_global_options): Included patch from Randall S. Winchester + , to support pid files in the amd.conf file. + + * amd/get_args.c (get_args): correct usage info on amd -t. + + * amd/*.c: massive file name and symbol name changes. All amd + file systems files and symbols are prefix with amfs_*. Now using + real name of file system: amfs_auto instead of afs, amfs_inherit + instead of ifs, amfs_linkx instead of sfsx, etc. This will enable + clear distinction between amd file system and generic ones like + nfs/ufs/pcfs/hsfs. Also, now we can implement true afs (Andrew + f/s) and DFS (Distributed f/s). + + * amd/amfs_union.c: unionfs for amd is always defined, no need to + #ifdef it. + +Mon Jan 26 16:51:38 1998 Erez Zadok + + * libamu/mount_fs.c (compute_nfs_args): set 'noconn' NFS option on + or off, based on the particular quirks of the OS in question. + + * aux/macros/check_nfs_socket_connection.m4: new macro to set the + correct wait of handling un/connected NFS sockets. + + * scripts/wait4amd.in: use rlogin instead of rsh. + + * amd/am_ops.c (ops_showfstypes): when showing F/S types in amd + -v, always show "nfs3" for NFS V.3. + +1998-01-25 Erez Zadok + + * lots of small fixes for solaris 2.6, since gcc 2.8.0 -Wall gets + more picky than 2.7.2.3 did. + +1998-01-24 Erez Zadok + + * include/am_utils.h (dlog): amuDebug macros reduced to shorter + forms. + +Fri Jan 23 18:38:30 1998 Erez Zadok + + * released snapshot am-utils-6.0a16s3 + + * include/am_defs.h: on Solaris 2.6, is included + in but since stdargs.h is used, and varargs.h + must not, fake a definition for varargs. + +Fri Jan 16 10:16:40 1998 Erez Zadok + + * README: show how to configure in additional support such as + hesiod using various --enable-* flags. + +Wed Jan 14 15:13:02 1998 Erez Zadok + + * aux/configure.in: look for strcasecmp(), and replace it if not + available. + + * amd/ops_nfsl.c (nfsl_match): host names should be compared using + case insensitive. + + * amd/opts.c: for each map variable, define if the comparison + needs to be done case insensitive. + + * include/am_utils.h (STRCEQ): a new macro to use strcasecmp(). + Patch from Thomas Richter + +1998-01-14 Erez Zadok + + * aux/configure.in: look for "isofs" as a possible mount type for + cdfs (RedHat Linux). + +Wed Jan 14 02:07:05 1998 Erez Zadok + + * conf/mount/mount_linux.c (parse_opts): don't look for cdfs mount + type if not defined. + + * conf/nfs_prot/nfs_prot_linux.h: don't define __FD_* macros if + already defined. + + * aux/configure.in: look for ext2fs before ufs, b/c some linux + have both. + +Mon Jan 12 15:43:20 1998 Erez Zadok + + * Makefile.am (snapshot): allow me to install snapshots into the + ftp directory. + + * scripts/ctl-hlfsd.in: don't turn on -D mem by default. + + * amd/get_args.c (get_args): minor bug in output of amd -H. + + ***************************************************** exist. + * conf/transp/transp_sockets.c (get_nfs_version): don't use + clnt_spcreateerror if it does not exist. + + * aux/configure.in: check for missing functions clnt_create and + clnt_spcreateerror. Check for missing strstr, and complete + its code. Check for missing external definition for strstr. + + * aux/macros/host_macros.m4: normalize sun3* names. + + * Makefile.am: updates for new sunos3 files distributed. + + * conf/nfs_prot/nfs_prot_sunos3.h: new file. + + * conf/fh_dref/fh_dref_sunos3.h: new file. + + * aux/macros/check_nfs_prot_headers.m4: added sunos3 case. + + * aux/macros/check_nfs_fh_dref.m4: added sunos3 case. + + * doc/am-utils.texi (wire Selector Variable): updated manual for + adjusted variables wire, network, and netnumber, all using the + in_network() function. + +Fri Dec 19 04:37:36 1997 Erez Zadok + + * amd/opts.c: allow options to be processed by executing arbitrary + functions. Converted wire, network, and netnumber all to use the + nomadic function in_network. So from now on they perform a match + against all networks, not just primary. + + * initial port to alpha-unknown-linux-gnu, probably works, but + untested yet. + + * conf/nfs_prot/nfs_prot_linux.h: add special definitions for + __FD_* macros which for som strange reason do not get included + from on redhat alpha linux. Also turn off usage of + because it is incomplete on the same systems. + + * hlfsd/homedir.c (table_add): cast uid field to int, for + comparison. + + * include/am_defs.h: more coflicts with redhat alpha linux + "resolved". + + * aux/macros/{mount_headers,try_compile_anyfs,try_compile_nfs}.m4: + There's a conflict of definitions on redhat alpha linux between + and which must be avoided. + + * aux/configure.in: check for , which is in use on + redhat alpha linux. + + * doc/am-utils.texi (Selectors): added documentation to describe + the new "!" (negated) nomadic functions. + + * amd/opts.c (f_in_network): print debugging info that is correct, + rather than saying that any ARG is on a local network. + (eval_opts): added support for negating nomadic functions, by + prepending "!" to their name. Example, !exists(/foo/bar). + +Thu Dec 18 20:57:19 1997 Erez Zadok + + * include/am_compat.h: ensure that all NFS3 systems have the mount + table entries (and amd opts switches) "proto" and "vers". + + * hlfsd/homedir.c (table_add): added some debugging info to try + and track down a serious memory leak in hlfsd. + +1997-12-18 Erez Zadok + + * libamu/mount_fs.c (compute_nfs_args): OpenBSD 2.2 requires that + you do NOT set the noconn option, and use connected sockets + always. So I'm now forced not to set it at all, and have the user + specify it as "conn" or "noconn" in their /default entry. Argh... + Finally, it looks as if OpenBSD 2.2's NFS 3 implementation may be + buggy (TCP hangs with "short receive" kernel errors). I'd better + wait until they get it working in their version of the automounter + first. So I'm putting the "noconn" option back. + +Thu Dec 18 02:39:39 1997 Erez Zadok + + * libamu/mount_fs.c (compute_nfs_args): use maxgrps option and set + nfs_args field maxgrouplist accordingly. + + * include/am_compat.h (MNTTAB_OPT_MAXGROUPS): complete definition + for mount table entry for maxgroups based on NFS mount option + maxgrp. + + * aux/configure.in: put back testing for NFS mount option + "maxgrps". Added test for mount table entry "maxgroups". + + * libamu/mount_fs.c (compute_nfs_args): perform more careful tests + on nfs_proto, because it could be NULL. + + * doc/am-utils.texi (Selectors): added example of in_network() + selector. + + * aux/macros/check_hide_mount_type.m4: all hpux versions, + including 9.x, should use "ignore" as the mount type to hide from + amd. + +Wed Dec 17 13:09:21 1997 Erez Zadok + + * include/am_utils.h (NSTREQ): use new macro instead of strncmp() + every where in the sources. + +Wed Dec 17 01:15:01 1997 Erez Zadok + + * libamu/mount_fs.c (print_nfs_args): if -D trace is on, will + print as much info that is given in struct nfs_args as possible. + useful for detecting internal flags and options, as well as the + file handle used. + + * scripts/ctl-amd.in: look for amd.conf file in ${prefix}/etc + after /etc and before /etc/local. + +Tue Dec 16 18:51:36 1997 Erez Zadok + + * aux/configure.in, libamu/Makefile.am: added support for linking + with specific versions of libamu. Upped shared library version of + libamu to 1 (libamu.so.1.0.0) + + * include/am_defs.h: added external definition for mkstemp() as + needed. + + * minor new port to i386-unknown-netbsd1.3 (BETA version of + netbsd). + + * aux/config.guess: don't leave a trailing '.' on the system name + for NetBSD-1.3_BETA and similarly for OpenBSD. + + * conf/nfs_prot/nfs_prot_netbsd1_3.h: new header for the slight + differences in ypall calling conventions. + + * mk-amd-map/mk-amd-map.c (main): use mkstemp() whenever possible + in preference over mktemp(), b/c it is more secure. + + * aux/configure.in: check for mkstemp(), a more secure version of + mktemp(). + +Mon Dec 15 02:32:14 1997 Erez Zadok + + * amd/ops_nfs.c (mount_nfs_fh): Systems that include the mount + table "vers" option generally do not set the mnttab entry to + "nfs3", but to "nfs" and then they set "vers=3". Setting it to + "nfs3" works, but it may break some things like "df -t nfs" and + the "quota" program (esp. on Solaris and Irix). So on those + systems, set it to "nfs". + +Sat Dec 13 01:36:27 1997 Erez Zadok + + * doc/am-utils.texi (Distrib): updates for new ports, location of + am-utils' home page, and URL cross references (now supported by my + version of texi2html). + + * aux/macros/check_mtype_type.m4: also use string type for file + system mount types under nextstep for mount(2). + + * aux/macros/check_mtype_printf_type.m4}: nextstep can handle both + integer and string types for file system mount types in mount(2), + but it is better to use string types. + + * conf/nfs_prot/nfs_prot_nextstep.h: set emum nfsstat's NFS_OK to + 0, not 1! Otherwise, all NFS calls (esp. mount) return errno 1 + (EPERM) instead of 0 (OK). Fixes m68k-next-nextstep3 which now + works. + + * conf/nfs_prot/nfs_prot_bsdi2.h: set emum nfsstat's NFS_OK to 0, + not 1! Otherwise, all NFS calls (esp. mount) return errno 1 + (EPERM) instead of 0 (OK). + + * libamu/xdr_func.c (xdr_*): add debugging calls that are optioned + by -D trace (protocol trace). + +1997-12-11 Erez Zadok + + * A.m68k-next-nextstep3/amu_nfs_prot.h: define missing S_ISDIR + macro based on existence on others, and include . + +Thu Dec 11 14:14:38 1997 Erez Zadok + + * aux/macros/try_compile_nfs.m4 (AC_TRY_COMPILE): turn off + inclusion of which only affects nextstep3, on + which this header is broken (it tries to include non-existing + headers). + +Wed Dec 10 16:09:07 1997 Erez Zadok + + * libamu/mount_fs.c (mnt_flags): support either nfs or generic + mount option for grpid. + + * aux/configure.in: turn back on NFS mount option grpid. + +Sat Dec 6 04:36:05 1997 Erez Zadok + + * doc/Makefile.am (install-ps): added target to install postscript + file in the am-utils' home page, as well as a few other useful + files for the new am-utils Web page. + +Mon Nov 17 05:22:56 1997 Erez Zadok + + ******************************************************************* + *** Released am-utils-6.0a14 *** + ******************************************************************* + +Sun Nov 16 21:56:16 1997 Erez Zadok + + * doc/am-utils.texi (Supported Platforms): updated table of new + ports. + +Sat Nov 15 06:36:27 1997 Erez Zadok + + * libamu/mount_fs.c (compute_automounter_nfs_args): pass mnttab + options so that they can be printed in logs as needed. + + * doc/am-utils.texi (osver Parameter): updated for the correct + usage of the -o/-O options. + + * scripts/amd.conf.5: corrected info for -o/-O options. + + * amd/amd.8: updated man page for new -O op_sys_name option, and + corrected the usage of the -o op_sys_ver option + + * amd/get_args.c (get_args): added new amd option -O to override + OS name. + (get_args): updated usage string. Removed old -m option. Added + -o and -O options. + + * conf/nfs_prot/nfs_prot_irix5.h: add definition to FHSIZE in case + it is not there. Reportedly, irix 5.2 does not define it. + + * scripts/lostaltmail.in: removed references to unused $hack + variable. + + * aux/macros/check_nfs_prot_headers.m4: Patch from Chris Metcalf + to correctly set the nfs_prot headers + for solaris2.5. + + * doc/am-utils.texi (Distrib): typo in the subscription + instructions to amd-dev. Patch from Stefan Vogel + . + +1997-11-15 Erez Zadok + + * NFS3 works on powerpc-ibm-aix4.2.1.0. + + * libamu/mount_fs.c (compute_nfs_args): set fh3 variable to + static. Some compilers (gcc from egcs on aix 4.2.1) corrupt the + stack of an automatic variable when pointer to it is passed around + several times. + +Fri Nov 14 20:09:28 1997 Erez Zadok + + * libamu/xutil.c (real_plog): syslog like behavior for normal + logging. Will not print repeated strings, only a count "last + message repeated N times", but will always print something if + message is repeated more than 100 times. + + * scripts/lostaltmail.in: look for lostaltmail.conf files also in + /etc/global, /etc/os, and /etc/local (in that order). + +Mon Nov 10 03:03:17 1997 Erez Zadok + + * conf/mount/mount_aix.c (mount_aix3): add support for NFS V.3 + mounts. + + * aux/macros/struct_nfs_args.m4 (AC_TRY_COMPILE_NFS): test for + aix42_nfs_args, specially set in conf/nfs_prot/nfs_prot_aix4_2.h + + * conf/sa_dref/sa_dref_*.h: from now on, the "dst" argument to the + NFS_SA_DREF macro is a pointer to the structure that used to be + passed to it before. So now I have to dereference the pointer + before accessing its values. + + * hlfsd/hlfsd.c (main): use the new and cleaner + compute_nfs_args() and compute_automounter_nfs_args() functions. + + * amd/ops_nfs.c (mount_nfs_fh): use the new and cleaner + compute_nfs_args() and compute_automounter_nfs_args() functions. + + * amd/ops_afs.c (mount_toplvl): MAJOR CODE REVISION. Use the new + and cleaner compute_nfs_args() and compute_automounter_nfs_args() + functions. + + * libamu/mount_fs.c (compute_nfs_args): major code cleanup that + relates for struct nfs_args. A new function sets the numerous + possible flags and fields of nfs_args_t in an orderly fashion. + Code cleaned up, organized, and moved from amd/hlfsd into + libamu. This saves on overall size of code. + (compute_automounter_nfs_args): A variant of compute_nfs_args() + which sets special options/flags that need to be used when NFS + mounting an automounter's mount point. Used by hlfsd and amd. + + * amq/amq.c (get_secure_amd_client): don't print any more + "get_secure_amd_client: using TCP, port 12345". It's more + annoying than useful a message, even when assumed to be compiled + under DEBUG only. + +Thu Oct 30 14:33:38 1997 Erez Zadok + + * aux/macros/check_mnttab_type.m4: MAJOR BUG fixed for non-nfs + mount table entries. The code used to define the /etc/mnttab name + for file systems based on physical media (disk, cdrom, floppy) to + the generic name, rather than the OS specific name. For example + autoconf searches for all these types of mount table entries for a + floppy based file system: vfat pcfs pc msdos msdosfs fat. But if + it found any, it hard-coded the mnttab name to "pcfs" rather than + the actual name found! Same for ufs, cdfs, pcfs, tmpfs, lofs, + nullfs, unionfs, and umapfs. + + * aux/configure.in: also test for xfs (for newer Irix) when + looking for mount type names, numbers, etc of a disk-based ufs. + +Sun Oct 26 19:32:57 1997 Erez Zadok + + * amq/amq.c (main): use pmap_ping() to test if remote host is up. + This works better on bsdi2 and bsdi3, because their portmapper + does not appear to like forwarding operations (it is generaly + insecure). + +Sat Oct 25 04:55:56 1997 Erez Zadok + + ******************************************************************* + *** Released am-utils-6.0a13 *** + ******************************************************************* + +Fri Oct 24 05:04:37 1997 Erez Zadok + + * conf/nfs_prot/nfs_prot_ncr2.h: added missing definition for + struct datum typedef. + + * conf/nfs_prot/nfs_prot_netbsd.h: corrected typedef for + ypall_callback_fxn_t for netbsd. + + * aux/macros/type_auth_create_gidlist.m4: hpux10.10 uses int for + the 5th arg to authunix_create(), while before and after they used + gid_t. + + * conf/transp/transp_tli.c (amu_clnt_create_best_vers): don't use + clnt_create_timed() on older Solaris 2.3 systems that did not have + it. + + * conf/nfs_prot/nfs_prot_bsdi2.h: is for + kernel only on bsdi2, so do not include it. + +Fri Oct 24 00:29:42 1997 Erez Zadok + + * hlfsd/stubs.c (nfsproc_readlink_2_svc): avoid logging repeated + messages about resolution of mailboxes based on uid/gid. + + * scripts/ctl-hlfsd.in: check for alternate password file in + ${prefix}/etc/passwd and use it in hlfsd's startup. + +Thu Oct 23 22:48:50 1997 Erez Zadok + + * hlfsd/homedir.c (hlfsd_getpwent): added support for -P + passwdfile option. If hlfsd is started with -P passwdfile, then + the passwdfile is read and parsed just as a standard unix + passwd(4) file. Only the username, uid, and homedir fields are + read and checked. All the rest are ignored. No NIS/netgroup + support! + + * hlfsd/hlfsd.c (main): check if hlfsd is run as root after + parsing command line options, so that usage() can be printed when + -h is invoked. + +Wed Oct 22 00:16:39 1997 Erez Zadok + + * amd/nfs_start.c (mount_automounter): if autofs service listener + fails to initialize it is OK if using a test amd. + + * amd/opts.c (f_in_network): new nomadic function in_network(arg), + which returns TRUE if 'arg' is any one of this host's networks. + + * libamu/wire.c (getwire): rewritten parts of function, to store + all networks names and numbers in the order of the interface (not + in reverse). + +Mon Oct 20 01:59:25 1997 Erez Zadok + + * aux/configure.in: don't add ops_ufs.o on AIX twice. My code + would have worked had it not been due to AIX's buggy /bin/sh. + + * doc/Makefile.am (EXTRA_DIST): include am-utils.dvi and + am-utils.ps in the distribution sources. + (html): generate html documentation for + http://www.cs.columbia.edu/~ezk/am-utils/ + +Sun Oct 19 12:35:49 1997 Erez Zadok + + * conf/nfs_prot/nfs_prot_netbsd.h: override the definition of + ypall_callback_fxn_t. The NetBSD team compiles all sources with + gcc -Wall -Wmissing-prototypes -Wstrict-prototypes. + + * amd/info_nis.c: allow for override of ypall_callback_fxn_t + function typedef. + + * libamu/xutil.c (amu_release_controlling_tty): new function to + release the controlling tty in a clean and sane manner. No longer + using setpgid() b/c it may not work. Uses setsid(), + and ioctl() (in order). This new function is used in amd/amd.c + and hlfsd/hlfsd.c. Also avoid setpgrp(), because it works on some + systems, but on others it is the same as setpgid(). + +Sat Oct 18 23:42:40 1997 Erez Zadok + + * aux/acconfig.h: check for nfs mount option 'fsname'. Code for + it was in amd/ops_afs.c, amd/ops_nfs.c, and hlfsd/hlfsd.c, but + never used, because the configure test for fsname flag wasn't + used. This fixed a bug in HPUX 10, where syncer and manual mounts + left blank lines in /etc/mnttab. + + * aux/configure.in: check for nfs mount option 'fsname'. + +Fri Oct 17 13:30:27 1997 Erez Zadok + + * amd/ops_afs.c (mount_toplvl): turn on 'ignore' option in nfs + mount flags of toplvl mounts. Important esp. for HPUX 10. Now + hpux-10 will mount amd's mounts points as 'ignore' (by df). + + * aux/configure.in: check for NFS mount option 'ignore', useful in + HPUX 10. + +Thu Oct 16 03:28:33 1997 Erez Zadok + + * aux/macros/check_hide_mount_type.m4: hpux 10 should use "ignore" + mount type and not NFS, for the amd mount points. + + * conf/transp/transp_tli.c (amu_clnt_create_best_vers): don't log + an RPC timeout as an error, but just an info message. From + Andreas Stolcke + + * If the NFS server is down or does not support the portmapper + call (such as certain Novell NFS servers) we mark it as version 2 + and we let the nfs code deal with the case that is down. If when + the server comes back up, it can support NFS V.3 and/or TCP, it + will use those. From christos@deshaw.com (Christos Zoulas). + + * hlfsd/homedir.c (plt_print): various compile time cleanups to + printfs that take a long, but pass an int to print. From + christos@deshaw.com (Christos Zoulas). + + * aux/macros/func_bad_yp_all.m4 (ac_cv_func_yp_all_clean,): new + macro to determine if the OS has a bad yp_all(), based on the host + OS name. So far only irix (all versions) have a bad yp_all, so + they will use am_yp_all() instead (which is slower as it + enumerates manually all of the map's entries). + +Thu Oct 16 03:14:37 1997 Erez Zadok + + * amd/info_nis.c (am_yp_all): code for a replacement yp_all that + avoids using a file-descriptor leaking yp_all() on some systems + like irix. + +Wed Oct 15 21:52:35 1997 Erez Zadok + + * fsinfo/fsinfo.h: avoid redefining yywrap incorrectly on DU-4.x + systems using /usr/bin/flex. + + * amd/conf_tok.l (yywrap): avoid redefining yywrap for systems + that have a modified GNU flex which does define yywrap (DU-4.x). + +Fri Sep 26 14:25:29 1997 Erez Zadok + + * conf/checkmount/checkmount_bsd44.c: include prototype. + +Fri Sep 26 01:26:24 1997 Erez Zadok + + ******************************************************************* + *** Released am-utils-6.0a12 *** + ******************************************************************* + +Fri Sep 26 00:13:48 1997 Erez Zadok + + * conf/nfs_prot/nfs_prot_irix6.h: completely turn off all autofs + code in irix6 until it can be tested correctly + + * conf/transp/transp_tli.c (amu_clnt_create_best_vers): time out + on clnt_create for 3 seconds, rather than wait for the much longer + default. + + * conf/nfs_prot/nfs_prot_aix4_2.h: port to powerpc-ibm-aix4.2.1.0. + Includes NFS3, untested. + +Thu Sep 25 11:03:11 1997 Erez Zadok + + * amd/ops_pcfs.c (mount_pcfs): fill in uid/gid fields of + pcfs_args_t if they exist. + + * amd/ops_cdfs.c (mount_cdfs): fill in ssector field of + cdfs_args_t if it exists. + + * new minor ports hppa1.1-hp-hpux10.10, hppa1.1-hp-hpux9.05, + hppa1.1-hp-hpux9.07, m68k-hp-hpux9.00, and sparc-sun-sunos4.1.4. + +Wed Sep 24 00:48:05 1997 Erez Zadok + + * doc/am-utils.texi (wire-test): updated documentation for the new + option. + + * wire-test/wire-test.8: updated man page for new option. + + * wire-test/wire-test.c (main): added a test for various + combinations of NFS proto/vers to a remote/local host. + + * aux/macros/try_compile_anyfs.m4 (AC_TRY_COMPILE): include + and so that + freebsd will correctly set mount options for pcfs and cdfs. + + * amd/ops_pcfs.c (mount_pcfs): set mask field of pcfs_args to + 0777 (if field exists). + + * aux/macros/try_compile_anyfs.m4 (AC_TRY_COMPILE): include + if available. + + * minor new port: rs6000-ibm-aix4.1.4.0. + + * libamu/mount_fs.c (mount_fs): fixed bug that caused HPUX not to + write the "time" field in /etc/mnttab. + + * conf/mtab/mtab_file.c (mnt_dup): fixed typo in macro names for + detecting mnt_time field of mntent_t. + + * libamu/mtab.c (mnt_free): fixed typo in macro names for + detecting mnt_time field of mntent_t. + +Tue Sep 23 15:30:03 1997 Erez Zadok + + * conf/mtab/mtab_file.c (lock): Use flock() in preference over + fcntl() to lock the mtab file. + +Mon Sep 22 23:04:58 1997 Erez Zadok + + * conf/transp/transp_sockets.c (get_nfs_version): define + the try_again goto label only for NFS3. + (pmap_ping): assume timeout failure of clnt_stat. + + * libamu/xdr_func.c (xdr_groupnode, xdr_exportnode): cast to + "groups *". + +Mon Sep 22 20:34:33 1997 Erez Zadok + + * conf/transp/transp_sockets.c (pmap_ping): patch from Dan Riley + to make sure that amd works with more + secure portmappers that do not allow forwarding of RPC messages to + other services. + + * */Makefile.am: all source files should also depend on the new + include/am_xdr_func.h header. + + * include/am_xdr_func.h: new file as part of the code cleanup from + Christos Zoulas . + + * Lots of fixes from Christos Zoulas that + involved missing prototypes, cleaned up ones, and removal of + unused variables. + + * libamu/xdr_func.c (xdr_mountres3): some code cleanup. A switch + statement with only one case is unclean. + +Mon Sep 22 17:26:38 1997 Erez Zadok + + * amd/ops_fs.c (mount_fs): initialize mntent_t fields to + 0 so that all fields are initialized to zero at first. This way + SunOS 4.x and other systems don't get /etc/mtab entries with + random integers for the fsck/freq fields. Patch from Andreas + Stolcke . + +Mon Sep 22 00:34:19 1997 Erez Zadok + + * conf/nfs_prot/nfs_prot_sunos4.h: include so + that the important definition for HOSTNAMESZ will be found. + + * amd/ops_afs.c (mount_toplvl): limit hostname size to HOSTNAMESZ + (inside the nfs_args structure) if the system uses that macro. + Otherwise systems like SunOS refuse to NFS mount long pathnames + and result in ENAMETOOLONG errno's. + +Wed Sep 17 04:56:11 1997 Erez Zadok + + * doc/am-utils.texi (Supported Platforms): specify new support for + solaris 2.6, and hlfsd running on 2.5.1 too. + +Wed Sep 17 03:55:02 1997 Erez Zadok + + * conf/mount/mount_svr4.c (mount_svr4): don't attemt an autofs + mount if it is not supported or was turned off. + +Wed Sep 17 03:19:36 1997 Erez Zadok + + * conf/nfs_prot/nfs_prot_sunos4.h: fixed so that it will nfs mount + again. Apparently at some previous release SunOS 4 supported was + broken and all nfs mounts resulted in ESTALE. + +Wed Sep 17 00:26:25 1997 Erez Zadok + + * conf/nfs_prot/nfs_prot_sunos5_6.h: nfs protocol headers for + solaris 2.6. + + * aux/macros/check_nfs_prot_headers.m4: added solaris 2.6 nfs + protocol header selection. + +Sat Sep 13 14:31:51 1997 Erez Zadok + + * conf/transp/transp_tli.c (amu_clnt_create_best_vers): avoid + infinite loop. + +Sun Sep 7 18:23:23 1997 Erez Zadok + + ******************************************************************* + *** Released am-utils-6.0a11 *** + ******************************************************************* + +Fri Sep 5 11:55:10 1997 Erez Zadok + + * amd/amd.c (main): if plock() succeeded, don't try to display + errno message. Patch from Chris Metcalf + + + * hlfsd/homedir.c (table_add): make sure duplicate passwd entries + are ignored. Only the first entry should ever be used, because + that's how lookup in passwd database works. + + * conf/transp/transp_sockets.c (get_nfs_version): when determining + if a remote host is up or down, use NFS v.2. Fix suggested by + Enami Tsugutomo . + + * conf/transp/transp_tli.c (amu_clnt_create_best_vers): new + function to get the best possible NFS version, but also timeout + faster than normal defaults, so remote hosts which are down can be + detected in a reasonable time. + (get_nfs_version): use the new "best" function. + + ************************ + *** Initial ChangeLog Entry *** + ******************************************************************* diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..0907096 --- /dev/null +++ b/INSTALL @@ -0,0 +1,118 @@ +# -*- text -*- + am-utils 6.0 compatibility list + +For each system, list if it autoconfigures, compiles, or runs. Fill in +email id of person who confirms the fact. A missing entry means unverified. +A 'no' means verified broken. + +SYSTEM AUTOCONF COMPILE RUN SHLIB +========================= ======== ========= ======= ===== +alpha-dec-osf2.1 ezk ezk ezk +alpha-dec-osf4.0 ezk ezk dsr[3] +alphaev5-unknown-linux-gnu ezk ezk finkel ezk +hppa1.0-hp-hpux11.00 ezk ezk ezk +hppa1.1-hp-hpux10.10 ezk ezk ezk -ezk (!rpcsvc.so) +hppa1.1-hp-hpux10.20 ezk ezk ezk -ezk (!rpcsvc.so) +hppa1.1-hp-hpux9.01 ezk[4] ezk[4] nrh/ezk +hppa1.1-hp-hpux9.05 ezk[4] ezk[4] nrh/ezk +hppa1.1-hp-hpux9.07 ezk[4] ezk[4] nrh/ezk +i386-pc-bsdi2.1 ezk ezk ezk +i386-pc-bsdi3.0 ezk ezk ezk +i386-pc-bsdi3.1 ezk ezk ezk +i386-pc-solaris2.5.1 ezk ezk ezk ezk +i386-pc-solaris2.6 ezk ezk ezk ezk +i386-pc-solaris2.7 ezk ezk ezk ezk +i386-unknown-freebsd2.1.0 ezk ezk ezk +i386-unknown-freebsd2.2.1 ezk ezk ezk ezk +i386-unknown-freebsd3.0 ezk ezk ezk ezk +i386-unknown-netbsd1.2.1 ezk ezk ezk ezk +i386-unknown-netbsd1.3 ezk ezk ezk ezk +i386-unknown-netbsd1.3.1 ezk ezk ezk ezk +i386-unknown-openbsd2.1 ezk ezk ezk ezk +i486-ncr-sysv4.3.03 ezk ezk +i486-pc-linux-gnulibc1 ezk ezk ezk ezk +i586-pc-linux-gnu ezk ezk ezk ezk +i586-pc-linux-gnulibc1 ezk ezk ezk ezk +i686-pc-linux-gnu ezk ezk ezk ezk +i686-pc-linux-gnulibc ezk ezk ezk ezk +m68k-hp-hpux9.00 ezk[4] ezk[4] nrh/ezk +m68k-next-nextstep3 ezk ezk ezk +m68k-sun-sunos4.1.1 ezk ezk +mips-dec-ultrix4.3 ro ro ro +mips-sgi-irix5.2 +mips-sgi-irix5.3 ezk ezk ezk +mips-sgi-irix6.2 ezk[1] ezk[1] ezk[1] +mips-sgi-irix6.4 ezk ezk ezk ezk (!gcc) +powerpc-ibm-aix4.1.5.0 ezk ezk wpaul +powerpc-ibm-aix4.2.1.0 ezk ezk ezk +rs6000-ibm-aix3.2 ezk ezk ezk +rs6000-ibm-aix3.2.5 ezk ezk ezk +rs6000-ibm-aix4.1.4.0 ezk ezk +sparc-sun-solaris2.3 ezk ezk ezk +sparc-sun-solaris2.4 ezk ezk ezk ezk +sparc-sun-solaris2.5 ezk ezk ezk ezk +sparc-sun-solaris2.5.1 ezk ezk ezk ezk +sparc-sun-solaris2.6 ezk ezk[2] ezk ezk +sparc-sun-solaris2.7 ezk ezk[2] ezk ezk +sparc-sun-sunos4.1.1 ezk ezk ezk ezk +sparc-sun-sunos4.1.3 ezk ezk ezk ezk +sparc-sun-sunos4.1.3C ezk ezk ezk ezk +sparc-sun-sunos4.1.3_U1 ezk ezk ezk ezk +sparc-sun-sunos4.1.4 ezk ezk ezk ezk +sparc-unknown-linux-gnulibc1 ezk ezk ezk ezk +sparc-unknown-netbsd1.2E ezk ezk ezk +sparc64-unknown-linux-gnu ezk ezk ezk ezk + +EMAIL ID LEGEND: + +bking: Bevis R W King +dsr: Dan Riley +ezk: Erez Zadok +nrh: Nick Hall +stolke: Andreas Stolcke +wpaul: Bill Paul +finkel: Raphael Finkel +ro: Rainer Orth + + +FOOTNOTES: + +[1] If compiling with cc on Irix 6, then use + + CC="cc -32 -Wl,-woff,84" ./buildall + +to build (good) "old style" 32 bit code and suppress stupid linker warnings +about unused libraries. + +Also, to get NFS V3 working, you need these two patches from SGI: + + patch 1615: NFS over TCP + patch 2041: NFS roll-up patch + +and then add "-p tcp" to /etc/config/nfsd.options. + +[2] If compiling on Solaris 2.6, you need to add -D_LARGEFILE64_SOURCE to +CFLAGS to enable the 64bit file offset interface: + + make CFLAGS="-O2 -g -D_LARGEFILE64_SOURCE" + +If you're using the standard configure script, it will add this flag for you +automatically. + +[3] DU-4.0 may not use NFS (server-side) V3 by default. You may need to +adjust /etc/init.d/nfs, and change the nfsd startup line from to + + if /usr/sbin/nfsd $NUM_NFSD; then +to + if /usr/sbin/nfsd -t 8 -u 8 ; then + +[4] HPUX 9.X has a bad /bin/sh that runs out of fixed memory allocations. +If you use the configure script, you must run it as + + /bin/ksh ./configure + +Also, this system has a bad /bin/make that cannot handle VPATH well. You +cannot use --srcdir or the buildall script with it. I suggest you install +GNU make or configure locally with "/bin/ksh ./configure". + +Erez. diff --git a/MIRRORS b/MIRRORS new file mode 100644 index 0000000..dba537f --- /dev/null +++ b/MIRRORS @@ -0,0 +1,46 @@ +# -*- text -*- + + AM-UTILS-6.0 MIRRORS + +Note: in case of any problems accessing the individual FTP sites, please +contact their respective maintainers. If you wish to be added to the +official mirror list, please send mail to amd-dev@cs.columbia.edu with the +full URL, maintainer's email, and geographical location. + +U.S.A: + New York (Primary Site): + ftp://shekel.mcl.cs.columbia.edu/pub/am-utils + Maintainer: ezk@cs.columbia.edu + Minnesota: + ftp://ftp.cs.umn.edu/pub/AMD + Maintainer: dokas@cs.umn.edu + Virginia (Newport News): + ftp://www.ferginc.com/pub/unix/am-utils + Maintainer: Branson.Matheson@FergInc.com + Ohio (Kent State University): + ftp://info.mcs.kent.edu/pub/am-utils + Maintainer: root@mcs.kent.edu + +Europe: + Germany: + ftp://ftp.fu-berlin.de/pub/unix/network/am-utils + Maintainer: ftp-adm@ftp.fu-berlin.de + Sweden: + ftp://ftp.sunet.se/pub/unix/admin/am-utils + Maintainer: archive@ftp.sunet.se + Sweden: + ftp://ftp.matematik.su.se/pub/mirrors/shekel.mcl.cs.columbia.edu/pub/am-utils + Maintainer: leifj@matematik.su.se + UK: + ftp://sunsite.org.uk/packages/am-utils + Maintainer: lmjm@icparc.ic.ac.uk + +Asia: + Japan: + ftp://ftp.u-aizu.ac.jp/pub/net/amd/am-utils + Maintainer: ftp-admin@u-aizu.ac.jp + +Australia: + Melbourne: + ftp://ftp.sage-au.org.au/pub/network/filesystem/am-utils + Maintainer: mirror@ftp.sage-au.org.au diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..94ba71f --- /dev/null +++ b/Makefile.am @@ -0,0 +1,300 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Top level Makefile +# Author: Erez Zadok + +SUBDIRS = \ + libamu \ + amd \ + amq \ + \ + fixmount \ + fsinfo \ + hlfsd \ + mk-amd-map \ + wire-test \ + \ + scripts \ + doc + +# temporary tests override SUBDIRS +#SUBDIRS = lib wire-test amq amd + +# additional directories to create in the distribution directory $(distdir) +# note that the order of them being listed here is important (from higher +# level directory to subdirectory, since they get created in that order). +EXTRA_DIST_DIRS = \ + aux \ + aux/macros \ + conf \ + conf/checkmount \ + conf/fh_dref \ + conf/hn_dref \ + conf/mount \ + conf/mtab \ + conf/nfs_prot \ + conf/sa_dref \ + conf/transp \ + conf/trap \ + conf/umount \ + doc \ + include \ + scripts + +# additional files to add to the distribution tar file +EXTRA_DIST_AUX = \ + aux/GNUmakefile \ + aux/acconfig.h \ + aux/acinclude.m4 \ +# aux/aclocal \ + aux/aclocal.m4 \ + aux/amindent \ + aux/autopat \ + aux/aux_conf.h.in \ + aux/chop-aclocal.pl \ + aux/config.guess \ + aux/config.h.in \ + aux/config.sub \ + aux/configure.in \ + aux/install-sh \ + aux/ltconfig \ + aux/ltmain.sh \ + aux/mdate-sh \ + aux/missing \ + aux/mk-aclocal \ + aux/mkconf \ + aux/mkinstalldirs \ + aux/rmtspc \ + aux/stamp-h.in \ + aux/update_build_version \ + \ + aux/macros/HEADER \ + aux/macros/TRAILER \ + aux/macros/c_void_p.m4 \ + aux/macros/cache_check_dynamic.m4 \ + aux/macros/check_am_fs.m4 \ + aux/macros/check_checkmount_style.m4 \ + aux/macros/check_extern.m4 \ + aux/macros/check_fhandle.m4 \ + aux/macros/check_field.m4 \ + aux/macros/check_fs_headers.m4 \ + aux/macros/check_fs_mntent.m4 \ + aux/macros/check_hide_mount_type.m4 \ + aux/macros/check_lib2.m4 \ + aux/macros/check_lib_funcs.m4 \ + aux/macros/check_map_funcs.m4 \ + aux/macros/check_mnt2_cdfs_opt.m4 \ + aux/macros/check_mnt2_gen_opt.m4 \ + aux/macros/check_mnt2_nfs_opt.m4 \ + aux/macros/check_mnttab_file_name.m4 \ + aux/macros/check_mnttab_location.m4 \ + aux/macros/check_mnttab_opt.m4 \ + aux/macros/check_mnttab_style.m4 \ + aux/macros/check_mnttab_type.m4 \ + aux/macros/check_mount_style.m4 \ + aux/macros/check_mount_trap.m4 \ + aux/macros/check_mount_type.m4 \ + aux/macros/check_mtype_printf_type.m4 \ + aux/macros/check_mtype_type.m4 \ + aux/macros/check_network_transport_type.m4 \ + aux/macros/check_nfs_fh_dref.m4 \ + aux/macros/check_nfs_hn_dref.m4 \ + aux/macros/check_nfs_prot_headers.m4 \ + aux/macros/check_nfs_sa_dref.m4 \ + aux/macros/check_nfs_socket_connection.m4 \ + aux/macros/check_os_libs.m4 \ + aux/macros/check_restartable_signal_handler.m4 \ + aux/macros/check_umount_style.m4 \ + aux/macros/check_unmount_args.m4 \ + aux/macros/check_unmount_call.m4 \ + aux/macros/expand_cpp_hex.m4 \ + aux/macros/expand_cpp_int.m4 \ + aux/macros/expand_cpp_string.m4 \ + aux/macros/expand_run_string.m4 \ + aux/macros/extern_optarg.m4 \ + aux/macros/extern_sys_errlist.m4 \ + aux/macros/field_mntent_t_mnt_time_string.m4 \ + aux/macros/func_bad_memcmp.m4 \ + aux/macros/func_bad_yp_all.m4 \ + aux/macros/host_macros.m4 \ + aux/macros/localconfig.m4 \ + aux/macros/mount_headers.m4 \ + aux/macros/msg.m4 \ + aux/macros/name_package.m4 \ + aux/macros/name_version.m4 \ + aux/macros/opt_amu_cflags.m4 \ + aux/macros/opt_amq_mount.m4 \ + aux/macros/opt_cppflags.m4 \ + aux/macros/opt_debug.m4 \ + aux/macros/opt_ldflags.m4 \ + aux/macros/opt_libs.m4 \ + aux/macros/os_cflags.m4 \ + aux/macros/os_cppflags.m4 \ + aux/macros/os_ldflags.m4 \ + aux/macros/save_state.m4 \ + aux/macros/struct_field_nfs_fh.m4 \ + aux/macros/struct_mntent.m4 \ + aux/macros/struct_mnttab.m4 \ + aux/macros/struct_nfs_args.m4 \ + aux/macros/struct_nfs_fh.m4 \ + aux/macros/struct_nfs_fh3.m4 \ + aux/macros/struct_nfs_gfs_mount.m4 \ + aux/macros/struct_nfs_mount_data.m4 \ + aux/macros/try_compile_anyfs.m4 \ + aux/macros/try_compile_nfs.m4 \ + aux/macros/try_compile_rpc.m4 \ + aux/macros/type_auth_create_gidlist.m4 \ + aux/macros/type_autofs_args.m4 \ + aux/macros/type_cachefs_args.m4 \ + aux/macros/type_cdfs_args.m4 \ + aux/macros/type_efs_args.m4 \ + aux/macros/type_lofs_args.m4 \ + aux/macros/type_mfs_args.m4 \ + aux/macros/type_pcfs_args.m4 \ + aux/macros/type_recvfrom_fromlen.m4 \ + aux/macros/type_rfs_args.m4 \ + aux/macros/type_svc_in_arg.m4 \ + aux/macros/type_time_t.m4 \ + aux/macros/type_tmpfs_args.m4 \ + aux/macros/type_ufs_args.m4 \ + aux/macros/type_xdrproc_t.m4 \ + aux/macros/type_xfs_args.m4 \ + aux/macros/type_yp_order_outorder.m4 + +EXTRA_DIST_CONF = \ + conf/checkmount/checkmount_aix.c \ + conf/checkmount/checkmount_bsd44.c \ + conf/checkmount/checkmount_default.c \ + conf/checkmount/checkmount_osf.c \ + conf/checkmount/checkmount_svr4.c \ + conf/checkmount/checkmount_ultrix.c \ + \ + conf/fh_dref/fh_dref_aix3.h \ + conf/fh_dref/fh_dref_aix42.h \ + conf/fh_dref/fh_dref_bsd44.h \ + conf/fh_dref/fh_dref_default.h \ + conf/fh_dref/fh_dref_freebsd22.h \ + conf/fh_dref/fh_dref_hpux.h \ + conf/fh_dref/fh_dref_irix.h \ + conf/fh_dref/fh_dref_isc3.h \ + conf/fh_dref/fh_dref_linux.h \ + conf/fh_dref/fh_dref_nextstep.h \ + conf/fh_dref/fh_dref_osf2.h \ + conf/fh_dref/fh_dref_osf4.h \ + conf/fh_dref/fh_dref_sunos3.h \ + conf/fh_dref/fh_dref_sunos4.h \ + conf/fh_dref/fh_dref_svr4.h \ + \ + conf/hn_dref/hn_dref_default.h \ + conf/hn_dref/hn_dref_isc3.h \ + conf/hn_dref/hn_dref_linux.h \ + \ + conf/mount/mount_aix.c \ + conf/mount/mount_bsdi3.c \ + conf/mount/mount_freebsd3.c \ + conf/mount/mount_hpux.c \ + conf/mount/mount_irix5.c \ + conf/mount/mount_irix6.c \ + conf/mount/mount_isc3.c \ + conf/mount/mount_linux.c \ + conf/mount/mount_mach3.c \ + conf/mount/mount_stellix.c \ + conf/mount/mount_svr4.c \ + \ + conf/mtab/mtab_aix.c \ + conf/mtab/mtab_bsd.c \ + conf/mtab/mtab_file.c \ + conf/mtab/mtab_isc3.c \ + conf/mtab/mtab_mach3.c \ + conf/mtab/mtab_osf.c \ + conf/mtab/mtab_svr4.c \ + conf/mtab/mtab_ultrix.c \ + \ + conf/nfs_prot/nfs_prot_aix3.h \ + conf/nfs_prot/nfs_prot_aix4.h \ + conf/nfs_prot/nfs_prot_aix4_2.h \ + conf/nfs_prot/nfs_prot_bsdi2.h \ + conf/nfs_prot/nfs_prot_bsdi3.h \ + conf/nfs_prot/nfs_prot_default.h \ + conf/nfs_prot/nfs_prot_freebsd2.h \ + conf/nfs_prot/nfs_prot_freebsd3.h \ + conf/nfs_prot/nfs_prot_hpux.h \ + conf/nfs_prot/nfs_prot_hpux11.h \ + conf/nfs_prot/nfs_prot_irix5.h \ + conf/nfs_prot/nfs_prot_irix6.h \ + conf/nfs_prot/nfs_prot_linux.h \ + conf/nfs_prot/nfs_prot_ncr2.h \ + conf/nfs_prot/nfs_prot_nextstep.h \ + conf/nfs_prot/nfs_prot_netbsd.h \ + conf/nfs_prot/nfs_prot_netbsd1_3.h \ + conf/nfs_prot/nfs_prot_openbsd.h \ + conf/nfs_prot/nfs_prot_osf2.h \ + conf/nfs_prot/nfs_prot_osf4.h \ + conf/nfs_prot/nfs_prot_sunos3.h \ + conf/nfs_prot/nfs_prot_sunos4.h \ + conf/nfs_prot/nfs_prot_sunos5_3.h \ + conf/nfs_prot/nfs_prot_sunos5_4.h \ + conf/nfs_prot/nfs_prot_sunos5_5.h \ + conf/nfs_prot/nfs_prot_sunos5_6.h \ + conf/nfs_prot/nfs_prot_svr4.h \ + conf/nfs_prot/nfs_prot_ultrix.h \ + \ + conf/sa_dref/sa_dref_386bsd.h \ + conf/sa_dref/sa_dref_aix3.h \ + conf/sa_dref/sa_dref_aoi.h \ + conf/sa_dref/sa_dref_bsd44.h \ + conf/sa_dref/sa_dref_default.h \ + conf/sa_dref/sa_dref_isc3.h \ + conf/sa_dref/sa_dref_linux.h \ + conf/sa_dref/sa_dref_svr4.h \ + \ + conf/transp/transp_sockets.c \ + conf/transp/transp_tli.c \ + \ + conf/trap/trap_aix3.h \ + conf/trap/trap_aux.h \ + conf/trap/trap_default.h \ + conf/trap/trap_dgux.h \ + conf/trap/trap_freebsd3.h \ + conf/trap/trap_hcx.h \ + conf/trap/trap_hpux.h \ + conf/trap/trap_hpux11.h \ + conf/trap/trap_irix.h \ + conf/trap/trap_isc3.h \ + conf/trap/trap_linux.h \ + conf/trap/trap_mach3.h \ + conf/trap/trap_news4.h \ + conf/trap/trap_rtu6.h \ + conf/trap/trap_stellix.h \ + conf/trap/trap_svr4.h \ + conf/trap/trap_ultrix.h \ + \ + conf/umount/umount_bsd44.c \ + conf/umount/umount_default.c \ + conf/umount/umount_osf.c + +EXTRA_DIST_INCLUDE = \ + include/am_compat.h \ + include/am_utils.h \ + include/am_xdr_func.h \ + include/am_defs.h \ + include/amq_defs.h + +EXTRA_DIST = \ + $(EXTRA_DIST_AUX) \ + $(EXTRA_DIST_CONF) \ + $(EXTRA_DIST_INCLUDE) \ + \ + BUGS \ + MIRRORS \ + README.autofs \ + README.y2k \ + TODO \ + buildall \ + tasks + +# Personal maintainer rules by Erez Zadok +# make a snapshots and put them in the ftp snapshots directory +snapshot: dist + cp -pu am-utils*.tar.gz /proj/bank/ftp/pub/am-utils/snapshots diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..080de36 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,601 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Top level Makefile +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +SUBDIRS = \ + libamu \ + amd \ + amq \ + \ + fixmount \ + fsinfo \ + hlfsd \ + mk-amd-map \ + wire-test \ + \ + scripts \ + doc + +# temporary tests override SUBDIRS +#SUBDIRS = lib wire-test amq amd + +# additional directories to create in the distribution directory $(distdir) +# note that the order of them being listed here is important (from higher +# level directory to subdirectory, since they get created in that order). +EXTRA_DIST_DIRS = \ + aux \ + aux/macros \ + conf \ + conf/checkmount \ + conf/fh_dref \ + conf/hn_dref \ + conf/mount \ + conf/mtab \ + conf/nfs_prot \ + conf/sa_dref \ + conf/transp \ + conf/trap \ + conf/umount \ + doc \ + include \ + scripts + +# additional files to add to the distribution tar file +EXTRA_DIST_AUX = \ + aux/GNUmakefile \ + aux/acconfig.h \ + aux/acinclude.m4 \ + aux/aclocal.m4 \ + aux/amindent \ + aux/autopat \ + aux/aux_conf.h.in \ + aux/chop-aclocal.pl \ + aux/config.guess \ + aux/config.h.in \ + aux/config.sub \ + aux/configure.in \ + aux/install-sh \ + aux/ltconfig \ + aux/ltmain.sh \ + aux/mdate-sh \ + aux/missing \ + aux/mk-aclocal \ + aux/mkconf \ + aux/mkinstalldirs \ + aux/rmtspc \ + aux/stamp-h.in \ + aux/update_build_version \ + \ + aux/macros/HEADER \ + aux/macros/TRAILER \ + aux/macros/c_void_p.m4 \ + aux/macros/cache_check_dynamic.m4 \ + aux/macros/check_am_fs.m4 \ + aux/macros/check_checkmount_style.m4 \ + aux/macros/check_extern.m4 \ + aux/macros/check_fhandle.m4 \ + aux/macros/check_field.m4 \ + aux/macros/check_fs_headers.m4 \ + aux/macros/check_fs_mntent.m4 \ + aux/macros/check_hide_mount_type.m4 \ + aux/macros/check_lib2.m4 \ + aux/macros/check_lib_funcs.m4 \ + aux/macros/check_map_funcs.m4 \ + aux/macros/check_mnt2_cdfs_opt.m4 \ + aux/macros/check_mnt2_gen_opt.m4 \ + aux/macros/check_mnt2_nfs_opt.m4 \ + aux/macros/check_mnttab_file_name.m4 \ + aux/macros/check_mnttab_location.m4 \ + aux/macros/check_mnttab_opt.m4 \ + aux/macros/check_mnttab_style.m4 \ + aux/macros/check_mnttab_type.m4 \ + aux/macros/check_mount_style.m4 \ + aux/macros/check_mount_trap.m4 \ + aux/macros/check_mount_type.m4 \ + aux/macros/check_mtype_printf_type.m4 \ + aux/macros/check_mtype_type.m4 \ + aux/macros/check_network_transport_type.m4 \ + aux/macros/check_nfs_fh_dref.m4 \ + aux/macros/check_nfs_hn_dref.m4 \ + aux/macros/check_nfs_prot_headers.m4 \ + aux/macros/check_nfs_sa_dref.m4 \ + aux/macros/check_nfs_socket_connection.m4 \ + aux/macros/check_os_libs.m4 \ + aux/macros/check_restartable_signal_handler.m4 \ + aux/macros/check_umount_style.m4 \ + aux/macros/check_unmount_args.m4 \ + aux/macros/check_unmount_call.m4 \ + aux/macros/expand_cpp_hex.m4 \ + aux/macros/expand_cpp_int.m4 \ + aux/macros/expand_cpp_string.m4 \ + aux/macros/expand_run_string.m4 \ + aux/macros/extern_optarg.m4 \ + aux/macros/extern_sys_errlist.m4 \ + aux/macros/field_mntent_t_mnt_time_string.m4 \ + aux/macros/func_bad_memcmp.m4 \ + aux/macros/func_bad_yp_all.m4 \ + aux/macros/host_macros.m4 \ + aux/macros/localconfig.m4 \ + aux/macros/mount_headers.m4 \ + aux/macros/msg.m4 \ + aux/macros/name_package.m4 \ + aux/macros/name_version.m4 \ + aux/macros/opt_amu_cflags.m4 \ + aux/macros/opt_amq_mount.m4 \ + aux/macros/opt_cppflags.m4 \ + aux/macros/opt_debug.m4 \ + aux/macros/opt_ldflags.m4 \ + aux/macros/opt_libs.m4 \ + aux/macros/os_cflags.m4 \ + aux/macros/os_cppflags.m4 \ + aux/macros/os_ldflags.m4 \ + aux/macros/save_state.m4 \ + aux/macros/struct_field_nfs_fh.m4 \ + aux/macros/struct_mntent.m4 \ + aux/macros/struct_mnttab.m4 \ + aux/macros/struct_nfs_args.m4 \ + aux/macros/struct_nfs_fh.m4 \ + aux/macros/struct_nfs_fh3.m4 \ + aux/macros/struct_nfs_gfs_mount.m4 \ + aux/macros/struct_nfs_mount_data.m4 \ + aux/macros/try_compile_anyfs.m4 \ + aux/macros/try_compile_nfs.m4 \ + aux/macros/try_compile_rpc.m4 \ + aux/macros/type_auth_create_gidlist.m4 \ + aux/macros/type_autofs_args.m4 \ + aux/macros/type_cachefs_args.m4 \ + aux/macros/type_cdfs_args.m4 \ + aux/macros/type_efs_args.m4 \ + aux/macros/type_lofs_args.m4 \ + aux/macros/type_mfs_args.m4 \ + aux/macros/type_pcfs_args.m4 \ + aux/macros/type_recvfrom_fromlen.m4 \ + aux/macros/type_rfs_args.m4 \ + aux/macros/type_svc_in_arg.m4 \ + aux/macros/type_time_t.m4 \ + aux/macros/type_tmpfs_args.m4 \ + aux/macros/type_ufs_args.m4 \ + aux/macros/type_xdrproc_t.m4 \ + aux/macros/type_xfs_args.m4 \ + aux/macros/type_yp_order_outorder.m4 +# aux/aclocal \ + +EXTRA_DIST_CONF = \ + conf/checkmount/checkmount_aix.c \ + conf/checkmount/checkmount_bsd44.c \ + conf/checkmount/checkmount_default.c \ + conf/checkmount/checkmount_osf.c \ + conf/checkmount/checkmount_svr4.c \ + conf/checkmount/checkmount_ultrix.c \ + \ + conf/fh_dref/fh_dref_aix3.h \ + conf/fh_dref/fh_dref_aix42.h \ + conf/fh_dref/fh_dref_bsd44.h \ + conf/fh_dref/fh_dref_default.h \ + conf/fh_dref/fh_dref_freebsd22.h \ + conf/fh_dref/fh_dref_hpux.h \ + conf/fh_dref/fh_dref_irix.h \ + conf/fh_dref/fh_dref_isc3.h \ + conf/fh_dref/fh_dref_linux.h \ + conf/fh_dref/fh_dref_nextstep.h \ + conf/fh_dref/fh_dref_osf2.h \ + conf/fh_dref/fh_dref_osf4.h \ + conf/fh_dref/fh_dref_sunos3.h \ + conf/fh_dref/fh_dref_sunos4.h \ + conf/fh_dref/fh_dref_svr4.h \ + \ + conf/hn_dref/hn_dref_default.h \ + conf/hn_dref/hn_dref_isc3.h \ + conf/hn_dref/hn_dref_linux.h \ + \ + conf/mount/mount_aix.c \ + conf/mount/mount_bsdi3.c \ + conf/mount/mount_freebsd3.c \ + conf/mount/mount_hpux.c \ + conf/mount/mount_irix5.c \ + conf/mount/mount_irix6.c \ + conf/mount/mount_isc3.c \ + conf/mount/mount_linux.c \ + conf/mount/mount_mach3.c \ + conf/mount/mount_stellix.c \ + conf/mount/mount_svr4.c \ + \ + conf/mtab/mtab_aix.c \ + conf/mtab/mtab_bsd.c \ + conf/mtab/mtab_file.c \ + conf/mtab/mtab_isc3.c \ + conf/mtab/mtab_mach3.c \ + conf/mtab/mtab_osf.c \ + conf/mtab/mtab_svr4.c \ + conf/mtab/mtab_ultrix.c \ + \ + conf/nfs_prot/nfs_prot_aix3.h \ + conf/nfs_prot/nfs_prot_aix4.h \ + conf/nfs_prot/nfs_prot_aix4_2.h \ + conf/nfs_prot/nfs_prot_bsdi2.h \ + conf/nfs_prot/nfs_prot_bsdi3.h \ + conf/nfs_prot/nfs_prot_default.h \ + conf/nfs_prot/nfs_prot_freebsd2.h \ + conf/nfs_prot/nfs_prot_freebsd3.h \ + conf/nfs_prot/nfs_prot_hpux.h \ + conf/nfs_prot/nfs_prot_hpux11.h \ + conf/nfs_prot/nfs_prot_irix5.h \ + conf/nfs_prot/nfs_prot_irix6.h \ + conf/nfs_prot/nfs_prot_linux.h \ + conf/nfs_prot/nfs_prot_ncr2.h \ + conf/nfs_prot/nfs_prot_nextstep.h \ + conf/nfs_prot/nfs_prot_netbsd.h \ + conf/nfs_prot/nfs_prot_netbsd1_3.h \ + conf/nfs_prot/nfs_prot_openbsd.h \ + conf/nfs_prot/nfs_prot_osf2.h \ + conf/nfs_prot/nfs_prot_osf4.h \ + conf/nfs_prot/nfs_prot_sunos3.h \ + conf/nfs_prot/nfs_prot_sunos4.h \ + conf/nfs_prot/nfs_prot_sunos5_3.h \ + conf/nfs_prot/nfs_prot_sunos5_4.h \ + conf/nfs_prot/nfs_prot_sunos5_5.h \ + conf/nfs_prot/nfs_prot_sunos5_6.h \ + conf/nfs_prot/nfs_prot_svr4.h \ + conf/nfs_prot/nfs_prot_ultrix.h \ + \ + conf/sa_dref/sa_dref_386bsd.h \ + conf/sa_dref/sa_dref_aix3.h \ + conf/sa_dref/sa_dref_aoi.h \ + conf/sa_dref/sa_dref_bsd44.h \ + conf/sa_dref/sa_dref_default.h \ + conf/sa_dref/sa_dref_isc3.h \ + conf/sa_dref/sa_dref_linux.h \ + conf/sa_dref/sa_dref_svr4.h \ + \ + conf/transp/transp_sockets.c \ + conf/transp/transp_tli.c \ + \ + conf/trap/trap_aix3.h \ + conf/trap/trap_aux.h \ + conf/trap/trap_default.h \ + conf/trap/trap_dgux.h \ + conf/trap/trap_freebsd3.h \ + conf/trap/trap_hcx.h \ + conf/trap/trap_hpux.h \ + conf/trap/trap_hpux11.h \ + conf/trap/trap_irix.h \ + conf/trap/trap_isc3.h \ + conf/trap/trap_linux.h \ + conf/trap/trap_mach3.h \ + conf/trap/trap_news4.h \ + conf/trap/trap_rtu6.h \ + conf/trap/trap_stellix.h \ + conf/trap/trap_svr4.h \ + conf/trap/trap_ultrix.h \ + \ + conf/umount/umount_bsd44.c \ + conf/umount/umount_default.c \ + conf/umount/umount_osf.c + +EXTRA_DIST_INCLUDE = \ + include/am_compat.h \ + include/am_utils.h \ + include/am_xdr_func.h \ + include/am_defs.h \ + include/amq_defs.h + +EXTRA_DIST = \ + $(EXTRA_DIST_AUX) \ + $(EXTRA_DIST_CONF) \ + $(EXTRA_DIST_INCLUDE) \ + \ + BUGS \ + MIRRORS \ + README.autofs \ + README.y2k \ + TODO \ + buildall \ + tasks +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = aux_conf.h +DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ +Makefile.in NEWS TODO aux/aux_conf.h.in configure + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +all: all-recursive-am all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +config.status: $(srcdir)/configure + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/./aux/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) +aux_conf.h: $(top_builddir)/config.status $(top_srcdir)/aux/aux_conf.h.in + cd $(top_builddir) && CONFIG_FILES=$@:$(top_srcdir)/aux/aux_conf.h.in CONFIG_HEADERS= ./config.status + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + target=`echo $@ | sed s/-recursive//`; \ + echo "Making $$target in $$subdir"; \ + (cd $$subdir && $(MAKE) $$target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + done; \ + for subdir in $$rev; do \ + target=`echo $@ | sed s/-recursive//`; \ + echo "Making $$target in $$subdir"; \ + (cd $$subdir && $(MAKE) $$target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + (cd $$subdir && $(MAKE) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) \ + && $(MAKE) dvi \ + && $(MAKE) check \ + && $(MAKE) install \ + && $(MAKE) installcheck \ + && $(MAKE) dist + -rm -rf $(distdir) + @echo "========================"; \ + echo "$(distdir).tar.gz is ready for distribution"; \ + echo "========================" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + $(mkinstalldirs) $(distdir)/aux $(distdir)/aux/macros \ + $(distdir)/conf/checkmount $(distdir)/conf/fh_dref \ + $(distdir)/conf/hn_dref $(distdir)/conf/mount \ + $(distdir)/conf/mtab $(distdir)/conf/nfs_prot \ + $(distdir)/conf/sa_dref $(distdir)/conf/transp \ + $(distdir)/conf/trap $(distdir)/conf/umount \ + $(distdir)/include + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done + for subdir in $(SUBDIRS); do \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + done +info: info-recursive +dvi: dvi-recursive +check: all-am + $(MAKE) check-recursive +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) all-recursive + +all-am: Makefile config.h + +install-exec: install-exec-recursive + @$(NORMAL_INSTALL) + +install-data: install-data-recursive + @$(NORMAL_INSTALL) + +install: install-recursive + @: + +uninstall: uninstall-recursive + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: installdirs-recursive + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +clean-am: clean-tags clean-generic mostlyclean-am + +distclean-am: distclean-tags distclean-generic clean-am + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + +mostlyclean: mostlyclean-recursive mostlyclean-am + +clean: clean-recursive clean-am + +distclean: distclean-recursive distclean-am + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-recursive maintainer-clean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + -rm -f config.status + +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck all-recursive-am all-am install-exec install-data install \ +uninstall all installdirs mostlyclean-generic distclean-generic \ +clean-generic maintainer-clean-generic clean mostlyclean distclean \ +maintainer-clean + + +# Personal maintainer rules by Erez Zadok +# make a snapshots and put them in the ftp snapshots directory +snapshot: dist + cp -pu am-utils*.tar.gz /proj/bank/ftp/pub/am-utils/snapshots + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e56d47d --- /dev/null +++ b/NEWS @@ -0,0 +1,644 @@ +*** Notes specific to am-utils version 6.0b1: + +- updated or minor new ports: + - *-pc-linux-gnu (glibc2 systems such as RedHat 5.1) + - sparc-sun-solaris2.7 + - i386-pc-solaris2.7 + - i386-unknown-freebsd3.0 (official release, post 4.4lite port) + - sparc64-unknown-linux-gnu (RH 5.1 on Sun Sparc Ultra) + +- bugs fixed: + - major memory leak in processing of /defaults + - core dump if map_type given in amd.conf doesn't exist + - memory leak in replacement yp_all + - don't access uninitialized memory in DU 4.0 + - other smaller bugs, see ChangeLog + +*** Notes specific to am-utils version 6.0a16: + +- new ports: + hppa1.0-hp-hpux11.00 (works, not NFS V.3 due to missing headers) + mips-dec-ultrix4.3 (working, unverified) + +- new minor ports: + i386-pc-bsdi3.1 + i386-unknown-netbsd1.3.1 + alpha-dec-osf2.1 + +- new options addopt:=ARG will "smartly" add and override options specified +in opts:= + +- new amd.conf options: + pid_file: specifies the file to store the PID + hesiod_base: specifies the base for the Hesiod service + unmount_on_exit: if 'yes' will attempt to unmount all file systems + when amd exits. + +- amd.conf file is parsed after all other command line options. If no +options specified at all, then use /etc/amd.conf by default. + +- some variables' values are now compared case-insensitive as per specs, +such as host names, domain names, and more. + +- NIS service uses a new isup() function to detect if the service is up +before using it. Used to ensure amd doesn't clear the existing maps before +reloading them, unless the remote info service is working. + +- new cdfs mount options: rrip, noversion, defperm, nodefperm (OSF) + +- support efs/xfs separately on irix + +- new -D info trace option to turn on info specific debugging, such as +RES_DEBUG for hesiod services. + +- document updates and fixes + +- new file MIRRORS lists official mirror sites (also in am-utils home page) + +- new file BUGS lists known amd/OS bugs + +- source restructuring: rename all Amd file-systems' sources to amfs_ARG.c +such that it matches the type:=ARG as well. Free names afs/dfs for Andrew +F/S and Distributed F/S. + +- checkpoint config.guess several times during the long configure, so that +if it is aborted midway, the bulk of the features discovered will be re-read +from the config.cache file. + +- more systems support shared libraries (libtool 1.2) + +- using automake 1.3 + more fixes + +- bugs fixed: + use dynamic buffer for list of interfaces, not fixed size + output of amd -H duplicated if >2 interfaces + -D mem for hlfsd not on by default (so it will daemonize) + linux looks for ext2fs before ufs + CDFS looks for 'isofs' mount type as well + compile on Solaris 2.6 with /opt/SUNWspro/bin/cc + various additional fixes which gcc 2.8.x reported + print syslog help string based on what's supported + correctly ignore loopback interface on SunOS 3.x + don't use -lucb for strcasecmp + hlfsd's dump file securely written in /usr/tmp/hlfsd.dump.XXXXXX + inherit NFS V.3 mounts correctly + write pid file securely + +*** Notes specific to am-utils version 6.0a15: + +- new ports: + alpha-unknown-linux-gnu: works + i386-unknown-netbsd1.3: fully working + *-sun-sunos3: compiles, not tested + +- updated ports: + m68k-next-nextstep3: cleaner compile, works. + +- new file system type nfsl (NFS Link). Uses nfs if file system is remote, +and link if it is local (based on if $rhost equals the host name). + +- support for Solaris cachefs. Requires setting fs, rfs, and a new variable +cachedir. See documentation for explanation, examples, and caveats. + +- support negated selector functions such as !exists(/foo/bar) + +- wire, network, netnumber, in_network() selectors now match against all +locally attached networks (by either name or number), not just the first two +interfaces. + +- new program pawd (and man page for it) --- Print Automounter Working +Directory, to print the proper pathname of the cwd or any other pathname, +adjusted for automounter paths, while avoiding mount points. + +- two new switches to amq: -U will force using UDP only; -T will force using +only TCP to communicate with amd. If neither (or both) are specified, amq +will try TCP first, and if that failed, will try UDP. + +- support syslog facilities, using "amd -l syslog:facility". Old behavior +when using only -l syslog is to use the LOG_DAEMON facility. + +- you may specify browsable_dirs=full, to get a listing of all entries +(other than /default), including those with '*' wildcard and '/' +characters. + +- amd -D trace now also includes as much of struct nfs_args as can be +displayed. Useful in figuring out what the kernel really gets during a +mount(2), as opposed to what the /etc/mnttab file says. -D trace also +traces the xdr_* functions. + +- support for versions of shared libamu version. upped version from 0.0.0 +to 1.0.0. each am-utils release that will change the library will also +update its version. + +- amd/ops_TEMPLATE.c: a new template file for those brave enough to try and +implement a new amd file system. Includes comments and other info useful +for developers. + +- if localconfig.h exists in the current directory during the run of +configure, it is included in all am-utils sources. This allows courageous +developers to make certain modifications during compilations, and especially +turn off undesired features (not very recommended). + +- documentation types and updates for all new features, ports, etc. + +- bugs fixed: + support NFS mount options grpid and maxgrps + nextstep: set NFS success code to 0 (NFS_OK), not 1 (EPERM) + bsdi2: set NFS success code to 0 (NFS_OK), not 1 (EPERM) + set NFS V.3 mount table names to "nfs" if vers/proto exist + use mkstemp() if possible (more secure) + ctl-amd looks for amd.conf in ${prefix}/etc after /etc + hpux: use "ignore" mount table type + openbsd2.2: turn off "noconn" mount option, so only connected used + fixed memory leak in hlfsd (don't setpwent after endpwent) + all NFS3 systems should have proto/vers mount/amd options + DEBUG_MEM compiles and prints something more useful + uninit_mntfs(): free() mf_private *after* it is used + browsable_readdir: fewer bytes sent back to kernel for each chunk + mount_toplvl: don't free() an automatic variable! + amd should chdir() to / before daemonzing (for core dumps etc) + cdfs should be called 'cdfs' not whatever the mnttab type is + amd -v: don't print "FS:" list twice when >=2 net interfaces + +*** Notes specific to am-utils version 6.0a14: + +- updated ports: + powerpc-ibm-aix4.2.1.0: NFS V.3 works + +- minor new ports: + sparc-sun-sunos4.1.3C + m68k-sun-sunos4.1.1 (sun3) + mips-sgi-irix5.2 + +- new option to amd, -O ARG, will override the operating systems *name* with +ARG. Corrected documentation for amd -o ARG --- it overrides the operating +system *version* and not the name as the docs incorrectly stated. + +- logging now behave more like syslog: will not print repeated strings, but +rather a count such as "last message repeated N times". (N will not exceed +100.) + +- restructured the code which deals with the numerous possible fields and +flags that are set in struct nfs_args. That code was moved to libamu as +the functions compute_nfs_args() and compute_automounter_nfs_args(). + +- bugs fixed: + mnttab name ufs/cdfs/pcfs/etc filesystems corrected + use pmap_ping for amq (a must for secure portmappers, bsdi2/3) + test for xfs (irix) as a disk-based filesystem + set correct nfs_prot headers for Solaris 2.5 + removed stale code from lostaltmail.in + lostaltmail will look for conf file in multiple locations + assorted documentation corrections + amq does not print "get_secure_amd_client" if run as root + +*** Notes specific to am-utils version 6.0a13: + +- new in_network(ARG) nomadic selector, true if ARG is the name (or number) +of any of this host's network interfaces. + +- removed variables primnetname, primnetnum, subsnetname, and subsnetnum. +(Kept "wire" and its alias "network", and "netnumber".) + +- include am-utils.dvi and am-utils.ps in distribution. + +- hlfsd supports new option -P ARG, for reading password map off of file +ARG. Allows you to use the hlfs redirector using paths other than user's +home directories. + +- use a replacement yp_all for some systems (irix) known to have a broken +one which leaks a file descriptor each time called. + +- if remote NFS server is down or does not support portmap, downgrade +machine to NFS V.2 and retry again later. + +- bugs: + don't redefine yywrap on systems using a modified flex + use correct "ignore" mnttab/mount option on hpux for df(1) + use nfs_args' fsname field (hpux) to avoid syncer/mount(1) problems + don't add ops_ufs.o twice to Makefile's $(OBJS) + don't fail if autofs listener fails to initialize + hlfsd should test if run as root after usage() and getopt + +- minor code cleanups for netbsd + +- html docs now in http://www.cs.columbia.edu/~ezk/am-utils/ + +- added README file in binaries ftp directory + +*** Notes specific to am-utils version 6.0a12: + +- minor or updated/broken ports fixed: + hppa1.1-hp-hpux10.10: compiles, untested (probably works). + hppa1.1-hp-hpux9.05: compiles, untested (probably works). + hppa1.1-hp-hpux9.07: compiles, untested (probably works). + m68k-hp-hpux9.00: compiles, untested (probably works). + rs6000-ibm-aix4.1.4.0: compiles, untested. + sparc-sun-solaris2.6: works w/ NFS V.3. + sparc-sun-sunos4.1.4: compiles, untested (probably works). + +- new ports: + powerpc-ibm-aix4.2.1.0: compiles w/ NFS V.3, untested. + +- wire-test also checks for combinations of NFS protocol/version from the +client to a remote (or local) host. + +- conf/mtab/mtab_file.c: use flock() to lock the file, and fcntl() if +flock() is not available. (Used to prefer fcntl() over flock().) + +- bug fixes: + tli get_nfs_version() gets into an infinite loop + tli get_nfs_version() should time out faster + sockets get_nfs_version() should work w/ secure portmappers + ESTALE returned for NFS mounts for SunOS 4.x fixed + do not exceed HOSTNAMESZ for nfs_args.hostname (get ENAMETOOLONG) + properly initialize some mntent_t fields (fsck, freq, mnt_time) + properly initialize some pcfs_args fields (mask, uid, gid) + properly initialize some cdfs_args fields (ssector) + +*** Notes specific to am-utils version 6.0a11: + +- bug fixes: + amd could not NFS mount v.2 servers from v.3 clients + hlfsd will only use first occurrence of home dir for same uid + +*** Notes specific to am-utils version 6.0a10: + +- MAJOR DOCUMENTATION UPDATE! (first time in 6 years) + +- new ports: + m68k-next-nextstep3: configures, compiles, not tested. + +- preliminary autofs support. See README.autofs for details. + +- new amd.conf [global] yes/no keywords: + show_statfs_entries: shows number of entries for df(1) + fully_qualified_hosts: use FQHN for NFS/RPC authentication + +- detect down remote hosts faster + +- log output of "amd -v" at startup + +- removed $osver override for solaris: now it is 2.5.1, not 5.5.1 + +- buildall will use gmake first if available + +- bugs fixed: + amd core dumped when remote host was down + allow up to 1024 entries back from readdir() + amd.conf works even if only [global] option defined + avoid using bad memcmp() implementations + fixed meaning of plock [global] option (was reversed) + hlfsd infinite loop unless compiled with --enable-debug + NIS code works with NIS+ servers in NIS compatibility mode + reset tag fields in amd.conf so they don't carry to other entries + +*** Notes specific to am-utils version 6.0a9: + +- new ports: + sparc-sun-solaris2.4: + configures/compiles, and runs (no NFS V3) + i386-unknown-openbsd2.1: + configures/compiles, runs (NFS V3) + +- updated ports: + i486-ncr-sysv4.3.03: configures/compiles, not tested + +- Multiple amd support: new amd.conf [global] key "portmap_program" can be +used to specify an alternate RPC program number for amd to un/register. +Allowed numbers range from 300019 to 300029. A matching new option for amq: +-P prognum, will use an alternate program number to contact. + +- man pages: + amd.conf.5 new + mk-amd-map.8 new + amd.8 updated + amq.8 updated + (other man pages required minor updates) + +- shared libraries support expanded. Using GNU libtool-1.0. You can build +a shared version of libamu, and link with it accordingly, by specifying +--enable-shared to configure. Default is --enable-static --disable-shared, +and you can mix and match. See "INSTALL" file for listing of systems on +which shared libraries seem to build and work fine. + +- new option: amq -p, will return the PID of the running amd (local or +remote). Uses a new RPC message. Useful especially in "ctl-amd stop". + +- new configure script options --enable-ldflags, for specifying -L flags. +The older --enable-libs is to be used only for -l options. + +- two new LDAP map options for amd.conf: ldap_cache_seconds and +ldap_cache_maxmem. + +- new script, am-eject from Debian linux's version of amd-upl102. + +- additional passwd map support using var[0-3], from Debian folks. + +- hesiod code cleanup. works for hesiod 1.3 as well as 3.0. + +- removed defunct -h option from amd. + +- started using automake-1.2. This fixed several bugs that caused some +versions of yacc/lex and non-GNU make to fail. + +- bug fixes: + amd/hlfsd mounts should be hidden from df(1) + use "noconn" option for nfs mounts (multi-homed hosts) + don't use connected sockets on linux before 1.3.10 (from Debian) + better checks for [gn]dbm + forbid excessive retries after timeouts (from Debian) + readdir(): don't skip over map entries with prefix, and include it + more assorted linux fixes from Debian folks + lofs mount on svr4 was broken + find default value of $karch from uname() not $arch + hlfsd failed to mount itself on some little-endians + + +*** Notes specific to am-utils version 6.0a8: + +- new ports: + i386-unknown-netbsd1.2.1: configures/compiles (with NFS V.3), works, + but some OS stability problems exist. + +- updated ports: + hppa1.1-hp-hpux9.01: + now tested and working + rs6000-ibm-aix3.2 and rs6000-ibm-aix3.2.5: + now tested and working + +- fixed browsable directories (readdir) code. + +- better methods to find amd/hlfsd pid to kill in ctl-{amd,hlfsd} + +- "ignore/auto" mount types fixed for irix, sunos, and others, so "df" does not +show amd mounts by default (but GNU df -a does). + +- each time amd is built, a new "build" version is incremented. See amd -v. + +- man page for fsinfo added + +- empty fillers for new file (bsd44) systems: nullfs, unionfs, umapfs. + +- when amd is not running, or portmapper is down, make amq timeout faster (5 +sec) than system default, usually 4-5 minutes. + +- bug fixes: + hlfsd mount got "protocol not supported" + first regular map in amd.conf didn't inherit global options + make "bad" versions of lex still work with amd/conf_parse.l + check for 'nodev' option, not 'nondev' + typo in "ro" option, and fillers to ac{reg,dir}{min,max} and others + amd.conf parsing done before switching default log/debug options + allow doubly-quoted values in amd.conf + hesiod-reload code cleanup + +- assorted code cleanup + + +*** Notes specific to am-utils version 6.0a7: + +- new ports: + i386-unknown-freebsd3.0: + fully functional with NFS V.3 + sparc-sun-solaris2.3: + fully functional (should work for 2.4) + sparc-unknown-netbsd1.2E: + configures/compiles (with NFS V.3), untested + +- updated ports: + i386-pc-bsdi3.0: + NFS V.3 works + look for hesiod in libc + mips-sgi-irix5.3: + fully functional with NFS V.3 + +- LDAP support! New [global] amd.conf options ldap_base and ldap_hostports. +Also includes a new script amd2ldif to convert amd maps into plain text LDAP +object files. + +- the following amd.conf variables: browsable_dirs, map_options, map_type, +mount_type, and search_path --- can now be specified in [global] as well as +the map entry itself. That way you can declare them only once in [global], +and override them as needed per map. + +- option "cluster" added to [global] (HPUX clusters ala "amd -C"). + +- assorted info_hesiod map fixes and cleanup. removed HESIOD_RELOAD code. + +- added netgrp(name) function to amd map syntax to see if current host is in +the netgroup. + +- removed unused option "amd -m". + +- filled in "tasks" file with todo items. + +- filled "COPYING" file with legal stuff. + +- cleanup: all global variables are now in one big structure (struct +amu_global_options) that's easy to identify and enhance. Also migrated +several flags that used be an integer each into one unsigned integer that's +used as a bit-flag. + +- big fixes: + xdr_mountres3 should compile only if has NFS V3 + lex/yacc macros show full pathname (to tell if correct one runs) + misc fixes/cleanup + + +*** Notes specific to am-utils version 6.0a6: + +- amd configuration file! + +See scripts/amd.conf-sample for help and some explanation. This new conf +file allows for the following new features: + + default selectors can be turned on/off globally. + browsable_dirs/readdir() support can be turned on per map. + search paths for file type maps. + can force the map type to file, nis, ndbm, etc. rather than default + to looking at all of them. + tag each map for "amd -T tag", useful for grouping maps. + can override $os and others (so if you don't like "sunos5" default + naming, set os=sos5 and it will work with your old maps). + and more goodies... + +- enable-default-selectors: No longer turned on by the configure script or +optionally compiled. Code made dynamic and can be turned on or off from the +amd.conf file. This code is off by default, and must be turned on by +amd.conf's [global] section. + +- new ports: + mips-sgi-irix5.3: configure/compile, not tested + i486-ncr-sysv4.3.03: configure/compile, not tested + +- updated ports: + alpha-dec-osf4.0: major code redone + sparc-sun-sunos4.1.3: fixed and working + mips-sgi-irix6.2: tested with gcc and "cc -32 -Wl,-woff,84" + mips-sgi-irix6.4: tested with gcc and "cc -32 -Wl,-woff,84" + +- better NFS3 port, including more support for proto= and vers=, and +automatic determination of proto/vers combination. + +- conf/nfs_prot/nfs_prot_*.h: all of the NFS protocol header files had to be +redone, because of the osf4 port. OSF used very different names for these, +and they conflicted with am-utils'. The only solution was to more or less +conform to OSF4's naming, and change all the others. + +- ctl-amd script: + improved to look for amd.conf in $prefix/etc and /etc + better methods for finding the pid of amd to kill + +- autoconf support for LDAP. amd/info_ldap.c needs to be written. + +- wire-test also reports the local IP address. Some systems have multiple, +buggy version of get_myaddress(), esp. SunOS and Irix. Note that Solaris +x86 has a buggy htonl(). + +- amd -H prints usage. + +- bugs fixed: + minor TLI problem in fwd_socket + mount options properly comma delimited + LIBS is set only to the right set of libraries to include + selectors-on-default code ignored last selector ent in /defaults + assorted code cleanups + + +*** Notes specific to am-utils version 6.0a5: + +- NFS Version 3 support!!! + + Works on Solaris 2.5.1. + Minimal testing done on Irix 6. + Compiles cleanly on DU-4.0 but no tests performed. + +Will fall back to V2 mounts when V3 is not available. Will also use TCP if +possible, UDP otherwise. + +- Ports to new platforms: + + alpha-dec-osf4.0 (not tested) + i386-pc-bsdi3.0 (tested and working) + i386-unknown-freebsd2.2.1 (tested and working) + sparc-unknown-linux-gnu (tested and working) + +- New scripts added: + + amd2sun: convert amd maps to Sun automount maps + ctl-amd: script to start/stop/restart amd + ctl-hlfsd: script to start/stop/restart hlfsd + expn: expand mail alias (used by hlfsd) + lostaltmail: redeliver "lost" mail redirected by hlfsd + lostaltmail.conf-sample: sample conf file for lostaltmail + wait4amd: run a command once amd is up on a host + wait4amd2die: wait for an amd process to die before returning + +- "amd -v" now includes more info and "amq -v" lists all of it. + +- new parser for linux specific mount options. + +- Main bugs fixed: + + "new toplvl readdir" bug caused amd to dump core + handler for SIGCHLD didn't check for all possible children + hlfsd leaking file descriptors when home file system was full + cdfs/pcfs mounts should not timeout by default + hesiod domain names should be compared in case-insensitive manner + several printfs in amq were missing \n + + +*** Notes specific to am-utils version 6.0a4: + +- amd services both TCP and UDP amq requests. This will help because of the +limited UDP message size. + +- "amq -M" code is disabled by default because it is insecure. It is +rarely used. Users who wish to use it should run +"configure --enable-amq-mount". + + +*** Notes specific to am-utils version 6.0a3: + +- New tested ports (configures, compiles, and runs): + + i386-unknown-freebsd2.2 + +- New ports (configures and compiles correctly, not tested): + + rs6000-ibm-aix3.2.5 + rs6000-ibm-aix4.1.5.0 + +- More am-utils programs ported to all existing platforms: hlfsd, fsinfo, +mk-amd-map, and fixmount. + +- Shared libraries: a new configure option --enable-shared will build a +shared libamu.so, link applications with it, and use it. Reduces binary +sizes by 20-30%. This is the first step towards loadable modules, as many +changes had to be done to be able to compile and use PIC code. This is code +that obviously needs to be generalized to be able to build shared libraries +on many other platforms. It was only tested on Solaris 5.5.1. + +- the file INSTALL contains the latest compatibility table of which +platforms am-utils configures, compiles and runs on. + +- Trimmed down the size of the configure script. Some tests that are not +used anywhere were removed. + + +*** Notes specific to am-utils version 6.0a2: + +- New ports (configures and compiles correctly, not tested): + + i386-pc-bsdi2.1 + hppa1.1-hp-hpux9.01 + hppa1.1-hp-hpux10.20 + +- new configure options: + + --enable-cppflags[=ARG] + configure/compile with ARG (-I) preprocessor flags + --enable-libs[=ARG] + configure/compile with ARG (-L/-l) library flags + +- filesystem, mount table entries, and mount type tests can now look in +/lib/modules and /proc/filesystems for statically/dyadically loadable kernel +modules (linux) + +- prefer vfat over msdos/pc/etc filesystem for PCFS. + +- moved all fixed headers to include/am_defs. Left only #define/#undef +entries in aux/acconfig.h. + +- make more sense of systems that have full, partial, or no NFS protocol +headers. + +- minor fixes for NetBSD (untested platform). + +- hesiod map fixed. + +- buildall -D: new option to run even stricter developer options. + +- lots of other bugs fixed (see ChangeLog). + + +*** Notes specific to am-utils version 6.0a1: + +I have it configure and build correctly for the following systems: + + i386-pc-solaris2.5.1 + i386-unknown-freebsd2.1.0 + mips-sgi-irix6.2 + sparc-sun-solaris2.5.1 + sparc-sun-sunos4.1.3 + +Amq, wire-test, and "amd -v" work on all of the above. A real running amd +was only tested and confirmed working on + + i386-pc-solaris2.5.1 + sparc-sun-solaris2.5.1 + +Many things are still missing: options, features, etc. But for now, let's +concentrate on getting the basic functionality working on the more popular +systems. diff --git a/README b/README new file mode 100644 index 0000000..99cddc6 --- /dev/null +++ b/README @@ -0,0 +1,105 @@ +# -*- text -*- + +This is a BETA version of am-utils. + +See the file NEWS for news on this and previous releases. + +*** General Notes to alpha testers: + +[A] an an alpha testers, I expect you to be able to find certain things on +your own (especially look at the sources to figure out how things work). + +[B] if you intend to modify any files, first find out if the file you want +to modify gets autogenerated from some other place. If so, modify it at the +source. + +You can adjust some of the configuration of am-utils after it has been +auto-configured by putting whatever definitions you wish in a file called +localconfig.h, located in the top build directory (the same one where +config.h is created for you). + +[C] there are several ways you can build am-utils: + +(1) run the buildall script as follows: + + ./buildall + +This would build all the applications inside a special directory relative to +the root of the source tree, called A., where the <> +part is filled in by GNU's config.guess script. This is the preferred +method, for it will separate the build from the sources, and allow you to +run buildall for multiple architectures concurrently. + +You can run "buildall -h" to see what options it takes. + +(2) run the configure script such as: + + ./configure + +and then run + + make + +This would configure amd in the directory you've run the configure script +in, and the built it there. Run "make install" to install all the necessary +files. + +Note that this is good for building only one version of amd on one +architecture! Don't try this for multiple architectures. If you must, then +after doing one such build, run "make distclean" and then reconfigure for +another architecture. + +(3) run the configure script for build in a different location. Let's say +that /src/am-utils-6.0 is where you unpacked the sources. So you could + + mkdir /src/build/sunos5 + cd /src/build/sunos5 + /src/am-utils-6.0/configure --srcdir=/src/am-utils-6.0 + make + +This is a manual method that will let you build in any directory outside the +am-utils source tree. It requires that your "make" program understand +VPATH. This can be used multiple times to build am-utils concurrently in +multiple (but different) directories. In fact, the buildall script +described above. + +(4) If you need to configure am-utils with extra libraries and/or headers, +for example to add hesiod support, do so as follows: + + configure --enable-libs="-lhesiod -lresolv" \ + --enable-ldflags="-L/usr/local/hesiod/lib" \ + --enable-cppflags="-I/usr/local/hesiod/include" + +[D] If you modify any of the *.[chyl] sources in the directories amd, amq, +hlfsd, lib, etc, all you need to do to get a new version of am-utils is run +make. + +If you modify any of the files in the aux/ or conf/ directories, then you +must rebuild the configure script, Makefile.in files, aclocal.m4, etc. The +best way to do so is to run + + ./aux/mkconf +or + ./buildall -K + +To be a developer and be able to run mkconf, you must have autoconf-2.12, +GNU make-3.75 or later, and automake-1.2 (plus my fixes to it) installed on +your system. You may find my version of automake-1.2 where you ftp'ed this +version of am-utils. You may also need GNU libtool 1.0. + +After you've remade the basic configuration files you must rerun the +buildall script to rerun configure and then remake the binaries. + +Modifying M4 macros may not be very intuitive to anyone that has not done so +before. Let me know if you are having any problems with them. I fully +expect, at least initially, to have to be the sole developers of the M4 +macros and let others concentrate on C sources. + +[E] Report all bugs to amd-dev@majordomo.cs.columbia.edu. Avoid reporting +to my personal email address. It is important to involve the whole list in +bug fixes etc. + +Good luck. + +Erez Zadok, +Maintainer, am-utils. diff --git a/README.autofs b/README.autofs new file mode 100644 index 0000000..f553e5d --- /dev/null +++ b/README.autofs @@ -0,0 +1,113 @@ +# -*- text -*- +# This file is README.autofs +# am-utils-6.0 +# Erez Zadok +# + +** General notes about the autofs support in am-utils + +The autofs code in am-utils is VERY much pre-alpha quality! + +* Caveats: + +- amd acts as *both* /usr/lib/autofs/automountd and /usr/sbin/automount. +There's no way to distinguish the two. When amd starts, it first registers +itself as an autofs server (automountd), then parses its maps, and decides +on which autofs type mounts to make (automount does that). After the autofs +mounts are made, amd listens for RPCs from the kernel-based autofs, and acts +upon them. + +- I only tested it under Solaris 2.5.1 (sparc). Don't expect irix/linux +autofs support any time soon. Also, the autofs API in Solaris 2.6 is very +different from 2.5.1; for now, am-utils does not even compile in the autofs +code in Solaris 2.6. + +- I did not test mixed autofs and normal amd mount points in the same +amd.conf file, but it should work. + +- I tested it as a separate amd process, which registered under an alternate +RPC number (300020). (The multiple amd-support available in a9 really saved +the day.) + +- I did not test amd running autofs mounts while Sun's automounter is +running. I don't expect the interaction between the two to be good for your +health. + +* amd.conf requirements: + +To tell amd to use an autofs-style mount point and mounts for a map, turn on + + mount_type = autofs + +in the map sections you wish. + +* Map changes: + +I used this sample map for testing autofs: + +# /home map +ezk -rhost:=shekel;opts:=rw,intr,bg,overlay;fs:=${path} \ + host!=shekel;type:=nfs;rfs:=/n/shekel/u/zing/${key} \ + host==shekel;type:=lofs;rfs:=/n/shekel/u/zing/${key} + +Note that this implementation of autofs is still infant. Several important +changes must be made to your maps to support autofs: + +(1) you must supply the 'overlay' option to opts. Read the autofs paper to +see why that is crucial, else you will hang amd! + +(2) the 'fs' variable in the maps must point to the actual mount point +inside the autofs/amd mount point, not to where the autodir was. That is +because in-place mounts are done. + +For example, in the past, /home/ezk would be a symlink to /n/shekel/u/zing, +which is where shekel:/n/shekel/u/zing was mounted on. But now /home/ezk is +a directory on which shekel:/n/shekel/u/zing is directly mounted upon. +(Yes, this means that finally $PWD is the same as `/bin/pwd`.) + +* Todo: + +I'm looking for volunteers to improve the autofs code! + +(1) These fixes are needed to avoid having to change amd maps: + +- the overlay option should be turned on for autofs mounts automatically, +without having to require it in the maps. + +- the 'fs' variable should be ignored in the maps of type autofs. Rather, +it should always be set to "/${path}". + +- when the mount type is 'link', transparently translate it into a loopback +file system mount (lofs), that would mount in place, rather than supply a +symlink instead. + +- if amd is killed or dies, the autofs mounts will remain intact as required +(your system is _not_ hung, yay!) However, if you restart amd, it will not +correctly 'restart' the autofs mounts as the Sun automounter does. Rather, +it will cause another mount to happen, which leaves your /etc/mnttab +cluttered with older mounts entries which cannot be unmounted. + +(2) Code expansion: + +- (amd/ops_autofs.c) autofs_unmount_1_svc() is not implemented at all. + +- autofs has many types of mount types which are not supported. Right now +amd will assume a 'direct' mount. Types which are not supported are +'indirect', 'offset', and 'multiple' or 'hierarchical'. + +- implement the sockets version of amu_get_autofs_address() and +create_autofs_service(), in conf/transp/transp_sockets.c. + +(3) Testing and porting to other systems: + +- nothing has been tested on irix, which reportedly has a similar +functioning autofs to Solaris'. + +- no testing or even preliminary research was done to find out how to +support linux autofs. + +- did not test the new and improved autofs in Solaris 2.6 either. + +- did not test Solaris 2.5.1 on x86, or earlier versions of Solaris on +either Sparc or x86. + diff --git a/README.y2k b/README.y2k new file mode 100644 index 0000000..27ed553 --- /dev/null +++ b/README.y2k @@ -0,0 +1,18 @@ +# -*- text -*- + AM-UTILS YEAR-2000 COMPLIANCE + +Most likely am-utils is y2k compliant. + +I do not know for sure because I have not certified am-utils myself, nor do +I have the time for it. I do not think that amd will be affected by y2k at +all, because it does not do anything with dates other than print the date on +the log file, in whatever format is provided by your os/libc --- especially +the ctime(3) call. + +However, on Friday, September 18th 1998, Matthew Crosby +reported that they evaluated 6.0a16 and found it to be compliant. + +Erez Zadok. +Maintainer, am-utils package and AMD-DEV list. +Email: amd-dev-owner@majordomo.cs.columbia.edu +WWW: http://www.cs.columbia.edu/~ezk/am-utils/ diff --git a/TODO b/TODO new file mode 100644 index 0000000..8b31172 --- /dev/null +++ b/TODO @@ -0,0 +1,177 @@ +# -*- text -*- + +Make a tasks file that people can pick jobs off of. + +take a look at am_compat.h and fix everything there... + +fix all $Id bla bla bla $ on every file. +add my own copyright 1997 etc. + +NOT NEEDED: convert DEBUG symbol to ENABLE_DEBUG +NOT NEEDED: convert DEBUG_MEM symbol to ENABLE_DEBUG_MEM + +Use these two somewhere: +AC_DEFINE(AM_UTILS_NAME_PACKAGE, "am-utils") +AC_DEFINE(AM_UTILS_VERSION, "6.0a1) + +check all "dnl XXX: in configure.in + +check for: INLINE, Const->const, P_void, VOIDP + +rename DEBUG_MTAB to DEBUG_MNTTAB +rename UPDATE_MTAB to MOUNT_TABLE_ON_FILE +rename HAS_NIS_MAPS to HAVE_MAP_NIS +rename HAS_TFS to HAVE_FS_TFS +rename SIG_HNDL_TYP to RETSIGTYPE + +remove HOST_EXEC #define from everywhere. add to am_ops.c a static flag +initialized_vops, which if not true, should set the host_ops vector field to +0 or host_umounted. This way let the feature be turned on if -h option to +amd is given. + +nuke all code that is ifdef'd SUNOS4_COMPAT + +rename NEED_MNTOPT_PARSER to HAVE_HASMNTOPT and cleanup the code. also take +the supplied code in amd/mount_fs.c and include it as the library function +libamd/hasmntopt.c + +TLI code needs to be fixed. + +a way to include a site-specific configuration file IFF it exists from +directory local/<${target}.h> + +replace #include WAIT with nothing (HAVE_SYS_WAIT_H?) + +replace SYS5_SIGNALS with HAVE_SYS_WAIT_H (which is on only if it sys/wait.h +exists and is using the newer "int" for type, not "union wait". The macro +AC_HEADER_SYS_WAIT turns on HAVE_SYS_WAIT_H iff wait*() functions are +posix.1 compliant. Make sure you don't remove SYS5_SIGNALS ifdef's that are +not related to wait*() syscalls. + +add username, hostname, and date at which time amd was compiled. + +No more need for MOUNT_HELPER_SOURCE. + +any code which is included by NEED_UMOUNT_FS, should be on iff +MOUNT_TABLE_ON_FILE is on. + +replace NFS_FH_FIELD with references fo ".fh" in calls to +NFS_FH_DREF(src, dst) macro + +For *EVERY* M4 Macro with case/esac, check that the $host_os case entries +are correct. + +I'm not using amd's regexp code. Instead, use generic system code. If the +system has posix style regexp functions, then change amd/map.c to use +correct new prototype. + +use HAVE_SVC_GETREQSET instead of RPC_4. + +replace all "jsp" in *.[hc] $Id: TODO,v 1.1 1998/11/05 02:04:19 ezk Exp $ with ezk. + +use MNTTAB_FILE_NAME instead of MOUNTED + +use MOUNT_TABLE_ON_FILE instead of READ_MTAB_FROM_FILE + +no more HAS_EMPTY_AUTOMOUNTS, which was used if a df(1) divide by zero bug +was invoked. Instead, change nfs_statfs() code to always return non-zero +values. Then nuke HAS_EMPTY_AUTOMOUNTS. + +REGEXP: use whatever regular expressionlibrary you have on the system, +including regexp.h if available, and using regcomp/regexec. Amd was written +with BSD regexps in mind, not Sys V, so if I use any of those, I have to +watch for correct usage. Otherwise, I can include the older include/re.h +and amd/re.c. Replace HAS_REGEXP with HAVE_REGEXEC. + +The regex code in amd/mapc.c has changed a lot. It probably has bugs. Must +test and debug it!!! + +# string name of filesystem in /etc/mnttab file +Use MNTTAB_TYPE_FOO instead of MTAB_TYPE_FOO. +# string name of mount option in /etc/mnttab file +Use MNTTAB_OPT_FOO instead of MNTOPT_FOO. +# string (or integer?) name of filesystem type in mount(2) syscall +Use MOUNT_TYPE_FOO instead of MNTTYPE_FOO or MOUNT_FOO. +# hex/number of FS mount option in nfs_args passed to mount(2) syscall +Use MNT2_NFS_OPT_FOO instead NFSMNT_FOO. +# hex/number of generic FS mount option directly passed to mount(2) syscall +Use MNT2_GEN_OPT_FOO instead of MS_FOO or M_FOO. + + +update AMD_COMPAT to 6.0 in include/am_utils.h + +convert all mem* functions b* functions (memset to bzero, etc.) or vice +verse. + +put my name/copyright on every src file + +change all struct mnttab/mntent to "mntent_t" + +cleanup lib/resvport.c (TLI vs. Sockets). TLI code is #defin'ed +HAVE_T_OPEN. +[ +setting MTAB_LOCK_FILE (mtab_svr4.c) should be an amd run-time configuration +option. + +change all UMOUNT_FS macros to umount_fs() fxn calls. + +remove getnetbyaddr() from lib/getnetbyaddr.c and then link w/ -lsocket + +take care of various (hlfsd et al) scripts in Makefile.am files. + +rename HOSTNAMESZ to MAXHOSTNAMELEN + +turn on all the NEW_TOPLVL_READDIR code (for "ls" to work in an amd point) + +change all NEW_DEFAULTS to ENABLE_DEFAULT_SELECTOTS (which is now on by +default) + +remove refereces to mnt_freq and mnt_passno in mntent_t since it's not in +use any more. + +remove all the (lint?) comments /*ARGSUSED */ + +change HAS_FOOFS to HAVE_AM_FS_FOO (for example HAS_NFSX -> HAVE_AM_FS_FOO), +but change HAS_UNION_FS to HAVE_AM_FS_UNION. + +some code uses #ifdef M_NEWTYPE to tell if mount(2)'s type field is "char *" +or int. Use MTYPE_TYPE declaration instead (not ifdef macro!) + +change DEBUG_MTAB to DEBUG_MNTTAB + +deal with the changes in values of $os, $arch, and $osver! + +replace SYS5_SIGNALS with REINSTATE_SIGNAL_HANDLER + +figure out how to auto-conf HAS_HESIOD_RELOAD (amd/info_hesiod.c). For now +I've used the macro HAVE_HS_ZONE_TRANSFER. + + + + +****************************************************************************** +PERL SCRIPT TO FIX OLD AMD MAPS: +- fix '=' to ':=' +- fix sos5 -> solaris2, etc. + +****************************************************************************** +USE AS IS: + +- SVC_IN_ARG_TYPE (change from SVC_IN_ARGS_TYPE, with an 'S') +- NFS_FH_TYPE +- MTYPE_TYPE +- MOUNT_TYPE_* NO!!! + +****************************************************************************** +NEW FEATURES: + +- autofs +- cachefs +- dbm/gdbm/db file maps +- add amd option -O (override) to override $os, $osver, $arch, $karch, etc. + +****************************************************************************** +DONE: + +HAS_TFS is gone and all of it's code too. +major code cleanup, removed if 0 code and if notdef diff --git a/amd/Makefile.am b/amd/Makefile.am new file mode 100644 index 0000000..abea7bd --- /dev/null +++ b/amd/Makefile.am @@ -0,0 +1,147 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for amd/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = amd + +# man pages +man_MANS = amd.8 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + amd.h + +# *.y must be listed before *.l, because of a bug in automake-1.2 +# which will not generate the .h needs for the lex file from the yacc file. +# I took out the conf .y/.l files b/c of bad interaction between bsd44 make +# and automake-1.2 rules. +amd_SOURCES = \ + am_ops.c \ + amd.c \ + amfs_auto.c \ + amfs_direct.c \ + amfs_error.c \ + amfs_host.c \ + amfs_inherit.c \ + amfs_link.c \ + amfs_linkx.c \ + amfs_nfsl.c \ + amfs_nfsx.c \ + amfs_program.c \ + amfs_root.c \ + amfs_toplvl.c \ + amfs_union.c \ + amq_subr.c \ + amq_svc.c \ + autil.c \ + clock.c \ + conf.c \ + get_args.c \ + map.c \ + mapc.c \ + mntfs.c \ + nfs_prot_svc.c \ + nfs_start.c \ + nfs_subr.c \ + opts.c \ + restart.c \ + rpc_fwd.c \ + sched.c \ + srvr_amfs_auto.c \ + srvr_nfs.c + +# the complete list of all optional sources +EXTRA_amd_SOURCES = \ + info_file.c \ + info_hesiod.c \ + info_ldap.c \ + info_ndbm.c \ + info_nis.c \ + info_nisplus.c \ + info_passwd.c \ + info_union.c \ + \ + ops_autofs.c \ + ops_cachefs.c \ + ops_cdfs.c \ + ops_efs.c \ + ops_lofs.c \ + ops_mfs.c \ + ops_nfs.c \ + ops_nfs3.c \ + ops_nullfs.c \ + ops_pcfs.c \ + ops_tfs.c \ + ops_tmpfs.c \ + ops_ufs.c \ + ops_umapfs.c \ + ops_unionfs.c \ + ops_xfs.c + +# AMD_FS_OBJS: a list of ops_*.o objects added, depending on which +# filesystem types this system supports. +# AMD_INFO_OBJS: a list of info_*.o objects added, depending on which map +# types this system supports. +EXTRA_amd_OBJECTS = @AMD_FS_OBJS@ @AMD_INFO_OBJS@ conf_tok.o conf_parse.o +LDADD = $(EXTRA_amd_OBJECTS) ../libamu/libamu.la +# must manually add f/lex library to LIBS, and not to LDADD. +LIBS = @LIBS@ @LEXLIB@ + +# additional files to distribute and clean +EXTRA_DIST = \ + conf_tok.l \ + conf_parse.y \ + ops_TEMPLATE.c \ + $(man_MANS) + +CLEANFILES = conf_tok.c conf_parse.c conf_parse.h +DISTCLEANFILES = build_version.h + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) +YACC = @YACC@ +YFLAGS = -d + +# dependencies +$(PROGRAMS): $(LDADD) +conf_tok.o: conf_parse.h +get_args.o: build_version.h +$(OBJECTS) $(EXTRA_amd_OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Must use my rules, b/c ones supplied by automake-1.2 don't work +# with bsd44 make (they have built-in rules to build yacc/lex files). +# Code generated by yacc/lex: +conf_tok.c: conf_tok.l + $(LEX) $? + mv lex.yy.c conf_tok.c + +conf_parse.c conf_parse.h: conf_parse.y + $(YACC) -d $? + mv y.tab.c conf_parse.c + mv y.tab.h conf_parse.h + +# auto-generate build number +build_version.h: $(amd_SOURCES) $(EXTRA_amd_SOURCES) \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + $(top_srcdir)/aux/update_build_version diff --git a/amd/Makefile.in b/amd/Makefile.in new file mode 100644 index 0000000..75d47a5 --- /dev/null +++ b/amd/Makefile.in @@ -0,0 +1,480 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for amd/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = amd + +# man pages +man_MANS = amd.8 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + amd.h + +# *.y must be listed before *.l, because of a bug in automake-1.2 +# which will not generate the .h needs for the lex file from the yacc file. +# I took out the conf .y/.l files b/c of bad interaction between bsd44 make +# and automake-1.2 rules. +amd_SOURCES = \ + am_ops.c \ + amd.c \ + amfs_auto.c \ + amfs_direct.c \ + amfs_error.c \ + amfs_host.c \ + amfs_inherit.c \ + amfs_link.c \ + amfs_linkx.c \ + amfs_nfsl.c \ + amfs_nfsx.c \ + amfs_program.c \ + amfs_root.c \ + amfs_toplvl.c \ + amfs_union.c \ + amq_subr.c \ + amq_svc.c \ + autil.c \ + clock.c \ + conf.c \ + get_args.c \ + map.c \ + mapc.c \ + mntfs.c \ + nfs_prot_svc.c \ + nfs_start.c \ + nfs_subr.c \ + opts.c \ + restart.c \ + rpc_fwd.c \ + sched.c \ + srvr_amfs_auto.c \ + srvr_nfs.c + +# the complete list of all optional sources +EXTRA_amd_SOURCES = \ + info_file.c \ + info_hesiod.c \ + info_ldap.c \ + info_ndbm.c \ + info_nis.c \ + info_nisplus.c \ + info_passwd.c \ + info_union.c \ + \ + ops_autofs.c \ + ops_cachefs.c \ + ops_cdfs.c \ + ops_efs.c \ + ops_lofs.c \ + ops_mfs.c \ + ops_nfs.c \ + ops_nfs3.c \ + ops_nullfs.c \ + ops_pcfs.c \ + ops_tfs.c \ + ops_tmpfs.c \ + ops_ufs.c \ + ops_umapfs.c \ + ops_unionfs.c \ + ops_xfs.c + +# AMD_FS_OBJS: a list of ops_*.o objects added, depending on which +# filesystem types this system supports. +# AMD_INFO_OBJS: a list of info_*.o objects added, depending on which map +# types this system supports. +EXTRA_amd_OBJECTS = @AMD_FS_OBJS@ @AMD_INFO_OBJS@ conf_tok.o conf_parse.o +LDADD = $(EXTRA_amd_OBJECTS) ../libamu/libamu.la +# must manually add f/lex library to LIBS, and not to LDADD. +LIBS = @LIBS@ @LEXLIB@ + +# additional files to distribute and clean +EXTRA_DIST = \ + conf_tok.l \ + conf_parse.y \ + ops_TEMPLATE.c \ + $(man_MANS) + +CLEANFILES = conf_tok.c conf_parse.c conf_parse.h +DISTCLEANFILES = build_version.h + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) +YACC = @YACC@ +YFLAGS = -d +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +amd_OBJECTS = am_ops.o amd.o amfs_auto.o amfs_direct.o amfs_error.o \ +amfs_host.o amfs_inherit.o amfs_link.o amfs_linkx.o amfs_nfsl.o \ +amfs_nfsx.o amfs_program.o amfs_root.o amfs_toplvl.o amfs_union.o \ +amq_subr.o amq_svc.o autil.o clock.o conf.o get_args.o map.o mapc.o \ +mntfs.o nfs_prot_svc.o nfs_start.o nfs_subr.o opts.o restart.o \ +rpc_fwd.o sched.o srvr_amfs_auto.o srvr_nfs.o +amd_LDADD = $(LDADD) +amd_DEPENDENCIES = conf_tok.o conf_parse.o ../libamu/libamu.la +amd_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(amd_SOURCES) $(EXTRA_amd_SOURCES) +OBJECTS = $(amd_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps amd/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +amd: $(amd_OBJECTS) $(amd_DEPENDENCIES) + @rm -f amd + $(LINK) $(amd_LDFLAGS) $(amd_OBJECTS) $(amd_LDADD) $(LIBS) + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = amd + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(sbindir) $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man8 \ +uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +conf_tok.o: conf_parse.h +get_args.o: build_version.h +$(OBJECTS) $(EXTRA_amd_OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Must use my rules, b/c ones supplied by automake-1.2 don't work +# with bsd44 make (they have built-in rules to build yacc/lex files). +# Code generated by yacc/lex: +conf_tok.c: conf_tok.l + $(LEX) $? + mv lex.yy.c conf_tok.c + +conf_parse.c conf_parse.h: conf_parse.y + $(YACC) -d $? + mv y.tab.c conf_parse.c + mv y.tab.h conf_parse.h + +# auto-generate build number +build_version.h: $(amd_SOURCES) $(EXTRA_amd_SOURCES) \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + $(top_srcdir)/aux/update_build_version + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/amd/am_ops.c b/amd/am_ops.c new file mode 100644 index 0000000..4909a50 --- /dev/null +++ b/amd/am_ops.c @@ -0,0 +1,441 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: am_ops.c,v 1.1 1998/11/05 02:04:46 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * The order of these entries matters, since lookups in this table are done + * on a first-match basis. The entries below are a mixture of native + * filesystems supported by the OS (HAVE_FS_FOO), and some meta-filesystems + * supported by amd (HAVE_AM_FS_FOO). The order is set here in expected + * match-hit such that more popular filesystems are listed first (nfs is the + * most popular, followed by a symlink F/S) + */ +static am_ops *vops[] = +{ +#ifdef HAVE_FS_NFS + &nfs_ops, /* network F/S (version 2) */ +#endif /* HAVE_FS_NFS */ +#ifdef HAVE_AM_FS_LINK + &amfs_link_ops, /* symlink F/S */ +#endif /* HAVE_AM_FS_LINK */ + + /* + * Other amd-supported meta-filesystems. + */ +#ifdef HAVE_AM_FS_NFSX + &amfs_nfsx_ops, /* multiple-nfs F/S */ +#endif /* HAVE_AM_FS_NFSX */ +#ifdef HAVE_AM_FS_NFSL + &amfs_nfsl_ops, /* NFS with local link existence check */ +#endif /* HAVE_AM_FS_NFSL */ +#ifdef HAVE_AM_FS_HOST + &amfs_host_ops, /* multiple exported nfs F/S */ +#endif /* HAVE_AM_FS_HOST */ +#ifdef HAVE_AM_FS_LINKX + &amfs_linkx_ops, /* symlink F/S with link target verify */ +#endif /* HAVE_AM_FS_LINKX */ +#ifdef HAVE_AM_FS_PROGRAM + &amfs_program_ops, /* program F/S */ +#endif /* HAVE_AM_FS_PROGRAM */ +#ifdef HAVE_AM_FS_UNION + &amfs_union_ops, /* union F/S */ +#endif /* HAVE_AM_FS_UNION */ +#ifdef HAVE_AM_FS_INHERIT + &amfs_inherit_ops, /* inheritance F/S */ +#endif /* HAVE_AM_FS_INHERIT */ + + /* + * A few more native filesystems. + */ +#ifdef HAVE_FS_UFS + &ufs_ops, /* Unix F/S */ +#endif /* HAVE_FS_UFS */ +#ifdef HAVE_FS_XFS + &xfs_ops, /* Unix (irix) F/S */ +#endif /* HAVE_FS_XFS */ +#ifdef HAVE_FS_EFS + &efs_ops, /* Unix (irix) F/S */ +#endif /* HAVE_FS_EFS */ +#ifdef HAVE_FS_LOFS + &lofs_ops, /* loopback F/S */ +#endif /* HAVE_FS_LOFS */ +#ifdef HAVE_FS_CDFS + &cdfs_ops, /* CDROM/HSFS/ISO9960 F/S */ +#endif /* HAVE_FS_CDFS */ +#ifdef HAVE_FS_PCFS + &pcfs_ops, /* Floppy/MSDOS F/S */ +#endif /* HAVE_FS_PCFS */ +#ifdef HAVE_FS_CACHEFS + &cachefs_ops, /* caching F/S */ +#endif /* HAVE_FS_CACHEFS */ +#ifdef HAVE_FS_NULLFS +/* FILL IN */ /* null (loopback) F/S */ +#endif /* HAVE_FS_NULLFS */ +#ifdef HAVE_FS_UNIONFS +/* FILL IN */ /* union (bsd44) F/S */ +#endif /* HAVE_FS_UNIONFS */ +#ifdef HAVE_FS_UMAPFS +/* FILL IN */ /* uid/gid mapping F/S */ +#endif /* HAVE_FS_UMAPFS */ + + /* + * These 5 should be last, in the order: + * (1) amfs_auto + * (2) amfs_direct + * (3) amfs_toplvl + * (4) autofs + * (5) amfs_error + */ +#ifdef HAVE_AM_FS_AUTO + &amfs_auto_ops, /* Automounter F/S */ +#endif /* HAVE_AM_FS_AUTO */ +#ifdef HAVE_AM_FS_DIRECT + &amfs_direct_ops, /* direct-mount F/S */ +#endif /* HAVE_AM_FS_DIRECT */ +#ifdef HAVE_AM_FS_TOPLVL + &amfs_toplvl_ops, /* top-level mount F/S */ +#endif /* HAVE_AM_FS_TOPLVL */ +#ifdef HAVE_FS_AUTOFS + &autofs_ops, /* autofs mount F/S */ +#endif /* HAVE_FS_AUTOFS */ +#ifdef HAVE_AM_FS_ERROR + &amfs_error_ops, /* error F/S */ +#endif /* HAVE_AM_FS_ERROR */ + 0 +}; + + +void +ops_showamfstypes(char *buf) +{ + struct am_ops **ap; + int l = 0; + + buf[0] = '\0'; + for (ap = vops; *ap; ap++) { + strcat(buf, (*ap)->fs_type); + if (ap[1]) + strcat(buf, ", "); + l += strlen((*ap)->fs_type) + 2; + if (l > 60) { + l = 0; + strcat(buf, "\n "); + } + } +} + + +static void +ops_show1(char *buf, int *lp, const char *name) +{ + strcat(buf, name); + strcat(buf, ", "); + *lp += strlen(name) + 2; + if (*lp > 60) { + strcat(buf, "\t\n"); + *lp = 0; + } +} + + +void +ops_showfstypes(char *buf) +{ + int l = 0; + + buf[0] = '\0'; + +#ifdef MNTTAB_TYPE_AUTOFS + ops_show1(buf, &l, MNTTAB_TYPE_AUTOFS); +#endif /* MNTTAB_TYPE_AUTOFS */ + +#ifdef MNTTAB_TYPE_CACHEFS + ops_show1(buf, &l, MNTTAB_TYPE_CACHEFS); +#endif /* MNTTAB_TYPE_CACHEFS */ + +#ifdef MNTTAB_TYPE_CDFS + ops_show1(buf, &l, MNTTAB_TYPE_CDFS); +#endif /* MNTTAB_TYPE_CDFS */ + +#ifdef MNTTAB_TYPE_CFS + ops_show1(buf, &l, MNTTAB_TYPE_CFS); +#endif /* MNTTAB_TYPE_CFS */ + +#ifdef MNTTAB_TYPE_LOFS + ops_show1(buf, &l, MNTTAB_TYPE_LOFS); +#endif /* MNTTAB_TYPE_LOFS */ + +#ifdef MNTTAB_TYPE_EFS + ops_show1(buf, &l, MNTTAB_TYPE_EFS); +#endif /* MNTTAB_TYPE_EFS */ + +#ifdef MNTTAB_TYPE_MFS + ops_show1(buf, &l, MNTTAB_TYPE_MFS); +#endif /* MNTTAB_TYPE_MFS */ + +#ifdef MNTTAB_TYPE_NFS + ops_show1(buf, &l, MNTTAB_TYPE_NFS); +#endif /* MNTTAB_TYPE_NFS */ + +#ifdef MNTTAB_TYPE_NFS3 + ops_show1(buf, &l, "nfs3"); /* always hard-code as nfs3 */ +#endif /* MNTTAB_TYPE_NFS3 */ + +#ifdef MNTTAB_TYPE_NULLFS + ops_show1(buf, &l, MNTTAB_TYPE_NULLFS); +#endif /* MNTTAB_TYPE_NULLFS */ + +#ifdef MNTTAB_TYPE_PCFS + ops_show1(buf, &l, MNTTAB_TYPE_PCFS); +#endif /* MNTTAB_TYPE_PCFS */ + +#ifdef MNTTAB_TYPE_TFS + ops_show1(buf, &l, MNTTAB_TYPE_TFS); +#endif /* MNTTAB_TYPE_TFS */ + +#ifdef MNTTAB_TYPE_TMPFS + ops_show1(buf, &l, MNTTAB_TYPE_TMPFS); +#endif /* MNTTAB_TYPE_TMPFS */ + +#ifdef MNTTAB_TYPE_UFS + ops_show1(buf, &l, MNTTAB_TYPE_UFS); +#endif /* MNTTAB_TYPE_UFS */ + +#ifdef MNTTAB_TYPE_UMAPFS + ops_show1(buf, &l, MNTTAB_TYPE_UMAPFS); +#endif /* MNTTAB_TYPE_UMAPFS */ + +#ifdef MNTTAB_TYPE_UNIONFS + ops_show1(buf, &l, MNTTAB_TYPE_UNIONFS); +#endif /* MNTTAB_TYPE_UNIONFS */ + +#ifdef MNTTAB_TYPE_XFS + ops_show1(buf, &l, MNTTAB_TYPE_XFS); +#endif /* MNTTAB_TYPE_XFS */ + + /* terminate with a period, newline, and NULL */ + if (buf[strlen(buf)-1] == '\n') + buf[strlen(buf) - 4] = '\0'; + else + buf[strlen(buf) - 2] = '\0'; + strcat(buf, ".\n"); +} + + +/* + * return string option which is the reverse of opt. + * nosuid -> suid + * quota -> noquota + * ro -> rw + * etc. + * may return pointer to static buffer or subpointer within opt. + */ +static char * +reverse_option(const char *opt) +{ + static char buf[80]; + + /* sanity check */ + if (!opt) + return NULL; + + /* check special cases */ + /* XXX: if this gets too long, rewrite the code more flexibly */ + if (STREQ(opt, "ro")) return "rw"; + if (STREQ(opt, "rw")) return "ro"; + if (STREQ(opt, "bg")) return "fg"; + if (STREQ(opt, "fg")) return "bg"; + if (STREQ(opt, "soft")) return "hard"; + if (STREQ(opt, "hard")) return "soft"; + + /* check if string starts with 'no' and chop it */ + if (NSTREQ(opt, "no", 2)) { + strcpy(buf, &opt[2]); + } else { + /* finally return a string prepended with 'no' */ + strcpy(buf, "no"); + strcat(buf, opt); + } + return buf; +} + + +/* + * start with an empty string. for each opts1 option that is not + * in opts2, add it to the string (make sure the reverse of it + * isn't in either). finally add opts2. return new string. + * Both opts1 and opts2 must not be null! + * Caller must eventually free the string being returned. + */ +static char * +merge_opts(char *opts1, char *opts2) +{ + mntent_t mnt2; /* place holder for opts2 */ + char *newstr; /* new string to return (malloc'ed) */ + char *tmpstr; /* temp */ + char *eq; /* pointer to '=' within temp */ + char oneopt[80]; /* one option w/o value if any */ + char *revoneopt; /* reverse of oneopt */ + int len = strlen(opts1) + strlen(opts2) + 2; /* space for "," and NULL */ + char *s1 = strdup(opts1); /* copy of opts1 to munge */ + + /* initialization */ + mnt2.mnt_opts = opts2; + newstr = xmalloc(len); + newstr[0] = '\0'; + + for (tmpstr = strtok(s1, ","); + tmpstr; + tmpstr = strtok(NULL, ",")) { + /* copy option to temp buffer */ + strncpy(oneopt, tmpstr, 80); + oneopt[79] = '\0'; + /* if option has a value such as rsize=1024, chop the value part */ + if ((eq = strchr(oneopt, '='))) + eq[1] = '\0'; + /* find reverse option of oneopt */ + revoneopt = reverse_option(oneopt); + /* if option orits reverse exist in opts2, ignore it */ + if (hasmntopt(&mnt2, oneopt) || hasmntopt(&mnt2, revoneopt)) + continue; + /* add option to returned string */ + if (newstr && newstr[0]) { + strcat(newstr, ","); + strcat(newstr, tmpstr); + } else { + strcpy(newstr, tmpstr); + } + } + + /* finally, append opts2 itself */ + if (newstr && newstr[0]) { + strcat(newstr, ","); + strcat(newstr, opts2); + } else { + strcpy(newstr, opts2); + } + + XFREE(s1); + return newstr; +} + + +am_ops * +ops_match(am_opts *fo, char *key, char *g_key, char *path, char *keym, char *map) +{ + am_ops **vp; + am_ops *rop = 0; + + /* + * First crack the global opts and the local opts + */ + if (!eval_fs_opts(fo, key, g_key, path, keym, map)) { + rop = &amfs_error_ops; + } else if (fo->opt_type == 0) { + plog(XLOG_USER, "No fs type specified (key = \"%s\", map = \"%s\")", keym, map); + rop = &amfs_error_ops; + } else { + /* + * Next find the correct filesystem type + */ + for (vp = vops; (rop = *vp); vp++) + if (STREQ(rop->fs_type, fo->opt_type)) + break; + if (!rop) { + plog(XLOG_USER, "fs type \"%s\" not recognized", fo->opt_type); + rop = &amfs_error_ops; + } + } + + /* + * Make sure we have a default mount option. + * Otherwise skip past any leading '-'. + */ + if (fo->opt_opts == 0) + fo->opt_opts = strdup("rw,defaults"); + else if (*fo->opt_opts == '-') { + /* + * We cannot simply do fo->opt_opts++ here since the opts + * module will try to free the pointer fo->opt_opts later. + * So just reallocate the thing -- stolcke 11/11/94 + */ + char *old = fo->opt_opts; + fo->opt_opts = strdup(old + 1); + XFREE(old); + } + + /* + * If addopts option was used, then append it to the + * current options. + */ + if (fo->opt_addopts) { + char *mergedstr; + mergedstr = merge_opts(fo->opt_opts, fo->opt_addopts); + plog(XLOG_USER, "merge opts \"%s\" add \"%s\" => \"%s\"", + fo->opt_opts, fo->opt_addopts, mergedstr); + XFREE(fo->opt_opts); + fo->opt_opts = mergedstr; + } + + /* + * Check the filesystem is happy + */ + if (fo->fs_mtab) + XFREE(fo->fs_mtab); + + if ((fo->fs_mtab = (*rop->fs_match) (fo))) + return rop; + + /* + * Return error file system + */ + fo->fs_mtab = (*amfs_error_ops.fs_match) (fo); + return &amfs_error_ops; +} diff --git a/amd/amd.8 b/amd/amd.8 new file mode 100644 index 0000000..6b89f60 --- /dev/null +++ b/amd/amd.8 @@ -0,0 +1,352 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1989 Jan-Simon Pendry +.\" Copyright (c) 1989 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1989 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" %W% (Berkeley) %G% +.\" +.\" $Id: amd.8,v 1.1 1998/11/05 02:04:51 ezk Exp $ +.\" +.TH AMD 8 "3 November 1989" +.SH NAME +amd \- automatically mount file systems +.SH SYNOPSIS +.B amd +.B \-H +.br +.B amd +[ +.BI \-F " conf_file" +] +.br +.B amd +[ +.B \-nprvHS +] [ +.BI \-a " mount_point" +] [ +.BI \-c " duration" +] [ +.BI \-d " domain" +] [ +.BI \-k " kernel-arch" +] [ +.BI \-l " logfile" +] [ +.BI \-o " op_sys_ver" +] [ +.BI \-t " interval.interval" +] [ +.BI \-w " interval" +] [ +.BI \-x " log-option" +] [ +.BI \-y " YP-domain" +] [ +.BI \-C " cluster-name" +] [ +.BI \-D " option" +] [ +.BI \-F " conf_file" +] [ +.BI \-O " op_sys_name" +] [ +.BI \-T " tag" +] +[ +.I directory +.I mapname +.RI [ " \-map-options " ] +] .\|.\|. +.SH DESCRIPTION +.B Amd +is a daemon that automatically mounts filesystems +whenever a file or directory +within that filesystem is accessed. +Filesystems are automatically unmounted when they +appear to have become quiescent. +.LP +.B Amd +operates by attaching itself as an +.SM NFS +server to each of the specified +.IB directories . +Lookups within the specified directories +are handled by +.BR amd , +which uses the map defined by +.I mapname +to determine how to resolve the lookup. +Generally, this will be a host name, some filesystem information +and some mount options for the given filesystem. +.LP +In the first form depicted above, +.B amd +will print a short help string. In the second form, if no options are +specified, or the +.B -F +is used, +.B amd +will read configuration parameters from the file +.I conf_file +which defaults to +.BR /etc/amd.conf . +The last form is described below. +.SH OPTIONS + +.\"*******************************************************" + +.TP +.BI \-a " temporary-directory" +Specify an alternative location for the real mount points. +The default is +.BR /a . + +.TP +.BI \-c " duration" +Specify a +.IR duration , +in seconds, that a looked up name remains +cached when not in use. The default is 5 minutes. + +.TP +.BI \-d " domain" +Specify the local domain name. If this option is not +given the domain name is determined from the hostname. + +.TP +.BI \-k " kernel-arch" +Specifies the kernel architecture. This is used solely +to set the ${karch} selector. + +.TP +.BI \-l " logfile" +Specify a logfile in which to record mount and unmount events. +If +.I logfile +is the string +.B syslog +then the log messages will be sent to the system log daemon by +.IR syslog (3). +The default syslog facility used is LOG_DAEMON. If you +wish to change it, append its name to the log file name, delimited by a +single colon. For example, if +.I logfile +is the string +.B syslog:local7 +then +.B Amd +will log messages via +.IR syslog (3) +using the LOG_LOCAL7 facility (if it exists on the system). + +.TP +.B \-n +Normalize hostnames. +The name refereed to by ${rhost} is normalized relative to the +host database before being used. The effect is to translate +aliases into ``official'' names. + +.TP +.BI \-o " op_sys_ver" +Override the compiled-in version number of the operating system. Useful +when the built in version is not desired for backward compatibility reasons. +For example, if the build in version is ``2.5.1'', you can override it to +``5.5.1'', and use older maps that were written with the latter in mind. + +.TP +.B \-p +Print PID. +Outputs the process-id of +.B amd +to standard output where it can be saved into a file. + +.TP +.B \-r +Restart existing mounts. +.B Amd +will scan the mount file table to determine which filesystems +are currently mounted. Whenever one of these would have +been auto-mounted, +.B amd +.I inherits +it. + +.TP +.BI \-t " interval.interval" +Specify the +.IR interval , +in tenths of a second, between NFS/RPC/UDP retries. +The default is 0.8 seconds. +The second values alters the restransmit counter. +Useful defaults are supplied if either or both +values are missing. + +.TP +.B \-v +Version. Displays version and configuration information on standard error. + +.TP +.BI \-w " interval" +Specify an +.IR interval , +in seconds, between attempts to dismount +filesystems that have exceeded their cached times. +The default is 2 minutes. + +.TP +.BI \-x " options" +Specify run-time logging options. The options are a comma separated +list chosen from: fatal, error, user, warn, info, map, stats, all. + +.TP +.BI \-y " domain" +Specify an alternative NIS domain from which to fetch the NIS maps. +The default is the system domain name. This option is ignored if NIS +support is not available. + +.TP +.BI \-C " cluster-name" +Specify an alternative HP-UX cluster name to use. + +.TP +.BI \-D " option" +Select from a variety of debug options. Prefixing an +option with the strings +.B no +reverses the effect of that option. Options are cumulative. +The most useful option is +.BR all . +Since +.I \-D +is only used for debugging other options are not documented here: +the current supported set of options is listed by the \-v option +and a fuller description is available in the program source. + +.TP +.BI \-F " conf_file" +Specify an amd configuration file to use. See +.BR amd.conf (5) +for description of this file's format. This configuration file is used to +specify any options in lieu of typing many of them on the command line. The +.I amd.conf +file includes directives for every command line option amd has, and many +more that are only available via the configuration file facility. The +configuration file specified by this option is processed after all other +options had been processed, regardless of the actual location of this option +on the command line. + +.TP +.B \-H +Print help and usage string. + +.TP +.BI \-O " op_sys_name" +Override the compiled-in name of the operating system. Useful when the +built in name is not desired for backward compatibility reasons. For +example, if the build in name is ``sunos5'', you can override it to +``sos5'', and use older maps which were written with the latter in mind. + +.TP +.B \-S +Do not lock the running executable pages of amd into memory. To improve +amd's performance, systems that support the +.BR plock (3) +call, could lock the amd process into memory. This way there is less chance +the operating system will schedule, page out, and swap the amd process as +needed. This tends improves amd's performance, at the cost of reserving the +memory used by the amd process (making it unavailable for other processes). +If this behavior is not desired, use the +.B \-S +option. + +.TP +.BI \-T " tag" +Specify a tag to use with +.BR amd.conf (5). +All map entries tagged with +.I tag +will be processed. Map entries that are not tagged are always processed. +Map entries that are tagged with a tag other than +.I tag +will not be processed. + +.SH FILES +.PD 0 +.TP 5 +.B /a +directory under which filesystems are dynamically mounted +.TP 5 +.B /etc/amd.conf +default configuration file +.PD +.SH CAVEATS +Some care may be required when creating a mount map. +.LP +Symbolic links on an NFS filesystem can be incredibly inefficient. +In most implementations of NFS, their interpolations are not cached +by the kernel and each time a symlink is encountered during a +.I lookuppn +translation it costs an RPC call to the NFS server. +It would appear that a large improvement in real-time +performance could be gained by adding a cache somewhere. +Replacing symlinks with a suitable incarnation of the auto-mounter +results in a large real-time speedup, but also causes a large +number of process context switches. +.LP +A weird imagination is most useful to gain full advantage of all +the features. +.SH "SEE ALSO" +.BR amd.conf (5), +.BR amq (8), +.BR domainname (1), +.BR hostname (1), +.BR automount (8), +.BR mount (8), +.BR umount (8), +.BR mtab (5), +.BR syslog (3). +.LP +.I "Amd \- The 4.4 BSD Automounter" +.SH AUTHORS +Jan-Simon Pendry , Department of Computing, Imperial College, London, UK. +.P +Erez Zadok , Department of Computer Science, Columbia +University, New York, USA. +.P +Other authors and contributors to am-utils are listed in the +.B AUTHORS +file distributed with am-utils. diff --git a/amd/amd.c b/amd/amd.c new file mode 100644 index 0000000..6ffe1bc --- /dev/null +++ b/amd/amd.c @@ -0,0 +1,536 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amd.c,v 1.1 1998/11/05 02:04:46 ezk Exp $ + * + */ + +/* + * Automounter + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +struct amu_global_options gopt; /* where global options are stored */ + +char pid_fsname[16 + MAXHOSTNAMELEN]; /* "kiska.southseas.nz:(pid%d)" */ +char *progname; /* "amd" */ +char *hostdomain = "unknown.domain"; +char hostname[MAXHOSTNAMELEN + 1] = "localhost"; /* Hostname */ +char hostd[2 * MAXHOSTNAMELEN + 1]; /* Host+domain */ +char *endian = ARCH_ENDIAN; /* Big or Little endian */ +char *cpu = HOST_CPU; /* CPU type */ +char *PrimNetName; /* name of primary network */ +char *PrimNetNum; /* number of primary network */ + +int foreground = 1; /* This is the top-level server */ +int immediate_abort; /* Should close-down unmounts be retried */ +int orig_umask; +int select_intr_valid; + +jmp_buf select_intr; +pid_t mypid; /* Current process id */ +serv_state amd_state; +struct amd_stats amd_stats; /* Server statistics */ +struct in_addr myipaddr; /* (An) IP address of this host */ +time_t do_mapc_reload = 0; /* mapc_reload() call required? */ + +#ifdef HAVE_SIGACTION +sigset_t masked_sigs; +#endif /* HAVE_SIGACTION */ + + +/* + * Signal handler: + * SIGINT - tells amd to do a full shutdown, including unmounting all + * filesystem. + * SIGTERM - tells amd to shutdown now. Just unmounts the automount nodes. + */ +static RETSIGTYPE +sigterm(int sig) +{ +#ifdef REINSTALL_SIGNAL_HANDLER + signal(sig, sigterm); +#endif /* REINSTALL_SIGNAL_HANDLER */ + + switch (sig) { + case SIGINT: + immediate_abort = 15; + break; + + case SIGTERM: + immediate_abort = -1; + /* fall through... */ + + default: + plog(XLOG_WARNING, "WARNING: automounter going down on signal %d", sig); + break; + } + if (select_intr_valid) + longjmp(select_intr, sig); +} + + +/* + * Hook for cache reload. + * When a SIGHUP arrives it schedules a call to mapc_reload + */ +static RETSIGTYPE +sighup(int sig) +{ +#ifdef REINSTALL_SIGNAL_HANDLER + signal(sig, sighup); +#endif /* REINSTALL_SIGNAL_HANDLER */ + +#ifdef DEBUG + if (sig != SIGHUP) + dlog("spurious call to sighup"); +#endif /* DEBUG */ + /* + * Force a reload by zero'ing the timer + */ + if (amd_state == Run) + do_mapc_reload = 0; +} + + +static RETSIGTYPE +parent_exit(int sig) +{ + exit(0); +} + + +static int +daemon_mode(void) +{ + int bgpid; + +#ifdef HAVE_SIGACTION + struct sigaction sa, osa; + + sa.sa_handler = parent_exit; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGQUIT); + sigaction(SIGQUIT, &sa, &osa); +#else /* not HAVE_SIGACTION */ + signal(SIGQUIT, parent_exit); +#endif /* not HAVE_SIGACTION */ + + bgpid = background(); + + if (bgpid != 0) { + /* + * Now wait for the automount points to + * complete. + */ + for (;;) + pause(); + /* should never reach here */ + } +#ifdef HAVE_SIGACTION + sigaction(SIGQUIT, &osa, NULL); +#else /* not HAVE_SIGACTION */ + signal(SIGQUIT, SIG_DFL); +#endif /* not HAVE_SIGACTION */ + + /* + * Record our pid to make it easier to kill the correct amd. + */ + if (gopt.flags & CFM_PRINT_PID) { + if (STREQ(gopt.pid_file, "/dev/stdout")) { + printf("%ld\n", (long) mypid); + fflush(stdout); + /* do not fclose stdout */ + } else { + FILE *f; + mode_t prev_umask = umask(0022); /* set secure temporary umask */ + + f = fopen(gopt.pid_file, "w"); + if (f) { + fprintf(f, "%ld\n", (long) mypid); + (void) fclose(f); + } else { + fprintf(stderr, "cannot open %s (errno=%d)\n", gopt.pid_file, errno); + } + umask(prev_umask); /* restore umask */ + } + } + + /* + * Pretend we are in the foreground again + */ + foreground = 1; + + /* + * Dissociate from the controlling terminal + */ + amu_release_controlling_tty(); + + return getppid(); +} + + +/* + * Initialize global options structure. + */ +static void +init_global_options(void) +{ +#if defined(HAVE_SYS_UTSNAME_H) && defined(HAVE_UNAME) + static struct utsname un; +#endif /* defined(HAVE_SYS_UTSNAME_H) && defined(HAVE_UNAME) */ + + memset(&gopt, 0, sizeof(struct amu_global_options)); + + /* name of current architecture */ + gopt.arch = HOST_ARCH; + + /* automounter temp dir */ + gopt.auto_dir = "/a"; + + /* cluster name */ + gopt.cluster = NULL; + + /* + * kernel architecture: this you must get from uname() if possible. + */ +#if defined(HAVE_SYS_UTSNAME_H) && defined(HAVE_UNAME) + if (uname(&un) >= 0) + gopt.karch = un.machine; + else +#endif /* defined(HAVE_SYS_UTSNAME_H) && defined(HAVE_UNAME) */ + gopt.karch = HOST_ARCH; + + /* amd log file */ + gopt.logfile = NULL; + + /* operating system name */ + gopt.op_sys = HOST_OS_NAME; + + /* OS version */ + gopt.op_sys_ver = HOST_OS_VERSION; + + /* pid file */ + gopt.pid_file = "/dev/stdout"; + + /* local domain */ + gopt.sub_domain = NULL; + + /* NFS retransmit counter */ + gopt.amfs_auto_retrans = -1; + + /* NFS retry interval */ + gopt.amfs_auto_timeo = -1; + + /* cache duration */ + gopt.am_timeo = AM_TTL; + + /* dismount interval */ + gopt.am_timeo_w = AM_TTL_W; + + /* + * various CFM_* flags. + * by default, only the "plock" option is on (if available). + */ + gopt.flags = CFM_PROCESS_LOCK; + +#ifdef HAVE_MAP_HESIOD + /* Hesiod rhs zone */ + gopt.hesiod_base = "automount"; +#endif /* HAVE_MAP_HESIOD */ + +#ifdef HAVE_MAP_LDAP + /* LDAP base */ + gopt.ldap_base = NULL; + + /* LDAP host ports */ + gopt.ldap_hostports = NULL; + + /* LDAP cache */ + gopt.ldap_cache_seconds = 0; + gopt.ldap_cache_maxmem = 131072; +#endif /* HAVE_MAP_LDAP */ + +#ifdef HAVE_MAP_NIS + /* YP domain name */ + gopt.nis_domain = NULL; +#endif /* HAVE_MAP_NIS */ +} + + +int +main(int argc, char *argv[]) +{ + char *domdot, *verstr; + int ppid = 0; + int error; +#ifdef HAVE_SIGACTION + struct sigaction sa; +#endif /* HAVE_SIGACTION */ + + /* + * Make sure some built-in assumptions are true before we start + */ + assert(sizeof(nfscookie) >= sizeof(u_int)); + assert(sizeof(int) >= 4); + + /* + * Set processing status. + */ + amd_state = Start; + + /* + * Determine program name + */ + if (argv[0]) { + progname = strrchr(argv[0], '/'); + if (progname && progname[1]) + progname++; + else + progname = argv[0]; + } + if (!progname) + progname = "amd"; + + /* + * Initialize process id. This is kept + * cached since it is used for generating + * and using file handles. + */ + mypid = getpid(); + + /* + * Get local machine name + */ + if (gethostname(hostname, sizeof(hostname)) < 0) { + plog(XLOG_FATAL, "gethostname: %m"); + going_down(1); + } + hostname[sizeof(hostname) - 1] = '\0'; + + /* + * Check it makes sense + */ + if (!*hostname) { + plog(XLOG_FATAL, "host name is not set"); + going_down(1); + } + + /* + * Initialize global options structure. + */ + init_global_options(); + + /* + * Partially initialize hostd[]. This + * is completed in get_args(). + */ + if ((domdot = strchr(hostname, '.'))) { + /* + * Hostname already contains domainname. + * Split out hostname and domainname + * components + */ + *domdot++ = '\0'; + hostdomain = domdot; + } + strcpy(hostd, hostname); + + /* + * Trap interrupts for shutdowns. + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = sigterm; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGINT); + sigaddset(&(sa.sa_mask), SIGTERM); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); +#else /* not HAVE_SIGACTION */ + (void) signal(SIGINT, sigterm); +#endif /* not HAVE_SIGACTION */ + + /* + * Trap Terminate so that we can shutdown gracefully (some chance) + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = sigterm; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGTERM); + sigaction(SIGTERM, &sa, NULL); +#else /* not HAVE_SIGACTION */ + (void) signal(SIGTERM, sigterm); +#endif /* not HAVE_SIGACTION */ + + /* + * Hangups tell us to reload the cache + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = sighup; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGHUP); + sigaction(SIGHUP, &sa, NULL); +#else /* not HAVE_SIGACTION */ + (void) signal(SIGHUP, sighup); +#endif /* not HAVE_SIGACTION */ + + /* + * Trap Death-of-a-child. These allow us to + * pick up the exit status of backgrounded mounts. + * See "sched.c". + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = sigchld; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGCHLD); + sigaction(SIGCHLD, &sa, NULL); + + /* + * construct global "masked_sigs" used in nfs_start.c + */ + sigemptyset(&masked_sigs); + sigaddset(&masked_sigs, SIGHUP); + sigaddset(&masked_sigs, SIGCHLD); + sigaddset(&masked_sigs, SIGTERM); + sigaddset(&masked_sigs, SIGINT); +#else /* not HAVE_SIGACTION */ + (void) signal(SIGCHLD, sigchld); +#endif /* not HAVE_SIGACTION */ + + /* + * Fix-up any umask problems. Most systems default + * to 002 which is not too convenient for our purposes + */ + orig_umask = umask(0); + + /* + * Figure out primary network name + */ + getwire(&PrimNetName, &PrimNetNum); + + /* + * Determine command-line arguments + */ + get_args(argc, argv); + + /* + * Log version information. + */ + verstr = strtok(get_version_string(), "\n"); + plog(XLOG_INFO, "AM-UTILS VERSION INFORMATION:"); + while (verstr) { + plog(XLOG_INFO, verstr); + verstr = strtok(NULL, "\n"); + } + + /* + * Get our own IP address so that we + * can mount the automounter. + */ + amu_get_myaddress(&myipaddr); + plog(XLOG_INFO, "My ip addr is 0x%x", htonl(myipaddr.s_addr)); + + /* avoid hanging on other NFS servers if started elsewhere */ + if (chdir("/") < 0) + plog(XLOG_INFO, "cannot chdir to /: %m"); + + /* + * Now check we are root. + */ + if (geteuid() != 0) { + plog(XLOG_FATAL, "Must be root to mount filesystems (euid = %d)", geteuid()); + going_down(1); + } + + /* + * Lock process text and data segment in memory. + */ +#ifdef HAVE_PLOCK + if (gopt.flags & CFM_PROCESS_LOCK) { + if (plock(PROCLOCK) != 0) { + plog(XLOG_WARNING, "Couldn't lock process text and data segment in memory: %m"); + } else { + plog(XLOG_INFO, "Locked process text and data segment in memory"); + } + } +#endif /* HAVE_PLOCK */ + +#ifdef HAVE_MAP_NIS + /* + * If the domain was specified then bind it here + * to circumvent any default bindings that may + * be done in the C library. + */ + if (gopt.nis_domain && yp_bind(gopt.nis_domain)) { + plog(XLOG_FATAL, "Can't bind to NIS domain \"%s\"", gopt.nis_domain); + going_down(1); + } +#endif /* HAVE_MAP_NIS */ + +#ifdef DEBUG + amuDebug(D_DAEMON) +#endif /* DEBUG */ + ppid = daemon_mode(); + + sprintf(pid_fsname, "%s:(pid%ld)", hostname, (long) mypid); + + do_mapc_reload = clocktime() + ONE_HOUR; + + /* + * Register automounter with system. + */ + error = mount_automounter(ppid); + if (error && ppid) + kill(ppid, SIGALRM); + going_down(error); + + abort(); + return 1; /* should never get here */ +} diff --git a/amd/amd.h b/amd/amd.h new file mode 100644 index 0000000..eaba46c --- /dev/null +++ b/amd/amd.h @@ -0,0 +1,302 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amd.h,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +#ifndef _AMD_H +#define _AMD_H + + +/* + * MACROS: + */ + +/* options for amd.conf */ +#define CFM_BROWSABLE_DIRS 0x0001 +#define CFM_MOUNT_TYPE_AUTOFS 0x0002 +#define CFM_ENABLE_DEFAULT_SELECTORS 0x0004 +#define CFM_NORMALIZE_HOSTNAMES 0x0008 +#define CFM_PROCESS_LOCK 0x0010 +#define CFM_PRINT_PID 0x0020 +#define CFM_RESTART_EXISTING_MOUNTS 0x0040 +#define CFM_SHOW_STATFS_ENTRIES 0x0080 +#define CFM_FULLY_QUALIFIED_HOSTS 0x0100 +#define CFM_BROWSABLE_DIRS_FULL 0x0200 /* allow '/' in readdir() */ +#define CFM_UNMOUNT_ON_EXIT 0x0400 /* when amd finishing */ + +/* some systems (SunOS 4.x) neglect to define the mount null message */ +#ifndef MOUNTPROC_NULL +# define MOUNTPROC_NULL ((u_long)(0)) +#endif /* not MOUNTPROC_NULL */ + +/* Hash table size */ +#define NKVHASH (1 << 2) /* Power of two */ + +/* interval between forced retries of a mount */ +#define RETRY_INTERVAL 2 + +#define ereturn(x) { *error_return = x; return 0; } + + +/* + * TYPEDEFS: + */ + +typedef struct cf_map cf_map_t; +typedef struct kv kv; +/* + * Cache map operations + */ +typedef void add_fn(mnt_map *, char *, char *); +typedef int init_fn(mnt_map *, char *, time_t *); +typedef int mtime_fn(mnt_map *, char *, time_t *); +typedef int isup_fn(mnt_map *, char *); +typedef int reload_fn(mnt_map *, char *, add_fn *); +typedef int search_fn(mnt_map *, char *, char *, char **, time_t *); + + + +/* + * STRUCTURES: + */ + +/* global amd options that are manipulated by conf.c */ +struct amu_global_options { + char *arch; /* name of current architecture */ + char *auto_dir; /* automounter temp dir */ + char *cluster; /* cluster name */ + char *karch; /* kernel architecture */ + char *logfile; /* amd log file */ + char *op_sys; /* operating system name */ + char *op_sys_ver; /* OS version */ + char *pid_file; /* PID file */ + char *sub_domain; /* local domain */ + char *map_options; /* global map options */ + char *map_type; /* global map type */ + char *search_path; /* search path for maps */ + char *mount_type; /* mount type for map */ + u_int flags; /* various CFM_* flags */ + int amfs_auto_retrans; /* NFS retransmit counter */ + int amfs_auto_timeo; /* NFS retry interval */ + int am_timeo; /* cache duration */ + int am_timeo_w; /* dismount interval */ + int portmap_program; /* amd RPC program number */ +#ifdef HAVE_MAP_HESIOD + char *hesiod_base; /* Hesiod rhs */ +#endif /* HAVE_MAP_HESIOD */ +#ifdef HAVE_MAP_LDAP + char *ldap_base; /* LDAP base */ + char *ldap_hostports; /* LDAP host ports */ + long ldap_cache_seconds; /* LDAP internal cache - keep seconds */ + long ldap_cache_maxmem; /* LDAP internal cache - max memory (bytes) */ +#endif /* HAVE_MAP_LDAP */ +#ifdef HAVE_MAP_NIS + char *nis_domain; /* YP domain name */ +#endif /* HAVE_MAP_NIS */ +}; + +/* if you add anything here, update conf.c:reset_cf_map() */ +struct cf_map { + char *cfm_dir; /* /home, /u, /src */ + char *cfm_name; /* amd.home, /etc/amd.home ... */ + char *cfm_type; /* file, hesiod, ndbm, nis ... */ + char *cfm_opts; /* -cache:=all, etc. */ + char *cfm_search_path; /* /etc/local:/etc/amdmaps:/misc/yp */ + char *cfm_tag; /* optional map tag for amd -T */ + u_int cfm_flags; /* browsable_dirs? mount_type? */ +}; + +/* + * Key-value pair + */ +struct kv { + kv *next; + char *key; +#ifdef HAVE_REGEXEC + regex_t re; /* store the regexp from regcomp() */ +#endif /* HAVE_REGEXEC */ + char *val; +}; + +struct mnt_map { + qelem hdr; + int refc; /* Reference count */ + short flags; /* Allocation flags */ + short alloc; /* Allocation mode */ + time_t modify; /* Modify time of map */ + char *map_name; /* Name of this map */ + char *wildcard; /* Wildcard value */ + reload_fn *reload; /* Function to be used for reloads */ + isup_fn *isup; /* Is service up or not? (1=up, 0=down) */ + search_fn *search; /* Function to be used for searching */ + mtime_fn *mtime; /* Modify time function */ + kv *kvhash[NKVHASH]; /* Cached data */ + /* options available via amd conf file */ + char *cf_map_type; /* file, hesiod, ndbm, nis, etc. */ + char *cf_search_path; /* /etc/local:/etc/amdmaps:/misc/yp */ + void *map_data; /* Map data black box */ +}; + +/* + * Mounting a file system may take a significant period of time. The + * problem is that if this is done in the main process thread then the + * entire automounter could be blocked, possibly hanging lots of processes + * on the system. Instead we use a continuation scheme to allow mounts to + * be attempted in a sub-process. When the sub-process exits we pick up the + * exit status (by convention a UN*X error number) and continue in a + * notifier. The notifier gets handed a data structure and can then + * determine whether the mount was successful or not. If not, it updates + * the data structure and tries again until there are no more ways to try + * the mount, or some other permanent error occurs. In the mean time no RPC + * reply is sent, even after the mount is successful. We rely on the RPC + * retry mechanism to resend the lookup request which can then be handled. + */ +struct continuation { + char **ivec; /* Current mount info */ + am_node *mp; /* Node we are trying to mount */ + char *key; /* Map key */ + char *info; /* Info string */ + char **xivec; /* Saved strsplit vector */ + char *auto_opts; /* Automount options */ + am_opts fs_opts; /* Filesystem options */ + char *def_opts; /* Default automount options */ + int retry; /* Try again? */ + int tried; /* Have we tried any yet? */ + time_t start; /* Time we started this mount */ + int callout; /* Callout identifier */ +}; + + +/* + * EXTERNALS: + */ + +/* Amq server global functions */ +extern amq_mount_info_list *amqproc_getmntfs_1_svc(voidp argp, struct svc_req *rqstp); +extern amq_mount_stats *amqproc_stats_1_svc(voidp argp, struct svc_req *rqstp); +extern amq_mount_tree_list *amqproc_export_1_svc(voidp argp, struct svc_req *rqstp); +extern amq_mount_tree_p *amqproc_mnttree_1_svc(voidp argp, struct svc_req *rqstp); +extern amq_string *amqproc_getvers_1_svc(voidp argp, struct svc_req *rqstp); +extern int *amqproc_getpid_1_svc(voidp argp, struct svc_req *rqstp); +extern int *amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp); +extern int *amqproc_setopt_1_svc(voidp argp, struct svc_req *rqstp); +extern voidp amqproc_null_1_svc(voidp argp, struct svc_req *rqstp); +extern voidp amqproc_umnt_1_svc(voidp argp, struct svc_req *rqstp); + +/* other external definitions */ +extern am_nfs_fh *root_fh(char *dir); +extern am_node * autofs_lookuppn(am_node *mp, char *fname, int *error_return, int op); +extern am_node *find_ap(char *); +extern am_node *find_ap2(char *, am_node *); +extern bool_t xdr_amq_mount_info_qelem(XDR *xdrs, qelem *qhead); +extern fserver *find_nfs_srvr(mntfs *mf); +extern int auto_fmount(am_node *mp); +extern int auto_fumount(am_node *mp); +extern int mount_nfs_fh(am_nfs_handle_t *fhp, char *dir, char *fs_name, char *opts, mntfs *mf); +extern int process_last_regular_map(void); +extern int set_conf_kv(const char *section, const char *k, const char *v); +extern int try_mount(voidp mvp); +extern int yyparse (void); +extern nfsentry *make_entry_chain(am_node *mp, const nfsentry *current_chain, int fully_browsable); +extern void amfs_auto_cont(int rc, int term, voidp closure); +extern void amfs_auto_mkcacheref(mntfs *mf); +extern void amfs_auto_retry(int rc, int term, voidp closure); +extern void assign_error_mntfs(am_node *mp); +extern void flush_srvr_nfs_cache(void); +extern void free_continuation(struct continuation *cp); +extern void mf_mounted(mntfs *mf); +extern void quick_reply(am_node *mp, int error); +extern void root_newmap(const char *, const char *, const char *, const cf_map_t *); + +/* amd global variables */ +extern FILE *yyin; +extern SVCXPRT *nfs_program_2_transp; /* For quick_reply() */ +extern char *conf_tag; +extern int NumChild; +extern int fwd_sock; +extern int select_intr_valid; +extern int usage; +extern int use_conf_file; /* use amd configuration file */ +extern jmp_buf select_intr; +extern qelem mfhead; +extern struct amu_global_options gopt; /* where global options are stored */ + +#ifdef HAVE_SIGACTION +extern sigset_t masked_sigs; +#endif /* HAVE_SIGACTION */ + +#if defined(HAVE_AM_FS_LINK) || defined(HAVE_AM_FS_LINKX) +extern char *amfs_link_match(am_opts *fo); +extern int amfs_link_fumount(mntfs *mf); +#endif /* defined(HAVE_AM_FS_LINK) || defined(HAVE_AM_FS_LINKX) */ + +#ifdef HAVE_AM_FS_NFSL +extern char *nfs_match(am_opts *fo); +#endif /* HAVE_AM_FS_NFSL */ + +#if defined(HAVE_FS_NFS3) && !defined(HAVE_XDR_MOUNTRES3) +extern bool_t xdr_mountres3(XDR *xdrs, mountres3 *objp); +#endif /* defined(HAVE_FS_NFS3) && !defined(HAVE_XDR_MOUNTRES3) */ + +#ifdef HAVE_FS_AUTOFS +extern SVCXPRT *autofsxprt; +extern u_short autofs_port; + +extern int autofs_mount(am_node *mp); +extern int autofs_umount(am_node *mp); +extern int create_autofs_service(int *soAUTOFSp, u_short *autofs_portp, SVCXPRT **autofs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)); +extern int svc_create_local_service(void (*dispatch) (), u_long prognum, u_long versnum, char *nettype, char *servname); +extern void autofs_mounted(mntfs *mf); +extern void autofs_program_1(struct svc_req *rqstp, SVCXPRT *transp); +#endif /* HAVE_FS_AUTOFS */ + +/* Unix file system (irix) */ +#ifdef HAVE_FS_XFS +extern am_ops xfs_ops; /* Un*x file system */ +#endif /* HAVE_FS_XFS */ + +/* Unix file system (irix) */ +#ifdef HAVE_FS_EFS +extern am_ops efs_ops; /* Un*x file system */ +#endif /* HAVE_FS_EFS */ + +#endif /* not _AMD_H */ diff --git a/amd/amfs_auto.c b/amd/amfs_auto.c new file mode 100644 index 0000000..89bfa06 --- /dev/null +++ b/amd/amfs_auto.c @@ -0,0 +1,1596 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_auto.c,v 1.1 1998/11/05 02:04:46 ezk Exp $ + * + */ + +/* + * Automount file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/**************************************************************************** + *** MACROS *** + ****************************************************************************/ +#define IN_PROGRESS(cp) ((cp)->mp->am_mnt->mf_flags & MFF_MOUNTING) + +/* DEVELOPERS: turn this on for special debugging of readdir code */ +#undef DEBUG_READDIR + +/**************************************************************************** + *** STRUCTURES *** + ****************************************************************************/ + + + +/**************************************************************************** + *** FORWARD DEFINITIONS *** + ****************************************************************************/ +static int amfs_auto_bgmount(struct continuation * cp, int mpe); +static int amfs_auto_mount(am_node *mp); +static int amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count, int fully_browsable); +static void amfs_auto_umounted(am_node *mp); + + +/**************************************************************************** + *** OPS STRUCTURES *** + ****************************************************************************/ +am_ops amfs_auto_ops = +{ + "auto", + amfs_auto_match, + 0, /* amfs_auto_init */ + amfs_auto_mount, + 0, + amfs_auto_umount, + 0, + amfs_auto_lookuppn, + amfs_auto_readdir, + 0, /* amfs_auto_readlink */ + 0, /* amfs_auto_mounted */ + amfs_auto_umounted, + find_amfs_auto_srvr, + FS_AMQINFO | FS_DIRECTORY +}; + + +/**************************************************************************** + *** FUNCTIONS *** + ****************************************************************************/ +/* + * AMFS_AUTO needs nothing in particular. + */ +char * +amfs_auto_match(am_opts *fo) +{ + char *p = fo->opt_rfs; + + if (!fo->opt_rfs) { + plog(XLOG_USER, "auto: no mount point named (rfs:=)"); + return 0; + } + if (!fo->opt_fs) { + plog(XLOG_USER, "auto: no map named (fs:=)"); + return 0; + } + + /* + * Swap round fs:= and rfs:= options + * ... historical (jsp) + */ + fo->opt_rfs = fo->opt_fs; + fo->opt_fs = p; + + /* + * mtab entry turns out to be the name of the mount map + */ + return strdup(fo->opt_rfs ? fo->opt_rfs : "."); +} + + + + +/* + * Build a new map cache for this node, or re-use + * an existing cache for the same map. + */ +void +amfs_auto_mkcacheref(mntfs *mf) +{ + char *cache; + + if (mf->mf_fo && mf->mf_fo->opt_cache) + cache = mf->mf_fo->opt_cache; + else + cache = "none"; + mf->mf_private = (voidp) mapc_find(mf->mf_info, cache, + mf->mf_fo->opt_maptype); + mf->mf_prfree = mapc_free; +} + + +/* + * Mount a sub-mount + */ +static int +amfs_auto_mount(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + + /* + * Pseudo-directories are used to provide some structure + * to the automounted directories instead + * of putting them all in the top-level automount directory. + * + * Here, just increment the parent's link count. + */ + mp->am_parent->am_fattr.na_nlink++; + + /* + * Info field of . means use parent's info field. + * Historical - not documented. + */ + if (mf->mf_info[0] == '.' && mf->mf_info[1] == '\0') + mf->mf_info = strealloc(mf->mf_info, mp->am_parent->am_mnt->mf_info); + + /* + * Compute prefix: + * + * If there is an option prefix then use that else + * If the parent had a prefix then use that with name + * of this node appended else + * Use the name of this node. + * + * That means if you want no prefix you must say so + * in the map. + */ + if (mf->mf_fo->opt_pref) { + /* allow pref:=null to set a real null prefix */ + if (STREQ(mf->mf_fo->opt_pref, "null")) { + mp->am_pref = ""; + } else { + /* + * the prefix specified as an option + */ + mp->am_pref = strdup(mf->mf_fo->opt_pref); + } + } else { + /* + * else the parent's prefix + * followed by the name + * followed by / + */ + char *ppref = mp->am_parent->am_pref; + if (ppref == 0) + ppref = ""; + mp->am_pref = str3cat((char *) 0, ppref, mp->am_name, "/"); + } + + /* + * Attach a map cache + */ + amfs_auto_mkcacheref(mf); + + return 0; +} + + + + +/* + * Unmount an automount sub-node + */ +int +amfs_auto_umount(am_node *mp) +{ + return 0; +} + + +/* + * Unmount an automount node + */ +static void +amfs_auto_umounted(am_node *mp) +{ + /* + * If this is a pseudo-directory then just adjust the link count + * in the parent, otherwise call the generic unmount routine + */ + if (mp->am_parent && mp->am_parent->am_parent) + --mp->am_parent->am_fattr.na_nlink; +} + + +/* + * Discard an old continuation + */ +void +free_continuation(struct continuation *cp) +{ + if (cp->callout) + untimeout(cp->callout); + XFREE(cp->key); + XFREE(cp->xivec); + XFREE(cp->info); + XFREE(cp->auto_opts); + XFREE(cp->def_opts); + free_opts(&cp->fs_opts); + XFREE(cp); +} + + +/* + * Discard the underlying mount point and replace + * with a reference to an error filesystem. + */ +void +assign_error_mntfs(am_node *mp) +{ + if (mp->am_error > 0) { + /* + * Save the old error code + */ + int error = mp->am_error; + if (error <= 0) + error = mp->am_mnt->mf_error; + /* + * Discard the old filesystem + */ + free_mntfs(mp->am_mnt); + /* + * Allocate a new error reference + */ + mp->am_mnt = new_mntfs(); + /* + * Put back the error code + */ + mp->am_mnt->mf_error = error; + mp->am_mnt->mf_flags |= MFF_ERROR; + /* + * Zero the error in the mount point + */ + mp->am_error = 0; + } +} + + +/* + * The continuation function. This is called by + * the task notifier when a background mount attempt + * completes. + */ +void +amfs_auto_cont(int rc, int term, voidp closure) +{ + struct continuation *cp = (struct continuation *) closure; + mntfs *mf = cp->mp->am_mnt; + + /* + * Definitely not trying to mount at the moment + */ + mf->mf_flags &= ~MFF_MOUNTING; + + /* + * While we are mounting - try to avoid race conditions + */ + new_ttl(cp->mp); + + /* + * Wakeup anything waiting for this mount + */ + wakeup((voidp) mf); + + /* + * Check for termination signal or exit status... + */ + if (rc || term) { + am_node *xmp; + + if (term) { + /* + * Not sure what to do for an error code. + */ + mf->mf_error = EIO; /* XXX ? */ + mf->mf_flags |= MFF_ERROR; + plog(XLOG_ERROR, "mount for %s got signal %d", cp->mp->am_path, term); + } else { + /* + * Check for exit status... + */ + mf->mf_error = rc; + mf->mf_flags |= MFF_ERROR; + errno = rc; /* XXX */ + if (!STREQ(cp->mp->am_mnt->mf_ops->fs_type, "linkx")) + plog(XLOG_ERROR, "%s: mount (amfs_auto_cont): %m", cp->mp->am_path); + } + + /* + * If we get here then that attempt didn't work, so + * move the info vector pointer along by one and + * call the background mount routine again + */ + amd_stats.d_merr++; + cp->ivec++; + xmp = cp->mp; + (void) amfs_auto_bgmount(cp, 0); + assign_error_mntfs(xmp); + } else { + /* + * The mount worked. + */ + am_mounted(cp->mp); + free_continuation(cp); + } + + reschedule_timeout_mp(); +} + + +/* + * Retry a mount + */ +void +amfs_auto_retry(int rc, int term, voidp closure) +{ + struct continuation *cp = (struct continuation *) closure; + int error = 0; + +#ifdef DEBUG + dlog("Commencing retry for mount of %s", cp->mp->am_path); +#endif /* DEBUG */ + + new_ttl(cp->mp); + + if ((cp->start + ALLOWED_MOUNT_TIME) < clocktime()) { + /* + * The entire mount has timed out. Set the error code and skip past all + * the info vectors so that amfs_auto_bgmount will not have any more + * ways to try the mount, so causing an error. + */ + plog(XLOG_INFO, "mount of \"%s\" has timed out", cp->mp->am_path); + error = ETIMEDOUT; + while (*cp->ivec) + cp->ivec++; + /* explicitly forbid further retries after timeout */ + cp->retry = FALSE; + } + if (error || !IN_PROGRESS(cp)) { + (void) amfs_auto_bgmount(cp, error); + } + reschedule_timeout_mp(); +} + + +/* + * Try to mount a file system. Can be called + * directly or in a sub-process by run_task. + */ +int +try_mount(voidp mvp) +{ + int error = 0; + am_node *mp = (am_node *) mvp; + mntfs *mf = mp->am_mnt; + + /* + * If the directory is not yet made and it needs to be made, then make it! + * This may be run in a background process in which case the flag setting + * won't be noticed later - but it is set anyway just after run_task is + * called. It should probably go away totally... + */ + if (!(mf->mf_flags & MFF_MKMNT) && mf->mf_ops->fs_flags & FS_MKMNT) { + error = mkdirs(mf->mf_mount, 0555); + if (!error) + mf->mf_flags |= MFF_MKMNT; + } + + /* + * Mount it! + */ + error = mount_node(mp); + +#ifdef DEBUG + if (error > 0) { + errno = error; + dlog("amfs_auto call to mount_node failed: %m"); + } +#endif /* DEBUG */ + + return error; +} + + +/* + * Pick a file system to try mounting and + * do that in the background if necessary + * + For each location: + if it is new -defaults then + extract and process + continue; + fi + if it is a cut then + if a location has been tried then + break; + fi + continue; + fi + parse mount location + discard previous mount location if required + find matching mounted filesystem + if not applicable then + this_error = No such file or directory + continue + fi + if the filesystem failed to be mounted then + this_error = error from filesystem + elif the filesystem is mounting or unmounting then + this_error = -1 + elif the fileserver is down then + this_error = -1 + elif the filesystem is already mounted + this_error = 0 + break + fi + if no error on this mount then + this_error = initialize mount point + fi + if no error on this mount and mount is delayed then + this_error = -1 + fi + if this_error < 0 then + retry = true + fi + if no error on this mount then + make mount point if required + fi + if no error on this mount then + if mount in background then + run mount in background + return -1 + else + this_error = mount in foreground + fi + fi + if an error occurred on this mount then + update stats + save error in mount point + fi + endfor + */ +static int +amfs_auto_bgmount(struct continuation * cp, int mpe) +{ + mntfs *mf = cp->mp->am_mnt; /* Current mntfs */ + mntfs *mf_retry = 0; /* First mntfs which needed retrying */ + int this_error = -1; /* Per-mount error */ + int hard_error = -1; + int mp_error = mpe; + + /* + * Try to mount each location. + * At the end: + * hard_error == 0 indicates something was mounted. + * hard_error > 0 indicates everything failed with a hard error + * hard_error < 0 indicates nothing could be mounted now + */ + for (; this_error && *cp->ivec; cp->ivec++) { + am_ops *p; + am_node *mp = cp->mp; + char *link_dir; + int dont_retry; + + if (hard_error < 0) + hard_error = this_error; + + this_error = -1; + + if (**cp->ivec == '-') { + /* + * Pick up new defaults + */ + if (cp->auto_opts && *cp->auto_opts) + cp->def_opts = str3cat(cp->def_opts, cp->auto_opts, ";", *cp->ivec + 1); + else + cp->def_opts = strealloc(cp->def_opts, *cp->ivec + 1); +#ifdef DEBUG + dlog("Setting def_opts to \"%s\"", cp->def_opts); +#endif /* DEBUG */ + continue; + } + /* + * If a mount has been attempted, and we find + * a cut then don't try any more locations. + */ + if (STREQ(*cp->ivec, "/") || STREQ(*cp->ivec, "||")) { + if (cp->tried) { +#ifdef DEBUG + dlog("Cut: not trying any more locations for %s", + mp->am_path); +#endif /* DEBUG */ + break; + } + continue; + } + + /* match the operators */ + p = ops_match(&cp->fs_opts, *cp->ivec, cp->def_opts, mp->am_path, cp->key, mp->am_parent->am_mnt->mf_info); + + /* + * Find a mounted filesystem for this node. + */ + mp->am_mnt = mf = realloc_mntfs(mf, p, &cp->fs_opts, + cp->fs_opts.opt_fs, + cp->fs_opts.fs_mtab, + cp->auto_opts, + cp->fs_opts.opt_opts, + cp->fs_opts.opt_remopts); + + p = mf->mf_ops; +#ifdef DEBUG + dlog("Got a hit with %s", p->fs_type); +#endif /* DEBUG */ + + /* + * Note whether this is a real mount attempt + */ + if (p == &amfs_error_ops) { + plog(XLOG_MAP, "Map entry %s for %s failed to match", *cp->ivec, mp->am_path); + if (this_error <= 0) + this_error = ENOENT; + continue; + } else { + if (cp->fs_opts.fs_mtab) { + plog(XLOG_MAP, "Trying mount of %s on %s fstype %s", + cp->fs_opts.fs_mtab, mp->am_path, p->fs_type); + } + cp->tried = TRUE; + } + + this_error = 0; + dont_retry = FALSE; + + if (mp->am_link) { + XFREE(mp->am_link); + mp->am_link = 0; + } + link_dir = mf->mf_fo->opt_sublink; + + if (link_dir && *link_dir) { + if (*link_dir == '/') { + mp->am_link = strdup(link_dir); + } else { + /* + * try getting fs option from continuation, not mountpoint! + * Don't try logging the string from mf, since it may be bad! + */ + if (cp->fs_opts.opt_fs != mf->mf_fo->opt_fs) + plog(XLOG_ERROR, "use %s instead of 0x%x", + cp->fs_opts.opt_fs, mf->mf_fo->opt_fs); + + mp->am_link = str3cat((char *) 0, + cp->fs_opts.opt_fs, "/", link_dir); + + normalize_slash(mp->am_link); + } + } + + if (mf->mf_error > 0) { + this_error = mf->mf_error; + } else if (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)) { + /* + * Still mounting - retry later + */ +#ifdef DEBUG + dlog("Duplicate pending mount fstype %s", p->fs_type); +#endif /* DEBUG */ + this_error = -1; + } else if (FSRV_ISDOWN(mf->mf_server)) { + /* + * Would just mount from the same place + * as a hung mount - so give up + */ +#ifdef DEBUG + dlog("%s is already hung - giving up", mf->mf_mount); +#endif /* DEBUG */ + mp_error = EWOULDBLOCK; + dont_retry = TRUE; + this_error = -1; + } else if (mf->mf_flags & MFF_MOUNTED) { +#ifdef DEBUG + dlog("duplicate mount of \"%s\" ...", mf->mf_info); +#endif /* DEBUG */ + + /* + * Just call mounted() + */ + am_mounted(mp); + + this_error = 0; + break; + } + + /* + * Will usually need to play around with the mount nodes + * file attribute structure. This must be done here. + * Try and get things initialized, even if the fileserver + * is not known to be up. In the common case this will + * progress things faster. + */ + if (!this_error) { + /* + * Fill in attribute fields. + */ + if (mf->mf_ops->fs_flags & FS_DIRECTORY) + mk_fattr(mp, NFDIR); + else + mk_fattr(mp, NFLNK); + + mp->am_fattr.na_fileid = mp->am_gen; + + if (p->fs_init) + this_error = (*p->fs_init) (mf); + } + + /* + * Make sure the fileserver is UP before doing any more work + */ + if (!FSRV_ISUP(mf->mf_server)) { +#ifdef DEBUG + dlog("waiting for server %s to become available", mf->mf_server->fs_host); +#endif /* DEBUG */ + this_error = -1; + } + + if (!this_error && mf->mf_fo->opt_delay) { + /* + * If there is a delay timer on the mount + * then don't try to mount if the timer + * has not expired. + */ + int i = atoi(mf->mf_fo->opt_delay); + if (i > 0 && clocktime() < (cp->start + i)) { +#ifdef DEBUG + dlog("Mount of %s delayed by %ds", mf->mf_mount, i - clocktime() + cp->start); +#endif /* DEBUG */ + this_error = -1; + } + } + + if (this_error < 0 && !dont_retry) { + if (!mf_retry) + mf_retry = dup_mntfs(mf); + cp->retry = TRUE; + } + + if (!this_error) { + if (p->fs_flags & FS_MBACKGROUND) { + mf->mf_flags |= MFF_MOUNTING; /* XXX */ +#ifdef DEBUG + dlog("backgrounding mount of \"%s\"", mf->mf_mount); +#endif /* DEBUG */ + if (cp->callout) { + untimeout(cp->callout); + cp->callout = 0; + } + run_task(try_mount, (voidp) mp, amfs_auto_cont, (voidp) cp); + mf->mf_flags |= MFF_MKMNT; /* XXX */ + if (mf_retry) + free_mntfs(mf_retry); + return -1; + } else { +#ifdef DEBUG + dlog("foreground mount of \"%s\" ...", mf->mf_info); +#endif /* DEBUG */ + this_error = try_mount((voidp) mp); + if (this_error < 0) { + if (!mf_retry) + mf_retry = dup_mntfs(mf); + cp->retry = TRUE; + } + } + } + + if (this_error >= 0) { + if (this_error > 0) { + amd_stats.d_merr++; + if (mf != mf_retry) { + mf->mf_error = this_error; + mf->mf_flags |= MFF_ERROR; + } + } + + /* + * Wakeup anything waiting for this mount + */ + wakeup((voidp) mf); + } + } + + if (this_error && cp->retry) { + free_mntfs(mf); + mf = cp->mp->am_mnt = mf_retry; + /* + * Not retrying again (so far) + */ + cp->retry = FALSE; + cp->tried = FALSE; + /* + * Start at the beginning. + * Rewind the location vector and + * reset the default options. + */ + cp->ivec = cp->xivec; + cp->def_opts = strealloc(cp->def_opts, cp->auto_opts); + /* + * Arrange that amfs_auto_bgmount is called + * after anything else happens. + */ +#ifdef DEBUG + dlog("Arranging to retry mount of %s", cp->mp->am_path); +#endif /* DEBUG */ + sched_task(amfs_auto_retry, (voidp) cp, (voidp) mf); + if (cp->callout) + untimeout(cp->callout); + cp->callout = timeout(RETRY_INTERVAL, wakeup, (voidp) mf); + + cp->mp->am_ttl = clocktime() + RETRY_INTERVAL; + + /* + * Not done yet - so don't return anything + */ + return -1; + } + + if (hard_error < 0 || this_error == 0) + hard_error = this_error; + + /* + * Discard handle on duff filesystem. + * This should never happen since it + * should be caught by the case above. + */ + if (mf_retry) { + if (hard_error) + plog(XLOG_ERROR, "discarding a retry mntfs for %s", mf_retry->mf_mount); + free_mntfs(mf_retry); + } + + /* + * If we get here, then either the mount succeeded or + * there is no more mount information available. + */ + if (hard_error < 0 && mp_error) + hard_error = cp->mp->am_error = mp_error; + if (hard_error > 0) { + /* + * Set a small(ish) timeout on an error node if + * the error was not a time out. + */ + switch (hard_error) { + case ETIMEDOUT: + case EWOULDBLOCK: + cp->mp->am_timeo = 17; + break; + default: + cp->mp->am_timeo = 5; + break; + } + new_ttl(cp->mp); + } + + /* + * Make sure that the error value in the mntfs has a + * reasonable value. + */ + if (mf->mf_error < 0) { + mf->mf_error = hard_error; + if (hard_error) + mf->mf_flags |= MFF_ERROR; + } + + /* + * In any case we don't need the continuation any more + */ + free_continuation(cp); + + return hard_error; +} + + +/* + * Automount interface to RPC lookup routine + * Find the corresponding entry and return + * the file handle for it. + */ +am_node * +amfs_auto_lookuppn(am_node *mp, char *fname, int *error_return, int op) +{ + am_node *ap, *new_mp, *ap_hung; + char *info; /* Mount info - where to get the file system */ + char **ivec, **xivec; /* Split version of info */ + char *auto_opts; /* Automount options */ + int error = 0; /* Error so far */ + char path_name[MAXPATHLEN]; /* General path name buffer */ + char *pfname; /* Path for database lookup */ + struct continuation *cp; /* Continuation structure if need to mount */ + int in_progress = 0; /* # of (un)mount in progress */ + char *dflts; + mntfs *mf; + +#ifdef DEBUG + dlog("in amfs_auto_lookuppn"); +#endif /* DEBUG */ + + /* + * If the server is shutting down + * then don't return information + * about the mount point. + */ + if (amd_state == Finishing) { +#ifdef DEBUG + if ((mf = mp->am_mnt) == 0 || mf->mf_ops == &amfs_direct_ops) { + dlog("%s mount ignored - going down", fname); + } else { + dlog("%s/%s mount ignored - going down", mp->am_path, fname); + } +#endif /* DEBUG */ + ereturn(ENOENT); + } + + /* + * Handle special case of "." and ".." + */ + if (fname[0] == '.') { + if (fname[1] == '\0') + return mp; /* "." is the current node */ + if (fname[1] == '.' && fname[2] == '\0') { + if (mp->am_parent) { +#ifdef DEBUG + dlog(".. in %s gives %s", mp->am_path, mp->am_parent->am_path); +#endif /* DEBUG */ + return mp->am_parent; /* ".." is the parent node */ + } + ereturn(ESTALE); + } + } + + /* + * Check for valid key name. + * If it is invalid then pretend it doesn't exist. + */ + if (!valid_key(fname)) { + plog(XLOG_WARNING, "Key \"%s\" contains a disallowed character", fname); + ereturn(ENOENT); + } + + /* + * Expand key name. + * fname is now a private copy. + */ + fname = expand_key(fname); + + for (ap_hung = 0, ap = mp->am_child; ap; ap = ap->am_osib) { + /* + * Otherwise search children of this node + */ + if (FSTREQ(ap->am_name, fname)) { + mf = ap->am_mnt; + if (ap->am_error) { + error = ap->am_error; + continue; + } + /* + * If the error code is undefined then it must be + * in progress. + */ + if (mf->mf_error < 0) + goto in_progrss; + + /* + * Check for a hung node + */ + if (FSRV_ISDOWN(mf->mf_server)) { +#ifdef DEBUG + dlog("server hung"); +#endif /* DEBUG */ + error = ap->am_error; + ap_hung = ap; + continue; + } + /* + * If there was a previous error with this node + * then return that error code. + */ + if (mf->mf_flags & MFF_ERROR) { + error = mf->mf_error; + continue; + } + if (!(mf->mf_flags & MFF_MOUNTED) || (mf->mf_flags & MFF_UNMOUNTING)) { + in_progrss: + /* + * If the fs is not mounted or it is unmounting then there + * is a background (un)mount in progress. In this case + * we just drop the RPC request (return nil) and + * wait for a retry, by which time the (un)mount may + * have completed. + */ +#ifdef DEBUG + dlog("ignoring mount of %s in %s -- flags (%x) in progress", + fname, mf->mf_mount, mf->mf_flags); +#endif /* DEBUG */ + in_progress++; + continue; + } + + /* + * Otherwise we have a hit: return the current mount point. + */ +#ifdef DEBUG + dlog("matched %s in %s", fname, ap->am_path); +#endif /* DEBUG */ + XFREE(fname); + return ap; + } + } + + if (in_progress) { +#ifdef DEBUG + dlog("Waiting while %d mount(s) in progress", in_progress); +#endif /* DEBUG */ + XFREE(fname); + ereturn(-1); + } + + /* + * If an error occurred then return it. + */ + if (error) { +#ifdef DEBUG + errno = error; /* XXX */ + dlog("Returning error: %m", error); +#endif /* DEBUG */ + XFREE(fname); + ereturn(error); + } + + /* + * If doing a delete then don't create again! + */ + switch (op) { + case VLOOK_DELETE: + ereturn(ENOENT); + + case VLOOK_CREATE: + break; + + default: + plog(XLOG_FATAL, "Unknown op to amfs_auto_lookuppn: 0x%x", op); + ereturn(EINVAL); + } + + /* + * If the server is going down then just return, + * don't try to mount any more file systems + */ + if ((int) amd_state >= (int) Finishing) { +#ifdef DEBUG + dlog("not found - server going down anyway"); +#endif /* DEBUG */ + XFREE(fname); + ereturn(ENOENT); + } + + /* + * If we get there then this is a reference to an, + * as yet, unknown name so we need to search the mount + * map for it. + */ + if (mp->am_pref) { + sprintf(path_name, "%s%s", mp->am_pref, fname); + pfname = path_name; + } else { + pfname = fname; + } + + mf = mp->am_mnt; + +#ifdef DEBUG + dlog("will search map info in %s to find %s", mf->mf_info, pfname); +#endif /* DEBUG */ + /* + * Consult the oracle for some mount information. + * info is malloc'ed and belongs to this routine. + * It ends up being free'd in free_continuation(). + * + * Note that this may return -1 indicating that information + * is not yet available. + */ + error = mapc_search((mnt_map *) mf->mf_private, pfname, &info); + if (error) { + if (error > 0) + plog(XLOG_MAP, "No map entry for %s", pfname); + else + plog(XLOG_MAP, "Waiting on map entry for %s", pfname); + XFREE(fname); + ereturn(error); + } +#ifdef DEBUG + dlog("mount info is %s", info); +#endif /* DEBUG */ + + /* + * Split info into an argument vector. + * The vector is malloc'ed and belongs to + * this routine. It is free'd in free_continuation() + */ + xivec = ivec = strsplit(info, ' ', '\"'); + + /* + * Default error code... + */ + if (ap_hung) + error = EWOULDBLOCK; + else + error = ENOENT; + + /* + * Allocate a new map + */ + new_mp = exported_ap_alloc(); + if (new_mp == 0) { + XFREE(xivec); + XFREE(info); + XFREE(fname); + ereturn(ENOSPC); + } + if (mf->mf_auto) + auto_opts = mf->mf_auto; + else + auto_opts = ""; + + auto_opts = strdup(auto_opts); + +#ifdef DEBUG + dlog("searching for /defaults entry"); +#endif /* DEBUG */ + if (mapc_search((mnt_map *) mf->mf_private, "/defaults", &dflts) == 0) { + char *dfl; + char **rvec; +#ifdef DEBUG + dlog("/defaults gave %s", dflts); +#endif /* DEBUG */ + if (*dflts == '-') + dfl = dflts + 1; + else + dfl = dflts; + + /* + * Chop the defaults up + */ + rvec = strsplit(dfl, ' ', '\"'); + + if (gopt.flags & CFM_ENABLE_DEFAULT_SELECTORS) { + /* + * Pick whichever first entry matched the list of selectors. + * Strip the selectors from the string, and assign to dfl the + * rest of the string. + */ + if (rvec) { + am_opts ap; + am_ops *pt; + char **sp = rvec; + while (*sp) { /* loop until you find something, if any */ + memset((char *) &ap, 0, sizeof(am_opts)); + pt = ops_match(&ap, *sp, "", mp->am_path, "/defaults", + mp->am_parent->am_mnt->mf_info); + free_opts(&ap); /* don't leak */ + if (pt == &amfs_error_ops) { + plog(XLOG_MAP, "failed to match defaults for \"%s\"", *sp); + } else { + dfl = strip_selectors(*sp, "/defaults"); + plog(XLOG_MAP, "matched default selectors \"%s\"", dfl); + break; + } + ++sp; + } + } + } else { /* not enable_default_selectors */ + /* + * Extract first value + */ + dfl = rvec[0]; + } + + /* + * If there were any values at all... + */ + if (dfl) { + /* + * Log error if there were other values + */ + if (!(gopt.flags & CFM_ENABLE_DEFAULT_SELECTORS) && rvec[1]) { +# ifdef DEBUG + dlog("/defaults chopped into %s", dfl); +# endif /* DEBUG */ + plog(XLOG_USER, "More than a single value for /defaults in %s", mf->mf_info); + } + + /* + * Prepend to existing defaults if they exist, + * otherwise just use these defaults. + */ + if (*auto_opts && *dfl) { + char *nopts = (char *) xmalloc(strlen(auto_opts) + strlen(dfl) + 2); + sprintf(nopts, "%s;%s", dfl, auto_opts); + XFREE(auto_opts); + auto_opts = nopts; + } else if (*dfl) { + auto_opts = strealloc(auto_opts, dfl); + } + } + XFREE(dflts); + /* + * Don't need info vector any more + */ + XFREE(rvec); + } + + /* + * Fill it in + */ + init_map(new_mp, fname); + + /* + * Put it in the table + */ + insert_am(new_mp, mp); + + /* + * Fill in some other fields, + * path and mount point. + * + * bugfix: do not prepend old am_path if direct map + * William Sebok + */ + new_mp->am_path = str3cat(new_mp->am_path, + mf->mf_ops == &amfs_direct_ops ? "" : mp->am_path, + *fname == '/' ? "" : "/", fname); + +#ifdef DEBUG + dlog("setting path to %s", new_mp->am_path); +#endif /* DEBUG */ + + /* + * Take private copy of pfname + */ + pfname = strdup(pfname); + + /* + * Construct a continuation + */ + cp = ALLOC(struct continuation); + cp->callout = 0; + cp->mp = new_mp; + cp->xivec = xivec; + cp->ivec = ivec; + cp->info = info; + cp->key = pfname; + cp->auto_opts = auto_opts; + cp->retry = FALSE; + cp->tried = FALSE; + cp->start = clocktime(); + cp->def_opts = strdup(auto_opts); + memset((voidp) &cp->fs_opts, 0, sizeof(cp->fs_opts)); + + /* + * Try and mount the file system. If this succeeds immediately (possible + * for a ufs file system) then return the attributes, otherwise just + * return an error. + */ + error = amfs_auto_bgmount(cp, error); + reschedule_timeout_mp(); + if (!error) { + XFREE(fname); + return new_mp; + } + + /* + * Code for quick reply. If nfs_program_2_transp is set, then + * its the transp that's been passed down from nfs_program_2(). + * If new_mp->am_transp is not already set, set it by copying in + * nfs_program_2_transp. Once am_transp is set, quick_reply() can + * use it to send a reply to the client that requested this mount. + */ + if (nfs_program_2_transp && !new_mp->am_transp) { + new_mp->am_transp = (SVCXPRT *) xmalloc(sizeof(SVCXPRT)); + *(new_mp->am_transp) = *nfs_program_2_transp; + } + if (error && (new_mp->am_mnt->mf_ops == &amfs_error_ops)) + new_mp->am_error = error; + + assign_error_mntfs(new_mp); + + XFREE(fname); + + ereturn(error); +} + + +/* + * Locate next node in sibling list which is mounted + * and is not an error node. + */ +am_node * +next_nonerror_node(am_node *xp) +{ + mntfs *mf; + + /* + * Bug report (7/12/89) from Rein Tollevik + * Fixes a race condition when mounting direct automounts. + * Also fixes a problem when doing a readdir on a directory + * containing hung automounts. + */ + while (xp && + (!(mf = xp->am_mnt) || /* No mounted filesystem */ + mf->mf_error != 0 || /* There was a mntfs error */ + xp->am_error != 0 || /* There was a mount error */ + !(mf->mf_flags & MFF_MOUNTED) || /* The fs is not mounted */ + (mf->mf_server->fs_flags & FSF_DOWN)) /* The fs may be down */ + ) + xp = xp->am_osib; + + return xp; +} + + +/* + * This readdir function which call a special version of it that allows + * browsing if browsable_dirs=yes was set on the map. + */ +int +amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count) +{ + u_int gen = *(u_int *) cookie; + am_node *xp; + mntent_t mnt; + + dp->dl_eof = FALSE; /* assume readdir not done */ + + /* check if map is browsable */ + if (mp->am_mnt && mp->am_mnt->mf_mopts) { + mnt.mnt_opts = mp->am_mnt->mf_mopts; + if (hasmntopt(&mnt, "fullybrowsable")) + return amfs_auto_readdir_browsable(mp, cookie, dp, ep, count, TRUE); + if (hasmntopt(&mnt, "browsable")) + return amfs_auto_readdir_browsable(mp, cookie, dp, ep, count, FALSE); + } + + if (gen == 0) { + /* + * In the default instance (which is used to start a search) we return + * "." and "..". + * + * This assumes that the count is big enough to allow both "." and ".." + * to be returned in a single packet. If it isn't (which would be + * fairly unbelievable) then tough. + */ +#ifdef DEBUG + dlog("default search"); +#endif /* DEBUG */ + /* + * Check for enough room. This is extremely approximate but is more + * than enough space. Really need 2 times: + * 4byte fileid + * 4byte cookie + * 4byte name length + * 4byte name + * plus the dirlist structure */ + if (count < (2 * (2 * (sizeof(*ep) + sizeof("..") + 4) + sizeof(*dp)))) + return EINVAL; + + xp = next_nonerror_node(mp->am_child); + dp->dl_entries = ep; + + /* construct "." */ + ep[0].ne_fileid = mp->am_gen; + ep[0].ne_name = "."; + ep[0].ne_nextentry = &ep[1]; + *(u_int *) ep[0].ne_cookie = 0; + + /* construct ".." */ + if (mp->am_parent) + ep[1].ne_fileid = mp->am_parent->am_gen; + else + ep[1].ne_fileid = mp->am_gen; + ep[1].ne_name = ".."; + ep[1].ne_nextentry = 0; + *(u_int *) ep[1].ne_cookie = + xp ? xp->am_gen : ~(u_int) 0; + + if (!xp) + dp->dl_eof = TRUE; /* by default assume readdir done */ + + return 0; + } +#ifdef DEBUG + dlog("real child"); +#endif /* DEBUG */ + + if (gen == ~(u_int) 0) { +#ifdef DEBUG + dlog("End of readdir in %s", mp->am_path); +#endif /* DEBUG */ + dp->dl_eof = TRUE; + dp->dl_entries = 0; + return 0; + } + + /* non-browsable directories code */ + xp = mp->am_child; + while (xp && xp->am_gen != gen) + xp = xp->am_osib; + + if (xp) { + int nbytes = count / 2; /* conservative */ + int todo = MAX_READDIR_ENTRIES; + dp->dl_entries = ep; + do { + am_node *xp_next = next_nonerror_node(xp->am_osib); + + if (xp_next) { + *(u_int *) ep->ne_cookie = xp_next->am_gen; + } else { + *(u_int *) ep->ne_cookie = ~(u_int) 0; + dp->dl_eof = TRUE; + } + + ep->ne_fileid = xp->am_gen; + ep->ne_name = xp->am_name; + nbytes -= sizeof(*ep) + 1; + if (xp->am_name) + nbytes -= strlen(xp->am_name); + + xp = xp_next; + + if (nbytes > 0 && !dp->dl_eof && todo > 1) { + ep->ne_nextentry = ep + 1; + ep++; + --todo; + } else { + todo = 0; + } + } while (todo > 0); + + ep->ne_nextentry = 0; + + return 0; + } + return ESTALE; +} + + +/* This one is called only if map is browsable */ +static int +amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count, int fully_browsable) +{ + u_int gen = *(u_int *) cookie; + int chain_length, i; + static nfsentry *te, *te_next; +#ifdef DEBUG_READDIR + nfsentry *ne; + static int j; +#endif /* DEBUG_READDIR */ + + dp->dl_eof = FALSE; /* assume readdir not done */ + +#ifdef DEBUG_READDIR + plog(XLOG_INFO, "amfs_auto_readdir_browsable gen=%u, count=%d", + gen, count); +#endif /* DEBUG_READDIR */ + + if (gen == 0) { + /* + * In the default instance (which is used to start a search) we return + * "." and "..". + * + * This assumes that the count is big enough to allow both "." and ".." + * to be returned in a single packet. If it isn't (which would be + * fairly unbelievable) then tough. + */ +#ifdef DEBUG + dlog("default search"); +#endif /* DEBUG */ + /* + * Check for enough room. This is extremely approximate but is more + * than enough space. Really need 2 times: + * 4byte fileid + * 4byte cookie + * 4byte name length + * 4byte name + * plus the dirlist structure */ + if (count < (2 * (2 * (sizeof(*ep) + sizeof("..") + 4) + sizeof(*dp)))) + return EINVAL; + + /* + * compute # of entries to send in this chain. + * heuristics: 128 bytes per entry. + * This is too much probably, but it seems to work better because + * of the re-entrant nature of nfs_readdir, and esp. on systems + * like OpenBSD 2.2. + */ + chain_length = count / 128; + + /* reset static state counters */ + te = te_next = NULL; + + dp->dl_entries = ep; + + /* construct "." */ + ep[0].ne_fileid = mp->am_gen; + ep[0].ne_name = "."; + ep[0].ne_nextentry = &ep[1]; + *(u_int *) ep[0].ne_cookie = 0; + + /* construct ".." */ + if (mp->am_parent) + ep[1].ne_fileid = mp->am_parent->am_gen; + else + ep[1].ne_fileid = mp->am_gen; + ep[1].ne_name = ".."; + ep[1].ne_nextentry = 0; + *(u_int *) ep[1].ne_cookie = ~(u_int) 0; + + /* + * If map is browsable, call a function make_entry_chain() to construct + * a linked list of unmounted keys, and return it. Then link the chain + * to the regular list. Get the chain only once, but return + * chunks of it each time. + */ + te = make_entry_chain(mp, dp->dl_entries, fully_browsable); + if (!te) + return 0; +#ifdef DEBUG_READDIR + j = 0; + for (ne=te; ne; ne=ne->ne_nextentry) + plog(XLOG_INFO, "gen1 key %4d \"%s\"", j++, ne->ne_name); +#endif /* DEBUG_READDIR */ + + /* return only "chain_length" entries */ + te_next = te; + for (i=1; ine_nextentry; + if (!te_next) + break; + } + if (te_next) { + nfsentry *te_saved = te_next->ne_nextentry; + te_next->ne_nextentry = NULL; /* terminate "te" chain */ + te_next = te_saved; /* save rest of "te" for next iteration */ + dp->dl_eof = FALSE; /* tell readdir there's more */ + } else { + dp->dl_eof = TRUE; /* tell readdir that's it */ + } + ep[1].ne_nextentry = te; /* append this chunk of "te" chain */ +#ifdef DEBUG_READDIR + for (ne=te; ne; ne=ne->ne_nextentry) + plog(XLOG_INFO, "gen2 key %4d \"%s\"", j++, ne->ne_name); +#endif /* DEBUG_READDIR */ + return 0; + } /* end of "if (gen == 0)" statement */ + +#ifdef DEBUG + dlog("real child"); +#endif /* DEBUG */ + + if (gen == ~(u_int) 0) { +#ifdef DEBUG + dlog("End of readdir in %s", mp->am_path); +#endif /* DEBUG */ + dp->dl_eof = TRUE; + dp->dl_entries = 0; + return 0; + } + + /* + * If browsable directories, then continue serving readdir() with another + * chunk of entries, starting from where we left off (when gen was equal + * to 0). Once again, assume last chunk served to readdir. + */ + dp->dl_eof = TRUE; + dp->dl_entries = ep; + + te = te_next; /* reset 'te' from last saved te_next */ + if (!te) { /* another indicator of end of readdir */ + dp->dl_entries = 0; + return 0; + } + /* + * compute # of entries to send in this chain. + * heuristics: 128 bytes per entry. + */ + chain_length = count / 128; + + /* return only "chain_length" entries */ + for (i=1; ine_nextentry; + if (!te_next) + break; + } + if (te_next) { + nfsentry *te_saved = te_next->ne_nextentry; + te_next->ne_nextentry = NULL; /* terminate "te" chain */ + te_next = te_saved; /* save rest of "te" for next iteration */ + dp->dl_eof = FALSE; /* tell readdir there's more */ + } + ep = te; /* send next chunk of "te" chain */ + dp->dl_entries = ep; +#ifdef DEBUG_READDIR + plog(XLOG_INFO, "dl_entries=0x%x, te_next=0x%x, dl_eof=%d", + dp->dl_entries, te_next, dp->dl_eof); + for (ne=te; ne; ne=ne->ne_nextentry) + plog(XLOG_INFO, "gen3 key %4d \"%s\"", j++, ne->ne_name); +#endif /* DEBUG_READDIR */ + return 0; +} + + +int +amfs_auto_fmount(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + return (*mf->mf_ops->fmount_fs) (mf); +} + + +int +amfs_auto_fumount(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + return (*mf->mf_ops->fumount_fs) (mf); +} diff --git a/amd/amfs_direct.c b/amd/amfs_direct.c new file mode 100644 index 0000000..bbc497a --- /dev/null +++ b/amd/amfs_direct.c @@ -0,0 +1,106 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_direct.c,v 1.1 1998/11/05 02:04:46 ezk Exp $ + * + */ + +/* + * Direct file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/**************************************************************************** + *** FORWARD DEFINITIONS *** + ****************************************************************************/ +static am_node *amfs_direct_readlink(am_node *mp, int *error_return); + +/**************************************************************************** + *** OPS STRUCTURES *** + ****************************************************************************/ +am_ops amfs_direct_ops = +{ + "direct", + amfs_auto_match, + 0, /* amfs_direct_init */ + amfs_toplvl_mount, + 0, + amfs_toplvl_umount, + 0, + amfs_error_lookuppn, + amfs_error_readdir, + amfs_direct_readlink, + amfs_toplvl_mounted, + 0, /* amfs_auto_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_BACKGROUND | FS_AMQINFO +}; + + +/**************************************************************************** + *** FUNCTIONS *** + ****************************************************************************/ + +static am_node * +amfs_direct_readlink(am_node *mp, int *error_return) +{ + am_node *xp; + int rc = 0; + + xp = next_nonerror_node(mp->am_child); + if (!xp) { + if (!mp->am_mnt->mf_private) + amfs_auto_mkcacheref(mp->am_mnt); /* XXX */ + xp = amfs_auto_lookuppn(mp, mp->am_path + 1, &rc, VLOOK_CREATE); + } + if (xp) { + new_ttl(xp); /* (7/12/89) from Rein Tollevik */ + return xp; + } + if (amd_state == Finishing) + rc = ENOENT; + *error_return = rc; + return 0; +} diff --git a/amd/amfs_error.c b/amd/amfs_error.c new file mode 100644 index 0000000..59ce890 --- /dev/null +++ b/amd/amfs_error.c @@ -0,0 +1,150 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_error.c,v 1.1 1998/11/05 02:04:46 ezk Exp $ + * + */ + +/* + * Error file system. + * This is used as a last resort catchall if + * nothing else worked. EFS just returns lots + * of error codes, except for unmount which + * always works of course. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +static char * amfs_error_match(am_opts *fo); +static int amfs_error_fmount(mntfs *mf); +static int amfs_error_fumount(mntfs *mf); +static void amfs_error_umounted(am_node *mp); + + +/* + * Ops structure + */ +am_ops amfs_error_ops = +{ + "error", + amfs_error_match, + 0, /* amfs_error_init */ + amfs_auto_fmount, + amfs_error_fmount, + amfs_auto_fumount, + amfs_error_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_error_readlink */ + 0, /* amfs_error_mounted */ + amfs_error_umounted, + find_amfs_auto_srvr, + FS_DISCARD +}; + + + +/* + * EFS file system always matches + */ +static char * +amfs_error_match(am_opts *fo) +{ + return strdup("(error-hook)"); +} + + +static int +amfs_error_fmount(mntfs *mf) +{ + return ENOENT; +} + + +static int +amfs_error_fumount(mntfs *mf) +{ + /* + * Always succeed + */ + return 0; +} + + +/* + * EFS interface to RPC lookup() routine. + * Should never get here in the automounter. + * If we do then just give an error. + */ +am_node * +amfs_error_lookuppn(am_node *mp, char *fname, int *error_return, int op) +{ + *error_return = ESTALE; + return 0; +} + + +/* + * EFS interface to RPC readdir() routine. + * Should never get here in the automounter. + * If we do then just give an error. + */ +int +amfs_error_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count) +{ + return ESTALE; +} + + +/* + * umounted() callback for EFS. + * + * This prevents core-dumps on callbacks to error file-systems from + * nfsx_fumount. + */ +static void +amfs_error_umounted(am_node *mp) +{ + /* nothing to do */ +} diff --git a/amd/amfs_host.c b/amd/amfs_host.c new file mode 100644 index 0000000..bc3d07f --- /dev/null +++ b/amd/amfs_host.c @@ -0,0 +1,686 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_host.c,v 1.1 1998/11/05 02:04:46 ezk Exp $ + * + */ + +/* + * NFS host file system. + * Mounts all exported filesystems from a given host. + * This has now degenerated into a mess but will not + * be rewritten. Amd 6 will support the abstractions + * needed to make this work correctly. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +static char *amfs_host_match(am_opts *fo); +static int amfs_host_fmount(mntfs *mf); +static int amfs_host_fumount(mntfs *mf); +static int amfs_host_init(mntfs *mf); +static void amfs_host_umounted(am_node *mp); + +/* + * Ops structure + */ +am_ops amfs_host_ops = +{ + "host", + amfs_host_match, + amfs_host_init, + amfs_auto_fmount, + amfs_host_fmount, + amfs_auto_fumount, + amfs_host_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_host_readlink */ + 0, /* amfs_host_mounted */ + amfs_host_umounted, + find_nfs_srvr, + FS_MKMNT | FS_BACKGROUND | FS_AMQINFO +}; + + +/* + * Determine the mount point: + * + * The next change we put in to better handle PCs. This is a bit + * disgusting, so you'd better sit down. We change the make_mntpt function + * to look for exported file systems without a leading '/'. If they don't + * have a leading '/', we add one. If the export is 'a:' through 'z:' + * (without a leading slash), we change it to 'a%' (or b% or z%). This + * allows the entire PC disk to be mounted. + */ +static void +make_mntpt(char *mntpt, const exports ex, const mntfs *mf) +{ + if (ex->ex_dir[0] == '/') { + if (ex->ex_dir[1] == 0) + strcpy(mntpt, (mf)->mf_mount); + else + sprintf(mntpt, "%s%s", mf->mf_mount, ex->ex_dir); + } else if (ex->ex_dir[0] >= 'a' && + ex->ex_dir[0] <= 'z' && + ex->ex_dir[1] == ':' && + ex->ex_dir[2] == '/' && + ex->ex_dir[3] == 0) + sprintf(mntpt, "%s/%c%%", mf->mf_mount, ex->ex_dir[0]); + else + sprintf(mntpt, "%s/%s", mf->mf_mount, ex->ex_dir); +} + + +/* + * Execute needs the same as NFS plus a helper command + */ +static char * +amfs_host_match(am_opts *fo) +{ + extern am_ops nfs_ops; + + /* + * Make sure rfs is specified to keep nfs_match happy... + */ + if (!fo->opt_rfs) + fo->opt_rfs = "/"; + + return (*nfs_ops.fs_match) (fo); +} + + +static int +amfs_host_init(mntfs *mf) +{ + fserver *fs; + u_short port; + + if (strchr(mf->mf_info, ':') == 0) + return ENOENT; + + /* + * This is primarily to schedule a wakeup so that as soon + * as our fileserver is ready, we can continue setting up + * the host filesystem. If we don't do this, the standard + * amfs_auto code will set up a fileserver structure, but it will + * have to wait for another nfs request from the client to come + * in before finishing. Our way is faster since we don't have + * to wait for the client to resend its request (which could + * take a second or two). + */ + /* + * First, we find the fileserver for this mntfs and then call + * nfs_srvr_port with our mntfs passed as the wait channel. + * nfs_srvr_port will check some things and then schedule + * it so that when the fileserver is ready, a wakeup is done + * on this mntfs. amfs_auto_cont() is already sleeping on this mntfs + * so as soon as that wakeup happens amfs_auto_cont() is called and + * this mount is retried. + */ + if ((fs = mf->mf_server)) + /* + * We don't really care if there's an error returned. + * Since this is just to help speed things along, the + * error will get handled properly elsewhere. + */ + (void) nfs_srvr_port(fs, &port, (voidp) mf); + + return 0; +} + + +static int +do_mount(am_nfs_handle_t *fhp, char *dir, char *fs_name, char *opts, mntfs *mf) +{ + struct stat stb; + +#ifdef DEBUG + dlog("amfs_host: mounting fs %s on %s\n", fs_name, dir); +#endif /* DEBUG */ + + (void) mkdirs(dir, 0555); + if (stat(dir, &stb) < 0 || (stb.st_mode & S_IFMT) != S_IFDIR) { + plog(XLOG_ERROR, "No mount point for %s - skipping", dir); + return ENOENT; + } + + return mount_nfs_fh(fhp, dir, fs_name, opts, mf); +} + + +static int +sortfun(const voidp x, const voidp y) +{ + exports *a = (exports *) x; + exports *b = (exports *) y; + + return strcmp((*a)->ex_dir, (*b)->ex_dir); +} + + +/* + * Get filehandle + */ +static int +fetch_fhandle(CLIENT * client, char *dir, am_nfs_handle_t *fhp, u_long nfs_version) +{ + struct timeval tv; + enum clnt_stat clnt_stat; + + /* + * Pick a number, any number... + */ + tv.tv_sec = 20; + tv.tv_usec = 0; + +#ifdef DEBUG + dlog("Fetching fhandle for %s", dir); +#endif /* DEBUG */ + + /* + * Call the mount daemon on the remote host to + * get the filehandle. Use NFS version specific call. + */ + + plog(XLOG_INFO, "fetch_fhandle: NFS version %d", nfs_version); +#ifdef HAVE_FS_NFS3 + if (nfs_version == NFS_VERSION3) { + memset((char *) &fhp->v3, 0, sizeof(fhp->v3)); + clnt_stat = clnt_call(client, + MOUNTPROC_MNT, + (XDRPROC_T_TYPE) xdr_dirpath, + (SVC_IN_ARG_TYPE) &dir, + (XDRPROC_T_TYPE) xdr_mountres3, + (SVC_IN_ARG_TYPE) &fhp->v3, + tv); + if (clnt_stat != RPC_SUCCESS) { + plog(XLOG_ERROR, "mountd rpc failed: %s", clnt_sperrno(clnt_stat)); + return EIO; + } + /* Check the status of the filehandle */ + if ((errno = fhp->v3.fhs_status)) { +#ifdef DEBUG + dlog("fhandle fetch for mount version 3 failed: %m"); +#endif /* DEBUG */ + return errno; + } + } else { /* not NFS_VERSION3 mount */ +#endif /* HAVE_FS_NFS3 */ + clnt_stat = clnt_call(client, + MOUNTPROC_MNT, + (XDRPROC_T_TYPE) xdr_dirpath, + (SVC_IN_ARG_TYPE) &dir, + (XDRPROC_T_TYPE) xdr_fhstatus, + (SVC_IN_ARG_TYPE) &fhp->v2, + tv); + if (clnt_stat != RPC_SUCCESS) { + const char *msg = clnt_sperrno(clnt_stat); + plog(XLOG_ERROR, "mountd rpc failed: %s", msg); + return EIO; + } + /* Check status of filehandle */ + if (fhp->v2.fhs_status) { + errno = fhp->v2.fhs_status; +#ifdef DEBUG + dlog("fhandle fetch for mount version 1 failed: %m"); +#endif /* DEBUG */ + return errno; + } +#ifdef HAVE_FS_NFS3 + } /* end of "if (nfs_version == NFS_VERSION3)" statement */ +#endif /* HAVE_FS_NFS3 */ + + /* all is well */ + return 0; +} + + +/* + * Scan mount table to see if something already mounted + */ +static int +already_mounted(mntlist *mlist, char *dir) +{ + mntlist *ml; + + for (ml = mlist; ml; ml = ml->mnext) + if (STREQ(ml->mnt->mnt_dir, dir)) + return 1; + return 0; +} + + +/* + * Mount the export tree from a host + */ +static int +amfs_host_fmount(mntfs *mf) +{ + struct timeval tv2; + CLIENT *client; + enum clnt_stat clnt_stat; + int n_export; + int j, k; + exports exlist = 0, ex; + exports *ep = 0; + am_nfs_handle_t *fp = 0; + char *host; + int error = 0; + struct sockaddr_in sin; + int sock = RPC_ANYSOCK; + int ok = FALSE; + mntlist *mlist; + char fs_name[MAXPATHLEN], *rfs_dir; + char mntpt[MAXPATHLEN]; + struct timeval tv; + u_long mnt_version; + + /* + * Read the mount list + */ + mlist = read_mtab(mf->mf_mount, mnttab_file_name); + +#ifdef MOUNT_TABLE_ON_FILE + /* + * Unlock the mount list + */ + unlock_mntlist(); +#endif /* MOUNT_TABLE_ON_FILE */ + + /* + * Take a copy of the server hostname, address, and nfs version + * to mount version conversion. + */ + host = mf->mf_server->fs_host; + sin = *mf->mf_server->fs_ip; + plog(XLOG_INFO, "amfs_host_fmount: NFS version %d", mf->mf_server->fs_version); +#ifdef HAVE_FS_NFS3 + if (mf->mf_server->fs_version == NFS_VERSION3) + mnt_version = MOUNTVERS3; + else +#endif /* HAVE_FS_NFS3 */ + mnt_version = MOUNTVERS; + + /* + * The original 10 second per try timeout is WAY too large, especially + * if we're only waiting 10 or 20 seconds max for the response. + * That would mean we'd try only once in 10 seconds, and we could + * lose the transmit or receive packet, and never try again. + * A 2-second per try timeout here is much more reasonable. + * 09/28/92 Mike Mitchell, mcm@unx.sas.com + */ + tv.tv_sec = 2; + tv.tv_usec = 0; + + /* + * Create a client attached to mountd + */ + client = get_mount_client(host, &sin, &tv, &sock, mnt_version); + if (client == NULL) { +#ifdef HAVE_CLNT_SPCREATEERROR + plog(XLOG_ERROR, "get_mount_client failed for %s: %s", + host, clnt_spcreateerror("")); +#else /* not HAVE_CLNT_SPCREATEERROR */ + plog(XLOG_ERROR, "get_mount_client failed for %s", host); +#endif /* not HAVE_CLNT_SPCREATEERROR */ + error = EIO; + goto out; + } + if (!nfs_auth) { + error = make_nfs_auth(); + if (error) + goto out; + } + client->cl_auth = nfs_auth; + +#ifdef DEBUG + dlog("Fetching export list from %s", host); +#endif /* DEBUG */ + + /* + * Fetch the export list + */ + tv2.tv_sec = 10; + tv2.tv_usec = 0; + clnt_stat = clnt_call(client, + MOUNTPROC_EXPORT, + (XDRPROC_T_TYPE) xdr_void, + 0, + (XDRPROC_T_TYPE) xdr_exports, + (SVC_IN_ARG_TYPE) & exlist, + tv2); + if (clnt_stat != RPC_SUCCESS) { + const char *msg = clnt_sperrno(clnt_stat); + plog(XLOG_ERROR, "host_fmount rpc failed: %s", msg); + /* clnt_perror(client, "rpc"); */ + error = EIO; + goto out; + } + + /* + * Figure out how many exports were returned + */ + for (n_export = 0, ex = exlist; ex; ex = ex->ex_next) { + /* printf("export %s\n", ex->ex_dir); */ + n_export++; + } + + /* + * Allocate an array of pointers into the list + * so that they can be sorted. If the filesystem + * is already mounted then ignore it. + */ + ep = (exports *) xmalloc(n_export * sizeof(exports)); + for (j = 0, ex = exlist; ex; ex = ex->ex_next) { + make_mntpt(mntpt, ex, mf); + if (!already_mounted(mlist, mntpt)) + ep[j++] = ex; + } + n_export = j; + + /* + * Sort into order. + * This way the mounts are done in order down the tree, + * instead of any random order returned by the mount + * daemon (the protocol doesn't specify...). + */ + qsort(ep, n_export, sizeof(exports), sortfun); + + /* + * Allocate an array of filehandles + */ + fp = (am_nfs_handle_t *) xmalloc(n_export * sizeof(am_nfs_handle_t)); + + /* + * Try to obtain filehandles for each directory. + * If a fetch fails then just zero out the array + * reference but discard the error. + */ + for (j = k = 0; j < n_export; j++) { + /* Check and avoid a duplicated export entry */ + if (j > k && ep[k] && STREQ(ep[j]->ex_dir, ep[k]->ex_dir)) { +#ifdef DEBUG + dlog("avoiding dup fhandle requested for %s", ep[j]->ex_dir); +#endif /* DEBUG */ + ep[j] = 0; + } else { + k = j; + error = fetch_fhandle(client, ep[j]->ex_dir, &fp[j], + mf->mf_server->fs_version); + if (error) + ep[j] = 0; + } + } + + /* + * Mount each filesystem for which we have a filehandle. + * If any of the mounts succeed then mark "ok" and return + * error code 0 at the end. If they all fail then return + * the last error code. + */ + strncpy(fs_name, mf->mf_info, sizeof(fs_name)); + if ((rfs_dir = strchr(fs_name, ':')) == (char *) 0) { + plog(XLOG_FATAL, "amfs_host_fmount: mf_info has no colon"); + error = EINVAL; + goto out; + } + ++rfs_dir; + for (j = 0; j < n_export; j++) { + ex = ep[j]; + if (ex) { + strcpy(rfs_dir, ex->ex_dir); + make_mntpt(mntpt, ex, mf); + if (do_mount(&fp[j], mntpt, fs_name, mf->mf_mopts, mf) == 0) + ok = TRUE; + } + } + + /* + * Clean up and exit + */ +out: + discard_mntlist(mlist); + if (ep) + XFREE(ep); + if (fp) + XFREE(fp); + if (sock != RPC_ANYSOCK) + (void) amu_close(sock); + if (client) + clnt_destroy(client); + if (exlist) + xdr_pri_free((XDRPROC_T_TYPE) xdr_exports, (caddr_t) &exlist); + if (ok) + return 0; + return error; +} + + +/* + * Return true if pref is a directory prefix of dir. + * + * XXX TODO: + * Does not work if pref is "/". + */ +static int +directory_prefix(char *pref, char *dir) +{ + int len = strlen(pref); + + if (!NSTREQ(pref, dir, len)) + return FALSE; + if (dir[len] == '/' || dir[len] == '\0') + return TRUE; + return FALSE; +} + + +/* + * Unmount a mount tree + */ +static int +amfs_host_fumount(mntfs *mf) +{ + mntlist *ml, *mprev; + int xerror = 0; + + /* + * Read the mount list + */ + mntlist *mlist = read_mtab(mf->mf_mount, mnttab_file_name); + +#ifdef MOUNT_TABLE_ON_FILE + /* + * Unlock the mount list + */ + unlock_mntlist(); +#endif /* MOUNT_TABLE_ON_FILE */ + + /* + * Reverse list... + */ + ml = mlist; + mprev = 0; + while (ml) { + mntlist *ml2 = ml->mnext; + ml->mnext = mprev; + mprev = ml; + ml = ml2; + } + mlist = mprev; + + /* + * Unmount all filesystems... + */ + for (ml = mlist; ml && !xerror; ml = ml->mnext) { + char *dir = ml->mnt->mnt_dir; + if (directory_prefix(mf->mf_mount, dir)) { + int error; +#ifdef DEBUG + dlog("amfs_host: unmounts %s", dir); +#endif /* DEBUG */ + /* + * Unmount "dir" + */ + error = UMOUNT_FS(dir, mnttab_file_name); + /* + * Keep track of errors + */ + if (error) { + if (!xerror) + xerror = error; + if (error != EBUSY) { + errno = error; + plog(XLOG_ERROR, "Tree unmount of %s failed: %m", ml->mnt->mnt_dir); + } + } else { + (void) rmdirs(dir); + } + } + } + + /* + * Throw away mount list + */ + discard_mntlist(mlist); + + /* + * Try to remount, except when we are shutting down. + */ + if (xerror && amd_state != Finishing) { + xerror = amfs_host_fmount(mf); + if (!xerror) { + /* + * Don't log this - it's usually too verbose + plog(XLOG_INFO, "Remounted host %s", mf->mf_info); + */ + xerror = EBUSY; + } + } + return xerror; +} + + +/* + * Tell mountd we're done. + * This is not quite right, because we may still + * have other filesystems mounted, but the existing + * mountd protocol is badly broken anyway. + */ +static void +amfs_host_umounted(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + char *host; + CLIENT *client; + enum clnt_stat clnt_stat; + struct sockaddr_in sin; + int sock = RPC_ANYSOCK; + struct timeval tv; + u_long mnt_version; + + if (mf->mf_error || mf->mf_refc > 1 || !mf->mf_server) + return; + + /* + * Take a copy of the server hostname, address, and NFS version + * to mount version conversion. + */ + host = mf->mf_server->fs_host; + sin = *mf->mf_server->fs_ip; + plog(XLOG_INFO, "amfs_host_umounted: NFS version %d", mf->mf_server->fs_version); +#ifdef HAVE_FS_NFS3 + if (mf->mf_server->fs_version == NFS_VERSION3) + mnt_version = MOUNTVERS3; + else +#endif /* HAVE_FS_NFS3 */ + mnt_version = MOUNTVERS; + + /* + * Create a client attached to mountd + */ + tv.tv_sec = 10; + tv.tv_usec = 0; + client = get_mount_client(host, &sin, &tv, &sock, mnt_version); + if (client == NULL) { +#ifdef HAVE_CLNT_SPCREATEERROR + plog(XLOG_ERROR, "get_mount_client failed for %s: %s", + host, clnt_spcreateerror("")); +#else /* not HAVE_CLNT_SPCREATEERROR */ + plog(XLOG_ERROR, "get_mount_client failed for %s", host); +#endif /* not HAVE_CLNT_SPCREATEERROR */ + goto out; + } + + if (!nfs_auth) { + if (make_nfs_auth()) + goto out; + } + client->cl_auth = nfs_auth; + +#ifdef DEBUG + dlog("Unmounting all from %s", host); +#endif /* DEBUG */ + + clnt_stat = clnt_call(client, + MOUNTPROC_UMNTALL, + (XDRPROC_T_TYPE) xdr_void, + 0, + (XDRPROC_T_TYPE) xdr_void, + 0, + tv); + if (clnt_stat != RPC_SUCCESS && clnt_stat != RPC_SYSTEMERROR) { + /* RPC_SYSTEMERROR seems to be returned for no good reason ... */ + const char *msg = clnt_sperrno(clnt_stat); + plog(XLOG_ERROR, "unmount all from %s rpc failed: %s", host, msg, clnt_stat); + goto out; + } + +out: + if (sock != RPC_ANYSOCK) + (void) amu_close(sock); + if (client) + clnt_destroy(client); +} diff --git a/amd/amfs_inherit.c b/amd/amfs_inherit.c new file mode 100644 index 0000000..ac51109 --- /dev/null +++ b/amd/amfs_inherit.c @@ -0,0 +1,200 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_inherit.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Inheritance file system. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * This implements a filesystem restart. + * + * This is a *gross* hack - it knows far too + * much about the way other parts of the + * system work. See restart.c too. + */ + +static char *amfs_inherit_match(am_opts *fo); +static int amfs_inherit_fmount(mntfs *mf); +static int amfs_inherit_fumount(mntfs *mf); +static int amfs_inherit_init(mntfs *mf); +static int amfs_inherit_mount(am_node *mp); + + +/* + * Ops structure + */ +am_ops amfs_inherit_ops = +{ + "inherit", + amfs_inherit_match, + amfs_inherit_init, + amfs_inherit_mount, + amfs_inherit_fmount, + amfs_auto_fumount, + amfs_inherit_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_inherit_readlink */ + 0, /* amfs_inherit_mounted */ + 0, /* amfs_inherit_umounted */ + find_amfs_auto_srvr, + FS_DISCARD +}; + + +/* + * This should never be called. + */ +static char * +amfs_inherit_match(am_opts *fo) +{ + plog(XLOG_FATAL, "amfs_inherit_match called!"); + return 0; +} + + +static int +amfs_inherit_init(mntfs *mf) +{ + mntfs *mf_link = (mntfs *) mf->mf_private; + + if (mf_link == 0) { + plog(XLOG_ERROR, "Remount collision on %s?", mf->mf_mount); + plog(XLOG_FATAL, "Attempting to init not-a-filesystem"); + return EINVAL; + } + + if (mf_link->mf_ops->fs_init) + return (*mf_link->mf_ops->fs_init) (mf_link); + return 0; +} + + +/* + * Take the linked mount point and + * propagate. + */ +static mntfs * +amfs_inherit_inherit(mntfs *mf) +{ + mntfs *mf_link = (mntfs *) mf->mf_private; + + if (mf_link == 0) { + plog(XLOG_FATAL, "Attempting to inherit not-a-filesystem"); + return 0; /* XXX */ + } + mf_link->mf_fo = mf->mf_fo; + + /* + * Discard the old map. + * Don't call am_unmounted since this + * node was never really mounted in the + * first place. + */ + mf->mf_private = 0; + free_mntfs(mf); + + /* + * Free the dangling reference + * to the mount link. + */ + free_mntfs(mf_link); + + /* + * Get a hold of the other entry + */ + mf_link->mf_flags &= ~MFF_RESTART; + + /* Say what happened */ + plog(XLOG_INFO, "restarting %s on %s", mf_link->mf_info, mf_link->mf_mount); + + return mf_link; +} + + +static int +amfs_inherit_mount(am_node *mp) +{ + mntfs *newmf = amfs_inherit_inherit(mp->am_mnt); + + if (newmf) { + mp->am_mnt = newmf; + /* + * XXX - must do the am_mounted call here + */ + if (newmf->mf_ops->fs_flags & FS_MBACKGROUND) + am_mounted(mp); + + new_ttl(mp); + return 0; + } + return EINVAL; +} + + +static int +amfs_inherit_fmount(mntfs *mf) +{ + am_node *mp = find_mf(mf); + + if (mp) + return amfs_inherit_mount(mp); + return amfs_inherit_inherit(mf) ? 0 : EINVAL; +} + + +static int +amfs_inherit_fumount(mntfs *mf) +{ + /* + * Always succeed + */ + return 0; +} diff --git a/amd/amfs_link.c b/amd/amfs_link.c new file mode 100644 index 0000000..9223d81 --- /dev/null +++ b/amd/amfs_link.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_link.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Symbol-link file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Ops structures + */ +am_ops amfs_link_ops = +{ + "link", + amfs_link_match, + 0, /* amfs_link_init */ + amfs_auto_fmount, + amfs_link_fmount, + amfs_auto_fumount, + amfs_link_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_link_readlink */ + 0, /* amfs_link_mounted */ + 0, /* amfs_link_umounted */ + find_amfs_auto_srvr, + 0 +}; + + +/* + * SFS needs a link. + */ +char * +amfs_link_match(am_opts *fo) +{ + + if (!fo->opt_fs) { + plog(XLOG_USER, "link: no fs specified"); + return 0; + } + + /* + * Bug report (14/12/89) from Jay Plett + * If an automount point has the same name as an existing + * link type mount Amd hits a race condition and either hangs + * or causes a symlink loop. + * + * If fs begins with a '/' change the opt_fs & opt_sublink + * fields so that the fs option doesn't end up pointing at + * an existing symlink. + * + * If sublink is nil then set sublink to fs + * else set sublink to fs / sublink + * + * Finally set fs to ".". + */ + if (*fo->opt_fs == '/') { + char *fullpath; + char *link = fo->opt_sublink; + if (link) { + if (*link == '/') + fullpath = strdup(link); + else + fullpath = str3cat((char *) 0, fo->opt_fs, "/", link); + } else { + fullpath = strdup(fo->opt_fs); + } + + if (fo->opt_sublink) + XFREE(fo->opt_sublink); + fo->opt_sublink = fullpath; + fo->opt_fs = str3cat(fo->opt_fs, ".", fullpath, ""); + } + + return strdup(fo->opt_fs); +} + + +int +amfs_link_fmount(mntfs *mf) +{ + /* + * Wow - this is hard to implement! :-) + */ + return 0; +} + + +int +amfs_link_fumount(mntfs *mf) +{ + return 0; +} diff --git a/amd/amfs_linkx.c b/amd/amfs_linkx.c new file mode 100644 index 0000000..9fc1ba9 --- /dev/null +++ b/amd/amfs_linkx.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_linkx.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Symbol-link file system, with test that the target of the link exists. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static int amfs_linkx_mount(am_node *mp); + +/* + * linkx operations + */ +struct am_ops amfs_linkx_ops = +{ + "linkx", + amfs_link_match, + 0, /* amfs_linkx_init */ + amfs_linkx_mount, + 0, + amfs_auto_fumount, + amfs_link_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_linkx_readlink */ + 0, /* amfs_linkx_mounted */ + 0, /* amfs_linkx_umounted */ + find_amfs_auto_srvr, + FS_MBACKGROUND +}; + + +static int +amfs_linkx_mount(am_node *mp) +{ + /* + * Check for existence of target. + */ + struct stat stb; + char *ln; + + if (mp->am_link) + ln = mp->am_link; + else /* should never occur */ + ln = mp->am_mnt->mf_mount; + + /* + * Use lstat, not stat, since we don't + * want to know if the ultimate target of + * a symlink chain exists, just the first. + */ + if (lstat(ln, &stb) < 0) + return errno; + + return 0; +} diff --git a/amd/amfs_nfsl.c b/amd/amfs_nfsl.c new file mode 100644 index 0000000..44f08da --- /dev/null +++ b/amd/amfs_nfsl.c @@ -0,0 +1,237 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_nfsl.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * NFSL: Network file system with local existence check. If the local + * path denoted by $rfs exists, it behaves as type:=link. + * + * Example: + * pkg type:=nfsl;rhost:=jonny;rfs:=/n/johnny/src/pkg;fs:=${rfs} + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* forward declarations */ +static char *amfs_nfsl_match(am_opts *fo); +static int amfs_nfsl_init(mntfs *mf); +static int amfs_nfsl_fmount(mntfs *mf); +static int amfs_nfsl_fumount(mntfs *mf); +static void amfs_nfsl_umounted(am_node *mp); +static fserver *amfs_nfsl_ffserver(mntfs *mf); + +/* + * NFS-Link operations + */ +am_ops amfs_nfsl_ops = +{ + "nfsl", /* name of file system */ + amfs_nfsl_match, /* match */ + amfs_nfsl_init, /* initialize */ + amfs_auto_fmount, /* mount vnode */ + amfs_nfsl_fmount, /* mount vfs */ + amfs_auto_fumount, /* unmount vnode */ + amfs_nfsl_fumount, /* unmount VFS */ + amfs_error_lookuppn, /* lookup path-name */ + amfs_error_readdir, /* read directory */ + 0, /* read link */ + 0, /* after-mount extra actions */ + amfs_nfsl_umounted, /* after-umount extra actions */ + amfs_nfsl_ffserver, /* find a file server */ + FS_MKMNT | FS_BACKGROUND | FS_AMQINFO /* flags */ +}; + + +/* + * Check that f/s has all needed fields. + * Returns: matched string if found, NULL otherwise. + */ +static char * +amfs_nfsl_match(am_opts *fo) +{ + char *cp = fo->opt_fs; + char *ho = fo->opt_rhost; + struct stat stb; + + if (!cp || !ho) { + plog(XLOG_USER, "amfs_nfsl: host $fs and $rhost must be specified"); + return NULL; + } + + /* + * If this host is not the same as $rhost, or if link does not exist, + * perform nfs_match(), same as for type:=nfs. + * If link value exists (or same host), then perform amfs_link_match(), + * same as for linkx. + */ + if (!STRCEQ(ho, hostname)) { + plog(XLOG_INFO, "amfs_nfsl: \"%s\" is not local host, using type:=nfs", ho); + return nfs_match(fo); + } else if (lstat(cp, &stb) < 0) { + plog(XLOG_INFO, "amfs_nfsl: \"%s\" does not exist, using type:=nfs", cp); + return nfs_match(fo); + } else { + plog(XLOG_INFO, "amfs_nfsl: \"%s\" exists, using type:=link", cp); + return amfs_link_match(fo); + } +} + + +/* + * Initialize. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +amfs_nfsl_init(mntfs *mf) +{ + /* + * If a link, do nothing (same as type:=link). + * If non-link, do nfs_init (same as type:=nfs). + */ + if (mf->mf_flags & MFF_NFSLINK) { + return 0; + } else { + return nfs_init(mf); + } +} + + +/* + * Mount vfs. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +amfs_nfsl_fmount(mntfs *mf) +{ + /* + * If a link, do run amfs_link_fmount() (same as type:=link) + * If non-link, do nfs_fmount (same as type:=nfs). + */ + if (mf->mf_flags & MFF_NFSLINK) { + return amfs_link_fmount(mf); + } else { + return nfs_fmount(mf); + } +} + + +/* + * Unmount VFS. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +amfs_nfsl_fumount(mntfs *mf) +{ + /* + * If a link, do run amfs_link_fumount() (same as type:=link) + * If non-link, do nfs_fumount (same as type:=nfs). + */ + if (mf->mf_flags & MFF_NFSLINK) { + return amfs_link_fumount(mf); + } else { + return nfs_fumount(mf); + } +} + + +/* + * Async unmount callback function. + * After the base umount() succeeds, we may want to take extra actions, + * such as informing remote mount daemons that we've unmounted them. + * See amfs_auto_umounted(), host_umounted(), nfs_umounted(). + */ +static void +amfs_nfsl_umounted(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + + /* + * If a link, do nothing (same as type:=link) + * If non-link, do nfs_fumount (same as type:=nfs). + */ + if (mf->mf_flags & MFF_NFSLINK) { + return; + } else { + nfs_umounted(mp); + /* + * MUST remove mount point directories, because if they remain + * behind, the next nfsl access will think they are a link + * type file system, and not NFS! (when it performs link target + * existence test) + */ + if (mf->mf_flags & MFF_MKMNT) + rmdirs(mf->mf_mount); + return; + } +} + + +/* + * Find a file server. + * Returns: fserver of found server, or NULL if not found. + */ +static fserver * +amfs_nfsl_ffserver(mntfs *mf) +{ + char *cp = mf->mf_fo->opt_fs; + char *ho = mf->mf_fo->opt_rhost; + struct stat stb; + + /* + * If this host is not the same as $rhost, or if link does not exist, + * perform find_nfs_srvr(), same as for type:=nfs. + * If link value exists (or same host), then perform + * find_amfs_auto_srvr(), same as for linkx. + */ + if (!STREQ(ho, hostname) || lstat(cp, &stb) < 0) { + return find_nfs_srvr(mf); + } else { + mf->mf_flags |= MFF_NFSLINK; + return find_amfs_auto_srvr(mf); + } +} diff --git a/amd/amfs_nfsx.c b/amd/amfs_nfsx.c new file mode 100644 index 0000000..ede9fe0 --- /dev/null +++ b/amd/amfs_nfsx.c @@ -0,0 +1,532 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_nfsx.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * NFS hierarchical mounts + * + * TODO: Re-implement. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * The rfs field contains a list of mounts to be done from + * the remote host. + */ +typedef struct amfs_nfsx_mnt { + mntfs *n_mnt; + int n_error; +} amfs_nfsx_mnt; + +struct amfs_nfsx { + int nx_c; /* Number of elements in nx_v */ + amfs_nfsx_mnt *nx_v; /* Underlying mounts */ + amfs_nfsx_mnt *nx_try; +}; + +/* forward definitions */ +static char *amfs_nfsx_match(am_opts *fo); +static int amfs_nfsx_fmount (mntfs *); +static int amfs_nfsx_fmount(mntfs *mf); +static int amfs_nfsx_fumount(mntfs *mf); +static int amfs_nfsx_init(mntfs *mf); + +/* + * Ops structure + */ +am_ops amfs_nfsx_ops = +{ + "nfsx", + amfs_nfsx_match, + amfs_nfsx_init, + amfs_auto_fmount, + amfs_nfsx_fmount, + amfs_auto_fumount, + amfs_nfsx_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_nfsx_readlink */ + 0, /* amfs_nfsx_mounted */ + 0, /* amfs_nfsx_umounted */ + find_nfs_srvr, /* XXX */ + /* FS_UBACKGROUND| */ FS_AMQINFO +}; + + +static char * +amfs_nfsx_match(am_opts *fo) +{ + char *xmtab; + char *ptr; + int len; + + if (!fo->opt_rfs) { + plog(XLOG_USER, "amfs_nfsx: no remote filesystem specified"); + return FALSE; + } + + if (!fo->opt_rhost) { + plog(XLOG_USER, "amfs_nfsx: no remote host specified"); + return FALSE; + } + + /* set default sublink */ + if (fo->opt_sublink == 0) { + ptr = strchr(fo->opt_rfs, ','); + if (ptr && ptr != (fo->opt_rfs + 1)) + fo->opt_sublink = strnsave(fo->opt_rfs + 1, ptr - fo->opt_rfs - 1); + } + + /* + * Remove trailing ",..." from ${fs} + * After deslashifying, overwrite the end of ${fs} with "/" + * to make sure it is unique. + */ + if ((ptr = strchr(fo->opt_fs, ','))) + *ptr = '\0'; + deslashify(fo->opt_fs); + + /* + * Bump string length to allow trailing / + */ + len = strlen(fo->opt_fs); + fo->opt_fs = xrealloc(fo->opt_fs, len + 1 + 1); + ptr = fo->opt_fs + len; + + /* + * Make unique... + */ + *ptr++ = '/'; + *ptr = '\0'; + + /* + * Determine magic cookie to put in mtab + */ + xmtab = str3cat((char *) 0, fo->opt_rhost, ":", fo->opt_rfs); +#ifdef DEBUG + dlog("NFS: mounting remote server \"%s\", remote fs \"%s\" on \"%s\"", + fo->opt_rhost, fo->opt_rfs, fo->opt_fs); +#endif /* DEBUG */ + + return xmtab; +} + + +static void +amfs_nfsx_prfree(voidp vp) +{ + struct amfs_nfsx *nx = (struct amfs_nfsx *) vp; + int i; + + for (i = 0; i < nx->nx_c; i++) { + mntfs *m = nx->nx_v[i].n_mnt; + if (m) + free_mntfs(m); + } + + XFREE(nx->nx_v); + XFREE(nx); +} + + +static int +amfs_nfsx_init(mntfs *mf) +{ + /* + * mf_info has the form: + * host:/prefix/path,sub,sub,sub + */ + int i; + int glob_error; + struct amfs_nfsx *nx; + int asked_for_wakeup = 0; + + nx = (struct amfs_nfsx *) mf->mf_private; + + if (nx == 0) { + char **ivec; + char *info = 0; + char *host; + char *pref; + int error = 0; + + info = strdup(mf->mf_info); + host = strchr(info, ':'); + if (!host) { + error = EINVAL; + goto errexit; + } + pref = host +1; + host = info; + + /* + * Split the prefix off from the suffices + */ + ivec = strsplit(pref, ',', '\''); + + /* + * Count array size + */ + for (i = 0; ivec[i]; i++) ; + + nx = ALLOC(struct amfs_nfsx); + mf->mf_private = (voidp) nx; + mf->mf_prfree = amfs_nfsx_prfree; + + nx->nx_c = i - 1; /* i-1 because we don't want the prefix */ + nx->nx_v = (amfs_nfsx_mnt *) xmalloc(nx->nx_c * sizeof(amfs_nfsx_mnt)); + { + char *mp = 0; + char *xinfo = 0; + char *fs = mf->mf_fo->opt_fs; + char *rfs = 0; + for (i = 0; i < nx->nx_c; i++) { + char *path = ivec[i + 1]; + rfs = str3cat(rfs, pref, "/", path); + /* + * Determine the mount point. + * If this is the root, then don't remove + * the trailing slash to avoid mntfs name clashes. + */ + mp = str3cat(mp, fs, "/", rfs); + normalize_slash(mp); + deslashify(mp); + /* + * Determine the mount info + */ + xinfo = str3cat(xinfo, host, *path == '/' ? "" : "/", path); + normalize_slash(xinfo); + if (pref[1] != '\0') + deslashify(xinfo); +#ifdef DEBUG + dlog("amfs_nfsx: init mount for %s on %s", xinfo, mp); +#endif /* DEBUG */ + nx->nx_v[i].n_error = -1; + nx->nx_v[i].n_mnt = find_mntfs(&nfs_ops, mf->mf_fo, mp, xinfo, "", mf->mf_mopts, mf->mf_remopts); + } + if (rfs) + XFREE(rfs); + if (mp) + XFREE(mp); + if (xinfo) + XFREE(xinfo); + } + + XFREE(ivec); + errexit: + if (info) + XFREE(info); + if (error) + return error; + } + + /* + * Iterate through the mntfs's and call + * the underlying init routine on each + */ + glob_error = 0; + + for (i = 0; i < nx->nx_c; i++) { + amfs_nfsx_mnt *n = &nx->nx_v[i]; + mntfs *m = n->n_mnt; + int error = (*m->mf_ops->fs_init) (m); + /* + * if you just "return error" here, you will have made a failure + * in any submounts to fail the whole group. There was old unused code + * here before. + */ + if (error > 0) + n->n_error = error; + + else if (error < 0) { + glob_error = -1; + if (!asked_for_wakeup) { + asked_for_wakeup = 1; + sched_task(wakeup_task, (voidp) mf, (voidp) m); + } + } + } + + return glob_error; +} + + +static void +amfs_nfsx_cont(int rc, int term, voidp closure) +{ + mntfs *mf = (mntfs *) closure; + struct amfs_nfsx *nx = (struct amfs_nfsx *) mf->mf_private; + amfs_nfsx_mnt *n = nx->nx_try; + + n->n_mnt->mf_flags &= ~(MFF_ERROR | MFF_MOUNTING); + mf->mf_flags &= ~MFF_ERROR; + + /* + * Wakeup anything waiting for this mount + */ + wakeup((voidp) n->n_mnt); + + if (rc || term) { + if (term) { + /* + * Not sure what to do for an error code. + */ + plog(XLOG_ERROR, "mount for %s got signal %d", n->n_mnt->mf_mount, term); + n->n_error = EIO; + } else { + /* + * Check for exit status + */ + errno = rc; /* XXX */ + plog(XLOG_ERROR, "%s: mount (amfs_nfsx_cont): %m", n->n_mnt->mf_mount); + n->n_error = rc; + } + free_mntfs(n->n_mnt); + n->n_mnt = new_mntfs(); + n->n_mnt->mf_error = n->n_error; + n->n_mnt->mf_flags |= MFF_ERROR; + } else { + /* + * The mount worked. + */ + mf_mounted(n->n_mnt); + n->n_error = 0; + } + + /* + * Do the remaining bits + */ + if (amfs_nfsx_fmount(mf) >= 0) { + wakeup((voidp) mf); + mf->mf_flags &= ~MFF_MOUNTING; + mf_mounted(mf); + } +} + + +static int +try_amfs_nfsx_mount(voidp mv) +{ + mntfs *mf = (mntfs *) mv; + int error; + + mf->mf_flags |= MFF_MOUNTING; + error = (*mf->mf_ops->fmount_fs) (mf); + mf->mf_flags &= ~MFF_MOUNTING; + + return error; +} + + +static int +amfs_nfsx_remount(mntfs *mf, int fg) +{ + struct amfs_nfsx *nx = (struct amfs_nfsx *) mf->mf_private; + amfs_nfsx_mnt *n; + int glob_error = -1; + + for (n = nx->nx_v; n < nx->nx_v + nx->nx_c; n++) { + mntfs *m = n->n_mnt; + if (n->n_error < 0) { + if (!(m->mf_flags & MFF_MKMNT) && m->mf_ops->fs_flags & FS_MKMNT) { + int error = mkdirs(m->mf_mount, 0555); + if (!error) + m->mf_flags |= MFF_MKMNT; + } + } + } + + /* + * Iterate through the mntfs's and mount each filesystem + * which is not yet mounted. + */ + for (n = nx->nx_v; n < nx->nx_v + nx->nx_c; n++) { + mntfs *m = n->n_mnt; + if (n->n_error < 0) { + /* + * Check fmount entry pt. exists + * and then mount... + */ + if (!m->mf_ops->fmount_fs) { + n->n_error = EINVAL; + } else { +#ifdef DEBUG + dlog("calling underlying fmount on %s", m->mf_mount); +#endif /* DEBUG */ + if (!fg && foreground && (m->mf_ops->fs_flags & FS_MBACKGROUND)) { + m->mf_flags |= MFF_MOUNTING; /* XXX */ +#ifdef DEBUG + dlog("backgrounding mount of \"%s\"", m->mf_info); +#endif /* DEBUG */ + nx->nx_try = n; + run_task(try_amfs_nfsx_mount, (voidp) m, amfs_nfsx_cont, (voidp) mf); + n->n_error = -1; + return -1; + } else { +#ifdef DEBUG + dlog("foreground mount of \"%s\" ...", mf->mf_info); +#endif /* DEBUG */ + n->n_error = (*m->mf_ops->fmount_fs) (m); + } + } + +#ifdef DEBUG + if (n->n_error > 0) { + errno = n->n_error; /* XXX */ + dlog("underlying fmount of %s failed: %m", m->mf_mount); + } +#endif /* DEBUG */ + + if (n->n_error == 0) { + glob_error = 0; + } else if (glob_error < 0) { + glob_error = n->n_error; + } + } + } + + return glob_error < 0 ? 0 : glob_error; +} + + +static int +amfs_nfsx_fmount(mntfs *mf) +{ + return amfs_nfsx_remount(mf, FALSE); +} + + +/* + * Unmount an NFS hierarchy. + * Note that this is called in the foreground + * and so may hang under extremely rare conditions. + */ +static int +amfs_nfsx_fumount(mntfs *mf) +{ + struct amfs_nfsx *nx = (struct amfs_nfsx *) mf->mf_private; + amfs_nfsx_mnt *n; + int glob_error = 0; + + /* + * Iterate in reverse through the mntfs's and unmount each filesystem + * which is mounted. + */ + for (n = nx->nx_v + nx->nx_c - 1; n >= nx->nx_v; --n) { + mntfs *m = n->n_mnt; + /* + * If this node has not been messed with + * and there has been no error so far + * then try and unmount. + * If an error had occurred then zero + * the error code so that the remount + * only tries to unmount those nodes + * which had been successfully unmounted. + */ + if (n->n_error == 0) { +#ifdef DEBUG + dlog("calling underlying fumount on %s", m->mf_mount); +#endif /* DEBUG */ + n->n_error = (*m->mf_ops->fumount_fs) (m); + if (n->n_error) { + glob_error = n->n_error; + n->n_error = 0; + } else { + /* + * Make sure remount gets this node + */ + n->n_error = -1; + } + } + } + + /* + * If any unmounts failed then remount the + * whole lot... + */ + if (glob_error) { + glob_error = amfs_nfsx_remount(mf, TRUE); + if (glob_error) { + errno = glob_error; /* XXX */ + plog(XLOG_USER, "amfs_nfsx: remount of %s failed: %m", mf->mf_mount); + } + glob_error = EBUSY; + } else { + /* + * Remove all the mount points + */ + for (n = nx->nx_v; n < nx->nx_v + nx->nx_c; n++) { + mntfs *m = n->n_mnt; + am_node am; + + /* + * XXX: all the umounted handler needs is a + * mntfs pointer, so pass an am_node with the right + * pointer in it. + */ + memset((voidp) &am, 0, sizeof(am)); + am.am_mnt = m; +#ifdef DEBUG + dlog("calling underlying umounted on %s", m->mf_mount); +#endif /* DEBUG */ + (*m->mf_ops->umounted) (&am); + + if (n->n_error < 0) { + if (m->mf_ops->fs_flags & FS_MKMNT) { + (void) rmdirs(m->mf_mount); + m->mf_flags &= ~MFF_MKMNT; + } + } + free_mntfs(m); + n->n_mnt = 0; + n->n_error = -1; + } + } + + return glob_error; +} diff --git a/amd/amfs_program.c b/amd/amfs_program.c new file mode 100644 index 0000000..761c963 --- /dev/null +++ b/amd/amfs_program.c @@ -0,0 +1,191 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_program.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Program file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward definitions */ +static char *amfs_program_match(am_opts *fo); +static int amfs_program_fmount(mntfs *mf); +static int amfs_program_fumount(mntfs *mf); +static int amfs_program_init(mntfs *mf); + +/* + * Ops structure + */ +am_ops amfs_program_ops = +{ + "program", + amfs_program_match, + amfs_program_init, + amfs_auto_fmount, + amfs_program_fmount, + amfs_auto_fumount, + amfs_program_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* amfs_program_readlink */ + 0, /* amfs_program_mounted */ + 0, /* amfs_program_umounted */ + find_amfs_auto_srvr, + FS_BACKGROUND | FS_AMQINFO +}; + + +/* + * Execute needs a mount and unmount command. + */ +static char * +amfs_program_match(am_opts *fo) +{ + char *prog; + + if (!fo->opt_mount || !fo->opt_unmount) { + plog(XLOG_USER, "program: no mount/unmount specified"); + return 0; + } + prog = strchr(fo->opt_mount, ' '); + + return strdup(prog ? prog + 1 : fo->opt_mount); +} + + +static int +amfs_program_init(mntfs *mf) +{ + /* + * Save unmount command + */ + if (mf->mf_refc == 1) { + mf->mf_private = (voidp) strdup(mf->mf_fo->opt_unmount); + mf->mf_prfree = (void (*)(voidp)) free; + } + + return 0; +} + + +static int +amfs_program_exec(char *info) +{ + char **xivec; + int error; + + /* + * Split copy of command info string + */ + info = strdup(info); + if (info == 0) + return ENOBUFS; + xivec = strsplit(info, ' ', '\''); + + /* + * Put stdout to stderr + */ + (void) fclose(stdout); + (void) dup(fileno(logfp)); + if (fileno(logfp) != fileno(stderr)) { + (void) fclose(stderr); + (void) dup(fileno(logfp)); + } + + /* + * Try the exec + */ +#ifdef DEBUG + amuDebug(D_FULL) { + char **cp = xivec; + plog(XLOG_DEBUG, "executing (un)mount command..."); + while (*cp) { + plog(XLOG_DEBUG, "arg[%d] = '%s'", cp - xivec, *cp); + cp++; + } + } +#endif /* DEBUG */ + + if (xivec[0] == 0 || xivec[1] == 0) { + errno = EINVAL; + plog(XLOG_USER, "1st/2nd args missing to (un)mount program"); + } else { + (void) execv(xivec[0], xivec + 1); + } + + /* + * Save error number + */ + error = errno; + plog(XLOG_ERROR, "exec failed: %m"); + + /* + * Free allocate memory + */ + XFREE(info); + XFREE(xivec); + + /* + * Return error + */ + return error; +} + + +static int +amfs_program_fmount(mntfs *mf) +{ + return amfs_program_exec(mf->mf_fo->opt_mount); +} + + +static int +amfs_program_fumount(mntfs *mf) +{ + return amfs_program_exec((char *) mf->mf_private); +} diff --git a/amd/amfs_root.c b/amd/amfs_root.c new file mode 100644 index 0000000..e438189 --- /dev/null +++ b/amd/amfs_root.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_root.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Root file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/**************************************************************************** + *** FORWARD DEFINITIONS *** + ****************************************************************************/ +static int amfs_root_mount(am_node *mp); + +/**************************************************************************** + *** OPS STRUCTURES *** + ****************************************************************************/ +am_ops amfs_root_ops = +{ + "root", + 0, /* amfs_root_match */ + 0, /* amfs_root_init */ + amfs_root_mount, + 0, + amfs_auto_umount, + 0, + amfs_auto_lookuppn, + amfs_auto_readdir, + 0, /* amfs_root_readlink */ + 0, /* amfs_root_mounted */ + 0, /* amfs_root_umounted */ + find_amfs_auto_srvr, + FS_NOTIMEOUT | FS_AMQINFO | FS_DIRECTORY +}; + + +/**************************************************************************** + *** FUNCTIONS *** + ****************************************************************************/ + +/* + * Mount the root... + */ +static int +amfs_root_mount(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + + mf->mf_mount = strealloc(mf->mf_mount, pid_fsname); + mf->mf_private = (voidp) mapc_find(mf->mf_info, "", NULL); + mf->mf_prfree = mapc_free; + + return 0; +} diff --git a/amd/amfs_toplvl.c b/amd/amfs_toplvl.c new file mode 100644 index 0000000..b08e596 --- /dev/null +++ b/amd/amfs_toplvl.c @@ -0,0 +1,355 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_toplvl.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Top-level file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/**************************************************************************** + *** FORWARD DEFINITIONS *** + ****************************************************************************/ + + +/**************************************************************************** + *** OPS STRUCTURES *** + ****************************************************************************/ +am_ops amfs_toplvl_ops = +{ + "toplvl", + amfs_auto_match, + 0, /* amfs_auto_init */ + amfs_toplvl_mount, + 0, + amfs_toplvl_umount, + 0, + amfs_auto_lookuppn, + amfs_auto_readdir, /* browsable version of readdir() */ + 0, /* amfs_toplvl_readlink */ + amfs_toplvl_mounted, + 0, /* amfs_toplvl_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_BACKGROUND | FS_AMQINFO | FS_DIRECTORY +}; + + +/**************************************************************************** + *** FUNCTIONS *** + ****************************************************************************/ + +/* + * Mount an automounter directory. + * The automounter is connected into the system + * as a user-level NFS server. mount_amfs_toplvl constructs + * the necessary NFS parameters to be given to the + * kernel so that it will talk back to us. + * + * NOTE: automounter mounts in themselves are using NFS Version 2. + */ +static int +mount_amfs_toplvl(char *dir, char *opts) +{ + char fs_hostname[MAXHOSTNAMELEN + MAXPATHLEN + 1]; + int retry, error, genflags; + mntent_t mnt; + nfs_args_t nfs_args; + am_nfs_fh *fhp; + am_nfs_handle_t anh; + MTYPE_TYPE type = MOUNT_TYPE_NFS; +#ifndef HAVE_TRANSPORT_TYPE_TLI + u_short port; + struct sockaddr_in sin; +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = pid_fsname; + mnt.mnt_opts = opts; + + /* + * Make sure that amd's top-level NFS mounts are hidden by default + * from df. + * If they don't appear to support the either the "ignore" mnttab + * option entry, or the "auto" one, set the mount type to "nfs". + */ + mnt.mnt_type = HIDE_MOUNT_TYPE; + + retry = hasmntval(&mnt, MNTTAB_OPT_RETRY); + if (retry <= 0) + retry = 2; /* XXX */ + + /* + * SET MOUNT ARGS + */ + /* + * get fhandle of remote path for automount point + */ + fhp = root_fh(dir); + if (!fhp) { + plog(XLOG_FATAL, "Can't find root file handle for %s", dir); + return EINVAL; + } + +#ifndef HAVE_TRANSPORT_TYPE_TLI + /* + * Create sockaddr to point to the local machine. 127.0.0.1 + * is not used since that will not work in HP-UX clusters and + * this is no more expensive. + */ + memset((voidp) &sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_addr = myipaddr; + port = hasmntval(&mnt, MNTTAB_OPT_PORT); + if (port) { + sin.sin_port = htons(port); + } else { + plog(XLOG_ERROR, "no port number specified for %s", dir); + return EINVAL; + } +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* + * Make a ``hostname'' string for the kernel + */ + sprintf(fs_hostname, "pid%ld@%s:%s", + (long) (foreground ? mypid : getppid()), + hostname, + dir); + /* + * Most kernels have a name length restriction (64 bytes)... + */ + if (strlen(fs_hostname) >= MAXHOSTNAMELEN) + strcpy(fs_hostname + MAXHOSTNAMELEN - 3, ".."); +#ifdef HOSTNAMESZ + /* + * ... and some of these restrictions are 32 bytes (HOSTNAMESZ) + * If you need to get the definition for HOSTNAMESZ found, you may + * add the proper header file to the conf/nfs_prot/nfs_prot_*.h file. + */ + if (strlen(fs_hostname) >= HOSTNAMESZ) + strcpy(fs_hostname + HOSTNAMESZ - 3, ".."); +#endif /* HOSTNAMESZ */ + + /* + * Finally we can compute the mount genflags set above. + */ + genflags = compute_mount_flags(&mnt); + + /* setup the many fields and flags within nfs_args */ + memmove(&anh.v2.fhs_fh, fhp, sizeof(*fhp)); +#ifdef HAVE_TRANSPORT_TYPE_TLI + compute_nfs_args(&nfs_args, + &mnt, + genflags, + nfsncp, + NULL, /* remote host IP addr is set below */ + NFS_VERSION, /* version 2 */ + "udp", + &anh, + fs_hostname, + pid_fsname); + /* + * IMPORTANT: set the correct IP address AFTERWARDS. It cannot + * be done using the normal mechanism of compute_nfs_args(), because + * that one will allocate a new address and use NFS_SA_DREF() to copy + * parts to it, while assuming that the ip_addr passed is always + * a "struct sockaddr_in". That assumption is incorrect on TLI systems, + * because they define a special macro HOST_SELF which is DIFFERENT + * than localhost (127.0.0.1)! + */ + nfs_args.addr = &nfsxprt->xp_ltaddr; +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + compute_nfs_args(&nfs_args, + &mnt, + genflags, + &sin, + NFS_VERSION, /* version 2 */ + "udp", + &anh, + fs_hostname, + pid_fsname); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /************************************************************************* + * NOTE: while compute_nfs_args() works ok for regular NFS mounts * + * the toplvl one is not, and so some options must be corrected by hand * + * more carefully, *after* compute_nfs_args() runs. * + *************************************************************************/ + compute_automounter_nfs_args(&nfs_args, &mnt); + + /* This is it! Here we try to mount amd on its mount points */ +#ifdef DEBUG + amuDebug(D_TRACE) + print_nfs_args(&nfs_args, 0); +#endif /* DEBUG */ + error = mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type, + 0, NULL, mnttab_file_name); + +#ifdef HAVE_TRANSPORT_TYPE_TLI + free_knetconfig(nfs_args.knconf); + /* + * local automounter mounts do not allocate a special address, so + * no need to XFREE(nfs_args.addr) under TLI. + */ +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + + return error; +} + + +/* + * Mount the top-level + */ +int +amfs_toplvl_mount(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + struct stat stb; + char opts[256], preopts[256]; + int error; + char *mnttype; + + /* + * Mounting the automounter. + * Make sure the mount directory exists, construct + * the mount options and call the mount_amfs_toplvl routine. + */ + + if (stat(mp->am_path, &stb) < 0) { + return errno; + } else if ((stb.st_mode & S_IFMT) != S_IFDIR) { + plog(XLOG_WARNING, "%s is not a directory", mp->am_path); + return ENOTDIR; + } + if (mf->mf_ops == &amfs_toplvl_ops) + mnttype = "indirect"; + else if (mf->mf_ops == &amfs_direct_ops) + mnttype = "direct"; +#ifdef HAVE_AM_FS_UNION + else if (mf->mf_ops == &amfs_union_ops) + mnttype = "union"; +#endif /* HAVE_AM_FS_UNION */ + else + mnttype = "auto"; + + /* + * Construct some mount options: + * + * Tack on magic map= option in mtab to emulate + * SunOS automounter behavior. + */ + preopts[0] = '\0'; +#ifdef MNTTAB_OPT_INTR + strcat(preopts, MNTTAB_OPT_INTR); + strcat(preopts, ","); +#endif /* MNTTAB_OPT_INTR */ +#ifdef MNTTAB_OPT_IGNORE + strcat(preopts, MNTTAB_OPT_IGNORE); + strcat(preopts, ","); +#endif /* MNTTAB_OPT_IGNORE */ + sprintf(opts, "%s%s,%s=%d,%s=%d,%s=%d,%s,map=%s", + preopts, + MNTTAB_OPT_RW, + MNTTAB_OPT_PORT, nfs_port, + MNTTAB_OPT_TIMEO, gopt.amfs_auto_timeo, + MNTTAB_OPT_RETRANS, gopt.amfs_auto_retrans, + mnttype, mf->mf_info); + + /* now do the mount */ + error = mount_amfs_toplvl(mf->mf_mount, opts); + if (error) { + errno = error; + plog(XLOG_FATAL, "mount_amfs_toplvl: %m"); + return error; + } + return 0; +} + + +void +amfs_toplvl_mounted(mntfs *mf) +{ + amfs_auto_mkcacheref(mf); +} + + +/* + * Unmount a top-level automount node + */ +int +amfs_toplvl_umount(am_node *mp) +{ + int error; + struct stat stb; + +again: + /* + * The lstat is needed if this mount is type=direct. + * When that happens, the kernel cache gets confused + * between the underlying type (dir) and the mounted + * type (link) and so needs to be re-synced before + * the unmount. This is all because the unmount system + * call follows links and so can't actually unmount + * a link (stupid!). It was noted that doing an ls -ld + * of the mount point to see why things were not working + * actually fixed the problem - so simulate an ls -ld here. + */ + if (lstat(mp->am_path, &stb) < 0) { +#ifdef DEBUG + dlog("lstat(%s): %m", mp->am_path); +#endif /* DEBUG */ + } + error = UMOUNT_FS(mp->am_path, mnttab_file_name); + if (error == EBUSY) { + plog(XLOG_WARNING, "amfs_toplvl_unmount retrying %s in 1s", mp->am_path); + sleep(1); /* XXX */ + goto again; + } + return error; +} diff --git a/amd/amfs_union.c b/amd/amfs_union.c new file mode 100644 index 0000000..21cc8f5 --- /dev/null +++ b/amd/amfs_union.c @@ -0,0 +1,124 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amfs_union.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Union automounter file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/**************************************************************************** + *** FORWARD DEFINITIONS *** + ****************************************************************************/ +static void amfs_union_mounted(mntfs *mf); + + +/**************************************************************************** + *** OPS STRUCTURES *** + ****************************************************************************/ +am_ops amfs_union_ops = +{ + "union", + amfs_auto_match, + 0, /* amfs_auto_init */ + amfs_toplvl_mount, + 0, + amfs_toplvl_umount, + 0, + amfs_auto_lookuppn, + amfs_auto_readdir, + 0, /* amfs_toplvl_readlink */ + amfs_union_mounted, + 0, /* amfs_toplvl_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_BACKGROUND | FS_AMQINFO | FS_DIRECTORY +}; + + +/* + * Create a reference to a union'ed entry + * XXX: this function may not be used anywhere... + */ +static int +create_amfs_union_node(char *dir, voidp arg) +{ + if (!STREQ(dir, "/defaults")) { + int error = 0; + (void) amfs_toplvl_ops.lookuppn(arg, dir, &error, VLOOK_CREATE); + if (error > 0) { + errno = error; /* XXX */ + plog(XLOG_ERROR, "Could not mount %s: %m", dir); + } + return error; + } + return 0; +} + + +static void +amfs_union_mounted(mntfs *mf) +{ + int i; + + amfs_auto_mkcacheref(mf); + + /* + * Having made the union mount point, + * populate all the entries... + */ + for (i = 0; i <= last_used_map; i++) { + am_node *mp = exported_ap[i]; + if (mp && mp->am_mnt == mf) { + /* return value from create_amfs_union_node is ignored by mapc_keyiter */ + (void) mapc_keyiter((mnt_map *) mp->am_mnt->mf_private, + (void (*)(char *, voidp)) create_amfs_union_node, + mp); + break; + } + } +} diff --git a/amd/amq_subr.c b/amd/amq_subr.c new file mode 100644 index 0000000..2ef44ea --- /dev/null +++ b/amd/amq_subr.c @@ -0,0 +1,501 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq_subr.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ +/* + * Auxiliary routines for amq tool + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward definitions */ +bool_t xdr_amq_mount_tree_node(XDR *xdrs, amq_mount_tree *objp); +bool_t xdr_amq_mount_subtree(XDR *xdrs, amq_mount_tree *objp); + + +voidp +amqproc_null_1_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +/* + * Return a sub-tree of mounts + */ +amq_mount_tree_p * +amqproc_mnttree_1_svc(voidp argp, struct svc_req *rqstp) +{ + static am_node *mp; + + mp = find_ap(*(char **) argp); + return (amq_mount_tree_p *) ∓ +} + + +/* + * Unmount a single node + */ +voidp +amqproc_umnt_1_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + am_node *mp = find_ap(*(char **) argp); + + if (mp) + forcibly_timeout_mp(mp); + + return (voidp) &res; +} + + +/* + * Return global statistics + */ +amq_mount_stats * +amqproc_stats_1_svc(voidp argp, struct svc_req *rqstp) +{ + return (amq_mount_stats *) &amd_stats; +} + + +/* + * Return the entire tree of mount nodes + */ +amq_mount_tree_list * +amqproc_export_1_svc(voidp argp, struct svc_req *rqstp) +{ + static amq_mount_tree_list aml; + + aml.amq_mount_tree_list_val = (amq_mount_tree_p *) &exported_ap[0]; + aml.amq_mount_tree_list_len = 1; /* XXX */ + + return &aml; +} + + +int * +amqproc_setopt_1_svc(voidp argp, struct svc_req *rqstp) +{ + static int rc; + amq_setopt *opt = (amq_setopt *) argp; + + rc = 0; + + switch (opt->as_opt) { + + case AMOPT_DEBUG: +#ifdef DEBUG + if (debug_option(opt->as_str)) +#endif /* DEBUG */ + rc = EINVAL; + break; + + case AMOPT_LOGFILE: + if (gopt.logfile && opt->as_str + && STREQ(gopt.logfile, opt->as_str)) { + if (switch_to_logfile(opt->as_str)) + rc = EINVAL; + } else { + rc = EACCES; + } + break; + + case AMOPT_XLOG: + if (switch_option(opt->as_str)) + rc = EINVAL; + break; + + case AMOPT_FLUSHMAPC: + if (amd_state == Run) { + plog(XLOG_INFO, "amq says flush cache"); + do_mapc_reload = 0; + flush_nfs_fhandle_cache((fserver *) 0); + flush_srvr_nfs_cache(); + } + break; + } + + return &rc; +} + + +amq_mount_info_list * +amqproc_getmntfs_1_svc(voidp argp, struct svc_req *rqstp) +{ + return (amq_mount_info_list *) &mfhead; /* XXX */ +} + +#ifdef ENABLE_AMQ_MOUNT +/* + * This is code that is vulnerable to IP spoofing attacks. Unless you + * absolutely need it, I suggest you do not enable it + * (using configure --enable-amq-mount) + */ +static int +ok_security(struct svc_req *rqstp) +{ + struct sockaddr_in *sin = (struct sockaddr_in *) NULL; + + if ((sin = amu_svc_getcaller(rqstp->rq_xprt)) == NULL) { + plog(XLOG_ERROR, "amu_svc_getcaller returned NULL"); + return(0); /* assume security is therefore not OK */ + } + + if (ntohs(sin->sin_port) >= 1024 || + !(sin->sin_addr.s_addr == htonl(0x7f000001) || + sin->sin_addr.s_addr == myipaddr.s_addr)) { + char dq[20]; + plog(XLOG_INFO, "AMQ request from %s.%d DENIED", + inet_dquad(dq, sin->sin_addr.s_addr), + ntohs(sin->sin_port)); + return (0); + } + + return (1); +} + + +int * +amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp) +{ + static int rc; + char *s = *(amq_string *) argp; + char *cp; + + plog(XLOG_INFO, "amq requested mount of %s", s); + /* + * Minimalist security check. + */ + if (!ok_security(rqstp)) { + rc = EACCES; + return &rc; + } + /* + * Find end of key + */ + for (cp = (char *) s; *cp && (!isascii(*cp) || !isspace(*cp)); cp++) ; + + if (!*cp) { + plog(XLOG_INFO, "amqproc_mount: Invalid arguments"); + rc = EINVAL; + return &rc; + } + *cp++ = '\0'; + + /* + * Find start of value + */ + while (*cp && isascii(*cp) && isspace(*cp)) + cp++; + + root_newmap(s, cp, (char *) 0, NULL); + rc = mount_auto_node(s, (voidp) root_node); + if (rc < 0) + return 0; + return &rc; +} + +#else /* not ENABLE_AMQ_MOUNT */ + +int * +amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp) +{ + static int rc; + char *s = *(amq_string *) argp; + + plog(XLOG_ERROR, "amq requested mount of %s, but code is disabled", s); + + rc = EINVAL; + return &rc; +} +#endif /* not ENABLE_AMQ_MOUNT */ + + +amq_string * +amqproc_getvers_1_svc(voidp argp, struct svc_req *rqstp) +{ + static amq_string res; + + res = get_version_string(); + return &res; +} + + +/* get PID of remote amd */ +int * +amqproc_getpid_1_svc(voidp argp, struct svc_req *rqstp) +{ + static int res; + + res = getpid(); + return &res; +} + + +/* + * XDR routines. + */ + + +bool_t +xdr_amq_setopt(XDR *xdrs, amq_setopt *objp) +{ + if (!xdr_enum(xdrs, (enum_t *) & objp->as_opt)) { + return (FALSE); + } + if (!xdr_string(xdrs, &objp->as_str, AMQ_STRLEN)) { + return (FALSE); + } + return (TRUE); +} + + +/* + * More XDR routines - Should be used for OUTPUT ONLY. + */ +bool_t +xdr_amq_mount_tree_node(XDR *xdrs, amq_mount_tree *objp) +{ + am_node *mp = (am_node *) objp; + + if (!xdr_amq_string(xdrs, &mp->am_mnt->mf_info)) { + return (FALSE); + } + if (!xdr_amq_string(xdrs, &mp->am_path)) { + return (FALSE); + } + if (!xdr_amq_string(xdrs, mp->am_link ? &mp->am_link : &mp->am_mnt->mf_mount)) { + return (FALSE); + } + if (!xdr_amq_string(xdrs, &mp->am_mnt->mf_ops->fs_type)) { + return (FALSE); + } + if (!xdr_long(xdrs, (long *) &mp->am_stats.s_mtime)) { + return (FALSE); + } + if (!xdr_u_short(xdrs, &mp->am_stats.s_uid)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mp->am_stats.s_getattr)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mp->am_stats.s_lookup)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mp->am_stats.s_readdir)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mp->am_stats.s_readlink)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mp->am_stats.s_statfs)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_subtree(XDR *xdrs, amq_mount_tree *objp) +{ + am_node *mp = (am_node *) objp; + + if (!xdr_amq_mount_tree_node(xdrs, objp)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **) &mp->am_osib, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_subtree)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **) &mp->am_child, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_subtree)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_tree(XDR *xdrs, amq_mount_tree *objp) +{ + am_node *mp = (am_node *) objp; + am_node *mnil = 0; + + if (!xdr_amq_mount_tree_node(xdrs, objp)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **) &mnil, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_subtree)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **) &mp->am_child, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_subtree)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_tree_p(XDR *xdrs, amq_mount_tree_p *objp) +{ + if (!xdr_pointer(xdrs, (char **) objp, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_tree)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_stats(XDR *xdrs, amq_mount_stats *objp) +{ + if (!xdr_int(xdrs, &objp->as_drops)) { + return (FALSE); + } + if (!xdr_int(xdrs, &objp->as_stale)) { + return (FALSE); + } + if (!xdr_int(xdrs, &objp->as_mok)) { + return (FALSE); + } + if (!xdr_int(xdrs, &objp->as_merr)) { + return (FALSE); + } + if (!xdr_int(xdrs, &objp->as_uerr)) { + return (FALSE); + } + return (TRUE); +} + + + +bool_t +xdr_amq_mount_tree_list(XDR *xdrs, amq_mount_tree_list *objp) +{ + if (!xdr_array(xdrs, + (char **) &objp->amq_mount_tree_list_val, + (u_int *) &objp->amq_mount_tree_list_len, + ~0, + sizeof(amq_mount_tree_p), + (XDRPROC_T_TYPE) xdr_amq_mount_tree_p)) { + return (FALSE); + } + return (TRUE); +} + + + +/* + * Compute length of list + */ +bool_t +xdr_amq_mount_info_qelem(XDR *xdrs, qelem *qhead) +{ + mntfs *mf; + u_int len = 0; + + for (mf = AM_LAST(mntfs, qhead); mf != HEAD(mntfs, qhead); mf = PREV(mntfs, mf)) { + if (!(mf->mf_ops->fs_flags & FS_AMQINFO)) + continue; + len++; + } + xdr_u_int(xdrs, &len); + + /* + * Send individual data items + */ + for (mf = AM_LAST(mntfs, qhead); mf != HEAD(mntfs, qhead); mf = PREV(mntfs, mf)) { + int up; + if (!(mf->mf_ops->fs_flags & FS_AMQINFO)) + continue; + + if (!xdr_amq_string(xdrs, &mf->mf_ops->fs_type)) { + return (FALSE); + } + if (!xdr_amq_string(xdrs, &mf->mf_mount)) { + return (FALSE); + } + if (!xdr_amq_string(xdrs, &mf->mf_info)) { + return (FALSE); + } + if (!xdr_amq_string(xdrs, &mf->mf_server->fs_host)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mf->mf_error)) { + return (FALSE); + } + if (!xdr_int(xdrs, &mf->mf_refc)) { + return (FALSE); + } + if (mf->mf_server->fs_flags & FSF_ERROR) + up = 0; + else + switch (mf->mf_server->fs_flags & (FSF_DOWN | FSF_VALID)) { + case FSF_DOWN | FSF_VALID: + up = 0; + break; + case FSF_VALID: + up = 1; + break; + default: + up = -1; + break; + } + if (!xdr_int(xdrs, &up)) { + return (FALSE); + } + } + return (TRUE); +} + + +bool_t +xdr_pri_free(XDRPROC_T_TYPE xdr_args, caddr_t args_ptr) +{ + XDR xdr; + + xdr.x_op = XDR_FREE; + return ((*xdr_args) (&xdr, (caddr_t *) args_ptr)); +} diff --git a/amd/amq_svc.c b/amd/amq_svc.c new file mode 100644 index 0000000..002ef6b --- /dev/null +++ b/amd/amq_svc.c @@ -0,0 +1,157 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq_svc.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* typedefs */ +typedef char *(*amqsvcproc_t)(voidp, struct svc_req *); + + +void +amq_program_1(struct svc_req *rqstp, SVCXPRT *transp) +{ + union { + amq_string amqproc_mnttree_1_arg; + amq_string amqproc_umnt_1_arg; + amq_setopt amqproc_setopt_1_arg; + amq_string amqproc_mount_1_arg; + } argument; + char *result; + xdrproc_t xdr_argument, xdr_result; + amqsvcproc_t local; + + switch (rqstp->rq_proc) { + + case AMQPROC_NULL: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (amqsvcproc_t) amqproc_null_1_svc; + break; + + case AMQPROC_MNTTREE: + xdr_argument = (xdrproc_t) xdr_amq_string; + xdr_result = (xdrproc_t) xdr_amq_mount_tree_p; + local = (amqsvcproc_t) amqproc_mnttree_1_svc; + break; + + case AMQPROC_UMNT: + xdr_argument = (xdrproc_t) xdr_amq_string; + xdr_result = (xdrproc_t) xdr_void; + local = (amqsvcproc_t) amqproc_umnt_1_svc; + break; + + case AMQPROC_STATS: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_amq_mount_stats; + local = (amqsvcproc_t) amqproc_stats_1_svc; + break; + + case AMQPROC_EXPORT: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_amq_mount_tree_list; + local = (amqsvcproc_t) amqproc_export_1_svc; + break; + + case AMQPROC_SETOPT: + xdr_argument = (xdrproc_t) xdr_amq_setopt; + xdr_result = (xdrproc_t) xdr_int; + local = (amqsvcproc_t) amqproc_setopt_1_svc; + break; + + case AMQPROC_GETMNTFS: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_amq_mount_info_qelem; + local = (amqsvcproc_t) amqproc_getmntfs_1_svc; + break; + + case AMQPROC_MOUNT: + xdr_argument = (xdrproc_t) xdr_amq_string; + xdr_result = (xdrproc_t) xdr_int; + local = (amqsvcproc_t) amqproc_mount_1_svc; + break; + + case AMQPROC_GETVERS: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_amq_string; + local = (amqsvcproc_t) amqproc_getvers_1_svc; + break; + + case AMQPROC_GETPID: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_int; + local = (amqsvcproc_t) amqproc_getpid_1_svc; + break; + + default: + svcerr_noproc(transp); + return; + } + + memset((char *) &argument, 0, sizeof(argument)); + if (!svc_getargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) & argument)) { + svcerr_decode(transp); + return; + } + + result = (*local) (&argument, rqstp); + + if (result != NULL && !svc_sendreply(transp, + (XDRPROC_T_TYPE) xdr_result, + result)) { + svcerr_systemerr(transp); + } + + if (!svc_freeargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) & argument)) { + plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1"); + going_down(1); + } +} diff --git a/amd/autil.c b/amd/autil.c new file mode 100644 index 0000000..345eec4 --- /dev/null +++ b/amd/autil.c @@ -0,0 +1,418 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: autil.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * utilities specified to amd, taken out of the older amd/util.c. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +int NumChild = 0; /* number of children of primary amd */ +static char invalid_keys[] = "\"'!;@ \t\n"; + +#ifdef HAVE_TRANSPORT_TYPE_TLI +# define PARENT_USLEEP_TIME 100000 /* 0.1 seconds */ +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + + +char * +strealloc(char *p, char *s) +{ + int len = strlen(s) + 1; + + p = (char *) xrealloc((voidp) p, len); + + strcpy(p, s); +#ifdef DEBUG_MEM + malloc_verify(); +#endif /* DEBUG_MEM */ + return p; +} + + +char ** +strsplit(char *s, int ch, int qc) +{ + char **ivec; + int ic = 0; + int done = 0; + + ivec = (char **) xmalloc((ic + 1) * sizeof(char *)); + + while (!done) { + char *v; + + /* + * skip to split char + */ + while (*s && (ch == ' ' ? (isascii(*s) && isspace((int)*s)) : *s == ch)) + *s++ = '\0'; + + /* + * End of string? + */ + if (!*s) + break; + + /* + * remember start of string + */ + v = s; + + /* + * skip to split char + */ + while (*s && !(ch == ' ' ? (isascii(*s) && isspace((int)*s)) : *s == ch)) { + if (*s++ == qc) { + /* + * Skip past string. + */ + s++; + while (*s && *s != qc) + s++; + if (*s == qc) + s++; + } + } + + if (!*s) + done = 1; + *s++ = '\0'; + + /* + * save string in new ivec slot + */ + ivec[ic++] = v; + ivec = (char **) xrealloc((voidp) ivec, (ic + 1) * sizeof(char *)); +#ifdef DEBUG + amuDebug(D_STR) + plog(XLOG_DEBUG, "strsplit saved \"%s\"", v); +#endif /* DEBUG */ + } + +#ifdef DEBUG + amuDebug(D_STR) + plog(XLOG_DEBUG, "strsplit saved a total of %d strings", ic); +#endif /* DEBUG */ + + ivec[ic] = 0; + + return ivec; +} + + +/* + * Strip off the trailing part of a domain + * to produce a short-form domain relative + * to the local host domain. + * Note that this has no effect if the domain + * names do not have the same number of + * components. If that restriction proves + * to be a problem then the loop needs recoding + * to skip from right to left and do partial + * matches along the way -- ie more expensive. + */ +static void +domain_strip(char *otherdom, char *localdom) +{ + char *p1, *p2; + + if ((p1 = strchr(otherdom, '.')) && + (p2 = strchr(localdom, '.')) && + STREQ(p1 + 1, p2 + 1)) + *p1 = '\0'; +} + + +/* + * Normalize a host name + */ +void +host_normalize(char **chp) +{ + /* + * Normalize hosts is used to resolve host name aliases + * and replace them with the standard-form name. + * Invoked with "-n" command line option. + */ + if (gopt.flags & CFM_NORMALIZE_HOSTNAMES) { + struct hostent *hp; + clock_valid = 0; + hp = gethostbyname(*chp); + if (hp && hp->h_addrtype == AF_INET) { +#ifdef DEBUG + dlog("Hostname %s normalized to %s", *chp, hp->h_name); +#endif /* DEBUG */ + *chp = strealloc(*chp, (char *) hp->h_name); + } + } + domain_strip(*chp, hostd); +} + + + +/* + * Keys are not allowed to contain " ' ! or ; to avoid + * problems with macro expansions. + */ +int +valid_key(char *key) +{ + while (*key) + if (strchr(invalid_keys, *key++)) + return FALSE; + return TRUE; +} + + +void +forcibly_timeout_mp(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + /* + * Arrange to timeout this node + */ + if (mf && ((mp->am_flags & AMF_ROOT) || + (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)))) { + if (!(mf->mf_flags & MFF_UNMOUNTING)) + plog(XLOG_WARNING, "ignoring timeout request for active node %s", mp->am_path); + } else { + plog(XLOG_INFO, "\"%s\" forcibly timed out", mp->am_path); + mp->am_flags &= ~AMF_NOTIMEOUT; + mp->am_ttl = clocktime(); + reschedule_timeout_mp(); + } +} + + +void +mf_mounted(mntfs *mf) +{ + int quoted; + int wasmounted = mf->mf_flags & MFF_MOUNTED; + + if (!wasmounted) { + /* + * If this is a freshly mounted + * filesystem then update the + * mntfs structure... + */ + mf->mf_flags |= MFF_MOUNTED; + mf->mf_error = 0; + + /* + * Do mounted callback + */ + if (mf->mf_ops->mounted) { + (*mf->mf_ops->mounted) (mf); + } + mf->mf_fo = 0; + } + + /* + * Log message + */ + quoted = strchr(mf->mf_info, ' ') != 0; + plog(XLOG_INFO, "%s%s%s %s fstype %s on %s", + quoted ? "\"" : "", + mf->mf_info, + quoted ? "\"" : "", + wasmounted ? "referenced" : "mounted", + mf->mf_ops->fs_type, mf->mf_mount); +} + + +void +am_mounted(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + + mf_mounted(mf); + + /* + * Patch up path for direct mounts + */ + if (mp->am_parent && mp->am_parent->am_mnt->mf_ops == &amfs_direct_ops) + mp->am_path = str3cat(mp->am_path, mp->am_parent->am_path, "/", "."); + + /* + * Check whether this mount should be cached permanently + */ + if (mf->mf_ops->fs_flags & FS_NOTIMEOUT) { + mp->am_flags |= AMF_NOTIMEOUT; + } else if (mf->mf_mount[1] == '\0' && mf->mf_mount[0] == '/') { + mp->am_flags |= AMF_NOTIMEOUT; + } else { + mntent_t mnt; + if (mf->mf_mopts) { + mnt.mnt_opts = mf->mf_mopts; + if (hasmntopt(&mnt, "nounmount")) + mp->am_flags |= AMF_NOTIMEOUT; + if ((mp->am_timeo = hasmntval(&mnt, "utimeout")) == 0) + mp->am_timeo = gopt.am_timeo; + } + } + + /* + * If this node is a symlink then + * compute the length of the returned string. + */ + if (mp->am_fattr.na_type == NFLNK) + mp->am_fattr.na_size = strlen(mp->am_link ? mp->am_link : mp->am_mnt->mf_mount); + + /* + * Record mount time + */ + mp->am_fattr.na_mtime.nt_seconds = mp->am_stats.s_mtime = clocktime(); + new_ttl(mp); + + /* + * Update mtime of parent node + */ + if (mp->am_parent && mp->am_parent->am_mnt) + mp->am_parent->am_fattr.na_mtime.nt_seconds = mp->am_stats.s_mtime; + + /* + * Now, if we can, do a reply to our NFS client here + * to speed things up. + */ + quick_reply(mp, 0); + + /* + * Update stats + */ + amd_stats.d_mok++; +} + + +int +mount_node(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + int error = 0; + + mf->mf_flags |= MFF_MOUNTING; + error = (*mf->mf_ops->mount_fs) (mp); + + mf = mp->am_mnt; + if (error >= 0) + mf->mf_flags &= ~MFF_MOUNTING; + if (!error && !(mf->mf_ops->fs_flags & FS_MBACKGROUND)) { + /* ...but see ifs_mount */ + am_mounted(mp); + } + + return error; +} + + +void +am_unmounted(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + + if (!foreground) /* firewall - should never happen */ + return; + + /* + * Do unmounted callback + */ + if (mf->mf_ops->umounted) + (*mf->mf_ops->umounted) (mp); + + /* + * Update mtime of parent node + */ + if (mp->am_parent && mp->am_parent->am_mnt) + mp->am_parent->am_fattr.na_mtime.nt_seconds = clocktime(); + + free_map(mp); +} + + +/* + * Fork the automounter + * + * TODO: Need a better strategy for handling errors + */ +static int +dofork(void) +{ + int pid; + +top: + pid = fork(); + + if (pid < 0) { /* fork error, retry in 1 second */ + sleep(1); + goto top; + } + if (pid == 0) { /* child process (foreground==false) */ + mypid = getpid(); + foreground = 0; + } else { /* parent process, has one more child */ + NumChild++; + } + + return pid; +} + + +int +background(void) +{ + int pid = dofork(); + + if (pid == 0) { +#ifdef DEBUG + dlog("backgrounded"); +#endif /* DEBUG */ + foreground = 0; + } + return pid; +} diff --git a/amd/clock.c b/amd/clock.c new file mode 100644 index 0000000..65750f2 --- /dev/null +++ b/amd/clock.c @@ -0,0 +1,247 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: clock.c,v 1.1 1998/11/05 02:04:47 ezk Exp $ + * + */ + +/* + * Callouts. + * + * Modeled on kernel object of the same name. + * See usual references. + * + * Use of a heap-based mechanism was rejected: + * 1. more complex implementation needed. + * 2. not obvious that a list is too slow for Amd. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +int timeout(u_int secs, void (*fn) (voidp), voidp closure); +void reschedule_timeouts(time_t now, time_t then); + +typedef struct callout callout; +struct callout { + callout *c_next; /* List of callouts */ + void (*c_fn) (voidp); /* Function to call */ + voidp c_closure; /* Closure to pass to call */ + time_t c_time; /* Time of call */ + int c_id; /* Unique identifier */ +}; + +static callout callouts; /* List of pending callouts */ +static callout *free_callouts; /* Cache of free callouts */ +static int nfree_callouts; /* Number on free list */ +static int callout_id; /* Next free callout identifier */ + +time_t next_softclock; /* Time of next call to softclock() */ + + +/* + * Number of callout slots we keep on the free list + */ +#define CALLOUT_FREE_SLOP 10 + +/* + * Global assumption: valid id's are non-zero. + */ +#define CID_ALLOC(struct ) (++callout_id) +#define CID_UNDEF (0) + + +static callout * +alloc_callout(void) +{ + callout *cp = free_callouts; + + if (cp) { + --nfree_callouts; + free_callouts = free_callouts->c_next; + return cp; + } + return ALLOC(struct callout); +} + + +static void +free_callout(callout *cp) +{ + if (nfree_callouts > CALLOUT_FREE_SLOP) { + XFREE(cp); + } else { + cp->c_next = free_callouts; + free_callouts = cp; + nfree_callouts++; + } +} + + +/* + * Schedule a callout. + * + * (*fn)(closure) will be called at clocktime() + secs + */ +int +timeout(u_int secs, void (*fn) (voidp), voidp closure) +{ + callout *cp, *cp2; + time_t t = clocktime() + secs; + + /* + * Allocate and fill in a new callout structure + */ + callout *cpnew = alloc_callout(); + cpnew->c_closure = closure; + cpnew->c_fn = fn; + cpnew->c_time = t; + cpnew->c_id = CID_ALLOC(struct ); + + if (t < next_softclock) + next_softclock = t; + + /* + * Find the correct place in the list + */ + for (cp = &callouts; (cp2 = cp->c_next); cp = cp2) + if (cp2->c_time >= t) + break; + + /* + * And link it in + */ + cp->c_next = cpnew; + cpnew->c_next = cp2; + + /* + * Return callout identifier + */ + return cpnew->c_id; +} + + +/* + * De-schedule a callout + */ +void +untimeout(int id) +{ + callout *cp, *cp2; + for (cp = &callouts; (cp2 = cp->c_next); cp = cp2) { + if (cp2->c_id == id) { + cp->c_next = cp2->c_next; + free_callout(cp2); + break; + } + } +} + + +/* + * Reschedule after clock changed + */ +void +reschedule_timeouts(time_t now, time_t then) +{ + callout *cp; + + for (cp = callouts.c_next; cp; cp = cp->c_next) { + if (cp->c_time >= now && cp->c_time <= then) { + plog(XLOG_WARNING, "job %d rescheduled to run immediately", cp->c_id); +#ifdef DEBUG + dlog("rescheduling job %d back %d seconds", cp->c_id, cp->c_time - now); +#endif /* DEBUG */ + next_softclock = cp->c_time = now; + } + } +} + + +/* + * Clock handler + */ +int +softclock(void) +{ + time_t now; + callout *cp; + + do { + if (task_notify_todo) + do_task_notify(); + + now = clocktime(); + + /* + * While there are more callouts waiting... + */ + while ((cp = callouts.c_next) && cp->c_time <= now) { + /* + * Extract first from list, save fn & closure and + * unlink callout from list and free. + * Finally call function. + * + * The free is done first because + * it is quite common that the + * function will call timeout() + * and try to allocate a callout + */ + void (*fn) (voidp) = cp->c_fn; + voidp closure = cp->c_closure; + + callouts.c_next = cp->c_next; + free_callout(cp); + (*fn) (closure); + } + + } while (task_notify_todo); + + /* + * Return number of seconds to next event, + * or 0 if there is no event. + */ + if ((cp = callouts.c_next)) + return cp->c_time - now; + return 0; +} diff --git a/amd/conf.c b/amd/conf.c new file mode 100644 index 0000000..18554ea --- /dev/null +++ b/amd/conf.c @@ -0,0 +1,949 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: conf.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +/* + * Functions to handle the configuration file. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * MACROS: + */ +/* Turn on to show some info about maps being configured */ +/* #define DEBUG_CONF */ + +/* + * TYPEDEFS: + */ +typedef int (*OptFuncPtr)(const char *); + +/* + * STRUCTURES: + */ +struct _func_map { + char *name; + OptFuncPtr func; +}; + +/* + * FORWARD DECLARATIONS: + */ +static int gopt_arch(const char *val); +static int gopt_auto_dir(const char *val); +static int gopt_browsable_dirs(const char *val); +static int gopt_cache_duration(const char *val); +static int gopt_cluster(const char *val); +static int gopt_debug_options(const char *val); +static int gopt_dismount_interval(const char *val); +static int gopt_fully_qualified_hosts(const char *val); +static int gopt_hesiod_base(const char *val); +static int gopt_karch(const char *val); +static int gopt_ldap_base(const char *val); +static int gopt_ldap_cache_maxmem(const char *val); +static int gopt_ldap_cache_seconds(const char *val); +static int gopt_ldap_hostports(const char *val); +static int gopt_local_domain(const char *val); +static int gopt_log_file(const char *val); +static int gopt_log_options(const char *val); +static int gopt_map_options(const char *val); +static int gopt_map_type(const char *val); +static int gopt_mount_type(const char *val); +static int gopt_pid_file(const char *val); +static int gopt_portmap_program(const char *val); +static int gopt_nfs_retransmit_counter(const char *val); +static int gopt_nfs_retry_interval(const char *val); +static int gopt_nis_domain(const char *val); +static int gopt_normalize_hostnames(const char *val); +static int gopt_os(const char *val); +static int gopt_osver(const char *val); +static int gopt_plock(const char *val); +static int gopt_print_pid(const char *val); +static int gopt_print_version(const char *val); +static int gopt_restart_mounts(const char *val); +static int gopt_search_path(const char *val); +static int gopt_selectors_on_default(const char *val); +static int gopt_show_statfs_entries(const char *val); +static int gopt_unmount_on_exit(const char *val); +static int process_global_option(const char *key, const char *val); +static int process_regular_map(cf_map_t *cfm); +static int process_regular_option(const char *section, const char *key, const char *val, cf_map_t *cfm); +static int ropt_browsable_dirs(const char *val, cf_map_t *cfm); +static int ropt_map_name(const char *val, cf_map_t *cfm); +static int ropt_map_options(const char *val, cf_map_t *cfm); +static int ropt_map_type(const char *val, cf_map_t *cfm); +static int ropt_mount_type(const char *val, cf_map_t *cfm); +static int ropt_search_path(const char *val, cf_map_t *cfm); +static int ropt_tag(const char *val, cf_map_t *cfm); +static void reset_cf_map(cf_map_t *cfm); + + +/* + * STATIC VARIABLES: + */ +static cf_map_t cur_map; +static struct _func_map glob_functable[] = { + {"arch", gopt_arch}, + {"auto_dir", gopt_auto_dir}, + {"browsable_dirs", gopt_browsable_dirs}, + {"cache_duration", gopt_cache_duration}, + {"cluster", gopt_cluster}, + {"debug_options", gopt_debug_options}, + {"dismount_interval", gopt_dismount_interval}, + {"fully_qualified_hosts", gopt_fully_qualified_hosts}, + {"hesiod_base", gopt_hesiod_base}, + {"karch", gopt_karch}, + {"ldap_base", gopt_ldap_base}, + {"ldap_cache_maxmem", gopt_ldap_cache_maxmem}, + {"ldap_cache_seconds", gopt_ldap_cache_seconds}, + {"ldap_hostports", gopt_ldap_hostports}, + {"local_domain", gopt_local_domain}, + {"log_file", gopt_log_file}, + {"log_options", gopt_log_options}, + {"map_options", gopt_map_options}, + {"map_type", gopt_map_type}, + {"mount_type", gopt_mount_type}, + {"pid_file", gopt_pid_file}, + {"portmap_program", gopt_portmap_program}, + {"nfs_retransmit_counter", gopt_nfs_retransmit_counter}, + {"nfs_retry_interval", gopt_nfs_retry_interval}, + {"nis_domain", gopt_nis_domain}, + {"normalize_hostnames", gopt_normalize_hostnames}, + {"os", gopt_os}, + {"osver", gopt_osver}, + {"plock", gopt_plock}, + {"print_pid", gopt_print_pid}, + {"print_version", gopt_print_version}, + {"restart_mounts", gopt_restart_mounts}, + {"search_path", gopt_search_path}, + {"selectors_on_default", gopt_selectors_on_default}, + {"show_statfs_entries", gopt_show_statfs_entries}, + {"unmount_on_exit", gopt_unmount_on_exit}, + {NULL, NULL} +}; + + +/* + * Reset a map. + */ +static void +reset_cf_map(cf_map_t *cfm) +{ + if (!cfm) + return; + + if (cfm->cfm_dir) { + XFREE(cfm->cfm_dir); + cfm->cfm_dir = NULL; + } + + if (cfm->cfm_name) { + XFREE(cfm->cfm_name); + cfm->cfm_name = NULL; + } + + if (cfm->cfm_tag) { + XFREE(cfm->cfm_tag); + cfm->cfm_tag = NULL; + } + + /* + * reset/initialize a regular map's flags and other variables from the + * global ones, so that they are applied to all maps. Of course, each map + * can then override the flags individually. + * + * NOTES: + * (1): Will only work for maps that appear after [global]. + * (2): Also be careful not to free() a global option. + * (3): I'm doing direct char* pointer comparison, and not strcmp(). This + * is correct! + */ + + /* initialize map_type from [global] */ + if (cfm->cfm_type && cfm->cfm_type != gopt.map_type) + XFREE(cfm->cfm_type); + cfm->cfm_type = gopt.map_type; + + /* initialize map_opts from [global] */ + if (cfm->cfm_opts && cfm->cfm_opts != gopt.map_options) + XFREE(cfm->cfm_opts); + cfm->cfm_opts = gopt.map_options; + + /* initialize search_path from [global] */ + if (cfm->cfm_search_path && cfm->cfm_search_path != gopt.search_path) + XFREE(cfm->cfm_search_path); + cfm->cfm_search_path = gopt.search_path; + + /* + * Initialize flags that are common both to [global] and a local map. + */ + cfm->cfm_flags = gopt.flags & (CFM_BROWSABLE_DIRS | + CFM_BROWSABLE_DIRS_FULL | + CFM_MOUNT_TYPE_AUTOFS | + CFM_ENABLE_DEFAULT_SELECTORS); +} + + +/* + * Process configuration file options. + * Return 0 if OK, 1 otherwise. + */ +int +set_conf_kv(const char *section, const char *key, const char *val) +{ + int ret; + +#ifdef DEBUG_CONF + fprintf(stderr,"set_conf_kv: section=%s, key=%s, val=%s\n", + section, key, val); +#endif /* DEBUG_CONF */ + + /* + * If global section, process them one at a time. + */ + if (STREQ(section, "global")) { + /* + * Check if a regular map was configured before "global", + * and process it as needed. + */ + if (cur_map.cfm_dir) { + fprintf(stderr,"processing regular map \"%s\" before global one.\n", + section); + ret = process_regular_map(&cur_map); /* will reset map */ + if (ret != 0) + return ret; + } + + /* process the global option first */ + ret = process_global_option(key, val); + + /* reset default options for regular maps from just updated globals */ + if (ret == 0) + reset_cf_map(&cur_map); + + /* return status from the processing of the global option */ + return ret; + } + + /* + * otherwise save options and process a single map all at once. + */ + + /* check if we found a new map, so process one already collected */ + if (cur_map.cfm_dir && !STREQ(cur_map.cfm_dir, section)) { + ret = process_regular_map(&cur_map); /* will reset map */ + if (ret != 0) + return ret; + } + + /* now process a single entry of a regular map */ + return process_regular_option(section, key, val, &cur_map); +} + + +/* + * Process global section of configuration file options. + * Return 0 upon success, 1 otherwise. + */ +static int +process_global_option(const char *key, const char *val) +{ + struct _func_map *gfp; + + /* ensure that val is valid */ + if (!val || val[0] == '\0') + return 1; + + /* + * search for global function. + */ + for (gfp = glob_functable; gfp->name; gfp++) + if (FSTREQ(gfp->name, key)) + return (gfp->func)(val); + + fprintf(stderr, "conf: unknown global key: \"%s\"\n", key); + return 1; /* failed to match any command */ +} + + +static int +gopt_arch(const char *val) +{ + gopt.arch = strdup((char *)val); + return 0; +} + + +static int +gopt_auto_dir(const char *val) +{ + gopt.auto_dir = strdup((char *)val); + return 0; +} + + +static int +gopt_browsable_dirs(const char *val) +{ + if (STREQ(val, "full")) { + gopt.flags |= CFM_BROWSABLE_DIRS_FULL; + return 0; + } else if (STREQ(val, "yes")) { + gopt.flags |= CFM_BROWSABLE_DIRS; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_BROWSABLE_DIRS; + return 0; + } + + fprintf(stderr, "conf: unknown value to browsable_dirs \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_cache_duration(const char *val) +{ + gopt.am_timeo = atoi(val); + if (gopt.am_timeo <= 0) + gopt.am_timeo = AM_TTL; + return 0; +} + + +static int +gopt_cluster(const char *val) +{ + gopt.cluster = strdup((char *)val); + return 0; +} + + +static int +gopt_debug_options(const char *val) +{ +#ifdef DEBUG + usage += debug_option(strdup((char *)val)); + return 0; +#else /* not DEBUG */ + fprintf(stderr, "%s: not compiled with DEBUG option -- sorry.\n", + progname); + return 1; +#endif /* not DEBUG */ +} + + +static int +gopt_dismount_interval(const char *val) +{ + gopt.am_timeo_w = atoi(val); + if (gopt.am_timeo_w <= 0) + gopt.am_timeo_w = AM_TTL_W; + return 0; +} + + +static int +gopt_fully_qualified_hosts(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_FULLY_QUALIFIED_HOSTS; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_FULLY_QUALIFIED_HOSTS; + return 0; + } + + fprintf(stderr, "conf: unknown value to fully_qualified_hosts \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_hesiod_base(const char *val) +{ +#ifdef HAVE_MAP_HESIOD + gopt.hesiod_base = strdup((char *)val); + return 0; +#else /* not HAVE_MAP_HESIOD */ + fprintf(stderr, "conf: hesiod_base option ignored. No Hesiod support available.\n"); + return 1; +#endif /* not HAVE_MAP_HESIOD */ +} + + +static int +gopt_karch(const char *val) +{ + gopt.karch = strdup((char *)val); + return 0; +} + + +static int +gopt_pid_file(const char *val) +{ + gopt.pid_file = strdup((char *)val); + return 0; +} + + +static int +gopt_local_domain(const char *val) +{ + gopt.sub_domain = strdup((char *)val); + return 0; +} + + +static int +gopt_ldap_base(const char *val) +{ +#ifdef HAVE_MAP_LDAP + gopt.ldap_base = strdup((char *)val); + return 0; +#else /* not HAVE_MAP_LDAP */ + fprintf(stderr, "conf: ldap_base option ignored. No LDAP support available.\n"); + return 1; +#endif /* not HAVE_MAP_LDAP */ +} + + +static int +gopt_ldap_cache_seconds(const char *val) +{ +#ifdef HAVE_MAP_LDAP + char *end; + + gopt.ldap_cache_seconds = strtol((char *)val, &end, 10); + if (end == val) { + fprintf(stderr, "conf: bad LDAP cache (seconds) option: %s\n",val); + return 1; + } + return 0; +#else /* not HAVE_MAP_LDAP */ + fprintf(stderr, "conf: ldap_cache option ignored. No LDAP support available.\n"); + return 1; +#endif /* not HAVE_MAP_LDAP */ +} + + +static int +gopt_ldap_cache_maxmem(const char *val) +{ +#ifdef HAVE_MAP_LDAP + char *end; + + gopt.ldap_cache_maxmem = strtol((char *)val, &end, 10); + if (end == val) { + fprintf(stderr, "conf: bad LDAP cache (maxmem) option: %s\n",val); + return 1; + } + return 0; +#else /* not HAVE_MAP_LDAP */ + fprintf(stderr, "conf: ldap_cache option ignored. No LDAP support available.\n"); + return 1; +#endif /* not HAVE_MAP_LDAP */ +} + + +static int +gopt_ldap_hostports(const char *val) +{ +#ifdef HAVE_MAP_LDAP + gopt.ldap_hostports = strdup((char *)val); + return 0; +#else /* not HAVE_MAP_LDAP */ + fprintf(stderr, "conf: ldap_hostports option ignored. No LDAP support available.\n"); + return 1; +#endif /* not HAVE_MAP_LDAP */ + +} + + +static int +gopt_log_file(const char *val) +{ + gopt.logfile = strdup((char *)val); + return 0; +} + + +static int +gopt_log_options(const char *val) +{ + usage += switch_option(strdup((char *)val)); + return 0; +} + + +static int +gopt_map_options(const char *val) +{ + gopt.map_options = strdup((char *)val); + return 0; +} + + +static int +gopt_map_type(const char *val) +{ + /* check if map type exist */ + if (!mapc_type_exists(val)) { + fprintf(stderr, "conf: no such map type \"%s\"\n", val); + return 1; + } + gopt.map_type = strdup((char *)val); + return 0; +} + + +static int +gopt_mount_type(const char *val) +{ + if (STREQ(val, "autofs")) { +#ifdef HAVE_FS_AUTOFS + gopt.flags |= CFM_MOUNT_TYPE_AUTOFS; + return 0; +#else /* not HAVE_FS_AUTOFS */ + fprintf(stderr, "conf: no autofs support available\n"); + return 1; +#endif /* not HAVE_FS_AUTOFS */ + } else if (STREQ(val, "nfs")) { + gopt.flags &= ~CFM_MOUNT_TYPE_AUTOFS; + return 0; + } + + fprintf(stderr, "conf: unknown value to mount_type \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_portmap_program(const char *val) +{ + gopt.portmap_program = atoi(val); + /* + * allow alternate program numbers to be no more than 10 offset from + * official amd program number (300019). + */ + if (gopt.portmap_program < AMQ_PROGRAM || + gopt.portmap_program > AMQ_PROGRAM + 10) { + gopt.portmap_program = AMQ_PROGRAM; + set_amd_program_number(gopt.portmap_program); + fprintf(stderr, "conf: illegal amd program numver \"%s\"\n", val); + return 1; + } + + set_amd_program_number(gopt.portmap_program); + return 0; /* all is OK */ +} + + +static int +gopt_nfs_retransmit_counter(const char *val) +{ + gopt.amfs_auto_retrans = atoi(val); + return 0; +} + + +static int +gopt_nfs_retry_interval(const char *val) +{ + gopt.amfs_auto_timeo = atoi(val); + return 0; +} + + +static int +gopt_nis_domain(const char *val) +{ +#ifdef HAVE_MAP_NIS + gopt.nis_domain = strdup((char *)val); + return 0; +#else /* not HAVE_MAP_NIS */ + fprintf(stderr, "conf: nis_domain option ignored. No NIS support available.\n"); + return 1; +#endif /* not HAVE_MAP_NIS */ +} + + +static int +gopt_normalize_hostnames(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_NORMALIZE_HOSTNAMES; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_NORMALIZE_HOSTNAMES; + return 0; + } + + fprintf(stderr, "conf: unknown value to normalize_hostnames \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_os(const char *val) +{ + gopt.op_sys = strdup((char *)val); + return 0; +} + + +static int +gopt_osver(const char *val) +{ + gopt.op_sys_ver = strdup((char *)val); + return 0; +} + + +static int +gopt_plock(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_PROCESS_LOCK; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_PROCESS_LOCK; + return 0; + } + + fprintf(stderr, "conf: unknown value to plock \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_print_pid(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_PRINT_PID; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_PRINT_PID; + return 0; + } + + fprintf(stderr, "conf: unknown value to print_pid \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_print_version(const char *val) +{ + if (STREQ(val, "yes")) { + fputs(get_version_string(), stderr); + return 0; + } else if (STREQ(val, "no")) { + return 0; + } + + fprintf(stderr, "conf: unknown value to print_version \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_restart_mounts(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_RESTART_EXISTING_MOUNTS; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_RESTART_EXISTING_MOUNTS; + return 0; + } + + fprintf(stderr, "conf: unknown value to restart_mounts \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_search_path(const char *val) +{ + gopt.search_path = strdup((char *)val); + return 0; +} + + +static int +gopt_selectors_on_default(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_ENABLE_DEFAULT_SELECTORS; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_ENABLE_DEFAULT_SELECTORS; + return 0; + } + + fprintf(stderr, "conf: unknown value to enable_default_selectors \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_show_statfs_entries(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_SHOW_STATFS_ENTRIES; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_SHOW_STATFS_ENTRIES; + return 0; + } + + fprintf(stderr, "conf: unknown value to show_statfs_entries \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +gopt_unmount_on_exit(const char *val) +{ + if (STREQ(val, "yes")) { + gopt.flags |= CFM_UNMOUNT_ON_EXIT; + return 0; + } else if (STREQ(val, "no")) { + gopt.flags &= ~CFM_UNMOUNT_ON_EXIT; + return 0; + } + + fprintf(stderr, "conf: unknown value to unmount_on_exit \"%s\"\n", val); + return 1; /* unknown value */ +} + + +/* + * Collect one entry for a regular map + */ +static int +process_regular_option(const char *section, const char *key, const char *val, cf_map_t *cfm) +{ + /* ensure that val is valid */ + if (!section || section[0] == '\0' || + !key || key[0] == '\0' || + !val || val[0] == '\0' || + !cfm) { + fprintf(stderr, "conf: process_regular_option: null entries\n"); + return 1; + } + + /* check if initializing a new map */ + if (!cfm->cfm_dir) + cfm->cfm_dir = strdup((char *)section); + + /* check for each possible field */ + if (STREQ(key, "browsable_dirs")) + return ropt_browsable_dirs(val, cfm); + + if (STREQ(key, "map_name")) + return ropt_map_name(val, cfm); + + if (STREQ(key, "map_options")) + return ropt_map_options(val, cfm); + + if (STREQ(key, "map_type")) + return ropt_map_type(val, cfm); + + if (STREQ(key, "mount_type")) + return ropt_mount_type(val, cfm); + + if (STREQ(key, "search_path")) + return ropt_search_path(val, cfm); + + if (STREQ(key, "tag")) + return ropt_tag(val, cfm); + + fprintf(stderr, "conf: unknown regular key \"%s\" for section \"%s\"\n", + key, section); + return 1; /* failed to match any command */ +} + + +static int +ropt_browsable_dirs(const char *val, cf_map_t *cfm) +{ + if (STREQ(val, "full")) { + cfm->cfm_flags |= CFM_BROWSABLE_DIRS_FULL; + return 0; + } else if (STREQ(val, "yes")) { + cfm->cfm_flags |= CFM_BROWSABLE_DIRS; + return 0; + } else if (STREQ(val, "no")) { + cfm->cfm_flags &= ~CFM_BROWSABLE_DIRS; + return 0; + } + + fprintf(stderr, "conf: unknown value to browsable_dirs \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +ropt_map_name(const char *val, cf_map_t *cfm) +{ + cfm->cfm_name = strdup((char *)val); + return 0; +} + + +static int +ropt_map_options(const char *val, cf_map_t *cfm) +{ + cfm->cfm_opts = strdup((char *)val); + return 0; +} + + +static int +ropt_map_type(const char *val, cf_map_t *cfm) +{ + /* check if map type exist */ + if (!mapc_type_exists(val)) { + fprintf(stderr, "conf: no such map type \"%s\"\n", val); + return 1; + } + cfm->cfm_type = strdup((char *)val); + return 0; +} + + +static int +ropt_mount_type(const char *val, cf_map_t *cfm) +{ + if (STREQ(val, "autofs")) { +#ifdef HAVE_FS_AUTOFS + cfm->cfm_flags |= CFM_MOUNT_TYPE_AUTOFS; + return 0; +#else /* not HAVE_FS_AUTOFS */ + fprintf(stderr, "conf: no autofs support available\n"); + return 1; +#endif /* not HAVE_FS_AUTOFS */ + } else if (STREQ(val, "nfs")) { + cfm->cfm_flags &= ~CFM_MOUNT_TYPE_AUTOFS; + return 0; + } + + fprintf(stderr, "conf: unknown value to mount_type \"%s\"\n", val); + return 1; /* unknown value */ +} + + +static int +ropt_search_path(const char *val, cf_map_t *cfm) +{ + cfm->cfm_search_path = strdup((char *)val); + return 0; +} + + +static int +ropt_tag(const char *val, cf_map_t *cfm) +{ + cfm->cfm_tag = strdup((char *)val); + return 0; +} + + +/* + * Process one collected map. + */ +static int +process_regular_map(cf_map_t *cfm) +{ + + if (!cfm->cfm_name) { + fprintf(stderr, "conf: map_name must be defined for map \"%s\"\n", cfm->cfm_dir); + return 1; + } + /* + * If map has no tag defined, process the map. + * If no conf_tag was set in amd -T, process all untagged entries. + * If a tag is defined, then process it only if it matches the map tag. + */ + if (!cfm->cfm_tag || + (conf_tag && STREQ(cfm->cfm_tag, conf_tag))) { +#ifdef DEBUG_CONF + fprintf(stderr, "processing map %s (flags=0x%x)...\n", + cfm->cfm_dir, cfm->cfm_flags); +#endif /* DEBUG_CONF */ + root_newmap(cfm->cfm_dir, + cfm->cfm_opts ? cfm->cfm_opts : "", + cfm->cfm_name, + cfm); + } else { + fprintf(stderr, "skipping map %s...\n", cfm->cfm_dir); + } + + reset_cf_map(cfm); + return 0; +} + + +/* + * Process last map in conf file (if any) + */ +int +process_last_regular_map(void) +{ + /* + * If the amd.conf file only has a [global] section (pretty useless + * IMHO), do not try to process a map that does not exist. + */ + if (!cur_map.cfm_dir) + return 0; + return process_regular_map(&cur_map); +} diff --git a/amd/conf_parse.y b/amd/conf_parse.y new file mode 100644 index 0000000..8297408 --- /dev/null +++ b/amd/conf_parse.y @@ -0,0 +1,159 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: conf_parse.y,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +%{ +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +extern char *yytext; +extern int yylineno; +extern int yylex(void); + +static int yyerror(const char *s); +static int retval; +static char *header_section = NULL; /* start with no header section */ + +#define YYDEBUG 1 + +#define PARSE_DEBUG 0 + +#if PARSE_DEBUG +# define dprintf(f,s) fprintf(stderr, (f), yylineno, (s)) +# define amu_return(v) +#else +# define dprintf(f,s) +# define amu_return(v) return((v)) +#endif /* PARSE_DEBUG */ + +%} + +%union { +char *strtype; +} + +%token LEFT_BRACKET RIGHT_BRACKET EQUAL +%token NEWLINE +%token NONWS_STRING +%token NONWSEQ_STRING +%token QUOTED_NONWSEQ_STRING + +%start file +%% + +/****************************************************************************/ +file : { yydebug = PARSE_DEBUG; } newlines map_sections + | { yydebug = PARSE_DEBUG; } map_sections + ; + +newlines : NEWLINE + | NEWLINE newlines + ; + +map_sections : map_section + | map_section map_sections + ; + +map_section : sec_header kv_pairs + ; + +sec_header : LEFT_BRACKET NONWS_STRING RIGHT_BRACKET NEWLINE + { + if (yydebug) + fprintf(stderr, "sec_header1 = \"%s\"\n", $2); + header_section = $2; + } + ; + +kv_pairs : kv_pair + | kv_pair kv_pairs + ; + +kv_pair : NONWS_STRING EQUAL NONWS_STRING NEWLINE + { + if (yydebug) + fprintf(stderr,"parse1: key=\"%s\", val=\"%s\"\n", $1, $3); + retval = set_conf_kv(header_section, $1, $3); + if (retval != 0) { + yyerror("syntax error"); + YYABORT; + } + } + | NONWS_STRING EQUAL NONWSEQ_STRING NEWLINE + { + if (yydebug) + fprintf(stderr,"parse2: key=\"%s\", val=\"%s\"\n", $1, $3); + retval = set_conf_kv(header_section, $1, $3); + if (retval != 0) { + yyerror("syntax error"); + YYABORT; + } + } + | NONWS_STRING EQUAL QUOTED_NONWSEQ_STRING NEWLINE + { + if (yydebug) + fprintf(stderr,"parse3: key=\"%s\", val=\"%s\"\n", $1, $3); + retval = set_conf_kv(header_section, $1, $3); + if (retval != 0) { + yyerror("syntax error"); + YYABORT; + } + } + | NEWLINE + ; + +/****************************************************************************/ +%% + +static int +yyerror(const char *s) +{ + fprintf(stderr, "AMDCONF: %s on line %d (section %s)\n", + s, yylineno, + (header_section ? header_section : "null")); + exit(1); + return 1; /* to full compilers that insist on a return statement */ +} diff --git a/amd/conf_tok.l b/amd/conf_tok.l new file mode 100644 index 0000000..376f50b --- /dev/null +++ b/amd/conf_tok.l @@ -0,0 +1,186 @@ +%{ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: conf_tok.l,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * Lexical analyzer for AMD configuration parser. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +/* + * Some systems include a definition for the macro ECHO in , + * and their (bad) version of lex defines it too at the very beginning of + * the generated lex.yy.c file (before it can be easily undefined), + * resulting in a conflict. So undefine it here before needed. + * Luckily, it does not appear that this macro is actually used in the rest + * of the generated lex.yy.c file. + */ +#ifdef ECHO +# undef ECHO +#endif /* ECHO */ +#include +#include +#include +/* and once again undefine this, just in case */ +#ifdef ECHO +# undef ECHO +#endif /* ECHO */ + +/* + * There are some things that need to be defined only if using GNU flex. + * These must not be defined if using standard lex + */ +#ifdef FLEX_SCANNER +# ifndef ECHO +# define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +# endif /* not ECHO */ +int yylineno = 0; +#endif /* FLEX_SCANNER */ + +int yylex(void); +/* + * some systems such as DU-4.x have a different GNU flex in /usr/bin + * which automatically generates yywrap macros and symbols. So I must + * distinguish between them and when yywrap is actually needed. + */ +#ifndef yywrap +int yywrap(void); +#endif /* not yywrap */ + +#define TOK_DEBUG 0 + +#if TOK_DEBUG +# define dprintf(f,s) fprintf(stderr, (f), yylineno, (s)) +# define amu_return(v) +#else +# define dprintf(f,s) +# define amu_return(v) return((v)) +#endif /* TOK_DEBUG */ + +/* no need to use yyunput() or yywrap() */ +#define YY_NO_UNPUT +#define YY_SKIP_YYWRAP + +%} + +DIGIT [0-9] +ALPHA [A-Za-z] +ALPHANUM [A-Za-z0-9] +SYMBOL [A-Za-z0-9_-] +PATH [A-Za-z0-9_-/] +NONWSCHAR [^ \t\n\[\]=] +NONWSEQCHAR [^ \t\n\[\]] +NONNL [^\n] +NONQUOTE [^\"] + +%% + +\n { + yylineno++; + amu_return(NEWLINE); + } + +\[ { + dprintf("%8d: Left bracket \"%s\"\n", yytext); + yylval.strtype = strdup((char *)yytext); + amu_return(LEFT_BRACKET); + } + +\] { + dprintf("%8d: Right bracket \"%s\"\n", yytext); + yylval.strtype = strdup((char *)yytext); + amu_return(RIGHT_BRACKET); + } + += { + dprintf("%8d: Equal \"%s\"\n", yytext); + yylval.strtype = strdup((char *)yytext); + amu_return(EQUAL); + } + +[ \t]* { + dprintf("%8d: Whitespace \"%s\"\n", yytext); + } +"#"[^\n]*\n { + /* a comment line includes the terminating \n */ + yylineno++; + yytext[strlen((char *)yytext)-1] = '\0'; + dprintf("%8d: Comment \"%s\"\n", yytext); + } + +{NONWSCHAR}{NONWSCHAR}* { + dprintf("%8d: Non-WS string \"%s\"\n", yytext); + yylval.strtype = strdup((char *)yytext); + amu_return(NONWS_STRING); + } + +\"{NONQUOTE}{NONQUOTE}*\" { + dprintf("%8d: QUOTED-Non-WS-EQ string \"%s\"\n", yytext); + /* must strip quotes */ + yytext[strlen((char *)yytext)-1] = '\0'; + yylval.strtype = strdup((char *)&yytext[1]); + amu_return(QUOTED_NONWSEQ_STRING); + } + +{NONWSEQCHAR}{NONWSEQCHAR}* { + dprintf("%8d: Non-WS-EQ string \"%s\"\n", yytext); + yylval.strtype = strdup((char *)yytext); + amu_return(NONWSEQ_STRING); + } + +%% + +/* + * some systems such as DU-4.x have a different GNU flex in /usr/bin + * which automatically generates yywrap macros and symbols. So I must + * distinguish between them and when yywrap is actually needed. + */ +#ifndef yywrap +int yywrap(void) +{ + return 1; +} +#endif /* not yywrap */ diff --git a/amd/get_args.c b/amd/get_args.c new file mode 100644 index 0000000..8514bb2 --- /dev/null +++ b/amd/get_args.c @@ -0,0 +1,389 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: get_args.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +/* + * Argument decode + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* include auto-generated version file */ +#include + +char *conf_file = "/etc/amd.conf"; /* default amd configuration file */ +char *conf_tag = NULL; /* default conf file tags to use */ +int usage = 0; +int use_conf_file = 0; /* default don't use amd.conf file */ +char *mnttab_file_name = NULL; /* symbol must be available always */ +#ifdef DEBUG +int debug_flags = D_AMQ /* Register AMQ */ + | D_DAEMON; /* Enter daemon mode */ +#endif /* DEBUG */ + + +/* + * Return the version string (dynamic buffer) + */ +char * +get_version_string(void) +{ + static char *vers = NULL; + char tmpbuf[1024]; + char *wire_buf; + int wire_buf_len = 0; + + /* first get dynamic string listing all known networks */ + wire_buf = print_wires(); + if (wire_buf) + wire_buf_len = strlen(wire_buf); + + vers = xmalloc(2048 + wire_buf_len); + sprintf(vers, "%s\n%s\n%s\n%s\n", + "Copyright (c) 1997-1998 Erez Zadok", + "Copyright (c) 1990 Jan-Simon Pendry", + "Copyright (c) 1990 Imperial College of Science, Technology & Medicine", + "Copyright (c) 1990 The Regents of the University of California."); + sprintf(tmpbuf, "%s version %s (build %d).\n", + PACKAGE, VERSION, AMU_BUILD_VERSION); + strcat(vers, tmpbuf); + sprintf(tmpbuf, "Built by %s@%s on date %s.\n", + USER_NAME, HOST_NAME, CONFIG_DATE); + strcat(vers, tmpbuf); + sprintf(tmpbuf, "cpu=%s (%s-endian), arch=%s, karch=%s.\n", + cpu, endian, gopt.arch, gopt.karch); + strcat(vers, tmpbuf); + sprintf(tmpbuf, "full_os=%s, os=%s, osver=%s, vendor=%s.\n", + HOST_OS, gopt.op_sys, gopt.op_sys_ver, HOST_VENDOR); + strcat(vers, tmpbuf); + + strcat(vers, "Map support for: "); + mapc_showtypes(tmpbuf); + strcat(vers, tmpbuf); + strcat(vers, ".\nAMFS: "); + ops_showamfstypes(tmpbuf); + strcat(vers, tmpbuf); + strcat(vers, ".\nFS: "); + ops_showfstypes(tmpbuf); + strcat(vers, tmpbuf); + + /* append list of networks if available */ + if (wire_buf) { + strcat(vers, wire_buf); + XFREE(wire_buf); + } + + return vers; +} + + +void +get_args(int argc, char *argv[]) +{ + int opt_ch; + FILE *fp = stdin; + + /* if no arguments were passed, try to use /etc/amd.conf file */ + if (argc <= 1) + use_conf_file = 1; + + while ((opt_ch = getopt(argc, argv, "nprvSa:c:d:k:l:o:t:w:x:y:C:D:F:T:O:H")) != EOF) + switch (opt_ch) { + + case 'a': + if (*optarg != '/') { + fprintf(stderr, "%s: -a option must begin with a '/'\n", + progname); + exit(1); + } + gopt.auto_dir = optarg; + break; + + case 'c': + gopt.am_timeo = atoi(optarg); + if (gopt.am_timeo <= 0) + gopt.am_timeo = AM_TTL; + break; + + case 'd': + gopt.sub_domain = optarg; + break; + + case 'k': + gopt.karch = optarg; + break; + + case 'l': + gopt.logfile = optarg; + break; + + case 'n': + gopt.flags |= CFM_NORMALIZE_HOSTNAMES; + break; + + case 'o': + gopt.op_sys_ver = optarg; + break; + + case 'p': + gopt.flags |= CFM_PRINT_PID; + break; + + case 'r': + gopt.flags |= CFM_RESTART_EXISTING_MOUNTS; + break; + + case 't': + /* timeo.retrans */ + { + char *dot = strchr(optarg, '.'); + if (dot) + *dot = '\0'; + if (*optarg) { + gopt.amfs_auto_timeo = atoi(optarg); + } + if (dot) { + gopt.amfs_auto_retrans = atoi(dot + 1); + *dot = '.'; + } + } + break; + + case 'v': + fputs(get_version_string(), stderr); + exit(0); + break; + + case 'w': + gopt.am_timeo_w = atoi(optarg); + if (gopt.am_timeo_w <= 0) + gopt.am_timeo_w = AM_TTL_W; + break; + + case 'x': + usage += switch_option(optarg); + break; + + case 'y': +#ifdef HAVE_MAP_NIS + gopt.nis_domain = optarg; +#else /* not HAVE_MAP_NIS */ + plog(XLOG_USER, "-y: option ignored. No NIS support available."); +#endif /* not HAVE_MAP_NIS */ + break; + + case 'C': + gopt.cluster = optarg; + break; + + case 'D': +#ifdef DEBUG + usage += debug_option(optarg); +#else /* not DEBUG */ + fprintf(stderr, "%s: not compiled with DEBUG option -- sorry.\n", progname); +#endif /* not DEBUG */ + break; + + case 'F': + conf_file = optarg; + use_conf_file = 1; + break; + + case 'H': + goto show_usage; + break; + + case 'O': + gopt.op_sys = optarg; + break; + + case 'S': + gopt.flags &= ~CFM_PROCESS_LOCK; /* turn process locking off */ + break; + + case 'T': + conf_tag = optarg; + break; + + default: + usage = 1; + break; + } + + /* + * amd.conf file: if not command-line arguments were used, or if -F was + * specified, then use that amd.conf file. If the file cannot be opened, + * abort amd. If it can be found, open it, parse it, and then close it. + */ + if (use_conf_file && conf_file) { + fp = fopen(conf_file, "r"); + if (!fp) { + char buf[128]; + sprintf(buf, "Amd configuration file (%s)", conf_file); + perror(buf); + exit(1); + } + yyin = fp; + yyparse(); + fclose(fp); + if (process_last_regular_map() != 0) + exit(1); + } + + /* make sure there are some default options defined */ + if (xlog_level_init == ~0) { + switch_option(""); + } +#ifdef DEBUG + usage += switch_option("debug"); +#endif /* DEBUG */ + + /* log information regarding amd.conf file */ + if (use_conf_file && conf_file) + plog(XLOG_INFO, "using configuration file %s", conf_file); + +#ifdef HAVE_MAP_LDAP + /* ensure that if ldap_base is specified, that also ldap_hostports is */ + if (gopt.ldap_hostports && !gopt.ldap_base) { + fprintf(stderr, "must specify both ldap_hostports and ldap_base\n"); + exit(1); + } +#endif /* HAVE_MAP_LDAP */ + + if (usage) + goto show_usage; + + while (optind <= argc - 2) { + char *dir = argv[optind++]; + char *map = argv[optind++]; + char *opts = ""; + if (argv[optind] && *argv[optind] == '-') + opts = &argv[optind++][1]; + + root_newmap(dir, opts, map, NULL); + } + + if (optind == argc) { + /* + * Append domain name to hostname. + * sub_domain overrides hostdomain + * if given. + */ + if (gopt.sub_domain) + hostdomain = gopt.sub_domain; + if (*hostdomain == '.') + hostdomain++; + strcat(hostd, "."); + strcat(hostd, hostdomain); + +#ifdef MOUNT_TABLE_ON_FILE +# ifdef DEBUG + if (debug_flags & D_MTAB) + mnttab_file_name = DEBUG_MNTTAB; + else +# endif /* DEBUG */ + mnttab_file_name = MNTTAB_FILE_NAME; +#else /* not MOUNT_TABLE_ON_FILE */ +# ifdef DEBUG + if (debug_flags & D_MTAB) + dlog("-D mtab option ignored"); +# endif /* DEBUG */ +#endif /* not MOUNT_TABLE_ON_FILE */ + + if (switch_to_logfile(gopt.logfile) != 0) + plog(XLOG_USER, "Cannot switch logfile"); + + /* + * If the kernel architecture was not specified + * then use the machine architecture. + */ + if (gopt.karch == 0) + gopt.karch = gopt.arch; + + if (gopt.cluster == 0) + gopt.cluster = hostdomain; + + if (gopt.amfs_auto_timeo <= 0) + gopt.amfs_auto_timeo = AMFS_AUTO_TIMEO; + if (gopt.amfs_auto_retrans <= 0) + gopt.amfs_auto_retrans = AMFS_AUTO_RETRANS; + if (gopt.amfs_auto_retrans <= 0) + gopt.amfs_auto_retrans = 3; /* XXX */ + return; + } + +show_usage: + fprintf(stderr, + "Usage: %s [-nprvHS] [-a mount_point] [-c cache_time] [-d domain]\n\ +\t[-k kernel_arch] [-l logfile%s\n\ +\t[-t timeout.retrans] [-w wait_timeout] [-C cluster_name]\n\ +\t[-o op_sys_ver] [-O op_sys_name]\n\ +\t[-F conf_file] [-T conf_tag]", progname, +#ifdef HAVE_SYSLOG +# ifdef LOG_DAEMON + "|\"syslog[:facility]\"]" +# else /* not LOG_DAEMON */ + "|\"syslog\"]" +# endif /* not LOG_DAEMON */ +#else /* not HAVE_SYSLOG */ + "]" +#endif /* not HAVE_SYSLOG */ + ); + +#ifdef HAVE_MAP_NIS + fputs(" [-y nis-domain]\n", stderr); +#else /* not HAVE_MAP_NIS */ + fputc('\n', stderr); +#endif /* HAVE_MAP_NIS */ + + show_opts('x', xlog_opt); +#ifdef DEBUG + show_opts('D', dbg_opt); +#endif /* DEBUG */ + fprintf(stderr, "\t[directory mapname [-map_options]] ...\n"); + exit(1); +} diff --git a/amd/info_file.c b/amd/info_file.c new file mode 100644 index 0000000..ed06318 --- /dev/null +++ b/amd/info_file.c @@ -0,0 +1,265 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_file.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Get info from file + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define MAX_LINE_LEN 1500 + +/* forward declarations */ +int file_init(mnt_map *m, char *map, time_t *tp); +int file_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *)); +int file_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp); +int file_mtime(mnt_map *m, char *map, time_t *tp); + + +static int +read_line(char *buf, int size, FILE * fp) +{ + int done = 0; + + do { + while (fgets(buf, size, fp)) { + int len = strlen(buf); + done += len; + if (len > 1 && buf[len - 2] == '\\' && + buf[len - 1] == '\n') { + int ch; + buf += len - 2; + size -= len - 2; + *buf = '\n'; + buf[1] = '\0'; + /* + * Skip leading white space on next line + */ + while ((ch = getc(fp)) != EOF && + isascii(ch) && isspace(ch)) ; + (void) ungetc(ch, fp); + } else { + return done; + } + } + } while (size > 0 && !feof(fp)); + + return done; +} + + +/* + * Try to locate a key in a file + */ +static int +search_or_reload_file(FILE * fp, char *map, char *key, char **val, mnt_map *m, void (*fn) (mnt_map *m, char *, char *)) +{ + char key_val[MAX_LINE_LEN]; + int chuck = 0; + int line_no = 0; + + while (read_line(key_val, sizeof(key_val), fp)) { + char *kp; + char *cp; + char *hash; + int len = strlen(key_val); + line_no++; + + /* + * Make sure we got the whole line + */ + if (key_val[len - 1] != '\n') { + plog(XLOG_WARNING, "line %d in \"%s\" is too long", line_no, map); + chuck = 1; + } else { + key_val[len - 1] = '\0'; + } + + /* + * Strip comments + */ + hash = strchr(key_val, '#'); + if (hash) + *hash = '\0'; + + /* + * Find start of key + */ + for (kp = key_val; *kp && isascii(*kp) && isspace((int)*kp); kp++) ; + + /* + * Ignore blank lines + */ + if (!*kp) + goto again; + + /* + * Find end of key + */ + for (cp = kp; *cp && (!isascii(*cp) || !isspace((int)*cp)); cp++) ; + + /* + * Check whether key matches + */ + if (*cp) + *cp++ = '\0'; + + if (fn || (*key == *kp && STREQ(key, kp))) { + while (*cp && isascii(*cp) && isspace((int)*cp)) + cp++; + if (*cp) { + /* + * Return a copy of the data + */ + char *dc = strdup(cp); + if (fn) { + (*fn) (m, strdup(kp), dc); + } else { + *val = dc; +#ifdef DEBUG + dlog("%s returns %s", key, dc); +#endif /* DEBUG */ + } + if (!fn) + return 0; + } else { + plog(XLOG_USER, "%s: line %d has no value field", map, line_no); + } + } + + again: + /* + * If the last read didn't get a whole line then + * throw away the remainder before continuing... + */ + if (chuck) { + while (fgets(key_val, sizeof(key_val), fp) && + !strchr(key_val, '\n')) ; + chuck = 0; + } + } + + return fn ? 0 : ENOENT; +} + + +static FILE * +file_open(char *map, time_t *tp) +{ + FILE *mapf = fopen(map, "r"); + + if (mapf && tp) { + struct stat stb; + if (fstat(fileno(mapf), &stb) < 0) + *tp = clocktime(); + else + *tp = stb.st_mtime; + } + return mapf; +} + + +int +file_init(mnt_map *m, char *map, time_t *tp) +{ + FILE *mapf = file_open(map, tp); + + if (mapf) { + fclose(mapf); + return 0; + } + return errno; +} + + +int +file_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *)) +{ + FILE *mapf = file_open(map, (time_t *) 0); + + if (mapf) { + int error = search_or_reload_file(mapf, map, 0, 0, m, fn); + (void) fclose(mapf); + return error; + } + return errno; +} + + +int +file_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp) +{ + time_t t; + FILE *mapf = file_open(map, &t); + + if (mapf) { + int error; + if (*tp < t) { + *tp = t; + error = -1; + } else { + error = search_or_reload_file(mapf, map, key, pval, 0, 0); + } + (void) fclose(mapf); + return error; + } + return errno; +} + + +int +file_mtime(mnt_map *m, char *map, time_t *tp) +{ + FILE *mapf = file_open(map, tp); + + if (mapf) { + (void) fclose(mapf); + return 0; + } + return errno; +} diff --git a/amd/info_hesiod.c b/amd/info_hesiod.c new file mode 100644 index 0000000..423cfd6 --- /dev/null +++ b/amd/info_hesiod.c @@ -0,0 +1,163 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_hesiod.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Get info from Hesiod + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define HES_PREFIX "hesiod." +#define HES_PREFLEN 7 + +#ifdef HAVE_HESIOD_INIT +/* bsdi3 does not define this extern in any header file */ +extern char **hesiod_resolve(void *context, const char *name, const char *type); + +static voidp hesiod_context; +#endif /* HAVE_HESIOD_INIT */ + +/* + * No easy way to probe the server - check the map name begins with "hesiod." + * Note: this name includes 'amu_' so as to not conflict with libhesiod's + * hesiod_init() function. + */ +int +amu_hesiod_init(mnt_map *m, char *map, time_t *tp) +{ +#ifdef DEBUG + dlog("amu_hesiod_init(%s)", map); +#endif /* DEBUG */ + *tp = 0; + +#ifdef HAVE_HESIOD_INIT + if(!hesiod_context && hesiod_init(&hesiod_context) != 0) + return ENOENT; +#endif /* HAVE_HESIOD_INIT */ + + return NSTREQ(map, HES_PREFIX, HES_PREFLEN) ? 0 : ENOENT; +} + + +/* + * Do a Hesiod nameserver call. + * Modify time is ignored by Hesiod - XXX + */ +int +hesiod_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp) +{ + char hes_key[MAXPATHLEN]; + char **rvec; +#ifndef HAVE_HESIOD_INIT + int error; +#endif /* not HAVE_HESIOD_INIT */ + +#ifdef DEBUG + dlog("hesiod_search(m=%x, map=%s, key=%s, pval=%x tp=%x)", m, map, key, pval, tp); +#endif /* DEBUG */ + + sprintf(hes_key, "%s.%s", key, map + HES_PREFLEN); + + /* + * Call the resolver + */ +#ifdef DEBUG + dlog("Hesiod base is: %s\n", gopt.hesiod_base); + dlog("hesiod_search: hes_resolve(%s, %s)", hes_key, gopt.hesiod_base); + if (debug_flags & D_INFO) + _res.options |= RES_DEBUG; +#endif /* DEBUG */ + +#ifdef HAVE_HESIOD_INIT + /* new style hesiod */ + rvec = hesiod_resolve(hesiod_context, hes_key, gopt.hesiod_base); +#else /* not HAVE_HESIOD_INIT */ + rvec = hes_resolve(hes_key, gopt.hesiod_base); +#endif /* not HAVE_HESIOD_INIT */ + + /* + * If a reply was forthcoming then return + * it (and free subsequent replies) + */ + if (rvec && *rvec) { + *pval = *rvec; + while (*++rvec) + XFREE(*rvec); + return 0; + } + +#ifdef HAVE_HESIOD_INIT + /* new style hesiod */ + return errno; +#else /* not HAVE_HESIOD_INIT */ + /* + * Otherwise reflect the hesiod error into a Un*x error + */ +# ifdef DEBUG + dlog("hesiod_search: Error: %d", hes_error()); +# endif /* DEBUG */ + switch (hes_error()) { + case HES_ER_NOTFOUND: + error = ENOENT; + break; + case HES_ER_CONFIG: + error = EIO; + break; + case HES_ER_NET: + error = ETIMEDOUT; + break; + default: + error = EINVAL; + break; + } +# ifdef DEBUG + dlog("hesiod_search: Returning: %d", error); +# endif /* DEBUG */ + return error; +#endif /* not HAVE_HESIOD_INIT */ +} diff --git a/amd/info_ldap.c b/amd/info_ldap.c new file mode 100644 index 0000000..bad768d --- /dev/null +++ b/amd/info_ldap.c @@ -0,0 +1,465 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_ldap.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + + +/* + * Get info from LDAP (Lightweight Directory Access Protocol) + * LDAP Home Page: http://www.umich.edu/~rsug/ldap/ + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * MACROS: + */ +#define AMD_LDAP_TYPE "ldap" +/* Time to live for an LDAP cached in an mnt_map */ +#define AMD_LDAP_TTL 3600 +#define AMD_LDAP_RETRIES 5 +#define AMD_LDAP_HOST "ldap" +#ifndef LDAP_PORT +# define LDAP_PORT 389 +#endif /* LDAP_PORT */ + +/* How timestamps are searched */ +#define AMD_LDAP_TSFILTER "(&(objectClass=amdmapTimestamp)(amdmapName=%s))" +/* How maps are searched */ +#define AMD_LDAP_FILTER "(&(objectClass=amdmap)(amdmapName=%s)(amdmapKey=%s))" +/* How timestamps are stored */ +#define AMD_LDAP_TSATTR "amdmaptimestamp" +/* How maps are stored */ +#define AMD_LDAP_ATTR "amdmapvalue" + +/* + * TYPEDEFS: + */ +typedef struct ald_ent ALD; +typedef struct cr_ent CR; +typedef struct he_ent HE; + +/* + * STRUCTURES: + */ +struct ald_ent { + LDAP *ldap; + HE *hostent; + CR *credentials; + time_t timestamp; +}; + +struct cr_ent { + char *who; + char *pw; + int method; +}; + +struct he_ent { + char *host; + int port; + struct he_ent *next; +}; + +/* + * FORWARD DECLARATIONS: + */ +static int amu_ldap_rebind(ALD *a); +static int get_ldap_timestamp(LDAP *ld, char *map, time_t *ts); + + +/* + * FUNCTIONS: + */ + +static void +he_free(HE *h) +{ + XFREE(h->host); + if (h->next != NULL) + he_free(h->next); + XFREE(h); +} + + +static HE * +string2he(char *s) +{ + char *c, *p; + HE *new, *old = NULL; + + if (s == NULL) + return (NULL); + for (p = s; p; p = strchr(p, ',')) { + if (old != NULL) { + new = (HE *) xmalloc(sizeof(HE)); + old->next = new; + old = new; + } else { + old = (HE *) xmalloc(sizeof(HE)); + old->next = NULL; + } + c = strchr(p, ':'); + if (c) { /* Host and port */ + *c++ = '\0'; + old->host = strdup(p); + old->port = atoi(c); + } else + old->host = strdup(p); + + } + return (old); +} + + +static void +cr_free(CR *c) +{ + XFREE(c->who); + XFREE(c->pw); + XFREE(c); +} + + +static void +ald_free(ALD *a) +{ + he_free(a->hostent); + cr_free(a->credentials); + if (a->ldap != NULL) + ldap_unbind(a->ldap); + XFREE(a); +} + + +int +amu_ldap_init(mnt_map *m, char *map, time_t *ts) +{ + ALD *aldh; + CR *creds; + + if (!STREQ(gopt.map_type, AMD_LDAP_TYPE)) { + return (ENOENT); + } +#ifdef DEBUG + else { + dlog("Map %s is ldap\n", map); + } +#endif /* DEBUG */ + + aldh = (ALD *) xmalloc(sizeof(ALD)); + creds = (CR *) xmalloc(sizeof(CR)); + + aldh->hostent = string2he(gopt.ldap_hostports); + if (aldh->hostent == NULL) { + plog(XLOG_USER, "Unable to parse hostport %s for ldap map %s", + gopt.ldap_hostports, map); + return (ENOENT); + } + creds->who = ""; + creds->pw = ""; + creds->method = LDAP_AUTH_SIMPLE; + aldh->credentials = creds; + aldh->timestamp = 0; +#ifdef DEBUG + dlog("Trying for %s:%d\n", aldh->hostent->host, aldh->hostent->port); +#endif /* DEBUG */ + if (amu_ldap_rebind(aldh)) { + ald_free(aldh); + return (ENOENT); + } + m->map_data = (void *) aldh; +#ifdef DEBUG + dlog("Bound to %s:%d\n", aldh->hostent->host, aldh->hostent->port); +#endif /* DEBUG */ + if (get_ldap_timestamp(aldh->ldap, map, ts)) + return (ENOENT); +#ifdef DEBUG + dlog("Got timestamp for map %s: %d\n", map, *ts); +#endif /* DEBUG */ + + return (0); +} + + +static int +amu_ldap_rebind(ALD *a) +{ + LDAP *ld; + HE *h; + CR *c = a->credentials; + time_t now = clocktime(); + + if (a->ldap != NULL) { + if ((a->timestamp - now) > AMD_LDAP_TTL) { +#ifdef DEBUG + dlog("Reestablishing ldap connection\n"); +#endif /* DEBUG */ + ldap_unbind(a->ldap); + a->timestamp = now; + } else + return (0); + } + + while (TRUE) { + for (h = a->hostent; h != NULL; h = h->next) { + if ((ld = ldap_open(h->host, h->port)) == NULL) { + plog(XLOG_WARNING, "Unable to ldap_open to %s:%d\n", h->host, h->port); + break; + } + if (ldap_bind_s(ld, c->who, c->pw, c->method) != LDAP_SUCCESS) { + plog(XLOG_WARNING, "Unable to ldap_bind to %s:%d as %s\n", + h->host, h->port, c->who); + break; + } + if (gopt.ldap_cache_seconds > 0) { + ldap_enable_cache(ld, gopt.ldap_cache_seconds, gopt.ldap_cache_maxmem); + a->ldap = ld; + a->timestamp = now; + return (0); + } + } + plog(XLOG_WARNING, "Exhausted list of ldap servers, looping.\n"); + } + + plog(XLOG_USER, "Unable to (re)bind to any ldap hosts\n"); + return (ENOENT); +} + + +static int +get_ldap_timestamp(LDAP * ld, char *map, time_t *ts) +{ + struct timeval tv; + char **vals, *end; + char filter[MAXPATHLEN]; + int i, err, nentries = 0; + LDAPMessage *res, *entry; + + tv.tv_sec = 3; + tv.tv_usec = 0; + sprintf(filter, AMD_LDAP_TSFILTER, map); +#ifdef DEBUG + dlog("Getting timestamp for map %s\n", map); + dlog("Filter is: %s\n", filter); + dlog("Base is: %s\n", gopt.ldap_base); +#endif /* DEBUG */ + for (i = 0; i < AMD_LDAP_RETRIES; i++) { + err = ldap_search_st(ld, + gopt.ldap_base, + LDAP_SCOPE_SUBTREE, + filter, + 0, + 0, + &tv, + &res); + if (err == LDAP_SUCCESS) + break; + dlog("Timestamp search timed out, trying again...\n"); + } + + if (err != LDAP_SUCCESS) { + *ts = 0; + plog(XLOG_USER, "LDAP timestamp search failed: %s\n", + ldap_err2string(ld->ld_errno)); + return (ENOENT); + } + + nentries = ldap_count_entries(ld, res); + if (nentries == 0) { + plog(XLOG_USER, "No timestamp entry for map %s\n", map); + *ts = 0; + ldap_msgfree(res); + return (ENOENT); + } + + entry = ldap_first_entry(ld, res); + vals = ldap_get_values(ld, entry, AMD_LDAP_TSATTR); + if (ldap_count_values(vals) == 0) { + plog(XLOG_USER, "Missing timestamp value for map %s\n", map); + *ts = 0; + ldap_value_free(vals); + ldap_msgfree(res); + ldap_msgfree(entry); + return (ENOENT); + } +#ifdef DEBUG + dlog("TS value is:%s:\n", vals[0]); +#endif /* DEBUG */ + + if (vals[0]) { + *ts = (time_t) strtol(vals[0], &end, 10); + if (end == vals[0]) { + plog(XLOG_USER, "Unable to decode ldap timestamp %s for map %s\n", + vals[0], map); + err = ENOENT; + } + if (!*ts > 0) { + plog(XLOG_USER, "Nonpositive timestamp %d for map %s\n", + *ts, map); + err = ENOENT; + } + } else { + plog(XLOG_USER, "Empty timestamp value for map %s\n", map); + *ts = 0; + err = ENOENT; + } + + ldap_value_free(vals); + ldap_msgfree(res); + ldap_msgfree(entry); +#ifdef DEBUG + dlog("The timestamp for %s is %d (err=%d)\n", map, *ts, err); +#endif /* DEBUG */ + return (err); +} + + +int +amu_ldap_search(mnt_map *m, char *map, char *key, char **pval, time_t *ts) +{ + char **vals, filter[MAXPATHLEN]; + struct timeval tv; + int i, err, nvals = 0, nentries = 0; + LDAPMessage *entry, *res; + ALD *a = (ALD *) (m->map_data); + + tv.tv_sec = 2; + tv.tv_usec = 0; + if (a == NULL) { + plog(XLOG_USER, "LDAP panic: no map data\n"); + return (EIO); + } + if (amu_ldap_rebind(a)) /* Check that's the handle is still valid */ + return (ENOENT); + + sprintf(filter, AMD_LDAP_FILTER, map, key); +#ifdef DEBUG + dlog("Search with filter: %s\n", filter); +#endif /* DEBUG */ + for (i = 0; i < AMD_LDAP_RETRIES; i++) { + err = ldap_search_st(a->ldap, + gopt.ldap_base, + LDAP_SCOPE_SUBTREE, + filter, + 0, + 0, + &tv, + &res); + if (err == LDAP_SUCCESS) + break; + } + + switch (err) { + case LDAP_SUCCESS: + break; + case LDAP_NO_SUCH_OBJECT: +#ifdef DEBUG + dlog("No object\n"); +#endif /* DEBUG */ + ldap_msgfree(res); + return (ENOENT); + default: + plog(XLOG_USER, "LDAP search failed: %s\n", + ldap_err2string(a->ldap->ld_errno)); + ldap_msgfree(res); + return (EIO); + } + + nentries = ldap_count_entries(a->ldap, res); +#ifdef DEBUG + dlog("Search found %d entries\n", nentries); +#endif /* DEBUG */ + if (nentries == 0) { + ldap_msgfree(res); + return (ENOENT); + } + entry = ldap_first_entry(a->ldap, res); + vals = ldap_get_values(a->ldap, entry, AMD_LDAP_ATTR); + nvals = ldap_count_values(vals); + if (nvals == 0) { + plog(XLOG_USER, "Missing value for %s in map %s\n", key, map); + ldap_value_free(vals); + ldap_msgfree(res); + ldap_msgfree(entry); + return (EIO); + } +#ifdef DEBUG + dlog("Map %s, %s => %s\n", map, key, vals[0]); +#endif /* DEBUG */ + if (vals[0]) { + *pval = strdup(vals[0]); + err = 0; + } else { + plog(XLOG_USER, "Empty value for %s in map %s\n", key, map); + err = ENOENT; + } + ldap_msgfree(res); + ldap_msgfree(entry); + ldap_value_free(vals); + + return (err); +} + + +int +amu_ldap_mtime(mnt_map *m, char *map, time_t *ts) +{ + ALD *aldh = (ALD *) (m->map_data); + + if (aldh == NULL) { + dlog("LDAP panic: unable to find map data\n"); + return (ENOENT); + } + if (amu_ldap_rebind(aldh)) { + return (ENOENT); + } + if (get_ldap_timestamp(aldh->ldap, map, ts)) { + return (ENOENT); + } + return (0); +} diff --git a/amd/info_ndbm.c b/amd/info_ndbm.c new file mode 100644 index 0000000..9ae3e04 --- /dev/null +++ b/amd/info_ndbm.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_ndbm.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Get info from NDBM map + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +int ndbm_init(mnt_map *m, char *map, time_t *tp); +int ndbm_mtime(mnt_map *m, char *map, time_t *tp); +int ndbm_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp); + + +static int +search_ndbm(DBM *db, char *key, char **val) +{ + datum k, v; + + k.dptr = key; + k.dsize = strlen(key) + 1; + v = dbm_fetch(db, k); + if (v.dptr) { + *val = strdup(v.dptr); + return 0; + } + return ENOENT; +} + + +int +ndbm_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp) +{ + DBM *db; + + db = dbm_open(map, O_RDONLY, 0); + if (db) { + struct stat stb; + int error; +#ifdef DBM_SUFFIX + char dbfilename[256]; + + strcpy(dbfilename, map); + strcat(dbfilename, DBM_SUFFIX); + error = stat(dbfilename, &stb); +#else /* not DBM_SUFFIX */ + error = fstat(dbm_pagfno(db), &stb); +#endif /* not DBM_SUFFIX */ + if (!error && *tp < stb.st_mtime) { + *tp = stb.st_mtime; + error = -1; + } else { + error = search_ndbm(db, key, pval); + } + (void) dbm_close(db); + return error; + } + return errno; +} + + +int +ndbm_init(mnt_map *m, char *map, time_t *tp) +{ + DBM *db; + + db = dbm_open(map, O_RDONLY, 0); + if (db) { + struct stat stb; + int error; +#ifdef DBM_SUFFIX + char dbfilename[256]; + + strcpy(dbfilename, map); + strcat(dbfilename, DBM_SUFFIX); + error = stat(dbfilename, &stb); +#else /* not DBM_SUFFIX */ + error = fstat(dbm_pagfno(db), &stb); +#endif /* not DBM_SUFFIX */ + if (error < 0) + *tp = clocktime(); + else + *tp = stb.st_mtime; + dbm_close(db); + return 0; + } + return errno; +} + + +int +ndbm_mtime(mnt_map *m, char *map, time_t *tp) +{ + return ndbm_init(m,map, tp); +} diff --git a/amd/info_nis.c b/amd/info_nis.c new file mode 100644 index 0000000..ac90251 --- /dev/null +++ b/amd/info_nis.c @@ -0,0 +1,405 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_nis.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Get info from NIS map + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * NIS+ servers in NIS compat mode don't have yp_order() + */ +static int has_yp_order = FALSE; + +/* forward declarations */ +int nis_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *)); +int nis_search(mnt_map *m, char *map, char *key, char **val, time_t *tp); +int nis_init(mnt_map *m, char *map, time_t *tp); +int nis_isup(mnt_map *m, char *map); +int nis_mtime(mnt_map *m, char *map, time_t *tp); + +/* typedefs */ +typedef void (*nis_callback_fxn_t)(mnt_map *, char *, char *); +#ifndef DEFINED_YPALL_CALLBACK_FXN_T +typedef int (*ypall_callback_fxn_t)(); +#endif /* DEFINED_YPALL_CALLBACK_FXN_T */ + +struct nis_callback_data { + mnt_map *ncd_m; + char *ncd_map; + nis_callback_fxn_t ncd_fn; +}; + +/* Map to the right version of yp_all */ +#ifdef HAVE_BAD_YP_ALL +# define yp_all am_yp_all +static int am_yp_all(char *indomain, char *inmap, struct ypall_callback *incallback); +#endif /* HAVE_BAD_YP_ALL */ + + +/* + * Figure out the nis domain name + */ +static int +determine_nis_domain(void) +{ + static int nis_not_running = 0; + char default_domain[YPMAXDOMAIN]; + + if (nis_not_running) + return ENOENT; + + if (getdomainname(default_domain, sizeof(default_domain)) < 0) { + nis_not_running = 1; + plog(XLOG_ERROR, "getdomainname: %m"); + return EIO; + } + if (!*default_domain) { + nis_not_running = 1; + plog(XLOG_WARNING, "NIS domain name is not set. NIS ignored."); + return ENOENT; + } + gopt.nis_domain = strdup(default_domain); + + return 0; +} + + +/* + * Callback from yp_all + */ +static int +callback(int status, char *key, int kl, char *val, int vl, char *data) +{ + struct nis_callback_data *ncdp = (struct nis_callback_data *) data; + + if (status == YP_TRUE) { + + /* add to list of maps */ + char *kp = strnsave(key, kl); + char *vp = strnsave(val, vl); + + (*ncdp->ncd_fn) (ncdp->ncd_m, kp, vp); + + /* we want more ... */ + return FALSE; + + } else { + + /* NOMORE means end of map - otherwise log error */ + if (status != YP_NOMORE) { + /* check what went wrong */ + int e = ypprot_err(status); + +#ifdef DEBUG + plog(XLOG_ERROR, "yp enumeration of %s: %s, status=%d, e=%d", + ncdp->ncd_map, yperr_string(e), status, e); +#else /* not DEBUG */ + plog(XLOG_ERROR, "yp enumeration of %s: %s", ncdp->ncd_map, yperr_string(e)); +#endif /* not DEBUG */ + } + return TRUE; + } +} + + +int +nis_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *)) +{ + int error; + struct nis_callback_data data; + struct ypall_callback cbinfo; + + if (!gopt.nis_domain) { + error = determine_nis_domain(); + if (error) + return error; + } + data.ncd_m = m; + data.ncd_map = map; + data.ncd_fn = fn; + cbinfo.data = (voidp) &data; + cbinfo.foreach = (ypall_callback_fxn_t) callback; + + /* + * If you are using NIS and your yp_all function is "broken", you have to + * get it fixed. The bug in yp_all() is that it does not close a TCP + * connection to ypserv, and this ypserv runs out of open file descriptors, + * getting into an infinite loop, thus all YP clients eventually unbind + * and hang too. + */ + error = yp_all(gopt.nis_domain, map, &cbinfo); + + if (error) + plog(XLOG_ERROR, "error grabbing nis map of %s: %s", map, yperr_string(ypprot_err(error))); + return error; +} + + +/* + * Check if NIS is up, so we can determine if to clear the map or not. + * Test it by checking the yp order. + * Returns: 0 if NIS is down, 1 if it is up. + */ +int +nis_isup(mnt_map *m, char *map) +{ + YP_ORDER_OUTORDER_TYPE order; + int error; + static int last_status = 1; /* assume up by default */ + + if (has_yp_order) { + error = yp_order(gopt.nis_domain, map, &order); + if (error != 0) { + plog(XLOG_ERROR, + "nis_isup: error getting the order of map of %s: %s", + map, yperr_string(ypprot_err(error))); + last_status = 0; + return 0; /* NIS is down */ + } + } + if (last_status == 0) { /* if was down before */ + time_t dummy; + plog(XLOG_INFO, "nis_isup: NIS came back up for map %s", map); + /* XXX: do we really need to reinitialize nis? */ + error = nis_init(m, map, &dummy); + if (!error) + last_status = 1; + } + return 1; /* NIS is up */ +} + + +/* + * Try to locate a key using NIS. + */ +int +nis_search(mnt_map *m, char *map, char *key, char **val, time_t *tp) +{ + int outlen; + int res; + YP_ORDER_OUTORDER_TYPE order; + + /* + * Make sure domain initialized + */ + if (!gopt.nis_domain) { + int error = determine_nis_domain(); + if (error) + return error; + } + + + if (has_yp_order) { + /* + * Check if map has changed + */ + if (yp_order(gopt.nis_domain, map, &order)) + return EIO; + if ((time_t) order > *tp) { + *tp = (time_t) order; + return -1; + } + } else { + /* + * NIS+ server without yp_order + * Check if timeout has expired to invalidate the cache + */ + order = time(NULL); + if ((time_t)order - *tp > gopt.am_timeo) { + *tp = (time_t)order; + return(-1); + } + } + + /* + * Lookup key + */ + res = yp_match(gopt.nis_domain, map, key, strlen(key), val, &outlen); + + /* + * Do something interesting with the return code + */ + switch (res) { + case 0: + return 0; + + case YPERR_KEY: + return ENOENT; + + default: + plog(XLOG_ERROR, "%s: %s", map, yperr_string(res)); + return EIO; + } +} + + +int +nis_init(mnt_map *m, char *map, time_t *tp) +{ + YP_ORDER_OUTORDER_TYPE order; + int yp_order_result; + char *master; + + if (!gopt.nis_domain) { + int error = determine_nis_domain(); + if (error) + return error; + } + + /* + * To see if the map exists, try to find + * a master for it. + */ + yp_order_result = yp_order(gopt.nis_domain, map, &order); + switch (yp_order_result) { + case 0: + has_yp_order = TRUE; + *tp = (time_t) order; +#ifdef DEBUG + dlog("NIS master for %s@%s has order %d", map, gopt.nis_domain, order); +#endif /* DEBUG */ + break; + case YPERR_YPERR: + /* NIS+ server found ! */ + has_yp_order = FALSE; + /* try yp_master() instead */ + if (yp_master(gopt.nis_domain, map, &master)) { + return ENOENT; + } else { +#ifdef DEBUG + dlog("NIS master for %s@%s is a NIS+ server", map, gopt.nis_domain); +#endif /* DEBUG */ + /* Use fake timestamps */ + *tp = time(NULL); + } + break; + default: + return ENOENT; + } + return 0; +} + + +int +nis_mtime(mnt_map *m, char *map, time_t *tp) +{ + return nis_init(m, map, tp); +} + + +#ifdef HAVE_BAD_YP_ALL +/* + * If you are using NIS and your yp_all function is "broken", use an + * alternate code which avoids a bug in yp_all(). The bug in yp_all() is + * that it does not close a TCP connection to ypserv, and this ypserv runs + * out of open filedescriptors, getting into an infinite loop, thus all YP + * clients eventually unbind and hang too. + * + * Systems known to be plagued with this bug: + * earlier SunOS 4.x + * all irix systems (at this time, up to 6.4 was checked) + * + * -Erez Zadok + * -James Tanis */ +static int +am_yp_all(char *indomain, char *inmap, struct ypall_callback *incallback) +{ + int i, j; + char *outkey, *outval; + int outkeylen, outvallen; + char *outkey_old; + int outkeylen_old; + + plog(XLOG_INFO, "NIS map %s reloading using am_yp_all", inmap); + + i = yp_first(indomain, inmap, &outkey, &outkeylen, &outval, &outvallen); + if (i) { + plog(XLOG_ERROR, "yp_first() returned error: %s\n", yperr_string(i)); + } + do { + j = (incallback->foreach)(YP_TRUE, + outkey, + outkeylen, + outval, + outvallen, + incallback->data); + if (j != FALSE) /* terminate loop */ + break; + + /* + * We have to manually free all char ** arguments to yp_first/yp_next + * outval must be freed *before* calling yp_next again, outkey can be + * freed as outkey_old *after* the call (this saves one call to + * strnsave). + */ + XFREE(outval); + outkey_old = outkey; + outkeylen_old = outkeylen; + i = yp_next(indomain, + inmap, + outkey_old, + outkeylen_old, + &outkey, + &outkeylen, + &outval, + &outvallen); + XFREE(outkey_old); + } while (!i); +#ifdef DEBUG + if (i) { + dlog("yp_next() returned error: %s\n", yperr_string(i)); + } +#endif /* DEBUG */ + if (i == YPERR_NOMORE) + return 0; + return i; +} +#endif /* HAVE_BAD_YP_ALL */ diff --git a/amd/info_nisplus.c b/amd/info_nisplus.c new file mode 100644 index 0000000..96eb183 --- /dev/null +++ b/amd/info_nisplus.c @@ -0,0 +1,321 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_nisplus.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Get info from NIS+ (version 3) map + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define NISPLUS_KEY "key=" +#define NISPLUS_ORGDIR ".org_dir" + +struct nis_callback_data { + mnt_map *ncd_m; + char *ncd_map; + void (*ncd_fn)(); +}; + +struct nisplus_search_callback_data { + nis_name key; + char *value; +}; + + +static int +nisplus_callback(const nis_name key, const nis_object *value, voidp opaquedata) +{ + char *kp = strnsave(ENTRY_VAL(value, 0), ENTRY_LEN(value, 0)); + char *vp = strnsave(ENTRY_VAL(value, 1), ENTRY_LEN(value, 1)); + struct nis_callback_data *data = (struct nis_callback_data *) opaquedata; + +#ifdef DEBUG + dlog("NISplus callback for <%s,%s>", kp, vp); +#endif /* DEBUG */ + + (*data->ncd_fn) (data->ncd_m, kp, vp); + + /* + * We want more ... + */ + return FALSE; +} + + +int +nisplus_reload(mnt_map *m, char *map, void (*fn) ()) +{ + int error = 0; + struct nis_callback_data data; + nis_result *result; + char *org; /* if map does not have ".org_dir" then append it */ + nis_name map_name; + + org = strstr(map, NISPLUS_ORGDIR); + if (org == NULL) + org = NISPLUS_ORGDIR; + else + org = ""; + + /* make some room for the NIS map_name */ + map_name = xmalloc(strlen(map) + sizeof(NISPLUS_ORGDIR)); + if (map_name == NULL) { + plog(XLOG_ERROR, "Unable to create map_name %s: %s", + map, strerror(ENOMEM)); + return ENOMEM; + } + sprintf(map_name, "%s%s", map, org); + + data.ncd_m = m; + data.ncd_map = map_name; + data.ncd_fn = fn; + +#ifdef DEBUG + dlog("NISplus reload for %s", map); +#endif /* DEBUG */ + + result = nis_list(map_name, + EXPAND_NAME | FOLLOW_LINKS | FOLLOW_PATH, + (int (*)()) nisplus_callback, + &data); + + /* free off the NIS map_name */ + XFREE(map_name); + + if (result->status != NIS_SUCCESS && result->status != NIS_CBRESULTS) + error = 1; + + if (error) + plog(XLOG_ERROR, "error grabbing nisplus map of %s: %s", + map, + nis_sperrno(result->status)); + + nis_freeresult(result); + return error; +} + + +static int +nisplus_search_callback(const nis_name key, const nis_object *value, voidp opaquedata) +{ + struct nisplus_search_callback_data *data = (struct nisplus_search_callback_data *) opaquedata; + +#ifdef DEBUG + dlog("NISplus search callback for <%s>", ENTRY_VAL(value, 0)); + dlog("NISplus search callback value <%s>", ENTRY_VAL(value, 1)); +#endif /* DEBUG */ + + data->value = strnsave(ENTRY_VAL(value, 1), ENTRY_LEN(value, 1)); + return TRUE; +} + + +/* + * Try to locate a key using NIS+. + */ +int +nisplus_search(mnt_map *m, char *map, char *key, char **val, time_t *tp) +{ + nis_result *result; + int error = 0; + struct nisplus_search_callback_data data; + nis_name index; + char *org; /* if map does not have ".org_dir" then append it */ + + org = strstr(map, NISPLUS_ORGDIR); + if (org == NULL) + org = NISPLUS_ORGDIR; + else + org = ""; + + /* make some room for the NIS index */ + index = xmalloc(sizeof('[') /* for opening selection criteria */ + +sizeof(NISPLUS_KEY) + + strlen(key) + + sizeof(']') /* for closing selection criteria */ + +sizeof(',') /* + 1 for , separator */ + +strlen(map) + + sizeof(NISPLUS_ORGDIR) + ); + if (index == NULL) { + plog(XLOG_ERROR, + "Unable to create index %s: %s", + map, + strerror(ENOMEM)); + return ENOMEM; + } + sprintf(index, "[%s%s],%s%s", NISPLUS_KEY, key, map, org); + + data.key = key; + data.value = NULL; + +#ifdef DEBUG + dlog("NISplus search for %s", index); +#endif /* DEBUG */ + + result = nis_list(index, + EXPAND_NAME | FOLLOW_LINKS | FOLLOW_PATH, + (int (*)()) nisplus_search_callback, + &data); + + /* free off the NIS index */ + XFREE(index); + + if (result == NULL) { + plog(XLOG_ERROR, "%s: %s", map, strerror(ENOMEM)); + return ENOMEM; + } + + /* + * Do something interesting with the return code + */ + switch (result->status) { + case NIS_SUCCESS: + case NIS_CBRESULTS: + + if (data.value == NULL) { + nis_object *value = result->objects.objects_val; +#ifdef DEBUG + dlog("NISplus search found "); + dlog("NISplus search for %s: %s(%d)", + map, nis_sperrno(result->status), result->status); +#endif /* DEBUG */ + + if (value != NULL) + data.value = strnsave(ENTRY_VAL(value, 1), ENTRY_LEN(value, 1)); + } + *val = data.value; + + if (*val) { + error = 0; +#ifdef DEBUG + dlog("NISplus search found %s", *val); +#endif /* DEBUG */ + } else { + error = ENOENT; +#ifdef DEBUG + dlog("NISplus search found nothing"); +#endif /* DEBUG */ + } + + *tp = 0; + break; + + case NIS_NOSUCHNAME: +#ifdef DEBUG + dlog("NISplus search returned %d", result->status); +#endif /* DEBUG */ + error = ENOENT; + break; + + default: + plog(XLOG_ERROR, "%s: %s", map, nis_sperrno(result->status)); + error = EIO; + break; + } + nis_freeresult(result); + + return error; +} + + +int +nisplus_init(mnt_map *m, char *map, time_t *tp) +{ + nis_result *result; + char *org; /* if map does not have ".org_dir" then append it */ + nis_name map_name; + int error = 0; + + org = strstr(map, NISPLUS_ORGDIR); + if (org == NULL) + org = NISPLUS_ORGDIR; + else + org = ""; + + /* make some room for the NIS map_name */ + map_name = xmalloc(strlen(map) + sizeof(NISPLUS_ORGDIR)); + if (map_name == NULL) { + plog(XLOG_ERROR, + "Unable to create map_name %s: %s", + map, + strerror(ENOMEM)); + return ENOMEM; + } + sprintf(map_name, "%s%s", map, org); + + result = nis_lookup(map_name, (EXPAND_NAME | FOLLOW_LINKS | FOLLOW_PATH)); + + /* free off the NIS map_name */ + XFREE(map_name); + + if (result == NULL) { + plog(XLOG_ERROR, "NISplus init <%s>: %s", map, strerror(ENOMEM)); + return ENOMEM; + } + + if (result->status != NIS_SUCCESS) { +#ifdef DEBUG + dlog("NISplus init <%s>: %s (%d)", + map, nis_sperrno(result->status), result->status); +#endif /* DEBUG */ + + error = ENOENT; + } + + *tp = 0; /* no time */ + nis_freeresult(result); + return error; +} + + +int +nisplus_mtime(mnt_map *m, char *map, time_t *tp) +{ + return nisplus_init(m,map, tp); +} diff --git a/amd/info_passwd.c b/amd/info_passwd.c new file mode 100644 index 0000000..aea552a --- /dev/null +++ b/amd/info_passwd.c @@ -0,0 +1,195 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_passwd.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Get info from password "file" + * + * This is experimental and probably doesn't do what you expect. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define PASSWD_MAP "/etc/passwd" + +/* forward declarations */ +int passwd_init(mnt_map *m, char *map, time_t *tp); +int passwd_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp); + + +/* + * Nothing to probe - check the map name is PASSWD_MAP. + */ +int +passwd_init(mnt_map *m, char *map, time_t *tp) +{ + *tp = 0; + + /* + * Recognize the old format "PASSWD_MAP" + * Uses default return string + * "type:=nfs;rfs:=/${var0}/${var1};rhost:=${var1};sublink:=${var2};fs:=${autodir}${var3}" + */ + if (STREQ(map, PASSWD_MAP)) + return 0; + /* + * Recognize the new format "PASSWD_MAP:pval-format" + */ + if (!NSTREQ(map, PASSWD_MAP, sizeof(PASSWD_MAP) - 1)) + return ENOENT; + if (map[sizeof(PASSWD_MAP)-1] != ':') + return ENOENT; + + return 0; +} + + +/* + * Grab the entry via the getpwname routine + * Modify time is ignored by passwd - XXX + */ +int +passwd_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp) +{ + char *dir = 0; + struct passwd *pw; + + if (STREQ(key, "/defaults")) { + *pval = strdup("type:=nfs"); + return 0; + } + pw = getpwnam(key); + + if (pw) { + /* + * We chop the home directory up as follows: + * /anydir/dom1/dom2/dom3/user + * + * and return + * rfs:=/anydir/dom3;rhost:=dom3.dom2.dom1;sublink:=user + * and now have + * var0:=pw-prefix:=anydir + * var1:=pw-rhost:=dom3.dom2.dom1 + * var2:=pw-user:=user + * var3:=pw-home:=/anydir/dom1/dom2/dom3/user + * + * This allows cross-domain entries in your passwd file. + * ... but forget about security! + */ + char *user; + char *p, *q; + char val[MAXPATHLEN]; + char rhost[MAXHOSTNAMELEN]; + dir = strdup(pw->pw_dir); + + /* + * Find user name. If no / then Invalid... + */ + user = strrchr(dir, '/'); + if (!user) + goto enoent; + *user++ = '\0'; + + /* + * Find start of host "path". If no / then Invalid... + */ + p = strchr(dir + 1, '/'); + if (!p) + goto enoent; + *p++ = '\0'; + + /* + * At this point, p is dom1/dom2/dom3 + * Copy, backwards, into rhost replacing + * / with . + */ + rhost[0] = '\0'; + do { + q = strrchr(p, '/'); + if (q) { + strcat(rhost, q + 1); + strcat(rhost, "."); + *q = '\0'; + } else { + strcat(rhost, p); + } + } while (q); + + /* + * Sanity check + */ + if (*rhost == '\0' || *user == '\0' || *dir == '\0') + goto enoent; + + /* + * Make up return string + */ + q = strchr(rhost, '.'); + if (q) + *q = '\0'; + p = strchr(map, ':'); + if (p) + p++; + else + p = "type:=nfs;rfs:=/${var0}/${var1};rhost:=${var1};sublink:=${var2};fs:=${autodir}${var3}"; + sprintf(val, "var0:=%s;var1:=%s;var2:=%s;var3:=%s;%s", + dir+1, rhost, user, pw->pw_dir, p); +#ifdef DEBUG + dlog("passwd_search: map=%s key=%s -> %s", map, key, val); +#endif /* DEBUG */ + if (q) + *q = '.'; + *pval = strdup(val); + return 0; + } + +enoent: + if (dir) + XFREE(dir); + + return ENOENT; +} diff --git a/amd/info_union.c b/amd/info_union.c new file mode 100644 index 0000000..59ca72e --- /dev/null +++ b/amd/info_union.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: info_union.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Get info from the system namespace + * + * NOTE: Cannot handle reads back through the automounter. + * THIS WILL CAUSE A DEADLOCK! + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define UNION_PREFIX "union:" +#define UNION_PREFLEN 6 + +/* forward declarations */ +int union_init(mnt_map *m, char *map, time_t *tp); +int union_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp); +int union_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *)); + + +/* + * No way to probe - check the map name begins with "union:" + */ +int +union_init(mnt_map *m, char *map, time_t *tp) +{ + *tp = 0; + return NSTREQ(map, UNION_PREFIX, UNION_PREFLEN) ? 0 : ENOENT; +} + + +int +union_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp) +{ + char *mapd = strdup(map + UNION_PREFLEN); + char **v = strsplit(mapd, ':', '\"'); + char **p; + + for (p = v; p[1]; p++) ; + *pval = xmalloc(strlen(*p) + 5); + sprintf(*pval, "fs:=%s", *p); + XFREE(mapd); + XFREE(v); + return 0; +} + + +int +union_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *)) +{ + char *mapd = strdup(map + UNION_PREFLEN); + char **v = strsplit(mapd, ':', '\"'); + char **dir; + + /* + * Add fake /defaults entry + */ + (*fn) (m, strdup("/defaults"), strdup("type:=link;opts:=nounmount;sublink:=${key}")); + + for (dir = v; *dir; dir++) { + int dlen; + struct dirent *dp; + + DIR *dirp = opendir(*dir); + if (!dirp) { + plog(XLOG_USER, "Cannot read directory %s: %m", *dir); + continue; + } + dlen = strlen(*dir); + +#ifdef DEBUG + dlog("Reading directory %s...", *dir); +#endif /* DEBUG */ + while ((dp = readdir(dirp))) { + char *val, *dpname = &dp->d_name[0]; + if (dpname[0] == '.' && + (dpname[1] == '\0' || + (dpname[1] == '.' && dpname[2] == '\0'))) + continue; + +#ifdef DEBUG + dlog("... gives %s", dp->d_name); +#endif /* DEBUG */ + val = xmalloc(dlen + 5); + sprintf(val, "fs:=%s", *dir); + (*fn) (m, strdup(dp->d_name), val); + } + closedir(dirp); + } + + /* + * Add wildcard entry + */ + { + char *val = xmalloc(strlen(dir[-1]) + 5); + + sprintf(val, "fs:=%s", dir[-1]); + (*fn) (m, strdup("*"), val); + } + XFREE(mapd); + XFREE(v); + return 0; +} diff --git a/amd/map.c b/amd/map.c new file mode 100644 index 0000000..6a07cc1 --- /dev/null +++ b/amd/map.c @@ -0,0 +1,1112 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: map.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define smallest_t(t1, t2) (t1 != NEVER ? (t2 != NEVER ? (t1 < t2 ? t1 : t2) : t1) : t2) +#define IGNORE_FLAGS (MFF_MOUNTING|MFF_UNMOUNTING|MFF_RESTART) +#define NEVER (time_t) 0 +#define new_gen() (am_gen++) + +/* + * Generation Numbers. + * + * Generation numbers are allocated to every node created + * by amd. When a filehandle is computed and sent to the + * kernel, the generation number makes sure that it is safe + * to reallocate a node slot even when the kernel has a cached + * reference to its old incarnation. + * No garbage collection is done, since it is assumed that + * there is no way that 2^32 generation numbers could ever + * be allocated by a single run of amd - there is simply + * not enough cpu time available. + */ +static u_int am_gen = 2; /* Initial generation number */ +static int timeout_mp_id; /* Id from last call to timeout */ + +am_node *root_node; /* The root of the mount tree */ +am_node **exported_ap = (am_node **) 0; +int exported_ap_size = 0; +int first_free_map = 0; /* First available free slot */ +int last_used_map = -1; /* Last unavailable used slot */ + + +/* + * This is the default attributes field which + * is copied into every new node to be created. + * The individual filesystem fs_init() routines + * patch the copy to represent the particular + * details for the relevant filesystem type + */ +static nfsfattr gen_fattr = +{ + NFLNK, /* type */ + NFSMODE_LNK | 0777, /* mode */ + 1, /* nlink */ + 0, /* uid */ + 0, /* gid */ + 0, /* size */ + 4096, /* blocksize */ + 0, /* rdev */ + 1, /* blocks */ + 0, /* fsid */ + 0, /* fileid */ + {0, 0}, /* atime */ + {0, 0}, /* mtime */ + {0, 0}, /* ctime */ +}; + +/* forward declarations */ +static int unmount_node(am_node *mp); +static void exported_ap_free(am_node *mp); +static void remove_am(am_node *mp); + + +/* + * Resize exported_ap map + */ +static int +exported_ap_realloc_map(int nsize) +{ + /* + * this shouldn't happen, but... + */ + if (nsize < 0 || nsize == exported_ap_size) + return 0; + + exported_ap = (am_node **) xrealloc((voidp) exported_ap, nsize * sizeof(am_node *)); + + if (nsize > exported_ap_size) + memset((char *) (exported_ap + exported_ap_size), 0, + (nsize - exported_ap_size) * sizeof(am_node *)); + exported_ap_size = nsize; + + return 1; +} + + +/* + * Allocate a new mount slot and create + * a new node. + * Fills in the map number of the node, + * but leaves everything else uninitialized. + */ +am_node * +exported_ap_alloc(void) +{ + am_node *mp, **mpp; + + /* + * First check if there are any slots left, realloc if needed + */ + if (first_free_map >= exported_ap_size) + if (!exported_ap_realloc_map(exported_ap_size + NEXP_AP)) + return 0; + + /* + * Grab the next free slot + */ + mpp = exported_ap + first_free_map; + mp = *mpp = ALLOC(struct am_node); + memset((char *) mp, 0, sizeof(*mp)); + + mp->am_mapno = first_free_map++; + + /* + * Update free pointer + */ + while (first_free_map < exported_ap_size && exported_ap[first_free_map]) + first_free_map++; + + if (first_free_map > last_used_map) + last_used_map = first_free_map - 1; + + return mp; +} + + +/* + * Free a mount slot + */ +static void +exported_ap_free(am_node *mp) +{ + /* + * Sanity check + */ + if (!mp) + return; + + /* + * Zero the slot pointer to avoid double free's + */ + exported_ap[mp->am_mapno] = 0; + + /* + * Update the free and last_used indices + */ + if (mp->am_mapno == last_used_map) + while (last_used_map >= 0 && exported_ap[last_used_map] == 0) + --last_used_map; + + if (first_free_map > mp->am_mapno) + first_free_map = mp->am_mapno; + + /* + * Free the mount node + */ + XFREE(mp); +} + + +/* + * Insert mp into the correct place, + * where p_mp is its parent node. + * A new node gets placed as the youngest sibling + * of any other children, and the parent's child + * pointer is adjusted to point to the new child node. + */ +void +insert_am(am_node *mp, am_node *p_mp) +{ + /* + * If this is going in at the root then flag it + * so that it cannot be unmounted by amq. + */ + if (p_mp == root_node) + mp->am_flags |= AMF_ROOT; + /* + * Fill in n-way links + */ + mp->am_parent = p_mp; + mp->am_osib = p_mp->am_child; + if (mp->am_osib) + mp->am_osib->am_ysib = mp; + p_mp->am_child = mp; +} + + +/* + * Remove am from its place in the mount tree + */ +static void +remove_am(am_node *mp) +{ + /* + * 1. Consistency check + */ + if (mp->am_child && mp->am_parent) { + plog(XLOG_WARNING, "children of \"%s\" still exist - deleting anyway", mp->am_path); + } + + /* + * 2. Update parent's child pointer + */ + if (mp->am_parent && mp->am_parent->am_child == mp) + mp->am_parent->am_child = mp->am_osib; + + /* + * 3. Unlink from sibling chain + */ + if (mp->am_ysib) + mp->am_ysib->am_osib = mp->am_osib; + if (mp->am_osib) + mp->am_osib->am_ysib = mp->am_ysib; +} + + +/* + * Compute a new time to live value for a node. + */ +void +new_ttl(am_node *mp) +{ + mp->am_timeo_w = 0; + mp->am_ttl = clocktime(); + mp->am_fattr.na_atime.nt_seconds = mp->am_ttl; + mp->am_ttl += mp->am_timeo; /* sun's -tl option */ +} + + +void +mk_fattr(am_node *mp, nfsftype vntype) +{ + switch (vntype) { + case NFDIR: + mp->am_fattr.na_type = NFDIR; + mp->am_fattr.na_mode = NFSMODE_DIR | 0555; + mp->am_fattr.na_nlink = 2; + mp->am_fattr.na_size = 512; + break; + case NFLNK: + mp->am_fattr.na_type = NFLNK; + mp->am_fattr.na_mode = NFSMODE_LNK | 0777; + mp->am_fattr.na_nlink = 1; + mp->am_fattr.na_size = 0; + break; + default: + plog(XLOG_FATAL, "Unknown fattr type %d - ignored", vntype); + break; + } +} + + +/* + * Initialize an allocated mount node. + * It is assumed that the mount node was b-zero'd + * before getting here so anything that would + * be set to zero isn't done here. + */ +void +init_map(am_node *mp, char *dir) +{ + /* + * mp->am_mapno is initialized by exported_ap_alloc + * other fields don't need to be set to zero. + */ + mp->am_mnt = new_mntfs(); + mp->am_name = strdup(dir); + mp->am_path = strdup(dir); + mp->am_gen = new_gen(); + + mp->am_timeo = gopt.am_timeo; + mp->am_attr.ns_status = NFS_OK; + mp->am_fattr = gen_fattr; + mp->am_fattr.na_fsid = 42; + mp->am_fattr.na_fileid = 0; + mp->am_fattr.na_atime.nt_seconds = clocktime(); + mp->am_fattr.na_atime.nt_useconds = 0; + mp->am_fattr.na_mtime = mp->am_fattr.na_ctime = mp->am_fattr.na_atime; + + new_ttl(mp); + mp->am_stats.s_mtime = mp->am_fattr.na_atime.nt_seconds; +} + + +/* + * Free a mount node. + * The node must be already unmounted. + */ +void +free_map(am_node *mp) +{ + + remove_am(mp); + + if (mp->am_link) + XFREE(mp->am_link); + if (mp->am_name) + XFREE(mp->am_name); + if (mp->am_path) + XFREE(mp->am_path); + if (mp->am_pref) + XFREE(mp->am_pref); + if (mp->am_transp) + XFREE(mp->am_transp); + + if (mp->am_mnt) + free_mntfs(mp->am_mnt); + + exported_ap_free(mp); +} + + +/* + * Convert from file handle to automount node. + */ +am_node * +fh_to_mp3(am_nfs_fh *fhp, int *rp, int c_or_d) +{ + struct am_fh *fp = (struct am_fh *) fhp; + am_node *ap = 0; + + /* + * Check process id matches + * If it doesn't then it is probably + * from an old kernel cached filehandle + * which is now out of date. + */ + if (fp->fhh_pid != mypid) + goto drop; + + /* + * Make sure the index is valid before + * exported_ap is referenced. + */ + if (fp->fhh_id < 0 || fp->fhh_id >= exported_ap_size) + goto drop; + + /* + * Get hold of the supposed mount node + */ + ap = exported_ap[fp->fhh_id]; + + /* + * If it exists then maybe... + */ + if (ap) { + /* + * Check the generation number in the node + * matches the one from the kernel. If not + * then the old node has been timed out and + * a new one allocated. + */ + if (ap->am_gen != fp->fhh_gen) { + ap = 0; + goto drop; + } + /* + * If the node is hung then locate a new node + * for it. This implements the replicated filesystem + * retries. + */ + if (ap->am_mnt && FSRV_ISDOWN(ap->am_mnt->mf_server) && ap->am_parent) { + int error; + am_node *orig_ap = ap; + +#ifdef DEBUG + dlog("fh_to_mp3: %s (%s) is hung:- call lookup", + orig_ap->am_path, orig_ap->am_mnt->mf_info); +#endif /* DEBUG */ + + /* + * Update modify time of parent node. + * With any luck the kernel will re-stat + * the child node and get new information. + */ + orig_ap->am_fattr.na_mtime.nt_seconds = clocktime(); + + /* + * Call the parent's lookup routine for an object + * with the same name. This may return -1 in error + * if a mount is in progress. In any case, if no + * mount node is returned the error code is propagated + * to the caller. + */ + if (c_or_d == VLOOK_CREATE) { + ap = (*orig_ap->am_parent->am_mnt->mf_ops->lookuppn) + (orig_ap->am_parent, orig_ap->am_name, &error, c_or_d); + } else { + ap = 0; + error = ESTALE; + } + if (ap == 0) { + if (error < 0 && amd_state == Finishing) + error = ENOENT; + *rp = error; + return 0; + } + + /* + * Update last access to original node. This + * avoids timing it out and so sending ESTALE + * back to the kernel. + * XXX - Not sure we need this anymore (jsp, 90/10/6). + */ + new_ttl(orig_ap); + + } + + /* + * Disallow references to objects being unmounted, unless + * they are automount points. + */ + if (ap->am_mnt && (ap->am_mnt->mf_flags & MFF_UNMOUNTING) && + !(ap->am_flags & AMF_ROOT)) { + if (amd_state == Finishing) + *rp = ENOENT; + else + *rp = -1; + return 0; + } + new_ttl(ap); + } + +drop: + if (!ap || !ap->am_mnt) { + /* + * If we are shutting down then it is likely + * that this node has disappeared because of + * a fast timeout. To avoid things thrashing + * just pretend it doesn't exist at all. If + * ESTALE is returned, some NFS clients just + * keep retrying (stupid or what - if it's + * stale now, what's it going to be in 5 minutes?) + */ + if (amd_state == Finishing) + *rp = ENOENT; + else + *rp = ESTALE; + amd_stats.d_stale++; + } + + return ap; +} + + +am_node * +fh_to_mp(am_nfs_fh *fhp) +{ + int dummy; + + return fh_to_mp2(fhp, &dummy); +} + + +/* + * Convert from automount node to file handle. + */ +void +mp_to_fh(am_node *mp, am_nfs_fh *fhp) +{ + struct am_fh *fp = (struct am_fh *) fhp; + + memset((char *) fhp, 0, sizeof(am_nfs_fh)); + + /* + * Take the process id + */ + fp->fhh_pid = mypid; + + /* + * ... the map number + */ + fp->fhh_id = mp->am_mapno; + + /* + * ... and the generation number + */ + fp->fhh_gen = mp->am_gen; + + /* + * ... to make a "unique" triple that will never + * be reallocated except across reboots (which doesn't matter) + * or if we are unlucky enough to be given the same + * pid as a previous amd (very unlikely). + */ +} + + +am_node * +find_ap2(char *dir, am_node *mp) +{ + if (mp) { + am_node *mp2; + if (STREQ(mp->am_path, dir)) + return mp; + + if ((mp->am_mnt->mf_flags & MFF_MOUNTED) && + STREQ(mp->am_mnt->mf_mount, dir)) + return mp; + + mp2 = find_ap2(dir, mp->am_osib); + if (mp2) + return mp2; + return find_ap2(dir, mp->am_child); + } + + return 0; +} + + +/* + * Find the mount node corresponding to dir. dir can match either the + * automount path or, if the node is mounted, the mount location. + */ +am_node * +find_ap(char *dir) +{ + int i; + + for (i = last_used_map; i >= 0; --i) { + am_node *mp = exported_ap[i]; + if (mp && (mp->am_flags & AMF_ROOT)) { + mp = find_ap2(dir, exported_ap[i]); + if (mp) { + return mp; + } + } + } + + return 0; +} + + +/* + * Find the mount node corresponding + * to the mntfs structure. + */ +am_node * +find_mf(mntfs *mf) +{ + int i; + + for (i = last_used_map; i >= 0; --i) { + am_node *mp = exported_ap[i]; + if (mp && mp->am_mnt == mf) + return mp; + } + + return 0; +} + + +/* + * Get the filehandle for a particular named directory. + * This is used during the bootstrap to tell the kernel + * the filehandles of the initial automount points. + */ +am_nfs_fh * +root_fh(char *dir) +{ + static am_nfs_fh nfh; + am_node *mp = root_ap(dir, TRUE); + if (mp) { + mp_to_fh(mp, &nfh); + /* + * Patch up PID to match main server... + */ + if (!foreground) { + long pid = getppid(); + ((struct am_fh *) &nfh)->fhh_pid = pid; +#ifdef DEBUG + dlog("root_fh substitutes pid %d", pid); +#endif /* DEBUG */ + } + return &nfh; + } + + /* + * Should never get here... + */ + plog(XLOG_ERROR, "Can't find root filehandle for %s", dir); + + return 0; +} + + +am_node * +root_ap(char *dir, int path) +{ + am_node *mp = find_ap(dir); + + if (mp && mp->am_parent == root_node) + return mp; + + return 0; +} + + +/* + * Timeout all nodes waiting on + * a given Fserver. + */ +void +map_flush_srvr(fserver *fs) +{ + int i; + int done = 0; + + for (i = last_used_map; i >= 0; --i) { + am_node *mp = exported_ap[i]; + if (mp && mp->am_mnt && mp->am_mnt->mf_server == fs) { + plog(XLOG_INFO, "Flushed %s; dependent on %s", mp->am_path, fs->fs_host); + mp->am_ttl = clocktime(); + done = 1; + } + } + if (done) + reschedule_timeout_mp(); +} + + +/* + * Mount a top level automount node + * by calling lookup in the parent + * (root) node which will cause the + * automount node to be automounted. + */ +int +mount_auto_node(char *dir, voidp arg) +{ + int error = 0; + + (void) amfs_auto_ops.lookuppn((am_node *) arg, dir, &error, VLOOK_CREATE); + if (error > 0) { + errno = error; /* XXX */ + plog(XLOG_ERROR, "Could not mount %s: %m", dir); + } + return error; +} + + +/* + * Cause all the top-level mount nodes + * to be automounted + */ +int +mount_exported(void) +{ + /* + * Iterate over all the nodes to be started + */ + return root_keyiter((void (*)P((char *, voidp))) mount_auto_node, root_node); +} + + +/* + * Construct top-level node + */ +void +make_root_node(void) +{ + mntfs *root_mnt; + char *rootmap = ROOT_MAP; + root_node = exported_ap_alloc(); + + /* + * Allocate a new map + */ + init_map(root_node, ""); + + /* + * Allocate a new mounted filesystem + */ + root_mnt = find_mntfs(&amfs_root_ops, (am_opts *) 0, "", rootmap, "", "", ""); + + /* + * Replace the initial null reference + */ + free_mntfs(root_node->am_mnt); + root_node->am_mnt = root_mnt; + + /* + * Initialize the root + */ + if (root_mnt->mf_ops->fs_init) + (*root_mnt->mf_ops->fs_init) (root_mnt); + + /* + * Mount the root + */ + root_mnt->mf_error = (*root_mnt->mf_ops->mount_fs) (root_node); +} + + +/* + * Cause all the nodes to be unmounted by timing + * them out. + */ +void +umount_exported(void) +{ + int i; + + for (i = last_used_map; i >= 0; --i) { + am_node *mp = exported_ap[i]; + + if (mp) { + mntfs *mf = mp->am_mnt; + if (mf->mf_flags & MFF_UNMOUNTING) { + /* + * If this node is being unmounted then just ignore it. However, + * this could prevent amd from finishing if the unmount gets blocked + * since the am_node will never be free'd. am_unmounted needs + * telling about this possibility. - XXX + */ + continue; + } + + if (mf && !(mf->mf_ops->fs_flags & FS_DIRECTORY)) { + /* + * When shutting down this had better + * look like a directory, otherwise it + * can't be unmounted! + */ + mk_fattr(mp, NFDIR); + } + + if ((--immediate_abort < 0 && + !(mp->am_flags & AMF_ROOT) && mp->am_parent) || + (mf->mf_flags & MFF_RESTART)) { + + /* + * Just throw this node away without bothering to unmount it. If + * the server is not known to be up then don't discard the mounted + * on directory or Amd might hang... + */ + if (mf->mf_server && + (mf->mf_server->fs_flags & (FSF_DOWN | FSF_VALID)) != FSF_VALID) + mf->mf_flags &= ~MFF_MKMNT; + if (gopt.flags & CFM_UNMOUNT_ON_EXIT) { + plog(XLOG_INFO, "on-exit attempt to unmount %s", mf->mf_mount); + unmount_node(mp); + } + am_unmounted(mp); + + } else { + /* + * Any other node gets forcibly timed out. + */ + mp->am_flags &= ~AMF_NOTIMEOUT; + mp->am_mnt->mf_flags &= ~MFF_RSTKEEP; + mp->am_ttl = 0; + mp->am_timeo = 1; + mp->am_timeo_w = 0; + } + } + } +} + + +static int +unmount_node(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + int error; + + if ((mf->mf_flags & MFF_ERROR) || mf->mf_refc > 1) { + /* + * Just unlink + */ +#ifdef DEBUG + if (mf->mf_flags & MFF_ERROR) + dlog("No-op unmount of error node %s", mf->mf_info); +#endif /* DEBUG */ + error = 0; + } else { +#ifdef DEBUG + dlog("Unmounting %s (%s)", mf->mf_mount, mf->mf_info); +#endif /* DEBUG */ + error = (*mf->mf_ops->umount_fs) (mp); + } + + if (error) { + errno = error; /* XXX */ +#ifdef DEBUG + dlog("%s: unmount: %m", mf->mf_mount); +#endif /* DEBUG */ + } + + return error; +} + + +static int +unmount_node_wrap(voidp vp) +{ + return unmount_node((am_node *) vp); + + /* + * Below is the comment left from the old code + * that was dependent on the macro FLUSH_KERNEL_NAME_CACHE + */ + /* + * This code should just say: + * return unmount_node((am_node *) vp); + * + * However... + * The kernel keeps a cached copy of filehandles, + * and doesn't ever uncache them (apparently). So + * when Amd times out a node the kernel will have a + * stale filehandle. When the kernel next uses the + * filehandle it gets ESTALE. + * + * The workaround: + * Arrange that when a node is removed an unlink or + * rmdir is done on that path so that the kernel + * cache is done. Yes - yuck. + * + * This can all be removed (and the background + * unmount flag in amfs_link_ops) if/when the kernel does + * something smarter. + * + * If the unlink or rmdir failed then just log a warning, + * don't fail the unmount. This can occur if the kernel + * client code decides that the object is still referenced + * and should be renamed rather than discarded. + * + * There is still a race condition here... + * if another process is trying to access the same + * filesystem at the time we get here, then + * it will block, since the MF_UNMOUNTING flag will + * be set. That may, or may not, cause the entire + * system to deadlock. Hmmm... + */ +} + + +static void +free_map_if_success(int rc, int term, voidp closure) +{ + am_node *mp = (am_node *) closure; + mntfs *mf = mp->am_mnt; + + /* + * Not unmounting any more + */ + mf->mf_flags &= ~MFF_UNMOUNTING; + + /* + * If a timeout was deferred because the underlying filesystem + * was busy then arrange for a timeout as soon as possible. + */ + if (mf->mf_flags & MFF_WANTTIMO) { + mf->mf_flags &= ~MFF_WANTTIMO; + reschedule_timeout_mp(); + } + if (term) { + plog(XLOG_ERROR, "unmount for %s got signal %d", mp->am_path, term); +#if defined(DEBUG) && defined(SIGTRAP) + /* + * dbx likes to put a trap on exit(). + * Pretend it succeeded for now... + */ + if (term == SIGTRAP) { + am_unmounted(mp); + } +#endif /* DEBUG */ + amd_stats.d_uerr++; + } else if (rc) { + if (rc == EBUSY) { + plog(XLOG_STATS, "\"%s\" on %s still active", mp->am_path, mf->mf_mount); + } else { + errno = rc; /* XXX */ + plog(XLOG_ERROR, "%s: unmount: %m", mp->am_path); + } + amd_stats.d_uerr++; + } else { + am_unmounted(mp); + } + + /* + * Wakeup anything waiting for this mount + */ + wakeup((voidp) mf); +} + + +static int +unmount_mp(am_node *mp) +{ + int was_backgrounded = 0; + mntfs *mf = mp->am_mnt; + +#ifdef notdef + plog(XLOG_INFO, "\"%s\" on %s timed out", mp->am_path, mp->am_mnt->mf_mount); +#endif /* notdef */ + + if ((mf->mf_ops->fs_flags & FS_UBACKGROUND) && + (mf->mf_flags & MFF_MOUNTED)) { + if (mf->mf_refc == 1 && !FSRV_ISUP(mf->mf_server)) { + /* + * Don't try to unmount from a server that is known to be down + */ + if (!(mf->mf_flags & MFF_LOGDOWN)) { + /* Only log this once, otherwise gets a bit boring */ + plog(XLOG_STATS, "file server %s is down - timeout of \"%s\" ignored", mf->mf_server->fs_host, mp->am_path); + mf->mf_flags |= MFF_LOGDOWN; + } + } else { + /* Clear logdown flag - since the server must be up */ + mf->mf_flags &= ~MFF_LOGDOWN; +#ifdef DEBUG + dlog("\"%s\" on %s timed out", mp->am_path, mp->am_mnt->mf_mount); + /* dlog("Will background the unmount attempt"); */ +#endif /* DEBUG */ + /* + * Note that we are unmounting this node + */ + mf->mf_flags |= MFF_UNMOUNTING; + run_task(unmount_node_wrap, (voidp) mp, + free_map_if_success, (voidp) mp); + was_backgrounded = 1; +#ifdef DEBUG + dlog("unmount attempt backgrounded"); +#endif /* DEBUG */ + } + } else { +#ifdef DEBUG + dlog("\"%s\" on %s timed out", mp->am_path, mp->am_mnt->mf_mount); + dlog("Trying unmount in foreground"); +#endif /* DEBUG */ + mf->mf_flags |= MFF_UNMOUNTING; + free_map_if_success(unmount_node(mp), 0, (voidp) mp); +#ifdef DEBUG + dlog("unmount attempt done"); +#endif /* DEBUG */ + } + + return was_backgrounded; +} + + +void +timeout_mp(voidp v) +{ + int i; + time_t t = NEVER; + time_t now = clocktime(); + int backoff = NumChild / 4; + +#ifdef DEBUG + dlog("Timing out automount points..."); +#endif /* DEBUG */ + + for (i = last_used_map; i >= 0; --i) { + am_node *mp = exported_ap[i]; + mntfs *mf; + + /* + * Just continue if nothing mounted, or can't be timed out. + */ + if (!mp || (mp->am_flags & AMF_NOTIMEOUT)) + continue; + + /* + * Pick up mounted filesystem + */ + mf = mp->am_mnt; + if (!mf) + continue; + + /* + * Don't delete last reference to a restarted filesystem. + */ + if ((mf->mf_flags & MFF_RSTKEEP) && mf->mf_refc == 1) + continue; + + /* + * If there is action on this filesystem then ignore it + */ + if (!(mf->mf_flags & IGNORE_FLAGS)) { + int expired = 0; + mf->mf_flags &= ~MFF_WANTTIMO; + if (now >= mp->am_ttl) { + if (!backoff) { + expired = 1; + + /* + * Move the ttl forward to avoid thrashing effects + * on the next call to timeout! + */ + /* sun's -tw option */ + if (mp->am_timeo_w < 4 * gopt.am_timeo_w) + mp->am_timeo_w += gopt.am_timeo_w; + mp->am_ttl = now + mp->am_timeo_w; + + } else { + /* + * Just backoff this unmount for + * a couple of seconds to avoid + * many multiple unmounts being + * started in parallel. + */ + mp->am_ttl = now + backoff + 1; + } + } + + /* + * If the next ttl is smallest, use that + */ + t = smallest_t(t, mp->am_ttl); + + if (!mp->am_child && mf->mf_error >= 0 && expired) { + /* + * If the unmount was backgrounded then + * bump the backoff counter. + */ + if (unmount_mp(mp)) { + backoff = 2; + } + } + } else if (mf->mf_flags & MFF_UNMOUNTING) { + mf->mf_flags |= MFF_WANTTIMO; + } + } + + if (t == NEVER) { +#ifdef DEBUG + dlog("No further timeouts"); +#endif /* DEBUG */ + t = now + ONE_HOUR; + } + + /* + * Sanity check to avoid runaways. + * Absolutely should never get this but + * if you do without this trap amd will thrash. + */ + if (t <= now) { + t = now + 6; /* XXX */ + plog(XLOG_ERROR, "Got a zero interval in timeout_mp()!"); + } + + /* + * XXX - when shutting down, make things happen faster + */ + if ((int) amd_state >= (int) Finishing) + t = now + 1; +#ifdef DEBUG + dlog("Next mount timeout in %ds", t - now); +#endif /* DEBUG */ + + timeout_mp_id = timeout(t - now, timeout_mp, 0); +} + + +/* + * Cause timeout_mp to be called soonest + */ +void +reschedule_timeout_mp(void) +{ + if (timeout_mp_id) + untimeout(timeout_mp_id); + timeout_mp_id = timeout(0, timeout_mp, 0); +} diff --git a/amd/mapc.c b/amd/mapc.c new file mode 100644 index 0000000..feaec3b --- /dev/null +++ b/amd/mapc.c @@ -0,0 +1,1227 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mapc.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +/* + * Mount map cache + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Make a duplicate reference to an existing map + */ +#define mapc_dup(m) ((m)->refc++, (m)) + +/* + * Map cache types + * default, none, incremental, all, regexp + * MAPC_RE implies MAPC_ALL and must be numerically + * greater. + */ +#define MAPC_DFLT 0x000 +#define MAPC_NONE 0x001 +#define MAPC_INC 0x002 +#define MAPC_ROOT 0x004 +#define MAPC_ALL 0x010 +#define MAPC_CACHE_MASK 0x0ff +#define MAPC_SYNC 0x100 + +#ifdef HAVE_REGEXEC +# define MAPC_RE 0x020 +# define MAPC_ISRE(m) ((m)->alloc == MAPC_RE) +#else /* not HAVE_REGEXEC */ +# define MAPC_ISRE(m) FALSE +#endif /* not HAVE_REGEXEC */ + +/* + * Lookup recursion + */ +#define MREC_FULL 2 +#define MREC_PART 1 +#define MREC_NONE 0 + +#define MAX_CHAIN 2048 + +static struct opt_tab mapc_opt[] = +{ + {"all", MAPC_ALL}, + {"default", MAPC_DFLT}, + {"inc", MAPC_INC}, + {"mapdefault", MAPC_DFLT}, + {"none", MAPC_NONE}, +#ifdef HAVE_REGEXEC + {"re", MAPC_RE}, + {"regexp", MAPC_RE}, +#endif /* HAVE_REGEXEC */ + {"sync", MAPC_SYNC}, + {0, 0} +}; + +/* + * Wildcard key + */ +static char wildcard[] = "*"; + +/* + * Map type + */ +typedef struct map_type map_type; +struct map_type { + char *name; /* Name of this map type */ + init_fn *init; /* Initialization */ + reload_fn *reload; /* Reload or fill */ + isup_fn *isup; /* Is service up or not? (1=up, 0=down) */ + search_fn *search; /* Search for new entry */ + mtime_fn *mtime; /* Find modify time */ + int def_alloc; /* Default allocation mode */ +}; + +/* + * Map for root node + */ +static mnt_map *root_map; + +/* + * List of known maps + */ +qelem map_list_head = {&map_list_head, &map_list_head}; + +/* + * Configuration + */ + +/* forward definitions */ +static const char *get_full_path(const char *map, const char *path, const char *type); +static int mapc_meta_search(mnt_map *, char *, char **, int); +static void mapc_sync(mnt_map *); + +/* ROOT MAP */ +static int root_init(mnt_map *, char *, time_t *); + +/* ERROR MAP */ +static int error_init(mnt_map *, char *, time_t *); +static int error_reload(mnt_map *, char *, add_fn *); +static int error_search(mnt_map *, char *, char *, char **, time_t *); +static int error_mtime(mnt_map *, char *, time_t *); + +/* PASSWD MAPS */ +#ifdef HAVE_MAP_PASSWD +extern int passwd_init(mnt_map *, char *, time_t *); +extern int passwd_search(mnt_map *, char *, char *, char **, time_t *); +#endif /* HAVE_MAP_PASSWD */ + +/* HESIOD MAPS */ +#ifdef HAVE_MAP_HESIOD +extern int amu_hesiod_init(mnt_map *, char *map, time_t *tp); +extern int hesiod_search(mnt_map *, char *, char *, char **, time_t *); +#endif /* HAVE_MAP_HESIOD */ + +/* LDAP MAPS */ +#ifdef HAVE_MAP_LDAP +extern int amu_ldap_init(mnt_map *, char *map, time_t *tp); +extern int amu_ldap_search(mnt_map *, char *, char *, char **, time_t *); +extern int amu_ldap_mtime(mnt_map *, char *, time_t *); +#endif /* HAVE_MAP_LDAP */ + +/* UNION MAPS */ +#ifdef HAVE_MAP_UNION +extern int union_init(mnt_map *, char *, time_t *); +extern int union_search(mnt_map *, char *, char *, char **, time_t *); +extern int union_reload(mnt_map *, char *, add_fn *); +#endif /* HAVE_MAP_UNION */ + +/* Network Information Service PLUS (NIS+) */ +#ifdef HAVE_MAP_NISPLUS +extern int nisplus_init(mnt_map *, char *, time_t *); +extern int nisplus_reload(mnt_map *, char *, add_fn *); +extern int nisplus_search(mnt_map *, char *, char *, char **, time_t *); +extern int nisplus_mtime(mnt_map *, char *, time_t *); +#endif /* HAVE_MAP_NISPLUS */ + +/* Network Information Service (YP, Yellow Pages) */ +#ifdef HAVE_MAP_NIS +extern int nis_init(mnt_map *, char *, time_t *); +extern int nis_reload(mnt_map *, char *, add_fn *); +extern int nis_isup(mnt_map *, char *); +extern int nis_search(mnt_map *, char *, char *, char **, time_t *); +extern int nis_mtime(mnt_map *, char *, time_t *); +#endif /* HAVE_MAP_NIS */ + +/* NDBM MAPS */ +#ifdef HAVE_MAP_NDBM +extern int ndbm_init(mnt_map *, char *, time_t *); +extern int ndbm_search(mnt_map *, char *, char *, char **, time_t *); +extern int ndbm_mtime(mnt_map *, char *, time_t *); +#endif /* HAVE_MAP_NDBM */ + +/* FILE MAPS */ +#ifdef HAVE_MAP_FILE +extern int file_init(mnt_map *, char *, time_t *); +extern int file_reload(mnt_map *, char *, add_fn *); +extern int file_search(mnt_map *, char *, char *, char **, time_t *); +extern int file_mtime(mnt_map *, char *, time_t *); +#endif /* HAVE_MAP_FILE */ + + +/* note that the choice of MAPC_{INC,ALL} will affect browsable_dirs */ +static map_type maptypes[] = +{ + { + "root", + root_init, + error_reload, + NULL, /* isup function */ + error_search, + error_mtime, + MAPC_ROOT + }, +#ifdef HAVE_MAP_PASSWD + { + "passwd", + passwd_init, + error_reload, + NULL, /* isup function */ + passwd_search, + error_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_PASSWD */ +#ifdef HAVE_MAP_HESIOD + { + "hesiod", + amu_hesiod_init, + error_reload, + NULL, /* isup function */ + hesiod_search, + error_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_HESIOD */ +#ifdef HAVE_MAP_LDAP + { + "ldap", + amu_ldap_init, + error_reload, + NULL, /* isup function */ + amu_ldap_search, + amu_ldap_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_LDAP */ +#ifdef HAVE_MAP_UNION + { + "union", + union_init, + union_reload, + NULL, /* isup function */ + union_search, + error_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_UNION */ +#ifdef HAVE_MAP_NISPLUS + { + "nisplus", + nisplus_init, + nisplus_reload, + NULL, /* isup function */ + nisplus_search, + nisplus_mtime, + MAPC_INC + }, +#endif /* HAVE_MAP_NISPLUS */ +#ifdef HAVE_MAP_NIS + { + "nis", + nis_init, + nis_reload, + nis_isup, /* is NIS up or not? */ + nis_search, + nis_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_NIS */ +#ifdef HAVE_MAP_NDBM + { + "ndbm", + ndbm_init, + error_reload, + NULL, /* isup function */ + ndbm_search, + ndbm_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_NDBM */ +#ifdef HAVE_MAP_FILE + { + "file", + file_init, + file_reload, + NULL, /* isup function */ + file_search, + file_mtime, + MAPC_ALL + }, +#endif /* HAVE_MAP_FILE */ + { + "error", + error_init, + error_reload, + NULL, /* isup function */ + error_search, + error_mtime, + MAPC_NONE + }, +}; + + +/* + * Hash function + */ +static u_int +kvhash_of(char *key) +{ + u_int i, j; + + for (i = 0; (j = *key++); i += j) ; + + return i % NKVHASH; +} + + +void +mapc_showtypes(char *buf) +{ + map_type *mt; + char *sep = ""; + + buf[0] = '\0'; + for (mt = maptypes; mt < maptypes + sizeof(maptypes) / sizeof(maptypes[0]); mt++) { + strcat(buf, sep); + strcat(buf, mt->name); + sep = ", "; + } +} + + +/* + * Check if a map of a certain type exists. + * Return 1 (true) if exists, 0 (false) if not. + */ +int +mapc_type_exists(const char *type) +{ + map_type *mt; + + if (!type) + return 0; + for (mt = maptypes; + mt < maptypes + sizeof(maptypes) / sizeof(maptypes[0]); + mt++) { + if (STREQ(type, mt->name)) + return 1; + } + return 0; /* not found anywhere */ +} + + +/* + * Add key and val to the map m. + * key and val are assumed to be safe copies + */ +void +mapc_add_kv(mnt_map *m, char *key, char *val) +{ + kv **h; + kv *n; + int hash = kvhash_of(key); +#ifdef HAVE_REGEXEC + regex_t re; +#endif /* HAVE_REGEXEC */ + +#ifdef DEBUG + dlog("add_kv: %s -> %s", key, val); +#endif /* DEBUG */ + +#ifdef HAVE_REGEXEC + if (MAPC_ISRE(m)) { + char pattern[MAXPATHLEN]; + int retval; + + /* + * Make sure the string is bound to the start and end + */ + sprintf(pattern, "^%s$", key); + retval = regcomp(&re, pattern, REG_ICASE); + if (retval != 0) { + char errstr[256]; + + /* XXX: this code was recently ported, and must be tested -Erez */ + errstr[0] = '\0'; + regerror(retval, &re, errstr, 256); + plog(XLOG_USER, "error compiling RE \"%s\": %s", pattern, errstr); + return; + } + } +#endif /* HAVE_REGEXEC */ + + h = &m->kvhash[hash]; + n = ALLOC(struct kv); + n->key = key; +#ifdef HAVE_REGEXEC + memcpy(&n->re, &re, sizeof(regex_t)); +#endif /* HAVE_REGEXEC */ + n->val = val; + n->next = *h; + *h = n; +} + + +static void +mapc_repl_kv(mnt_map *m, char *key, char *val) +{ + kv *k; + + /* + * Compute the hash table offset + */ + k = m->kvhash[kvhash_of(key)]; + + /* + * Scan the linked list for the key + */ + while (k && !FSTREQ(k->key, key)) + k = k->next; + + if (k) { + XFREE(k->val); + k->val = val; + } else { + mapc_add_kv(m, key, val); + } +} + + +/* + * Search a map for a key. + * Calls map specific search routine. + * While map is out of date, keep re-syncing. + */ +static int +search_map(mnt_map *m, char *key, char **valp) +{ + int rc; + + do { + rc = (*m->search) (m, m->map_name, key, valp, &m->modify); + if (rc < 0) { + plog(XLOG_MAP, "Re-synchronizing cache for map %s", m->map_name); + mapc_sync(m); + } + } while (rc < 0); + + return rc; +} + + +/* + * Do a wildcard lookup in the map and + * save the result. + */ +static void +mapc_find_wildcard(mnt_map *m) +{ + /* + * Attempt to find the wildcard entry + */ + int rc = search_map(m, wildcard, &m->wildcard); + + if (rc != 0) + m->wildcard = 0; +} + + +/* + * Do a map reload + */ +static int +mapc_reload_map(mnt_map *m) +{ + int error; + +#ifdef DEBUG + dlog("calling map reload on %s", m->map_name); +#endif /* DEBUG */ + error = (*m->reload) (m, m->map_name, mapc_add_kv); + if (error) + return error; + m->wildcard = 0; + +#ifdef DEBUG + dlog("calling mapc_search for wildcard"); +#endif /* DEBUG */ + error = mapc_search(m, wildcard, &m->wildcard); + if (error) + m->wildcard = 0; + + return 0; +} + + +/* + * Create a new map + */ +static mnt_map * +mapc_create(char *map, char *opt, const char *type) +{ + mnt_map *m = ALLOC(struct mnt_map); + map_type *mt; + time_t modify; + int alloc = 0; + + cmdoption(opt, mapc_opt, &alloc); + + /* + * If using a configuration file, and the map_type is defined, then look + * for it, in the maptypes array. If found, initialize the map using that + * map_type. If not found, return error. If no map_type was defined, + * default to cycling through all maptypes. + */ + if (use_conf_file && type) { + /* find what type of map this one is */ + for (mt = maptypes; + mt < maptypes + sizeof(maptypes) / sizeof(maptypes[0]); + mt++) { + if (STREQ(type, mt->name)) { + plog(XLOG_INFO, "initializing amd conf map %s of type %s", map, type); + if ((*mt->init) (m, map, &modify) == 0) { + break; + } else { + plog(XLOG_ERROR, "failed to initialize map %s", map); + error_init(m, map, &modify); + break; + } + } + } /* end of "for (mt =" loop */ + + } else { /* cycle through all known maptypes */ + + /* + * not using amd conf file or using it by w/o specifying map type + */ + for (mt = maptypes; + mt < maptypes + sizeof(maptypes) / sizeof(maptypes[0]); + mt++) { +#ifdef DEBUG + dlog("trying to initialize map %s of type %s ...", map, mt->name); +#endif /* DEBUG */ + if ((*mt->init) (m, map, &modify) == 0) { + break; + } + } + } /* end of "if (use_conf_file && (colpos = strchr ..." statement */ + + /* assert: mt in maptypes */ + + m->flags = alloc & ~MAPC_CACHE_MASK; + alloc &= MAPC_CACHE_MASK; + + if (alloc == MAPC_DFLT) + alloc = mt->def_alloc; + + switch (alloc) { + default: + plog(XLOG_USER, "Ambiguous map cache type \"%s\"; using \"inc\"", opt); + alloc = MAPC_INC; + /* fall-through... */ + case MAPC_NONE: + case MAPC_INC: + case MAPC_ROOT: + break; + + case MAPC_ALL: + /* + * If there is no support for reload and it was requested + * then back off to incremental instead. + */ + if (mt->reload == error_reload) { + plog(XLOG_WARNING, "Map type \"%s\" does not support cache type \"all\"; using \"inc\"", mt->name); + alloc = MAPC_INC; + } + break; + +#ifdef HAVE_REGEXEC + case MAPC_RE: + if (mt->reload == error_reload) { + plog(XLOG_WARNING, "Map type \"%s\" does not support cache type \"re\"", mt->name); + mt = &maptypes[sizeof(maptypes) / sizeof(maptypes[0]) - 1]; + /* assert: mt->name == "error" */ + } + break; +#endif /* HAVE_REGEXEC */ + } + +#ifdef DEBUG + dlog("Map for %s coming from maptype %s", map, mt->name); +#endif /* DEBUG */ + + m->alloc = alloc; + m->reload = mt->reload; + m->isup = mt->isup; + m->modify = modify; + m->search = alloc >= MAPC_ALL ? error_search : mt->search; + m->mtime = mt->mtime; + memset((voidp) m->kvhash, 0, sizeof(m->kvhash)); + m->map_name = strdup(map); + m->refc = 1; + m->wildcard = 0; + + /* + * synchronize cache with reality + */ + mapc_sync(m); + + return m; +} + + +/* + * Free the cached data in a map + */ +static void +mapc_clear(mnt_map *m) +{ + int i; + + /* + * For each of the hash slots, chain + * along free'ing the data. + */ + for (i = 0; i < NKVHASH; i++) { + kv *k = m->kvhash[i]; + while (k) { + kv *n = k->next; + XFREE(k->key); + if (k->val) + XFREE(k->val); + XFREE(k); + k = n; + } + } + + /* + * Zero the hash slots + */ + memset((voidp) m->kvhash, 0, sizeof(m->kvhash)); + + /* + * Free the wildcard if it exists + */ + if (m->wildcard) { + XFREE(m->wildcard); + m->wildcard = 0; + } +} + + +/* + * Find a map, or create one if it does not exist + */ +mnt_map * +mapc_find(char *map, char *opt, const char *maptype) +{ + mnt_map *m; + + /* + * Search the list of known maps to see if + * it has already been loaded. If it is found + * then return a duplicate reference to it. + * Otherwise make a new map as required and + * add it to the list of maps + */ + ITER(m, mnt_map, &map_list_head) + if (STREQ(m->map_name, map)) + return mapc_dup(m); + m = mapc_create(map, opt, maptype); + ins_que(&m->hdr, &map_list_head); + + return m; +} + + +/* + * Free a map. + */ +void +mapc_free(voidp v) +{ + mnt_map *m = v; + + /* + * Decrement the reference count. + * If the reference count hits zero + * then throw the map away. + */ + if (m && --m->refc == 0) { + mapc_clear(m); + XFREE(m->map_name); + rem_que(&m->hdr); + XFREE(m); + } +} + + +/* + * Search the map for the key. Put a safe (malloc'ed) copy in *pval or + * return an error code + */ +static int +mapc_meta_search(mnt_map *m, char *key, char **pval, int recurse) +{ + int error = 0; + kv *k = 0; + + /* + * Firewall + */ + if (!m) { + plog(XLOG_ERROR, "Null map request for %s", key); + return ENOENT; + } + if (m->flags & MAPC_SYNC) { + /* + * Get modify time... + */ + time_t t; + error = (*m->mtime) (m, m->map_name, &t); + if (error || t > m->modify) { + m->modify = t; + plog(XLOG_INFO, "Map %s is out of date", m->map_name); + mapc_sync(m); + } + } + + if (!MAPC_ISRE(m)) { + /* + * Compute the hash table offset + */ + k = m->kvhash[kvhash_of(key)]; + + /* + * Scan the linked list for the key + */ + while (k && !FSTREQ(k->key, key)) + k = k->next; + + } + +#ifdef HAVE_REGEXEC + else if (recurse == MREC_FULL) { + /* + * Try for an RE match against the entire map. + * Note that this will be done in a "random" + * order. + */ + int i; + + for (i = 0; i < NKVHASH; i++) { + k = m->kvhash[i]; + while (k) { + int retval; + + /* XXX: this code was recently ported, and must be tested -Erez */ + retval = regexec(&k->re, key, 0, 0, 0); + if (retval == 0) { /* succeeded */ + break; + } else { /* failed to match, log error */ + char errstr[256]; + + errstr[0] = '\0'; + regerror(retval, &k->re, errstr, 256); + plog(XLOG_USER, "error matching RE \"%s\" against \"%s\": %s", + key, k->key, errstr); + } + k = k->next; + } + if (k) + break; + } + } +#endif /* HAVE_REGEXEC */ + + /* + * If found then take a copy + */ + if (k) { + if (k->val) + *pval = strdup(k->val); + else + error = ENOENT; + } else if (m->alloc >= MAPC_ALL) { + /* + * If the entire map is cached then this + * key does not exist. + */ + error = ENOENT; + } else { + /* + * Otherwise search the map. If we are + * in incremental mode then add the key + * to the cache. + */ + error = search_map(m, key, pval); + if (!error && m->alloc == MAPC_INC) + mapc_add_kv(m, strdup(key), strdup(*pval)); + } + + /* + * If an error, and a wildcard exists, + * and the key is not internal then + * return a copy of the wildcard. + */ + if (error > 0) { + if (recurse == MREC_FULL && !MAPC_ISRE(m)) { + char wildname[MAXPATHLEN]; + char *subp; + if (*key == '/') + return error; + /* + * Keep chopping sub-directories from the RHS + * and replacing with "/ *" and repeat the lookup. + * For example: + * "src/gnu/gcc" -> "src / gnu / *" -> "src / *" + */ + strcpy(wildname, key); + while (error && (subp = strrchr(wildname, '/'))) { + strcpy(subp, "/*"); +#ifdef DEBUG + dlog("mapc recurses on %s", wildname); +#endif /* DEBUG */ + error = mapc_meta_search(m, wildname, pval, MREC_PART); + if (error) + *subp = 0; + } + + if (error > 0 && m->wildcard) { + *pval = strdup(m->wildcard); + error = 0; + } + } + } + return error; +} + + +int +mapc_search(mnt_map *m, char *key, char **pval) +{ + return mapc_meta_search(m, key, pval, MREC_FULL); +} + + +/* + * Get map cache in sync with physical representation + */ +static void +mapc_sync(mnt_map *m) +{ + if (m->alloc != MAPC_ROOT) { + + /* do not clear map if map service is down */ + if (m->isup) { + if (!((*m->isup)(m, m->map_name))) { + plog(XLOG_ERROR, "mapc_sync: map %s is down: not clearing map", m->map_name); + return; + } + } + + mapc_clear(m); + + if (m->alloc >= MAPC_ALL) + if (mapc_reload_map(m)) + m->alloc = MAPC_INC; + /* + * Attempt to find the wildcard entry + */ + if (m->alloc < MAPC_ALL) + mapc_find_wildcard(m); + } +} + + +/* + * Reload all the maps + * Called when Amd gets hit by a SIGHUP. + */ +void +mapc_reload(void) +{ + mnt_map *m; + + /* + * For all the maps, + * Throw away the existing information. + * Do a reload + * Find the wildcard + */ + ITER(m, mnt_map, &map_list_head) + mapc_sync(m); +} + + +/* + * Root map. + * The root map is used to bootstrap amd. + * All the require top-level mounts are added + * into the root map and then the map is iterated + * and a lookup is done on all the mount points. + * This causes the top level mounts to be automounted. + */ +static int +root_init(mnt_map *m, char *map, time_t *tp) +{ + *tp = clocktime(); + return STREQ(map, ROOT_MAP) ? 0 : ENOENT; +} + + +/* + * Add a new entry to the root map + * + * dir - directory (key) + * opts - mount options + * map - map name + * cfm - optional amd configuration file map section structure + */ +void +root_newmap(const char *dir, const char *opts, const char *map, const cf_map_t *cfm) +{ + char str[MAXPATHLEN]; + + /* + * First make sure we have a root map to talk about... + */ + if (!root_map) + root_map = mapc_find(ROOT_MAP, "mapdefault", NULL); + + /* + * Then add the entry... + */ + + /* + * Here I plug in the code to process other amd.conf options like + * map_type, search_path, and flags (browsable_dirs, mount_type). + */ + + if (cfm) { + if (map) { + sprintf(str, "cache:=mapdefault;type:=%s;fs:=\"%s\"", + cfm->cfm_flags & CFM_MOUNT_TYPE_AUTOFS ? "autofs" : "toplvl", + get_full_path(map, cfm->cfm_search_path, cfm->cfm_type)); + if (opts && opts[0] != '\0') { + strcat(str, ";"); + strcat(str, opts); + } + if (cfm->cfm_flags & CFM_BROWSABLE_DIRS_FULL) + strcat(str, ";opts:=rw,fullybrowsable"); + if (cfm->cfm_flags & CFM_BROWSABLE_DIRS) + strcat(str, ";opts:=rw,browsable"); + if (cfm->cfm_type) { + strcat(str, ";maptype:="); + strcat(str, cfm->cfm_type); + } + } else { + strcpy(str, opts); + } + } else { + if (map) + sprintf(str, "cache:=mapdefault;type:=toplvl;fs:=\"%s\";%s", + map, opts ? opts : ""); + else + strcpy(str, opts); + } + mapc_repl_kv(root_map, strdup((char *)dir), strdup(str)); +} + + +int +mapc_keyiter(mnt_map *m, void (*fn) (char *, voidp), voidp arg) +{ + int i; + int c = 0; + + for (i = 0; i < NKVHASH; i++) { + kv *k = m->kvhash[i]; + while (k) { + (*fn) (k->key, arg); + k = k->next; + c++; + } + } + + return c; +} + + +/* + * Iterate on the root map and call (*fn)() on the key of all the nodes. + * Finally throw away the root map. + */ +int +root_keyiter(void (*fn)(char *, voidp), voidp arg) +{ + if (root_map) { + int c = mapc_keyiter(root_map, fn, arg); + return c; + } + + return 0; +} + + +/* + * Was: NEW_TOPLVL_READDIR + * Search a chain for an entry with some name. + * -Erez Zadok + */ +static int +key_already_in_chain(char *keyname, const nfsentry *chain) +{ + const nfsentry *tmpchain = chain; + + while (tmpchain) { + if (keyname && tmpchain->ne_name && STREQ(keyname, tmpchain->ne_name)) + return 1; + tmpchain = tmpchain->ne_nextentry; + } + + return 0; +} + + +/* + * Create a chain of entries which are not linked. + * -Erez Zadok + */ +nfsentry * +make_entry_chain(am_node *mp, const nfsentry *current_chain, int fully_browsable) +{ + static u_int last_cookie = ~(u_int) 0 - 1; + static nfsentry chain[MAX_CHAIN]; + static int max_entries = MAX_CHAIN; + char *key; + int num_entries = 0, preflen = 0, i; + nfsentry *retval = (nfsentry *) NULL; + mntfs *mf; + mnt_map *mmp; + + if (!mp) { + plog(XLOG_DEBUG, "make_entry_chain: mp is (NULL)"); + return retval; + } + mf = mp->am_mnt; + if (!mf) { + plog(XLOG_DEBUG, "make_entry_chain: mp->am_mnt is (NULL)"); + return retval; + } + mmp = (mnt_map *) mf->mf_private; + if (!mmp) { + plog(XLOG_DEBUG, "make_entry_chain: mp->am_mnt->mf_private is (NULL)"); + return retval; + } + + /* iterate over keys */ + for (i = 0; i < NKVHASH; i++) { + kv *k; + for (k = mmp->kvhash[i]; k ; k = k->next) { + + /* + * Skip unwanted entries which are either not real entries or + * very difficult to interpret (wildcards...) This test needs + * lots of improvement. Any takers? + */ + key = k->key; + if (!key) + continue; + + /* Skip '*' */ + if (!fully_browsable && strchr(key, '*')) + continue; + + /* + * If the map has a prefix-string then check if the key starts with + * this * string, and if it does, skip over this prefix. + */ + if (preflen) { + if (!NSTREQ(key, mp->am_pref, preflen)) + continue; + key += preflen; + } + + /* no more '/' are allowed, unless browsable_dirs=full was used */ + if (!fully_browsable && strchr(key, '/')) + continue; + + /* no duplicates allowed */ + if (key_already_in_chain(key, current_chain)) + continue; + + /* fill in a cell and link the entry */ + if (num_entries >= max_entries) { + /* out of space */ + plog(XLOG_DEBUG, "make_entry_chain: no more space in chain"); + if (num_entries > 0) { + chain[num_entries - 1].ne_nextentry = 0; + retval = &chain[0]; + } + return retval; + } + + /* we have space. put entry in next cell */ + --last_cookie; + chain[num_entries].ne_fileid = (u_int) last_cookie; + *(u_int *) chain[num_entries].ne_cookie = + (u_int) last_cookie; + chain[num_entries].ne_name = key; + if (num_entries < max_entries - 1) { /* link to next one */ + chain[num_entries].ne_nextentry = &chain[num_entries + 1]; + } + ++num_entries; + } /* end of "while (k)" */ + } /* end of "for (i ... NKVHASH ..." */ + + /* terminate chain */ + if (num_entries > 0) { + chain[num_entries - 1].ne_nextentry = 0; + retval = &chain[0]; + } + + return retval; +} + + +/* + * Error map + */ +static int +error_init(mnt_map *m, char *map, time_t *tp) +{ + plog(XLOG_USER, "No source data for map %s", map); + *tp = 0; + + return 0; +} + + +static int +error_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp) +{ + return ENOENT; +} + + +static int +error_reload(mnt_map *m, char *map, add_fn *fn) +{ + return ENOENT; +} + + +static int +error_mtime(mnt_map *m, char *map, time_t *tp) +{ + *tp = 0; + + return 0; +} + + +/* + * Return absolute path of map, searched in a type-specific path. + * Note: uses a static buffer for returned data. + */ +static const char * +get_full_path(const char *map, const char *path, const char *type) +{ + char component[MAXPATHLEN], *str; + static char full_path[MAXPATHLEN]; + int len; + + /* for now, only file-type search paths are implemented */ + if (type && !STREQ(type, "file")) + return map; + + /* if null map, return it */ + if (!map) + return map; + + /* if map includes a '/', return it (absolute or relative path) */ + if (strchr(map, '/')) + return map; + + /* if path is empty, return map */ + if (!path) + return map; + + /* now break path into components, and search in each */ + strcpy(component, path); + + str = strtok(component, ":"); + do { + strcpy(full_path, str); + len = strlen(full_path); + if (full_path[len - 1] != '/') /* add trailing "/" if needed */ + strcat(full_path, "/"); + strcat(full_path, map); + if (access(full_path, R_OK) == 0) + return full_path; + str = strtok(NULL, ":"); + } while (str); + + return map; /* if found nothing, return map */ +} diff --git a/amd/mntfs.c b/amd/mntfs.c new file mode 100644 index 0000000..cc67c02 --- /dev/null +++ b/amd/mntfs.c @@ -0,0 +1,335 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mntfs.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +qelem mfhead = {&mfhead, &mfhead}; + +int mntfs_allocated; + + +mntfs * +dup_mntfs(mntfs *mf) +{ + if (mf->mf_refc == 0) { + if (mf->mf_cid) + untimeout(mf->mf_cid); + mf->mf_cid = 0; + } + mf->mf_refc++; + + return mf; +} + + +static void +init_mntfs(mntfs *mf, am_ops *ops, am_opts *mo, char *mp, char *info, char *auto_opts, char *mopts, char *remopts) +{ + mf->mf_ops = ops; + mf->mf_fo = mo; + mf->mf_mount = strdup(mp); + mf->mf_info = strdup(info); + mf->mf_auto = strdup(auto_opts); + mf->mf_mopts = strdup(mopts); + mf->mf_remopts = strdup(remopts); + mf->mf_refc = 1; + mf->mf_flags = 0; + mf->mf_error = -1; + mf->mf_cid = 0; + mf->mf_private = 0; + mf->mf_prfree = 0; + + if (ops->ffserver) + mf->mf_server = (*ops->ffserver) (mf); + else + mf->mf_server = 0; +} + + +static mntfs * +alloc_mntfs(am_ops *ops, am_opts *mo, char *mp, char *info, char *auto_opts, char *mopts, char *remopts) +{ + mntfs *mf = ALLOC(struct mntfs); + + init_mntfs(mf, ops, mo, mp, info, auto_opts, mopts, remopts); + ins_que(&mf->mf_q, &mfhead); + mntfs_allocated++; + + return mf; +} + + +mntfs * +find_mntfs(am_ops *ops, am_opts *mo, char *mp, char *info, char *auto_opts, char *mopts, char *remopts) +{ + mntfs *mf; + +#ifdef DEBUG + dlog("Locating mntfs reference to %s", mp); +#endif /* DEBUG */ + + ITER(mf, mntfs, &mfhead) { + if (STREQ(mf->mf_mount, mp)) { + /* + * Handle cases where error ops are involved + */ + if (ops == &amfs_error_ops) { + /* + * If the existing ops are not amfs_error_ops + * then continue... + */ + if (mf->mf_ops != &amfs_error_ops) + continue; + else + return dup_mntfs(mf); + } else { /* ops != &amfs_error_ops */ + /* + * If the existing ops are amfs_error_ops + * then continue... + */ + if (mf->mf_ops == &amfs_error_ops) + continue; + } + + if ((mf->mf_flags & MFF_RESTART) && amd_state == Run) { + /* + * Restart a previously mounted filesystem. + */ + mntfs *mf2 = alloc_mntfs(&amfs_inherit_ops, mo, mp, info, auto_opts, mopts, remopts); +#ifdef DEBUG + dlog("Restarting filesystem %s", mf->mf_mount); +#endif /* DEBUG */ + + /* + * Remember who we are restarting + */ + mf2->mf_private = (voidp) dup_mntfs(mf); + mf2->mf_prfree = free_mntfs; + return mf2; + } + + mf->mf_fo = mo; + if (!(mf->mf_flags & (MFF_MOUNTED | MFF_MOUNTING | MFF_UNMOUNTING))) { + fserver *fs; + mf->mf_flags &= ~MFF_ERROR; + mf->mf_error = -1; + mf->mf_auto = strealloc(mf->mf_auto, auto_opts); + mf->mf_mopts = strealloc(mf->mf_mopts, mopts); + mf->mf_remopts = strealloc(mf->mf_remopts, remopts); + mf->mf_info = strealloc(mf->mf_info, info); + + if (mf->mf_private && mf->mf_prfree) { + (*mf->mf_prfree) (mf->mf_private); + mf->mf_private = 0; + } + + fs = ops->ffserver ? (*ops->ffserver) (mf) : (fserver *) NULL; + if (mf->mf_server) + free_srvr(mf->mf_server); + mf->mf_server = fs; + } + return dup_mntfs(mf); + } + } + + return alloc_mntfs(ops, mo, mp, info, auto_opts, mopts, remopts); +} + + +mntfs * +new_mntfs(void) +{ + return alloc_mntfs(&amfs_error_ops, (am_opts *) 0, "//nil//", ".", "", "", ""); +} + + +static void +uninit_mntfs(mntfs *mf, int rmd) +{ + if (mf->mf_auto) + XFREE(mf->mf_auto); + if (mf->mf_mopts) + XFREE(mf->mf_mopts); + if (mf->mf_remopts) + XFREE(mf->mf_remopts); + if (mf->mf_info) + XFREE(mf->mf_info); + if (mf->mf_private && mf->mf_prfree) + (*mf->mf_prfree) (mf->mf_private); + + /* + * Clean up any directories that were made + */ + if (rmd && (mf->mf_flags & MFF_MKMNT)) + rmdirs(mf->mf_mount); + /* free mf_mount _AFTER_ removing the directories */ + if (mf->mf_mount) + XFREE(mf->mf_mount); + + /* + * Clean up the file server + */ + if (mf->mf_server) + free_srvr(mf->mf_server); + + /* + * Don't do a callback on this mount + */ + if (mf->mf_cid) { + untimeout(mf->mf_cid); + mf->mf_cid = 0; + } +} + + +static void +discard_mntfs(voidp v) +{ + mntfs *mf = v; + + rem_que(&mf->mf_q); + + /* + * Free memory + */ + uninit_mntfs(mf, TRUE); + XFREE(mf); + + --mntfs_allocated; +} + + +void +flush_mntfs(void) +{ + mntfs *mf; + + mf = AM_FIRST(mntfs, &mfhead); + while (mf != HEAD(mntfs, &mfhead)) { + mntfs *mf2 = mf; + mf = NEXT(mntfs, mf); + if (mf2->mf_refc == 0 && mf2->mf_cid) + discard_mntfs(mf2); + } +} + + +void +free_mntfs(voidp v) +{ + mntfs *mf = v; + + if (--mf->mf_refc == 0) { + if (mf->mf_flags & MFF_MOUNTED) { + int quoted; + mf->mf_flags &= ~MFF_MOUNTED; + + /* + * Record for posterity + */ + quoted = strchr(mf->mf_info, ' ') != 0; /* cheap */ + plog(XLOG_INFO, "%s%s%s %sed fstype %s from %s", + quoted ? "\"" : "", + mf->mf_info, + quoted ? "\"" : "", + mf->mf_error ? "discard" : "unmount", + mf->mf_ops->fs_type, mf->mf_mount); + } + + if (mf->mf_ops->fs_flags & FS_DISCARD) { +#ifdef DEBUG + dlog("Immediately discarding mntfs for %s", mf->mf_mount); +#endif /* DEBUG */ + discard_mntfs(mf); + + } else { + +#ifdef DEBUG + if (mf->mf_flags & MFF_RESTART) { + dlog("Discarding remount hook for %s", mf->mf_mount); + } else { + dlog("Discarding last mntfs reference to %s fstype %s", + mf->mf_mount, mf->mf_ops->fs_type); + } + if (mf->mf_flags & (MFF_MOUNTED | MFF_MOUNTING | MFF_UNMOUNTING)) + dlog("mntfs reference for %s still active", mf->mf_mount); +#endif /* DEBUG */ + mf->mf_cid = timeout(ALLOWED_MOUNT_TIME, discard_mntfs, (voidp) mf); + } + } +} + + +mntfs * +realloc_mntfs(mntfs *mf, am_ops *ops, am_opts *mo, char *mp, char *info, char *auto_opts, char *mopts, char *remopts) +{ + mntfs *mf2; + + if (mf->mf_refc == 1 && mf->mf_ops == &amfs_inherit_ops && STREQ(mf->mf_mount, mp)) { + /* + * If we are inheriting then just return + * the same node... + */ + return mf; + } + + /* + * Re-use the existing mntfs if it is mounted. + * This traps a race in nfsx. + */ + if (mf->mf_ops != &amfs_error_ops && + (mf->mf_flags & MFF_MOUNTED) && + !FSRV_ISDOWN(mf->mf_server)) { + mf->mf_fo = mo; + return mf; + } + + mf2 = find_mntfs(ops, mo, mp, info, auto_opts, mopts, remopts); + free_mntfs(mf); + return mf2; +} diff --git a/amd/nfs_prot_svc.c b/amd/nfs_prot_svc.c new file mode 100644 index 0000000..ef79af2 --- /dev/null +++ b/amd/nfs_prot_svc.c @@ -0,0 +1,250 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_svc.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* external definitions */ +extern voidp nfsproc_null_2_svc(voidp, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(am_nfs_fh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern voidp nfsproc_root_2_svc(voidp, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(am_nfs_fh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern voidp nfsproc_writecache_2_svc(voidp, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(am_nfs_fh *, struct svc_req *); + +/* global variables */ +SVCXPRT *nfs_program_2_transp; + +/* typedefs */ +typedef char *(*nfssvcproc_t)(voidp, struct svc_req *); + + +void +nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) +{ + union { + am_nfs_fh nfsproc_getattr_2_arg; + nfssattrargs nfsproc_setattr_2_arg; + nfsdiropargs nfsproc_lookup_2_arg; + am_nfs_fh nfsproc_readlink_2_arg; + nfsreadargs nfsproc_read_2_arg; + nfswriteargs nfsproc_write_2_arg; + nfscreateargs nfsproc_create_2_arg; + nfsdiropargs nfsproc_remove_2_arg; + nfsrenameargs nfsproc_rename_2_arg; + nfslinkargs nfsproc_link_2_arg; + nfssymlinkargs nfsproc_symlink_2_arg; + nfscreateargs nfsproc_mkdir_2_arg; + nfsdiropargs fsproc_rmdir_2_arg; + nfsreaddirargs nfsproc_readdir_2_arg; + am_nfs_fh nfsproc_statfs_2_arg; + } argument; + char *result; + xdrproc_t xdr_argument, xdr_result; + nfssvcproc_t local; + + nfs_program_2_transp = NULL; + + switch (rqstp->rq_proc) { + + case NFSPROC_NULL: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (nfssvcproc_t) nfsproc_null_2_svc; + break; + + case NFSPROC_GETATTR: + xdr_argument = (xdrproc_t) xdr_nfs_fh; + xdr_result = (xdrproc_t) xdr_attrstat; + local = (nfssvcproc_t) nfsproc_getattr_2_svc; + break; + + case NFSPROC_SETATTR: + xdr_argument = (xdrproc_t) xdr_sattrargs; + xdr_result = (xdrproc_t) xdr_attrstat; + local = (nfssvcproc_t) nfsproc_setattr_2_svc; + break; + + case NFSPROC_ROOT: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (nfssvcproc_t) nfsproc_root_2_svc; + break; + + case NFSPROC_LOOKUP: + xdr_argument = (xdrproc_t) xdr_diropargs; + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_lookup_2_svc; + /* + * Cheap way to pass transp down to amfs_auto_lookuppn so it can + * be stored in the am_node structure and later used for + * quick_reply(). + */ + nfs_program_2_transp = transp; + break; + + case NFSPROC_READLINK: + xdr_argument = (xdrproc_t) xdr_nfs_fh; + xdr_result = (xdrproc_t) xdr_readlinkres; + local = (nfssvcproc_t) nfsproc_readlink_2_svc; + break; + + case NFSPROC_READ: + xdr_argument = (xdrproc_t) xdr_readargs; + xdr_result = (xdrproc_t) xdr_readres; + local = (nfssvcproc_t) nfsproc_read_2_svc; + break; + + case NFSPROC_WRITECACHE: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (nfssvcproc_t) nfsproc_writecache_2_svc; + break; + + case NFSPROC_WRITE: + xdr_argument = (xdrproc_t) xdr_writeargs; + xdr_result = (xdrproc_t) xdr_attrstat; + local = (nfssvcproc_t) nfsproc_write_2_svc; + break; + + case NFSPROC_CREATE: + xdr_argument = (xdrproc_t) xdr_createargs; + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_create_2_svc; + break; + + case NFSPROC_REMOVE: + xdr_argument = (xdrproc_t) xdr_diropargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_remove_2_svc; + break; + + case NFSPROC_RENAME: + xdr_argument = (xdrproc_t) xdr_renameargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_rename_2_svc; + break; + + case NFSPROC_LINK: + xdr_argument = (xdrproc_t) xdr_linkargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_link_2_svc; + break; + + case NFSPROC_SYMLINK: + xdr_argument = (xdrproc_t) xdr_symlinkargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_symlink_2_svc; + break; + + case NFSPROC_MKDIR: + xdr_argument = (xdrproc_t) xdr_createargs; + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_mkdir_2_svc; + break; + + case NFSPROC_RMDIR: + xdr_argument = (xdrproc_t) xdr_diropargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_rmdir_2_svc; + break; + + case NFSPROC_READDIR: + xdr_argument = (xdrproc_t) xdr_readdirargs; + xdr_result = (xdrproc_t) xdr_readdirres; + local = (nfssvcproc_t) nfsproc_readdir_2_svc; + break; + + case NFSPROC_STATFS: + xdr_argument = (xdrproc_t) xdr_nfs_fh; + xdr_result = (xdrproc_t) xdr_statfsres; + local = (nfssvcproc_t) nfsproc_statfs_2_svc; + break; + + default: + svcerr_noproc(transp); + return; + } + + memset((char *) &argument, 0, sizeof(argument)); + if (!svc_getargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) &argument)) { + plog(XLOG_ERROR, + "NFS xdr decode failed for %d %d %d", + rqstp->rq_prog, rqstp->rq_vers, rqstp->rq_proc); + svcerr_decode(transp); + return; + } + result = (*local) (&argument, rqstp); + + nfs_program_2_transp = NULL; + + if (result != NULL && !svc_sendreply(transp, + (XDRPROC_T_TYPE) xdr_result, + result)) { + svcerr_systemerr(transp); + } + if (!svc_freeargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) & argument)) { + plog(XLOG_FATAL, "unable to free rpc arguments in nfs_program_2"); + going_down(1); + } +} diff --git a/amd/nfs_start.c b/amd/nfs_start.c new file mode 100644 index 0000000..933d2e4 --- /dev/null +++ b/amd/nfs_start.c @@ -0,0 +1,472 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_start.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#ifndef SELECT_MAXWAIT +# define SELECT_MAXWAIT 16 +#endif /* not SELECT_MAXWAIT */ + +SVCXPRT *nfsxprt; +u_short nfs_port; + +#ifdef HAVE_FS_AUTOFS +SVCXPRT *autofsxprt = NULL; +u_short autofs_port = 0; +#endif /* HAVE_FS_AUTOFS */ + +#ifndef HAVE_SIGACTION +# define MASKED_SIGS (sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGCHLD)|sigmask(SIGHUP)) +#endif /* not HAVE_SIGACTION */ + +#ifdef DEBUG +/* + * Check that we are not burning resources + */ +static void +checkup(void) +{ + + static int max_fd = 0; + static char *max_mem = 0; + + int next_fd = dup(0); + caddr_t next_mem = sbrk(0); + close(next_fd); + + if (max_fd < next_fd) { + dlog("%d new fds allocated; total is %d", + next_fd - max_fd, next_fd); + max_fd = next_fd; + } + if (max_mem < next_mem) { +#ifdef HAVE_GETPAGESIZE + dlog("%#x bytes of memory allocated; total is %#x (%ld pages)", + next_mem - max_mem, next_mem, + ((long) next_mem + getpagesize() - 1) / getpagesize()); +#else /* not HAVE_GETPAGESIZE */ + dlog("%#x bytes of memory allocated; total is %#x", + next_mem - max_mem, next_mem); +#endif /* not HAVE_GETPAGESIZE */ + max_mem = next_mem; + + } +} +#endif /* DEBUG */ + + +static int +#ifdef HAVE_SIGACTION +do_select(sigset_t smask, int fds, fd_set *fdp, struct timeval *tvp) +#else /* not HAVE_SIGACTION */ +do_select(int smask, int fds, fd_set *fdp, struct timeval *tvp) +#endif /* not HAVE_SIGACTION */ +{ + + int sig; + int nsel; + + if ((sig = setjmp(select_intr))) { + select_intr_valid = 0; + /* Got a signal */ + switch (sig) { + case SIGINT: + case SIGTERM: + amd_state = Finishing; + reschedule_timeout_mp(); + break; + } + nsel = -1; + errno = EINTR; + } else { + select_intr_valid = 1; + /* + * Invalidate the current clock value + */ + clock_valid = 0; + /* + * Allow interrupts. If a signal + * occurs, then it will cause a longjmp + * up above. + */ +#ifdef HAVE_SIGACTION + sigprocmask(SIG_SETMASK, &smask, NULL); +#else /* not HAVE_SIGACTION */ + (void) sigsetmask(smask); +#endif /* not HAVE_SIGACTION */ + + /* + * Wait for input + */ + nsel = select(fds, fdp, (fd_set *) 0, (fd_set *) 0, + tvp->tv_sec ? tvp : (struct timeval *) 0); + } + +#ifdef HAVE_SIGACTION + sigprocmask(SIG_BLOCK, &masked_sigs, NULL); +#else /* not HAVE_SIGACTION */ + (void) sigblock(MASKED_SIGS); +#endif /* not HAVE_SIGACTION */ + + /* + * Perhaps reload the cache? + */ + if (do_mapc_reload < clocktime()) { + mapc_reload(); + do_mapc_reload = clocktime() + ONE_HOUR; + } + return nsel; +} + + +/* + * Determine whether anything is left in + * the RPC input queue. + */ +static int +rpc_pending_now(void) +{ + struct timeval tvv; + int nsel; +#ifdef FD_SET + fd_set readfds; + + FD_ZERO(&readfds); + FD_SET(fwd_sock, &readfds); +#else /* not FD_SET */ + int readfds = (1 << fwd_sock); +#endif /* not FD_SET */ + + tvv.tv_sec = tvv.tv_usec = 0; + nsel = select(FD_SETSIZE, &readfds, (fd_set *) 0, (fd_set *) 0, &tvv); + if (nsel < 1) + return (0); +#ifdef FD_SET + if (FD_ISSET(fwd_sock, &readfds)) + return (1); +#else /* not FD_SET */ + if (readfds & (1 << fwd_sock)) + return (1); +#endif /* not FD_SET */ + + return (0); +} + + +static serv_state +run_rpc(void) +{ +#ifdef HAVE_SIGACTION + sigset_t smask; + sigprocmask(SIG_BLOCK, &masked_sigs, &smask); +#else /* not HAVE_SIGACTION */ + int smask = sigblock(MASKED_SIGS); +#endif /* not HAVE_SIGACTION */ + + next_softclock = clocktime(); + + amd_state = Run; + + /* + * Keep on trucking while we are in Run mode. This state + * is switched to Quit after all the file systems have + * been unmounted. + */ + while ((int) amd_state <= (int) Finishing) { + struct timeval tvv; + int nsel; + time_t now; +#ifdef HAVE_SVC_GETREQSET + fd_set readfds; + + memmove(&readfds, &svc_fdset, sizeof(svc_fdset)); + FD_SET(fwd_sock, &readfds); +#else /* not HAVE_SVC_GETREQSET */ +# ifdef FD_SET + fd_set readfds; + FD_ZERO(&readfds); + readfds.fds_bits[0] = svc_fds; + FD_SET(fwd_sock, &readfds); +# else /* not FD_SET */ + int readfds = svc_fds | (1 << fwd_sock); +# endif /* not FD_SET */ +#endif /* not HAVE_SVC_GETREQSET */ + +#ifdef DEBUG + checkup(); +#endif /* DEBUG */ + + /* + * If the full timeout code is not called, + * then recompute the time delta manually. + */ + now = clocktime(); + + if (next_softclock <= now) { + if (amd_state == Finishing) + umount_exported(); + tvv.tv_sec = softclock(); + } else { + tvv.tv_sec = next_softclock - now; + } + tvv.tv_usec = 0; + + if (amd_state == Finishing && last_used_map < 0) { + flush_mntfs(); + amd_state = Quit; + break; + } + if (tvv.tv_sec <= 0) + tvv.tv_sec = SELECT_MAXWAIT; +#ifdef DEBUG + if (tvv.tv_sec) { + dlog("Select waits for %ds", tvv.tv_sec); + } else { + dlog("Select waits for Godot"); + } +#endif /* DEBUG */ + + nsel = do_select(smask, FD_SETSIZE, &readfds, &tvv); + + switch (nsel) { + case -1: + if (errno == EINTR) { +#ifdef DEBUG + dlog("select interrupted"); +#endif /* DEBUG */ + continue; + } + perror("select"); + break; + + case 0: + break; + + default: + /* + * Read all pending NFS responses at once to avoid having responses. + * queue up as a consequence of retransmissions. + */ +#ifdef FD_SET + if (FD_ISSET(fwd_sock, &readfds)) { + FD_CLR(fwd_sock, &readfds); +#else /* not FD_SET */ + if (readfds & (1 << fwd_sock)) { + readfds &= ~(1 << fwd_sock); +#endif /* not FD_SET */ + --nsel; + do { + fwd_reply(); + } while (rpc_pending_now() > 0); + } + + if (nsel) { + /* + * Anything left must be a normal + * RPC request. + */ +#ifdef HAVE_SVC_GETREQSET + svc_getreqset(&readfds); +#else /* not HAVE_SVC_GETREQSET */ +# ifdef FD_SET + svc_getreq(readfds.fds_bits[0]); +# else /* not FD_SET */ + svc_getreq(readfds); +# endif /* not FD_SET */ +#endif /* not HAVE_SVC_GETREQSET */ + } + break; + } + } + +#ifdef HAVE_SIGACTION + sigprocmask(SIG_SETMASK, &smask, NULL); +#else /* not HAVE_SIGACTION */ + (void) sigsetmask(smask); +#endif /* not HAVE_SIGACTION */ + + if (amd_state == Quit) + amd_state = Done; + + return amd_state; +} + + +int +mount_automounter(int ppid) +{ + /* + * Old code replaced by rpc-trash patch. + * Erez Zadok + int so = socket(AF_INET, SOCK_DGRAM, 0); + */ + SVCXPRT *udp_amqp = NULL, *tcp_amqp = NULL; + int nmount, ret; + int soNFS; + int udp_soAMQ, tcp_soAMQ; +#ifdef HAVE_TRANSPORT_TYPE_TLI + struct netconfig *udp_amqncp, *tcp_amqncp; +#endif /* HAVE_TRANSPORT_TYPE_TLI */ +#ifdef HAVE_FS_AUTOFS + int soAUTOFS; +#endif /* HAVE_FS_AUTOFS */ + + /* + * Create the nfs service for amd + */ +#ifdef HAVE_TRANSPORT_TYPE_TLI + ret = create_nfs_service(&soNFS, &nfs_port, &nfsxprt, nfs_program_2); + if (ret != 0) + return ret; + ret = create_amq_service(&udp_soAMQ, &udp_amqp, &udp_amqncp, &tcp_soAMQ, &tcp_amqp, &tcp_amqncp); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + ret = create_nfs_service(&soNFS, &nfs_port, &nfsxprt, nfs_program_2); + if (ret != 0) + return ret; + ret = create_amq_service(&udp_soAMQ, &udp_amqp, &tcp_soAMQ, &tcp_amqp); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + if (ret != 0) + return ret; + +#ifdef HAVE_FS_AUTOFS + /* + * Create the autofs service for amd. + */ + plog(XLOG_INFO, "creating autofs service listener"); + ret = create_autofs_service(&soAUTOFS, &autofs_port, &autofsxprt, autofs_program_1); + /* if autofs service fails it is OK if using a test amd */ + if (ret != 0 && gopt.portmap_program == AMQ_PROGRAM) + return ret; +#endif /* HAVE_FS_AUTOFS */ + + /* + * Start RPC forwarding + */ + if (fwd_init() != 0) + return 3; + + /* + * Construct the root automount node + */ + make_root_node(); + + /* + * Pick up the pieces from a previous run + * This is likely to (indirectly) need the rpc_fwd package + * so it *must* come after the call to fwd_init(). + */ + if (gopt.flags & CFM_RESTART_EXISTING_MOUNTS) + restart(); + + /* + * Mount the top-level auto-mountpoints + */ + nmount = mount_exported(); + + /* + * Now safe to tell parent that we are up and running + */ + if (ppid) + kill(ppid, SIGQUIT); + + if (nmount == 0) { + plog(XLOG_FATAL, "No work to do - quitting"); + amd_state = Done; + return 0; + } + +#ifdef DEBUG + amuDebug(D_AMQ) { +#endif /* DEBUG */ + /* + * Complete registration of amq (first TCP service then UDP) + */ + unregister_amq(); + +#ifdef HAVE_TRANSPORT_TYPE_TLI + ret = svc_reg(tcp_amqp, get_amd_program_number(), AMQ_VERSION, + amq_program_1, tcp_amqncp); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + ret = svc_register(tcp_amqp, get_amd_program_number(), AMQ_VERSION, + amq_program_1, IPPROTO_TCP); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + if (ret != 1) { + plog(XLOG_FATAL, "unable to register (AMQ_PROGRAM=%d, AMQ_VERSION, tcp)", get_amd_program_number()); + return 3; + } + +#ifdef HAVE_TRANSPORT_TYPE_TLI + ret = svc_reg(udp_amqp, get_amd_program_number(), AMQ_VERSION, + amq_program_1, udp_amqncp); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + ret = svc_register(udp_amqp, get_amd_program_number(), AMQ_VERSION, + amq_program_1, IPPROTO_UDP); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + if (ret != 1) { + plog(XLOG_FATAL, "unable to register (AMQ_PROGRAM=%d, AMQ_VERSION, udp)", get_amd_program_number()); + return 4; + } + +#ifdef DEBUG + } +#endif /* DEBUG */ + + /* + * Start timeout_mp rolling + */ + reschedule_timeout_mp(); + + /* + * Start the server + */ + if (run_rpc() != Done) { + plog(XLOG_FATAL, "run_rpc failed"); + amd_state = Done; + } + return 0; +} diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c new file mode 100644 index 0000000..44c77c9 --- /dev/null +++ b/amd/nfs_subr.c @@ -0,0 +1,617 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_subr.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Convert from UN*X to NFS error code. + * Some systems like linux define their own (see + * conf/mount/mount_linux.h). + */ +#ifndef nfs_error +# define nfs_error(e) ((nfsstat)(e)) +#endif /* nfs_error */ + +/* forward declarations */ +static void count_map_entries(const am_node *mp, u_int *out_blocks, u_int *out_bfree, u_int *out_bavail); + + +static char * +do_readlink(am_node *mp, int *error_return, nfsattrstat **attrpp) +{ + char *ln; + + /* + * If there is a readlink method, then use + * that, otherwise if a link exists use + * that, otherwise use the mount point. + */ + if (mp->am_mnt->mf_ops->readlink) { + int retry = 0; + mp = (*mp->am_mnt->mf_ops->readlink) (mp, &retry); + if (mp == 0) { + *error_return = retry; + return 0; + } + /* reschedule_timeout_mp(); */ + } + + if (mp->am_link) { + ln = mp->am_link; + } else { + ln = mp->am_mnt->mf_mount; + } + if (attrpp) + *attrpp = &mp->am_attr; + + return ln; +} + + +voidp +nfsproc_null_2_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +nfsattrstat * +nfsproc_getattr_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) +{ + static nfsattrstat res; + am_node *mp; + int retry; + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "getattr:"); +#endif /* DEBUG */ + + mp = fh_to_mp2(argp, &retry); + if (mp == 0) { + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "\tretry=%d", retry); +#endif /* DEBUG */ + + if (retry < 0) + return 0; + res.ns_status = nfs_error(retry); + } else { + nfsattrstat *attrp = &mp->am_attr; + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "\tstat(%s), size = %d", mp->am_path, + attrp->ns_u.ns_attr_u.na_size); +#endif /* DEBUG */ + + mp->am_stats.s_getattr++; + return attrp; + } + +#ifndef MNT2_NFS_OPT_SYMTTL + /* + * This code is needed to defeat Solaris 2.4's (and newer) symlink values + * cache. It forces the last-modified time of the symlink to be current. + * It is not needed if the O/S has an nfs flag to turn off the + * symlink-cache at mount time (such as Irix 5.x and 6.x). -Erez. + */ + if (++res.ns_u.ns_attr_u.na_mtime.nt_useconds == 0) + ++res.ns_u.ns_attr_u.na_mtime.nt_seconds; +#endif /* not MNT2_NFS_OPT_SYMTTL */ + + return &res; +} + + +nfsattrstat * +nfsproc_setattr_2_svc(nfssattrargs *argp, struct svc_req *rqstp) +{ + static nfsattrstat res; + + if (!fh_to_mp(&argp->sag_fhandle)) + res.ns_status = nfs_error(ESTALE); + else + res.ns_status = nfs_error(EROFS); + + return &res; +} + + +voidp +nfsproc_root_2_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +nfsdiropres * +nfsproc_lookup_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) +{ + static nfsdiropres res; + am_node *mp; + int retry; + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "lookup:"); +#endif /* DEBUG */ + + mp = fh_to_mp2(&argp->da_fhandle, &retry); + if (mp == 0) { + if (retry < 0) + return 0; + res.dr_status = nfs_error(retry); + } else { + int error; + am_node *ap; +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "\tlookuppn(%s, %s)", mp->am_path, argp->da_name); +#endif /* DEBUG */ + ap = (*mp->am_mnt->mf_ops->lookuppn) (mp, argp->da_name, &error, VLOOK_CREATE); + if (ap == 0) { + if (error < 0) { +#ifdef DEBUG + dlog("Not sending RPC reply"); +#endif /* DEBUG */ + amd_stats.d_drops++; + return 0; + } + res.dr_status = nfs_error(error); + } else { + /* + * XXX: EXPERIMENTAL! Delay unmount of what was looked up. This + * should reduce the chance for race condition between unmounting an + * entry synchronously, and re-mounting it asynchronously. + */ + if (ap->am_ttl < mp->am_ttl) + ap->am_ttl = mp->am_ttl; + mp_to_fh(ap, &res.dr_u.dr_drok_u.drok_fhandle); + res.dr_u.dr_drok_u.drok_attributes = ap->am_fattr; + res.dr_status = NFS_OK; + } + mp->am_stats.s_lookup++; + /* reschedule_timeout_mp(); */ + } + + return &res; +} + + +void +quick_reply(am_node *mp, int error) +{ + SVCXPRT *transp = mp->am_transp; + nfsdiropres res; + xdrproc_t xdr_result = (xdrproc_t) xdr_diropres; + + /* + * If there's a transp structure then we can reply to the client's + * nfs lookup request. + */ + if (transp) { + if (error == 0) { + /* + * Construct a valid reply to a lookup request. Same + * code as in nfsproc_lookup_2_svc() above. + */ + mp_to_fh(mp, &res.dr_u.dr_drok_u.drok_fhandle); + res.dr_u.dr_drok_u.drok_attributes = mp->am_fattr; + res.dr_status = NFS_OK; + } else + /* + * Return the error that was passed to us. + */ + res.dr_status = nfs_error(error); + + /* + * Send off our reply + */ + if (!svc_sendreply(transp, (XDRPROC_T_TYPE) xdr_result, (SVC_IN_ARG_TYPE) & res)) + svcerr_systemerr(transp); + + /* + * Free up transp. It's only used for one reply. + */ + XFREE(transp); + mp->am_transp = NULL; +#ifdef DEBUG + dlog("Quick reply sent for %s", mp->am_mnt->mf_mount); +#endif /* DEBUG */ + } +} + + +nfsreadlinkres * +nfsproc_readlink_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) +{ + static nfsreadlinkres res; + am_node *mp; + int retry; + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "readlink:"); +#endif /* DEBUG */ + + mp = fh_to_mp2(argp, &retry); + if (mp == 0) { + readlink_retry: + if (retry < 0) + return 0; + res.rlr_status = nfs_error(retry); + } else { + char *ln = do_readlink(mp, &retry, (nfsattrstat **) 0); + if (ln == 0) + goto readlink_retry; + res.rlr_status = NFS_OK; +#ifdef DEBUG + amuDebug(D_TRACE) + if (ln) + plog(XLOG_DEBUG, "\treadlink(%s) = %s", mp->am_path, ln); +#endif /* DEBUG */ + res.rlr_u.rlr_data_u = ln; + mp->am_stats.s_readlink++; + } + + return &res; +} + + +nfsreadres * +nfsproc_read_2_svc(nfsreadargs *argp, struct svc_req *rqstp) +{ + static nfsreadres res; + + memset((char *) &res, 0, sizeof(res)); + res.rr_status = nfs_error(EACCES); + + return &res; +} + + +voidp +nfsproc_writecache_2_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +nfsattrstat * +nfsproc_write_2_svc(nfswriteargs *argp, struct svc_req *rqstp) +{ + static nfsattrstat res; + + if (!fh_to_mp(&argp->wra_fhandle)) + res.ns_status = nfs_error(ESTALE); + else + res.ns_status = nfs_error(EROFS); + + return &res; +} + + +nfsdiropres * +nfsproc_create_2_svc(nfscreateargs *argp, struct svc_req *rqstp) +{ + static nfsdiropres res; + + if (!fh_to_mp(&argp->ca_where.da_fhandle)) + res.dr_status = nfs_error(ESTALE); + else + res.dr_status = nfs_error(EROFS); + + return &res; +} + + +static nfsstat * +unlink_or_rmdir(nfsdiropargs *argp, struct svc_req *rqstp, int unlinkp) +{ + static nfsstat res; + int retry; + + am_node *mp = fh_to_mp3(&argp->da_fhandle, &retry, VLOOK_DELETE); + if (mp == 0) { + if (retry < 0) + return 0; + res = nfs_error(retry); + goto out; + } + + if (mp->am_fattr.na_type != NFDIR) { + res = nfs_error(ENOTDIR); + goto out; + } + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "\tremove(%s, %s)", mp->am_path, argp->da_name); +#endif /* DEBUG */ + + mp = (*mp->am_mnt->mf_ops->lookuppn) (mp, argp->da_name, &retry, VLOOK_DELETE); + if (mp == 0) { + /* + * Ignore retries... + */ + if (retry < 0) + retry = 0; + /* + * Usual NFS workaround... + */ + else if (retry == ENOENT) + retry = 0; + res = nfs_error(retry); + } else { + forcibly_timeout_mp(mp); + res = NFS_OK; + } + +out: + return &res; +} + + +nfsstat * +nfsproc_remove_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) +{ + return unlink_or_rmdir(argp, rqstp, TRUE); +} + + +nfsstat * +nfsproc_rename_2_svc(nfsrenameargs *argp, struct svc_req *rqstp) +{ + static nfsstat res; + + if (!fh_to_mp(&argp->rna_from.da_fhandle) || !fh_to_mp(&argp->rna_to.da_fhandle)) + res = nfs_error(ESTALE); + /* + * If the kernel is doing clever things with referenced files + * then let it pretend... + */ + else if (NSTREQ(argp->rna_to.da_name, ".nfs", 4)) + res = NFS_OK; + /* + * otherwise a failure + */ + else + res = nfs_error(EROFS); + + return &res; +} + + +nfsstat * +nfsproc_link_2_svc(nfslinkargs *argp, struct svc_req *rqstp) +{ + static nfsstat res; + + if (!fh_to_mp(&argp->la_fhandle) || !fh_to_mp(&argp->la_to.da_fhandle)) + res = nfs_error(ESTALE); + else + res = nfs_error(EROFS); + + return &res; +} + + +nfsstat * +nfsproc_symlink_2_svc(nfssymlinkargs *argp, struct svc_req *rqstp) +{ + static nfsstat res; + + if (!fh_to_mp(&argp->sla_from.da_fhandle)) + res = nfs_error(ESTALE); + else + res = nfs_error(EROFS); + + return &res; +} + + +nfsdiropres * +nfsproc_mkdir_2_svc(nfscreateargs *argp, struct svc_req *rqstp) +{ + static nfsdiropres res; + + if (!fh_to_mp(&argp->ca_where.da_fhandle)) + res.dr_status = nfs_error(ESTALE); + else + res.dr_status = nfs_error(EROFS); + + return &res; +} + + +nfsstat * +nfsproc_rmdir_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) +{ + return unlink_or_rmdir(argp, rqstp, FALSE); +} + + +nfsreaddirres * +nfsproc_readdir_2_svc(nfsreaddirargs *argp, struct svc_req *rqstp) +{ + static nfsreaddirres res; + static nfsentry e_res[MAX_READDIR_ENTRIES]; + am_node *mp; + int retry; + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "readdir:"); +#endif /* DEBUG */ + + mp = fh_to_mp2(&argp->rda_fhandle, &retry); + if (mp == 0) { + if (retry < 0) + return 0; + res.rdr_status = nfs_error(retry); + } else { +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "\treaddir(%s)", mp->am_path); +#endif /* DEBUG */ + res.rdr_status = nfs_error((*mp->am_mnt->mf_ops->readdir) + (mp, argp->rda_cookie, + &res.rdr_u.rdr_reply_u, e_res, argp->rda_count)); + mp->am_stats.s_readdir++; + } + + return &res; +} + + +nfsstatfsres * +nfsproc_statfs_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) +{ + static nfsstatfsres res; + am_node *mp; + int retry; + mntent_t mnt; + +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "statfs:"); +#endif /* DEBUG */ + + mp = fh_to_mp2(argp, &retry); + if (mp == 0) { + if (retry < 0) + return 0; + res.sfr_status = nfs_error(retry); + } else { + nfsstatfsokres *fp; +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "\tstat_fs(%s)", mp->am_path); +#endif /* DEBUG */ + + /* + * just return faked up file system information + */ + fp = &res.sfr_u.sfr_reply_u; + + fp->sfrok_tsize = 1024; + fp->sfrok_bsize = 1024; + + /* check if map is browsable and show_statfs_entries=yes */ + if ((gopt.flags & CFM_SHOW_STATFS_ENTRIES) && + mp->am_mnt && mp->am_mnt->mf_mopts) { + mnt.mnt_opts = mp->am_mnt->mf_mopts; + if (hasmntopt(&mnt, "browsable")) { + count_map_entries(mp, + &fp->sfrok_blocks, + &fp->sfrok_bfree, + &fp->sfrok_bavail); + } + } else { + fp->sfrok_blocks = 0; /* set to 1 if you don't want empty automounts */ + fp->sfrok_bfree = 0; + fp->sfrok_bavail = 0; + } + + res.sfr_status = NFS_OK; + mp->am_stats.s_statfs++; + } + + return &res; +} + + +/* + * count how many total entries there are in a map, and how many + * of them are in use. + */ +static void +count_map_entries(const am_node *mp, u_int *out_blocks, u_int *out_bfree, u_int *out_bavail) +{ + u_int blocks, bfree, bavail, i; + mntfs *mf; + mnt_map *mmp; + kv *k; + + blocks = bfree = bavail = 0; + if (!mp) + goto out; + mf = mp->am_mnt; + if (!mf) + goto out; + mmp = (mnt_map *) mf->mf_private; + if (!mmp) + goto out; + + /* iterate over keys */ + for (i = 0; i < NKVHASH; i++) { + for (k = mmp->kvhash[i]; k ; k = k->next) { + if (!k->key) + continue; + blocks++; + /* + * XXX: Need to count how many are actively in use and recompute + * bfree and bavail based on it. + */ + } + } + +out: + *out_blocks = blocks; + *out_bfree = bfree; + *out_bavail = bavail; +} diff --git a/amd/ops_TEMPLATE.c b/amd/ops_TEMPLATE.c new file mode 100644 index 0000000..438f005 --- /dev/null +++ b/amd/ops_TEMPLATE.c @@ -0,0 +1,293 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_TEMPLATE.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * An empty template for an amd pseudo filesystem "foofs". + */ + +/* + * NOTE: if this is an Amd file system, prepend "amfs_" to all foofs symbols + * and renamed the file name to amfs_foofs.c. If it is a native file system + * (such as pcfs, isofs, or ffs), then you can keep the names as is, and + * just rename the file to ops_foofs.c. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static char * foofs_match(am_opts *fo); +static int foofs_init(mntfs *mf); +static int foofs_mount(am_node *mp); +static int foofs_fmount(mntfs *mf); +static int foofs_umount(am_node *mp); +static int foofs_fumount(mntfs *mf); +static am_node * foofs_lookuppn(am_node *mp, char *fname, int *error_return, int op); +static int foofs_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count); +static am_node * foofs_readlink(am_node *mp, int *error_return); +static void foofs_mounted(mntfs *mf); +static void foofs_umounted(am_node *mp); +fserver * foofs_ffserver(mntfs *mf); + + +/* + * Foofs operations. + * Define only those you need, others set to 0 (NULL) + */ +am_ops foofs_ops = +{ + "foofs", /* name of file system */ + foofs_match, /* match */ + foofs_init, /* initialize */ + foofs_mount, /* mount vnode */ + foofs_fmount, /* mount vfs */ + foofs_umount, /* unmount vnode */ + foofs_fumount, /* unmount VFS */ + foofs_lookuppn, /* lookup path-name */ + foofs_readdir, /* read directory */ + foofs_readlink, /* read link */ + foofs_mounted, /* after-mount extra actions */ + foofs_umounted, /* after-umount extra actions */ + foofs_ffserver, /* find a file server */ + FS_MKMNT | FS_BACKGROUND | FS_AMQINFO /* flags */ +}; + + +/* + * Check that f/s has all needed fields. + * Returns: matched string if found, NULL otherwise. + */ +static char * +foofs_match(am_opts *fo) +{ + char *cp = "fill this with a way to find the match"; + + plog(XLOG_INFO, "entering foofs_match..."); + + if (cp) + return cp; /* OK */ + + return NULL; /* not OK */ +} + + +/* + * Initialize. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +foofs_init(mntfs *mf) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_init..."); + + error = EPERM; /* XXX: fixme */ + return error; +} + + +/* + * Mount vnode. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +foofs_mount(am_node *mp) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_mount..."); + + error = EPERM; /* XXX: fixme */ + return error; +} + + +/* + * Mount vfs. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +foofs_fmount(mntfs *mf) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_fmount..."); + + error = EPERM; /* XXX: fixme */ + return error; +} + + +/* + * Unmount vnode. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +foofs_umount(am_node *mp) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_umount..."); + + error = EPERM; /* XXX: fixme */ + return error; +} + + +/* + * Unmount VFS. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +foofs_fumount(mntfs *mf) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_fumount..."); + + error = EPERM; /* XXX: fixme */ + return error; +} + + +/* + * Lookup path-name. + * Returns: the am_node that was found, or NULL if failed. + * If failed, also fills in errno in error_return. + */ +static am_node * +foofs_lookuppn(am_node *mp, char *fname, int *error_return, int op) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_lookuppn..."); + + error = EPERM; /* XXX: fixme */ + + *error_return = error; + return NULL; +} + + +/* + * Read directory. + * Returns: 0 if OK, non-zero (errno) if failed. + * If OK, fills in ep with chain of directory entries. + */ +static int +foofs_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_readdir..."); + + error = EPERM; /* XXX: fixme */ + return error; +} + + +/* + * Read link. + * Returns: am_node found, or NULL if not found. + * If failed, fills in errno in error_return. + */ +static am_node * +foofs_readlink(am_node *mp, int *error_return) +{ + int error = 0; + + plog(XLOG_INFO, "entering foofs_readlink..."); + + error = EPERM; /* XXX: fixme */ + + *error_return = error; + return NULL; +} + + +/* + * Async mount callback function. + * After the base mount went OK, sometimes + * there are additional actions that are needed. See union_mounted() and + * toplvl_mounted(). + */ +static void +foofs_mounted(mntfs *mf) +{ + plog(XLOG_INFO, "entering foofs_mounted..."); + + return; +} + + +/* + * Async unmount callback function. + * After the base umount() succeeds, we may want to take extra actions, + * such as informing remote mount daemons that we've unmounted them. + * See amfs_auto_umounted(), host_umounted(), nfs_umounted(). + */ +static void +foofs_umounted(am_node *mp) +{ + plog(XLOG_INFO, "entering foofs_umounted..."); + + return; +} + + +/* + * Find a file server. + * Returns: fserver of found server, or NULL if not found. + */ +fserver * +foofs_ffserver(mntfs *mf) +{ + plog(XLOG_INFO, "entering foofs_ffserver..."); + + return NULL; +} diff --git a/amd/ops_autofs.c b/amd/ops_autofs.c new file mode 100644 index 0000000..dc2a5dc --- /dev/null +++ b/amd/ops_autofs.c @@ -0,0 +1,1276 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_autofs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Automounter filesystem + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * KLUDGE: wrap whole file in HAVE_FS_AUTOFS, because + * not all systems with an automounter file system are supported + * by am-utils yet... + */ + +#ifdef HAVE_FS_AUTOFS + +/* + * MACROS: + */ +#ifndef AUTOFS_NULL +# define AUTOFS_NULL ((u_long)0) +#endif /* not AUTOFS_NULL */ + +/* + * VARIABLES: + */ + +/* forward declarations */ +static int mount_autofs(char *dir, char *opts); +static int autofs_mount_1_svc(struct mntrequest *mr, struct mntres *result, struct authunix_parms *cred); +static int autofs_unmount_1_svc(struct umntrequest *ur, struct umntres *result, struct authunix_parms *cred); + +/* external declarations */ +extern bool_t xdr_mntrequest(XDR *, mntrequest *); +extern bool_t xdr_mntres(XDR *, mntres *); +extern bool_t xdr_umntrequest(XDR *, umntrequest *); +extern bool_t xdr_umntres(XDR *, umntres *); + +/* + * STRUCTURES: + */ + +/* Sun's kernel-based automounter-supporting file system */ +am_ops autofs_ops = +{ + "autofs", + amfs_auto_match, + 0, /* amfs_auto_init */ + autofs_mount, + 0, + autofs_umount, + 0, + amfs_auto_lookuppn, + amfs_auto_readdir, /* browsable version of readdir() */ + 0, /* autofs_readlink */ + autofs_mounted, + 0, /* autofs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_BACKGROUND | FS_AMQINFO | FS_DIRECTORY +}; + + +/**************************************************************************** + *** FUNCTIONS *** + ****************************************************************************/ + +/* + * Mount the top-level using autofs + */ +int +autofs_mount(am_node *mp) +{ + mntfs *mf = mp->am_mnt; + struct stat stb; + char opts[256], preopts[256]; + int error; + char *mnttype; + + /* + * Mounting the automounter. + * Make sure the mount directory exists, construct + * the mount options and call the mount_autofs routine. + */ + + if (stat(mp->am_path, &stb) < 0) { + return errno; + } else if ((stb.st_mode & S_IFMT) != S_IFDIR) { + plog(XLOG_WARNING, "%s is not a directory", mp->am_path); + return ENOTDIR; + } + if (mf->mf_ops == &autofs_ops) + mnttype = "indirect"; + else if (mf->mf_ops == &amfs_direct_ops) + mnttype = "direct"; +#ifdef HAVE_AM_FS_UNION + else if (mf->mf_ops == &amfs_union_ops) + mnttype = "union"; +#endif /* HAVE_AM_FS_UNION */ + else + mnttype = "auto"; + + /* + * Construct some mount options: + * + * Tack on magic map= option in mtab to emulate + * SunOS automounter behavior. + */ + preopts[0] = '\0'; +#ifdef MNTTAB_OPT_INTR + strcat(preopts, MNTTAB_OPT_INTR); + strcat(preopts, ","); +#endif /* MNTTAB_OPT_INTR */ +#ifdef MNTTAB_OPT_IGNORE + strcat(preopts, MNTTAB_OPT_IGNORE); + strcat(preopts, ","); +#endif /* MNTTAB_OPT_IGNORE */ + sprintf(opts, "%s%s,%s=%d,%s=%d,%s=%d,%s,map=%s", + preopts, + MNTTAB_OPT_RW, + MNTTAB_OPT_PORT, nfs_port, + MNTTAB_OPT_TIMEO, gopt.amfs_auto_timeo, + MNTTAB_OPT_RETRANS, gopt.amfs_auto_retrans, + mnttype, mf->mf_info); + + /* now do the mount */ + error = mount_autofs(mf->mf_mount, opts); + if (error) { + errno = error; + plog(XLOG_FATAL, "mount_autofs: %m"); + return error; + } + return 0; +} + + +void +autofs_mounted(mntfs *mf) +{ + amfs_auto_mkcacheref(mf); +} + + +/* + * Unmount a top-level automount node + */ +int +autofs_umount(am_node *mp) +{ + int error; + struct stat stb; + + /* + * The lstat is needed if this mount is type=direct. When that happens, + * the kernel cache gets confused between the underlying type (dir) and + * the mounted type (link) and so needs to be re-synced before the + * unmount. This is all because the unmount system call follows links and + * so can't actually unmount a link (stupid!). It was noted that doing an + * ls -ld of the mount point to see why things were not working actually + * fixed the problem - so simulate an ls -ld here. + */ + if (lstat(mp->am_path, &stb) < 0) { +#ifdef DEBUG + dlog("lstat(%s): %m", mp->am_path); +#endif /* DEBUG */ + } + error = UMOUNT_FS(mp->am_path, mnttab_file_name); + if (error == EBUSY && mp->am_flags & AMF_AUTOFS) { + plog(XLOG_WARNING, "autofs_unmount of %s busy (autofs). exit", mp->am_path); + error = 0; /* fake unmount was ok */ + } + return error; +} + + +/* + * Mount an automounter directory. + * The automounter is connected into the system + * as a user-level NFS server. mount_autofs constructs + * the necessary NFS parameters to be given to the + * kernel so that it will talk back to us. + */ +static int +mount_autofs(char *dir, char *opts) +{ + char fs_hostname[MAXHOSTNAMELEN + MAXPATHLEN + 1]; + char *map_opt, buf[MAXHOSTNAMELEN]; + int retry, error, flags; + struct utsname utsname; + mntent_t mnt; + autofs_args_t autofs_args; + MTYPE_TYPE type = MOUNT_TYPE_AUTOFS; + + memset((voidp) &autofs_args, 0, sizeof(autofs_args)); /* Paranoid */ + + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = pid_fsname; + mnt.mnt_opts = opts; + mnt.mnt_type = type; + + retry = hasmntval(&mnt, "retry"); + if (retry <= 0) + retry = 2; /* XXX */ + + /* + * SET MOUNT ARGS + */ + if (uname(&utsname) < 0) { + strcpy(buf, "localhost.autofs"); + } else { + strcpy(buf, utsname.nodename); + strcat(buf, ".autofs"); + } +#ifdef HAVE_FIELD_AUTOFS_ARGS_T_ADDR + autofs_args.addr.buf = buf; + autofs_args.addr.len = strlen(autofs_args.addr.buf); + autofs_args.addr.maxlen = autofs_args.addr.len; +#endif /* HAVE_FIELD_AUTOFS_ARGS_T_ADDR */ + + autofs_args.path = dir; + autofs_args.opts = opts; + + map_opt = hasmntopt(&mnt, "map"); + if (map_opt) { + map_opt += sizeof("map="); /* skip the "map=" */ + if (map_opt == NULL) { + plog(XLOG_WARNING, "map= has a null map name. reset to amd.unknown"); + map_opt = "amd.unknown"; + } + } + autofs_args.map = map_opt; + + /* XXX: these I set arbitrarily... */ + autofs_args.mount_to = 300; + autofs_args.rpc_to = 60; + autofs_args.direct = 0; + + /* + * Make a ``hostname'' string for the kernel + */ + sprintf(fs_hostname, "pid%ld@%s:%s", (long) (foreground ? mypid : getppid()), + hostname, dir); + + /* + * Most kernels have a name length restriction. + */ + if (strlen(fs_hostname) >= MAXHOSTNAMELEN) + strcpy(fs_hostname + MAXHOSTNAMELEN - 3, ".."); + + /* + * Finally we can compute the mount flags set above. + */ + flags = compute_mount_flags(&mnt); + + /* + * This is it! Here we try to mount amd on its mount points. + */ + error = mount_fs(&mnt, flags, (caddr_t) &autofs_args, retry, type, 0, NULL, mnttab_file_name); + return error; +} + + +/****************************************************************************/ +/* autofs program dispatcher */ +void +autofs_program_1(struct svc_req *rqstp, SVCXPRT *transp) +{ + int ret; + union { + mntrequest autofs_mount_1_arg; + umntrequest autofs_umount_1_arg; + } argument; + union { + mntres mount_res; + umntres umount_res; + } result; + + bool_t (*xdr_argument)(), (*xdr_result)(); + int (*local)(); + + switch (rqstp->rq_proc) { + + case AUTOFS_NULL: + svc_sendreply(transp, + (XDRPROC_T_TYPE) xdr_void, + (SVC_IN_ARG_TYPE) NULL); + return; + + case AUTOFS_MOUNT: + xdr_argument = xdr_mntrequest; + xdr_result = xdr_mntres; + local = (int (*)()) autofs_mount_1_svc; + break; + + case AUTOFS_UNMOUNT: + xdr_argument = xdr_umntrequest; + xdr_result = xdr_umntres; + local = (int (*)()) autofs_unmount_1_svc; + break; + + default: + svcerr_noproc(transp); + return; + } + + memset((char *) &argument, 0, sizeof(argument)); + if (!svc_getargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) &argument)) { + plog(XLOG_ERROR, + "AUTOFS xdr decode failed for %d %d %d", + rqstp->rq_prog, rqstp->rq_vers, rqstp->rq_proc); + svcerr_decode(transp); + return; + } + + ret = (*local) (&argument, &result, rqstp); + if (!svc_sendreply(transp, + (XDRPROC_T_TYPE) xdr_result, + (SVC_IN_ARG_TYPE) &result)) { + svcerr_systemerr(transp); + } + + if (!svc_freeargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) &argument)) { + plog(XLOG_FATAL, "unable to free rpc arguments in autofs_program_1"); + going_down(1); + } +} + + +static int +autofs_mount_1_svc(struct mntrequest *mr, struct mntres *result, struct authunix_parms *cred) +{ + int err = 0; + am_node *anp, *anp2; + + plog(XLOG_INFO, "XXX: autofs_mount_1_svc: %s:%s:%s:%s", + mr->map, mr->name, mr->opts, mr->path); + + /* look for map (eg. "/home") */ + anp = find_ap(mr->path); + if (!anp) { + plog(XLOG_ERROR, "map %s not found", mr->path); + err = ENOENT; + goto out; + } + /* turn on autofs in map flags */ + if (!(anp->am_flags & AMF_AUTOFS)) { + plog(XLOG_INFO, "turning on AMF_AUTOFS for node %s", mr->path); + anp->am_flags |= AMF_AUTOFS; + } + + /* + * Look for (and create if needed) the new node. + * + * If an error occurred, return it. If a -1 was returned, that indicates + * that a mount is in progress, so sleep a while (while the backgrounded + * mount is happening), and then signal the autofs to retry the mount. + * + * There's something I don't understand. I was thinking that this code + * here is the one which will succeed eventually and will send an RPC + * reply to the kernel, but apparently that happens somewhere else, not + * here. It works though, just that I don't know how. Arg. -Erez. + * */ + err = 0; + anp2 = autofs_lookuppn(anp, mr->name, &err, VLOOK_CREATE); + if (!anp2) { + if (err == -1) { /* then tell autofs to retry */ + sleep(1); + err = EAGAIN; + } + goto out; + } + +out: + result->status = err; + return err; +} + + +static int +autofs_unmount_1_svc(struct umntrequest *ur, struct umntres *result, struct authunix_parms *cred) +{ + int err = 0; + +#ifdef HAVE_FIELD_UMNTREQUEST_RDEVID + plog(XLOG_INFO, "XXX: autofs_unmount_1_svc: %d:%u:%lu:0x%x", + ur->isdirect, ur->devid, ur->rdevid, ur->next); +#else /* HAVE_FIELD_UMNTREQUEST_RDEVID */ + plog(XLOG_INFO, "XXX: autofs_unmount_1_svc: %d:%u:0x%x", + ur->isdirect, ur->devid, ur->next); +#endif /* HAVE_FIELD_UMNTREQUEST_RDEVID */ + + err = EINVAL; /* XXX: not implemented yet */ + goto out; + +out: + result->status = err; + return err; +} + + +/* + * Pick a file system to try mounting and + * do that in the background if necessary + * + For each location: + if it is new -defaults then + extract and process + continue; + fi + if it is a cut then + if a location has been tried then + break; + fi + continue; + fi + parse mount location + discard previous mount location if required + find matching mounted filesystem + if not applicable then + this_error = No such file or directory + continue + fi + if the filesystem failed to be mounted then + this_error = error from filesystem + elif the filesystem is mounting or unmounting then + this_error = -1 + elif the fileserver is down then + this_error = -1 + elif the filesystem is already mounted + this_error = 0 + break + fi + if no error on this mount then + this_error = initialize mount point + fi + if no error on this mount and mount is delayed then + this_error = -1 + fi + if this_error < 0 then + retry = true + fi + if no error on this mount then + make mount point if required + fi + if no error on this mount then + if mount in background then + run mount in background + return -1 + else + this_error = mount in foreground + fi + fi + if an error occurred on this mount then + update stats + save error in mount point + fi + endfor + */ +static int +autofs_bgmount(struct continuation * cp, int mpe) +{ + mntfs *mf = cp->mp->am_mnt; /* Current mntfs */ + mntfs *mf_retry = 0; /* First mntfs which needed retrying */ + int this_error = -1; /* Per-mount error */ + int hard_error = -1; + int mp_error = mpe; + + /* + * Try to mount each location. + * At the end: + * hard_error == 0 indicates something was mounted. + * hard_error > 0 indicates everything failed with a hard error + * hard_error < 0 indicates nothing could be mounted now + */ + for (; this_error && *cp->ivec; cp->ivec++) { + am_ops *p; + am_node *mp = cp->mp; + char *link_dir; + int dont_retry; + + if (hard_error < 0) + hard_error = this_error; + + this_error = -1; + + if (**cp->ivec == '-') { + /* + * Pick up new defaults + */ + if (cp->auto_opts && *cp->auto_opts) + cp->def_opts = str3cat(cp->def_opts, cp->auto_opts, ";", *cp->ivec + 1); + else + cp->def_opts = strealloc(cp->def_opts, *cp->ivec + 1); +#ifdef DEBUG + dlog("Setting def_opts to \"%s\"", cp->def_opts); +#endif /* DEBUG */ + continue; + } + /* + * If a mount has been attempted, and we find + * a cut then don't try any more locations. + */ + if (STREQ(*cp->ivec, "/") || STREQ(*cp->ivec, "||")) { + if (cp->tried) { +#ifdef DEBUG + dlog("Cut: not trying any more locations for %s", + mp->am_path); +#endif /* DEBUG */ + break; + } + continue; + } + + /* match the operators */ + p = ops_match(&cp->fs_opts, *cp->ivec, cp->def_opts, mp->am_path, cp->key, mp->am_parent->am_mnt->mf_info); + + /* + * Find a mounted filesystem for this node. + */ + mp->am_mnt = mf = realloc_mntfs(mf, p, &cp->fs_opts, + cp->fs_opts.opt_fs, + cp->fs_opts.fs_mtab, + cp->auto_opts, + cp->fs_opts.opt_opts, + cp->fs_opts.opt_remopts); + + p = mf->mf_ops; +#ifdef DEBUG + dlog("Got a hit with %s", p->fs_type); +#endif /* DEBUG */ + + /* + * Note whether this is a real mount attempt + */ + if (p == &amfs_error_ops) { + plog(XLOG_MAP, "Map entry %s for %s failed to match", *cp->ivec, mp->am_path); + if (this_error <= 0) + this_error = ENOENT; + continue; + } else { + if (cp->fs_opts.fs_mtab) { + plog(XLOG_MAP, "Trying mount of %s on \"%s\" fstype %s", + cp->fs_opts.fs_mtab, mp->am_path, p->fs_type); + } + cp->tried = TRUE; + } + + this_error = 0; + dont_retry = FALSE; + + if (mp->am_link) { + XFREE(mp->am_link); + mp->am_link = 0; + } + link_dir = mf->mf_fo->opt_sublink; + + if (link_dir && *link_dir) { + if (*link_dir == '/') { + mp->am_link = strdup(link_dir); + } else { + /* + * try getting fs option from continuation, not mountpoint! + * Don't try logging the string from mf, since it may be bad! + */ + if (cp->fs_opts.opt_fs != mf->mf_fo->opt_fs) + plog(XLOG_ERROR, "use %s instead of 0x%x", + cp->fs_opts.opt_fs, mf->mf_fo->opt_fs); + + mp->am_link = str3cat((char *) 0, + cp->fs_opts.opt_fs, "/", link_dir); + + normalize_slash(mp->am_link); + } + } + + if (mf->mf_error > 0) { + this_error = mf->mf_error; + } else if (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)) { + /* + * Still mounting - retry later + */ +#ifdef DEBUG + dlog("Duplicate pending mount fstype %s", p->fs_type); +#endif /* DEBUG */ + this_error = -1; + } else if (FSRV_ISDOWN(mf->mf_server)) { + /* + * Would just mount from the same place + * as a hung mount - so give up + */ +#ifdef DEBUG + dlog("%s is already hung - giving up", mf->mf_mount); +#endif /* DEBUG */ + mp_error = EWOULDBLOCK; + dont_retry = TRUE; + this_error = -1; + } else if (mf->mf_flags & MFF_MOUNTED) { +#ifdef DEBUG + dlog("duplicate mount of \"%s\" ...", mf->mf_info); +#endif /* DEBUG */ + + /* + * Just call mounted() + */ + am_mounted(mp); + + this_error = 0; + break; + } + + /* + * Will usually need to play around with the mount nodes + * file attribute structure. This must be done here. + * Try and get things initialized, even if the fileserver + * is not known to be up. In the common case this will + * progress things faster. + */ + if (!this_error) { + /* + * Fill in attribute fields. + */ + if (mf->mf_ops->fs_flags & FS_DIRECTORY) + mk_fattr(mp, NFDIR); + else + mk_fattr(mp, NFLNK); + + mp->am_fattr.na_fileid = mp->am_gen; + + if (p->fs_init) + this_error = (*p->fs_init) (mf); + } + + /* + * Make sure the fileserver is UP before doing any more work + */ + if (!FSRV_ISUP(mf->mf_server)) { +#ifdef DEBUG + dlog("waiting for server %s to become available", mf->mf_server->fs_host); +#endif /* DEBUG */ + this_error = -1; + } + + if (!this_error && mf->mf_fo->opt_delay) { + /* + * If there is a delay timer on the mount + * then don't try to mount if the timer + * has not expired. + */ + int i = atoi(mf->mf_fo->opt_delay); + if (i > 0 && clocktime() < (cp->start + i)) { +#ifdef DEBUG + dlog("Mount of %s delayed by %ds", mf->mf_mount, i - clocktime() + cp->start); +#endif /* DEBUG */ + this_error = -1; + } + } + + if (this_error < 0 && !dont_retry) { + if (!mf_retry) + mf_retry = dup_mntfs(mf); + cp->retry = TRUE; + } + + if (!this_error) + if (p->fs_flags & FS_MBACKGROUND) { + mf->mf_flags |= MFF_MOUNTING; /* XXX */ +#ifdef DEBUG + dlog("backgrounding mount of \"%s\"", mf->mf_mount); +#endif /* DEBUG */ + if (cp->callout) { + untimeout(cp->callout); + cp->callout = 0; + } + run_task(try_mount, (voidp) mp, amfs_auto_cont, (voidp) cp); + mf->mf_flags |= MFF_MKMNT; /* XXX */ + if (mf_retry) + free_mntfs(mf_retry); + return -1; + } else { +#ifdef DEBUG + dlog("foreground mount of \"%s\" ...", mf->mf_info); +#endif /* DEBUG */ + this_error = try_mount((voidp) mp); + if (this_error < 0) { + if (!mf_retry) + mf_retry = dup_mntfs(mf); + cp->retry = TRUE; + } + } + + if (this_error >= 0) { + if (this_error > 0) { + amd_stats.d_merr++; + if (mf != mf_retry) { + mf->mf_error = this_error; + mf->mf_flags |= MFF_ERROR; + } + } + + /* + * Wakeup anything waiting for this mount + */ + wakeup((voidp) mf); + } + } + + if (this_error && cp->retry) { + free_mntfs(mf); + mf = cp->mp->am_mnt = mf_retry; + /* + * Not retrying again (so far) + */ + cp->retry = FALSE; + cp->tried = FALSE; + /* + * Start at the beginning. + * Rewind the location vector and + * reset the default options. + */ + cp->ivec = cp->xivec; + cp->def_opts = strealloc(cp->def_opts, cp->auto_opts); + /* + * Arrange that autofs_bgmount is called + * after anything else happens. + */ +#ifdef DEBUG + dlog("Arranging to retry mount of %s", cp->mp->am_path); +#endif /* DEBUG */ + sched_task(amfs_auto_retry, (voidp) cp, (voidp) mf); + if (cp->callout) + untimeout(cp->callout); + cp->callout = timeout(RETRY_INTERVAL, wakeup, (voidp) mf); + + cp->mp->am_ttl = clocktime() + RETRY_INTERVAL; + + /* + * Not done yet - so don't return anything + */ + return -1; + } + + if (hard_error < 0 || this_error == 0) + hard_error = this_error; + + /* + * Discard handle on duff filesystem. + * This should never happen since it + * should be caught by the case above. + */ + if (mf_retry) { + if (hard_error) + plog(XLOG_ERROR, "discarding a retry mntfs for %s", mf_retry->mf_mount); + free_mntfs(mf_retry); + } + + /* + * If we get here, then either the mount succeeded or + * there is no more mount information available. + */ + if (hard_error < 0 && mp_error) + hard_error = cp->mp->am_error = mp_error; + if (hard_error > 0) { + /* + * Set a small(ish) timeout on an error node if + * the error was not a time out. + */ + switch (hard_error) { + case ETIMEDOUT: + case EWOULDBLOCK: + cp->mp->am_timeo = 17; + break; + default: + cp->mp->am_timeo = 5; + break; + } + new_ttl(cp->mp); + } + + /* + * Make sure that the error value in the mntfs has a + * reasonable value. + */ + if (mf->mf_error < 0) { + mf->mf_error = hard_error; + if (hard_error) + mf->mf_flags |= MFF_ERROR; + } + + /* + * In any case we don't need the continuation any more + */ + free_continuation(cp); + + return hard_error; +} + + +/* + * Automount interface to RPC lookup routine + * Find the corresponding entry and return + * the file handle for it. + */ +am_node * +autofs_lookuppn(am_node *mp, char *fname, int *error_return, int op) +{ + am_node *ap, *new_mp, *ap_hung; + char *info; /* Mount info - where to get the file system */ + char **ivec, **xivec; /* Split version of info */ + char *auto_opts; /* Automount options */ + int error = 0; /* Error so far */ + char path_name[MAXPATHLEN]; /* General path name buffer */ + char apath[MAXPATHLEN]; /* autofs path (added space) */ + char *pfname; /* Path for database lookup */ + struct continuation *cp; /* Continuation structure if need to mount */ + int in_progress = 0; /* # of (un)mount in progress */ + char *dflts; + mntfs *mf; + +#ifdef DEBUG + dlog("in autofs_lookuppn"); +#endif /* DEBUG */ + + /* + * If the server is shutting down + * then don't return information + * about the mount point. + */ + if (amd_state == Finishing) { +#ifdef DEBUG + if ((mf = mp->am_mnt) == 0 || mf->mf_ops == &amfs_direct_ops) + dlog("%s mount ignored - going down", fname); + else + dlog("%s/%s mount ignored - going down", mp->am_path, fname); +#endif /* DEBUG */ + ereturn(ENOENT); + } + + /* + * Handle special case of "." and ".." + */ + if (fname[0] == '.') { + if (fname[1] == '\0') + return mp; /* "." is the current node */ + if (fname[1] == '.' && fname[2] == '\0') { + if (mp->am_parent) { +#ifdef DEBUG + dlog(".. in %s gives %s", mp->am_path, mp->am_parent->am_path); +#endif /* DEBUG */ + return mp->am_parent; /* ".." is the parent node */ + } + ereturn(ESTALE); + } + } + + /* + * Check for valid key name. + * If it is invalid then pretend it doesn't exist. + */ + if (!valid_key(fname)) { + plog(XLOG_WARNING, "Key \"%s\" contains a disallowed character", fname); + ereturn(ENOENT); + } + + /* + * Expand key name. + * fname is now a private copy. + */ + fname = expand_key(fname); + + for (ap_hung = 0, ap = mp->am_child; ap; ap = ap->am_osib) { + /* + * Otherwise search children of this node + */ + if (FSTREQ(ap->am_name, fname)) { + mf = ap->am_mnt; + if (ap->am_error) { + error = ap->am_error; + continue; + } + /* + * If the error code is undefined then it must be + * in progress. + */ + if (mf->mf_error < 0) + goto in_progrss; + + /* + * Check for a hung node + */ + if (FSRV_ISDOWN(mf->mf_server)) { +#ifdef DEBUG + dlog("server hung"); +#endif /* DEBUG */ + error = ap->am_error; + ap_hung = ap; + continue; + } + /* + * If there was a previous error with this node + * then return that error code. + */ + if (mf->mf_flags & MFF_ERROR) { + error = mf->mf_error; + continue; + } + if (!(mf->mf_flags & MFF_MOUNTED) || (mf->mf_flags & MFF_UNMOUNTING)) { + in_progrss: + /* + * If the fs is not mounted or it is unmounting then there + * is a background (un)mount in progress. In this case + * we just drop the RPC request (return nil) and + * wait for a retry, by which time the (un)mount may + * have completed. + */ +#ifdef DEBUG + dlog("ignoring mount of %s in %s -- flags (%x) in progress", + fname, mf->mf_mount, mf->mf_flags); +#endif /* DEBUG */ + in_progress++; + continue; + } + + /* + * Otherwise we have a hit: return the current mount point. + */ +#ifdef DEBUG + dlog("matched %s in %s", fname, ap->am_path); +#endif /* DEBUG */ + XFREE(fname); + return ap; + } + } + + if (in_progress) { +#ifdef DEBUG + dlog("Waiting while %d mount(s) in progress", in_progress); +#endif /* DEBUG */ + XFREE(fname); + ereturn(-1); + } + + /* + * If an error occurred then return it. + */ + if (error) { +#ifdef DEBUG + errno = error; /* XXX */ + dlog("Returning error: %m", error); +#endif /* DEBUG */ + XFREE(fname); + ereturn(error); + } + + /* + * If doing a delete then don't create again! + */ + switch (op) { + case VLOOK_DELETE: + ereturn(ENOENT); + + case VLOOK_CREATE: + break; + + default: + plog(XLOG_FATAL, "Unknown op to autofs_lookuppn: 0x%x", op); + ereturn(EINVAL); + } + + /* + * If the server is going down then just return, + * don't try to mount any more file systems + */ + if ((int) amd_state >= (int) Finishing) { +#ifdef DEBUG + dlog("not found - server going down anyway"); +#endif /* DEBUG */ + XFREE(fname); + ereturn(ENOENT); + } + + /* + * If we get there then this is a reference to an, + * as yet, unknown name so we need to search the mount + * map for it. + */ + if (mp->am_pref) { + sprintf(path_name, "%s%s", mp->am_pref, fname); + pfname = path_name; + } else { + pfname = fname; + } + + mf = mp->am_mnt; + +#ifdef DEBUG + dlog("will search map info in %s to find %s", mf->mf_info, pfname); +#endif /* DEBUG */ + /* + * Consult the oracle for some mount information. + * info is malloc'ed and belongs to this routine. + * It ends up being free'd in free_continuation(). + * + * Note that this may return -1 indicating that information + * is not yet available. + */ + error = mapc_search((mnt_map *) mf->mf_private, pfname, &info); + if (error) { + if (error > 0) + plog(XLOG_MAP, "No map entry for %s", pfname); + else + plog(XLOG_MAP, "Waiting on map entry for %s", pfname); + XFREE(fname); + ereturn(error); + } +#ifdef DEBUG + dlog("mount info is %s", info); +#endif /* DEBUG */ + + /* + * Split info into an argument vector. + * The vector is malloc'ed and belongs to + * this routine. It is free'd in free_continuation() + */ + xivec = ivec = strsplit(info, ' ', '\"'); + + /* + * Default error code... + */ + if (ap_hung) + error = EWOULDBLOCK; + else + error = ENOENT; + + /* + * Allocate a new map + */ + new_mp = exported_ap_alloc(); + if (new_mp == 0) { + XFREE(xivec); + XFREE(info); + XFREE(fname); + ereturn(ENOSPC); + } + if (mf->mf_auto) + auto_opts = mf->mf_auto; + else + auto_opts = ""; + + auto_opts = strdup(auto_opts); + +#ifdef DEBUG + dlog("searching for /defaults entry"); +#endif /* DEBUG */ + if (mapc_search((mnt_map *) mf->mf_private, "/defaults", &dflts) == 0) { + char *dfl; + char **rvec; +#ifdef DEBUG + dlog("/defaults gave %s", dflts); +#endif /* DEBUG */ + if (*dflts == '-') + dfl = dflts + 1; + else + dfl = dflts; + + /* + * Chop the defaults up + */ + rvec = strsplit(dfl, ' ', '\"'); + + if (gopt.flags & CFM_ENABLE_DEFAULT_SELECTORS) { + /* + * Pick whichever first entry matched the list of selectors. + * Strip the selectors from the string, and assign to dfl the + * rest of the string. + */ + if (rvec) { + am_opts ap; + am_ops *pt; + char **sp = rvec; + while (*sp) { /* loop until you find something, if any */ + memset((char *) &ap, 0, sizeof(am_opts)); + pt = ops_match(&ap, *sp, "", mp->am_path, "/defaults", + mp->am_parent->am_mnt->mf_info); + free_opts(&ap); /* don't leak */ + if (pt == &amfs_error_ops) { + plog(XLOG_MAP, "failed to match defaults for \"%s\"", *sp); + } else { + dfl = strip_selectors(*sp, "/defaults"); + plog(XLOG_MAP, "matched default selectors \"%s\"", dfl); + break; + } + ++sp; + } + } + } else { /* not enable_default_selectors */ + /* + * Extract first value + */ + dfl = rvec[0]; + } + + /* + * If there were any values at all... + */ + if (dfl) { + /* + * Log error if there were other values + */ + if (!(gopt.flags & CFM_ENABLE_DEFAULT_SELECTORS) && rvec[1]) { +# ifdef DEBUG + dlog("/defaults chopped into %s", dfl); +# endif /* DEBUG */ + plog(XLOG_USER, "More than a single value for /defaults in %s", mf->mf_info); + } + + /* + * Prepend to existing defaults if they exist, + * otherwise just use these defaults. + */ + if (*auto_opts && *dfl) { + char *nopts = (char *) xmalloc(strlen(auto_opts) + strlen(dfl) + 2); + sprintf(nopts, "%s;%s", dfl, auto_opts); + XFREE(auto_opts); + auto_opts = nopts; + } else if (*dfl) { + auto_opts = strealloc(auto_opts, dfl); + } + } + XFREE(dflts); + /* + * Don't need info vector any more + */ + XFREE(rvec); + } + + /* + * Fill it in + */ + init_map(new_mp, fname); + + /* + * Turn on autofs flag if needed. + */ + if (mp->am_flags & AMF_AUTOFS) { + new_mp->am_flags |= AMF_AUTOFS; + } + + /* + * Put it in the table + */ + insert_am(new_mp, mp); + + /* + * Fill in some other fields, + * path and mount point. + * + * bugfix: do not prepend old am_path if direct map + * William Sebok + */ + + strcpy(apath, fname); + strcat(apath, " "); + new_mp->am_path = str3cat(new_mp->am_path, + mf->mf_ops == &amfs_direct_ops ? "" : mp->am_path, + *fname == '/' ? "" : "/", + apath); + +#ifdef DEBUG + dlog("setting path to \"%s\"", new_mp->am_path); +#endif /* DEBUG */ + + /* + * Take private copy of pfname + */ + pfname = strdup(pfname); + + /* + * Construct a continuation + */ + cp = ALLOC(struct continuation); + cp->callout = 0; + cp->mp = new_mp; + cp->xivec = xivec; + cp->ivec = ivec; + cp->info = info; + cp->key = pfname; + cp->auto_opts = auto_opts; + cp->retry = FALSE; + cp->tried = FALSE; + cp->start = clocktime(); + cp->def_opts = strdup(auto_opts); + memset((voidp) &cp->fs_opts, 0, sizeof(cp->fs_opts)); + + /* + * Try and mount the file system. If this succeeds immediately (possible + * for a ufs file system) then return the attributes, otherwise just + * return an error. + */ + error = autofs_bgmount(cp, error); + reschedule_timeout_mp(); + if (!error) { + XFREE(fname); + return new_mp; + } + + /* + * Code for quick reply. If nfs_program_2_transp is set, then + * its the transp that's been passed down from nfs_program_2(). + * If new_mp->am_transp is not already set, set it by copying in + * nfs_program_2_transp. Once am_transp is set, quick_reply() can + * use it to send a reply to the client that requested this mount. + */ + if (nfs_program_2_transp && !new_mp->am_transp) { + new_mp->am_transp = (SVCXPRT *) xmalloc(sizeof(SVCXPRT)); + *(new_mp->am_transp) = *nfs_program_2_transp; + } + if (error && (new_mp->am_mnt->mf_ops == &amfs_error_ops)) + new_mp->am_error = error; + + assign_error_mntfs(new_mp); + + XFREE(fname); + + ereturn(error); +} +#endif /* HAVE_FS_AUTOFS */ diff --git a/amd/ops_cachefs.c b/amd/ops_cachefs.c new file mode 100644 index 0000000..858513c --- /dev/null +++ b/amd/ops_cachefs.c @@ -0,0 +1,247 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_cachefs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Caching filesystem (Solaris 2.x) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static char *cachefs_match(am_opts *fo); +static int cachefs_init(mntfs *mf); +static int cachefs_fmount(mntfs *mf); +static int cachefs_fumount(mntfs *mf); + + +/* + * Ops structure + */ +am_ops cachefs_ops = +{ + "cachefs", + cachefs_match, + cachefs_init, + amfs_auto_fmount, + cachefs_fmount, + amfs_auto_fumount, + cachefs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* cachefs_readlink */ + 0, /* post-mount actions */ + 0, /* post-umount actions */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_UBACKGROUND | FS_AMQINFO +}; + + +/* + * Check that f/s has all needed fields. + * Returns: matched string if found, NULL otherwise. + */ +static char * +cachefs_match(am_opts *fo) +{ + /* sanity check */ + if (!fo->opt_rfs || !fo->opt_fs || !fo->opt_cachedir) { + plog(XLOG_USER, "cachefs: must specify cachedir, rfs, and fs"); + return NULL; + } + +#ifdef DEBUG + dlog("CACHEFS: using cache directory \"%s\"", fo->opt_cachedir); +#endif /* DEBUG */ + + /* determine magic cookie to put in mtab */ + return strdup(fo->opt_cachedir); +} + + +/* + * Initialize. + * Returns: 0 if OK, non-zero (errno) if failed. + */ +static int +cachefs_init(mntfs *mf) +{ + /* + * Save cache directory name + */ + if (mf->mf_refc == 1) { + mf->mf_private = (voidp) strdup(mf->mf_fo->opt_cachedir); + mf->mf_prfree = (void (*)(voidp)) free; + } + + return 0; +} + + +/* + * mntpt is the mount point ($fs) [XXX: was 'dir'] + * backdir is the mounted pathname ($rfs) [XXX: was 'fs_name'] + * cachedir is the cache directory ($cachedir) + */ +static int +mount_cachefs(char *mntpt, char *backdir, char *cachedir, char *opts) +{ + cachefs_args_t ca; + mntent_t mnt; + int flags; + char *cp; + MTYPE_TYPE type = MOUNT_TYPE_CACHEFS; /* F/S mount type */ + + memset((voidp) &ca, 0, sizeof(ca)); /* Paranoid */ + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = mntpt; + mnt.mnt_fsname = backdir; + mnt.mnt_type = MNTTAB_TYPE_CACHEFS; + mnt.mnt_opts = opts; + + flags = compute_mount_flags(&mnt); + + /* Fill in cachefs mount arguments */ + + /* + * XXX: Caveats + * (1) cache directory is NOT checked for sanity beforehand, nor is it + * purged. Maybe it should be purged first? + * (2) cache directory is NOT locked. Should we? + */ + + /* mount flags */ + ca.cfs_options.opt_flags = CFS_WRITE_AROUND | CFS_ACCESS_BACKFS; + /* cache population size */ + ca.cfs_options.opt_popsize = DEF_POP_SIZE; /* default: 64K */ + /* filegrp size */ + ca.cfs_options.opt_fgsize = DEF_FILEGRP_SIZE; /* default: 256 */ + + /* CFS ID for file system (must be unique) */ + ca.cfs_fsid = cachedir; + + /* CFS fscdir name */ + memset(ca.cfs_cacheid, 0, sizeof(ca.cfs_cacheid)); + /* append cacheid and mountpoint */ + sprintf(ca.cfs_cacheid, "%s:%s", ca.cfs_fsid, mntpt); + /* convert '/' to '_' (Solaris does that...) */ + cp = ca.cfs_cacheid; + while ((cp = strpbrk(cp, "/")) != NULL) + *cp = '_'; + + /* path for this cache dir */ + ca.cfs_cachedir = cachedir; + + /* back filesystem dir */ + ca.cfs_backfs = backdir; + + /* same as nfs values (XXX: need to handle these options) */ + ca.cfs_acregmin = 0; + ca.cfs_acregmax = 0; + ca.cfs_acdirmin = 0; + ca.cfs_acdirmax = 0; + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, flags, (caddr_t) &ca, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +cachefs_fmount(mntfs *mf) +{ + int error; + + error = mount_cachefs(mf->mf_mount, + mf->mf_fo->opt_rfs, + mf->mf_fo->opt_cachedir, + mf->mf_mopts); + if (error) { + errno = error; + /* according to Solaris, if errno==ESRCH, "options to not match" */ + if (error == ESRCH) + plog(XLOG_ERROR, "mount_cachefs: options to no match: %m"); + else + plog(XLOG_ERROR, "mount_cachefs: %m"); + return error; + } + + return 0; +} + + +static int +cachefs_fumount(mntfs *mf) +{ + int error; + + error = UMOUNT_FS(mf->mf_mount, mnttab_file_name); + + /* + * In the case of cachefs, we must fsck the cache directory. Otherwise, + * it will remain inconsistent, and the next cachefs mount will fail + * with the error "no space left on device" (ENOSPC). + * + * XXX: this is hacky! use fork/exec/wait instead... + */ + if (!error) { + char *cachedir = NULL; + char cmd[128]; + + cachedir = (char *) mf->mf_private; + plog(XLOG_INFO, "running fsck on cache directory \"%s\"", cachedir); + sprintf(cmd, "fsck -F cachefs %s", cachedir); + system(cmd); + } + + return error; +} diff --git a/amd/ops_cdfs.c b/amd/ops_cdfs.c new file mode 100644 index 0000000..5685ec8 --- /dev/null +++ b/amd/ops_cdfs.c @@ -0,0 +1,206 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_cdfs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * High Sierra (CD-ROM) file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static char *cdfs_match(am_opts *fo); +static int cdfs_fmount(mntfs *mf); +static int cdfs_fumount(mntfs *mf); + +/* + * Ops structure + */ +am_ops cdfs_ops = +{ + "cdfs", + cdfs_match, + 0, /* cdfs_init */ + amfs_auto_fmount, + cdfs_fmount, + amfs_auto_fumount, + cdfs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* cdfs_readlink */ + 0, /* cdfs_mounted */ + 0, /* cdfs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_UBACKGROUND | FS_AMQINFO +}; + + +/* + * CDFS needs remote filesystem. + */ +static char * +cdfs_match(am_opts *fo) +{ + if (!fo->opt_dev) { + plog(XLOG_USER, "cdfs: no source device specified"); + return 0; + } +#ifdef DEBUG + dlog("CDFS: mounting device \"%s\" on \"%s\"", + fo->opt_dev, fo->opt_fs); +#endif /* DEBUG */ + + /* + * Determine magic cookie to put in mtab + */ + return strdup(fo->opt_dev); +} + + +static int +mount_cdfs(char *dir, char *fs_name, char *opts) +{ + cdfs_args_t cdfs_args; + mntent_t mnt; + int genflags, cdfs_flags; + + /* + * Figure out the name of the file system type. + */ + MTYPE_TYPE type = MOUNT_TYPE_CDFS; + + memset((voidp) &cdfs_args, 0, sizeof(cdfs_args)); /* Paranoid */ + cdfs_flags = 0; + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_type = MNTTAB_TYPE_CDFS; + mnt.mnt_opts = opts; + +#if defined(MNT2_CDFS_OPT_DEFPERM) && defined(MNTTAB_OPT_DEFPERM) + if (hasmntopt(&mnt, MNTTAB_OPT_DEFPERM)) +# ifdef MNT2_CDFS_OPT_DEFPERM + cdfs_flags |= MNT2_CDFS_OPT_DEFPERM; +# else /* not MNT2_CDFS_OPT_DEFPERM */ + cdfs_flags &= ~MNT2_CDFS_OPT_NODEFPERM; +# endif /* not MNT2_CDFS_OPT_DEFPERM */ +#endif /* defined(MNT2_CDFS_OPT_DEFPERM) && defined(MNTTAB_OPT_DEFPERM) */ + +#if defined(MNT2_CDFS_OPT_NODEFPERM) && defined(MNTTAB_OPT_NODEFPERM) + if (hasmntopt(&mnt, MNTTAB_OPT_NODEFPERM)) + cdfs_flags |= MNT2_CDFS_OPT_NODEFPERM; +#endif /* MNTTAB_OPT_NODEFPERM */ + +#if defined(MNT2_CDFS_OPT_NOVERSION) && defined(MNTTAB_OPT_NOVERSION) + if (hasmntopt(&mnt, MNTTAB_OPT_NOVERSION)) + cdfs_flags |= MNT2_CDFS_OPT_NOVERSION; +#endif /* defined(MNT2_CDFS_OPT_NOVERSION) && defined(MNTTAB_OPT_NOVERSION) */ + +#if defined(MNT2_CDFS_OPT_RRIP) && defined(MNTTAB_OPT_RRIP) + if (hasmntopt(&mnt, MNTTAB_OPT_RRIP)) + cdfs_flags |= MNT2_CDFS_OPT_RRIP; +#endif /* defined(MNT2_CDFS_OPT_RRIP) && defined(MNTTAB_OPT_RRIP) */ + + genflags = compute_mount_flags(&mnt); + +#ifdef HAVE_FIELD_CDFS_ARGS_T_FLAGS + cdfs_args.flags = cdfs_flags; +#endif /* HAVE_FIELD_CDFS_ARGS_T_FLAGS */ + +#ifdef HAVE_FIELD_CDFS_ARGS_T_ISO_FLAGS + cdfs_args.iso_flags = genflags | cdfs_flags; +#endif /* HAVE_FIELD_CDFS_ARGS_T_ISO_FLAGS */ + +#ifdef HAVE_FIELD_CDFS_ARGS_T_ISO_PGTHRESH + cdfs_args.iso_pgthresh = hasmntval(&mnt, MNTTAB_OPT_PGTHRESH); +#endif /* HAVE_FIELD_CDFS_ARGS_T_ISO_PGTHRESH */ + +#ifdef HAVE_FIELD_CDFS_ARGS_T_FSPEC + cdfs_args.fspec = fs_name; +#endif /* HAVE_FIELD_CDFS_ARGS_T_FSPEC */ + +#ifdef HAVE_FIELD_CDFS_ARGS_T_NORRIP + /* XXX: need to provide norrip mount opt */ + cdfs_args.norrip = 0; /* use Rock-Ridge Protocol extensions */ +#endif /* HAVE_FIELD_CDFS_ARGS_T_NORRIP */ + +#ifdef HAVE_FIELD_CDFS_ARGS_T_SSECTOR + /* XXX: need to provide ssector mount option */ + cdfs_args.ssector = 0; /* use 1st session on disk */ +#endif /* HAVE_FIELD_CDFS_ARGS_T_SSECTOR */ + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, genflags, (caddr_t) &cdfs_args, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +cdfs_fmount(mntfs *mf) +{ + int error; + + error = mount_cdfs(mf->mf_mount, mf->mf_info, mf->mf_mopts); + if (error) { + errno = error; + plog(XLOG_ERROR, "mount_cdfs: %m"); + return error; + } + return 0; +} + + +static int +cdfs_fumount(mntfs *mf) +{ + return UMOUNT_FS(mf->mf_mount, mnttab_file_name); +} diff --git a/amd/ops_efs.c b/amd/ops_efs.c new file mode 100644 index 0000000..17a0638 --- /dev/null +++ b/amd/ops_efs.c @@ -0,0 +1,164 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_efs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Irix UN*X file system: EFS (Extent File System) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static char *efs_match(am_opts *fo); +static int efs_fmount(mntfs *mf); +static int efs_fumount(mntfs *mf); + +/* + * Ops structure + */ +am_ops efs_ops = +{ + "efs", + efs_match, + 0, /* efs_init */ + amfs_auto_fmount, + efs_fmount, + amfs_auto_fumount, + efs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* efs_readlink */ + 0, /* efs_mounted */ + 0, /* efs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_UBACKGROUND | FS_AMQINFO +}; + + +/* + * EFS needs local filesystem and device. + */ +static char * +efs_match(am_opts *fo) +{ + + if (!fo->opt_dev) { + plog(XLOG_USER, "efs: no device specified"); + return 0; + } + +#ifdef DEBUG + dlog("EFS: mounting device \"%s\" on \"%s\"", fo->opt_dev, fo->opt_fs); +#endif /* DEBUG */ + + /* + * Determine magic cookie to put in mtab + */ + return strdup(fo->opt_dev); +} + + +static int +mount_efs(char *dir, char *fs_name, char *opts) +{ + efs_args_t efs_args; + mntent_t mnt; + int flags; + + /* + * Figure out the name of the file system type. + */ + MTYPE_TYPE type = MOUNT_TYPE_EFS; + + memset((voidp) &efs_args, 0, sizeof(efs_args)); /* Paranoid */ + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_type = MNTTAB_TYPE_EFS; + mnt.mnt_opts = opts; + + flags = compute_mount_flags(&mnt); + +#ifdef HAVE_FIELD_EFS_ARGS_T_FLAGS + efs_args.flags = 0; /* XXX: fix this to correct flags */ +#endif /* HAVE_FIELD_EFS_ARGS_T_FLAGS */ +#ifdef HAVE_FIELD_EFS_ARGS_T_FSPEC + efs_args.fspec = fs_name; +#endif /* HAVE_FIELD_EFS_ARGS_T_FSPEC */ + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, flags, (caddr_t) &efs_args, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +efs_fmount(mntfs *mf) +{ + int error; + + error = mount_efs(mf->mf_mount, mf->mf_info, mf->mf_mopts); + if (error) { + errno = error; + plog(XLOG_ERROR, "mount_efs: %m"); + return error; + } + + return 0; +} + + +static int +efs_fumount(mntfs *mf) +{ + return UMOUNT_FS(mf->mf_mount, mnttab_file_name); +} diff --git a/amd/ops_lofs.c b/amd/ops_lofs.c new file mode 100644 index 0000000..477113c --- /dev/null +++ b/amd/ops_lofs.c @@ -0,0 +1,154 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_lofs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Loopback file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward definitions */ +static char * lofs_match(am_opts *fo); +static int lofs_fmount(mntfs *mf); +static int lofs_fumount(mntfs *mf); +static int mount_lofs(char *dir, char *fs_name, char *opts); + + +/* + * Ops structure + */ +am_ops lofs_ops = +{ + "lofs", + lofs_match, + 0, /* lofs_init */ + amfs_auto_fmount, + lofs_fmount, + amfs_auto_fumount, + lofs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* lofs_readlink */ + 0, /* lofs_mounted */ + 0, /* lofs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_UBACKGROUND | FS_AMQINFO +}; + + +/* + * LOFS needs remote filesystem. + */ +static char * +lofs_match(am_opts *fo) +{ + if (!fo->opt_rfs) { + plog(XLOG_USER, "lofs: no source filesystem specified"); + return 0; + } +#ifdef DEBUG + dlog("LOFS: mounting fs \"%s\" on \"%s\"", + fo->opt_rfs, fo->opt_fs); +#endif /* DEBUG */ + + /* + * Determine magic cookie to put in mtab + */ + return strdup(fo->opt_rfs); +} + + +static int +mount_lofs(char *dir, char *fs_name, char *opts) +{ + mntent_t mnt; + int flags; + + /* + * Figure out the name of the file system type. + */ + MTYPE_TYPE type = MOUNT_TYPE_LOFS; + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_type = MNTTAB_TYPE_LOFS; + mnt.mnt_opts = opts; + + flags = compute_mount_flags(&mnt); + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, flags, NULL, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +lofs_fmount(mntfs *mf) +{ + int error; + + error = mount_lofs(mf->mf_mount, mf->mf_info, mf->mf_mopts); + if (error) { + errno = error; + plog(XLOG_ERROR, "mount_lofs: %m"); + return error; + } + return 0; +} + + +static int +lofs_fumount(mntfs *mf) +{ + return UMOUNT_FS(mf->mf_mount, mnttab_file_name); +} diff --git a/amd/ops_mfs.c b/amd/ops_mfs.c new file mode 100644 index 0000000..d41f6dc --- /dev/null +++ b/amd/ops_mfs.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_mfs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Memory file system (RAM filesystem) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_nfs.c b/amd/ops_nfs.c new file mode 100644 index 0000000..fbee827 --- /dev/null +++ b/amd/ops_nfs.c @@ -0,0 +1,799 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_nfs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Network file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Convert from nfsstat to UN*X error code + */ +#define unx_error(e) ((int)(e)) + +/* + * FH_TTL is the time a file handle will remain in the cache since + * last being used. If the file handle becomes invalid, then it + * will be flushed anyway. + */ +#define FH_TTL (5 * 60) /* five minutes */ +#define FH_TTL_ERROR (30) /* 30 seconds */ +#define FHID_ALLOC(struct) (++fh_id) + +/* + * The NFS layer maintains a cache of file handles. + * This is *fundamental* to the implementation and + * also allows quick remounting when a filesystem + * is accessed soon after timing out. + * + * The NFS server layer knows to flush this cache + * when a server goes down so avoiding stale handles. + * + * Each cache entry keeps a hard reference to + * the corresponding server. This ensures that + * the server keepalive information is maintained. + * + * The copy of the sockaddr_in here is taken so + * that the port can be twiddled to talk to mountd + * instead of portmap or the NFS server as used + * elsewhere. + * The port# is flushed if a server goes down. + * The IP address is never flushed - we assume + * that the address of a mounted machine never + * changes. If it does, then you have other + * problems... + */ +typedef struct fh_cache fh_cache; +struct fh_cache { + qelem fh_q; /* List header */ + voidp fh_wchan; /* Wait channel */ + int fh_error; /* Valid data? */ + int fh_id; /* Unique id */ + int fh_cid; /* Callout id */ + u_long fh_nfs_version; /* highest NFS version on host */ + am_nfs_handle_t fh_nfs_handle; /* Handle on filesystem */ + struct sockaddr_in fh_sin; /* Address of mountd */ + fserver *fh_fs; /* Server holding filesystem */ + char *fh_path; /* Filesystem on host */ +}; + +/* forward definitions */ +static int call_mountd(fh_cache *fp, u_long proc, fwd_fun f, voidp wchan); +static int fh_id = 0; + +/* globals */ +AUTH *nfs_auth; +qelem fh_head = {&fh_head, &fh_head}; + +/* + * Network file system operations + */ +am_ops nfs_ops = +{ + "nfs", + nfs_match, + nfs_init, + amfs_auto_fmount, + nfs_fmount, + amfs_auto_fumount, + nfs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* nfs_readlink */ + 0, /* nfs_mounted */ + nfs_umounted, + find_nfs_srvr, + FS_MKMNT | FS_BACKGROUND | FS_AMQINFO +}; + + +static fh_cache * +find_nfs_fhandle_cache(voidp idv, int done) +{ + fh_cache *fp, *fp2 = 0; + int id = (long) idv; /* for 64-bit archs */ + + ITER(fp, fh_cache, &fh_head) { + if (fp->fh_id == id) { + fp2 = fp; + break; + } + } + +#ifdef DEBUG + if (fp2) { + dlog("fh cache gives fp %#x, fs %s", fp2, fp2->fh_path); + } else { + dlog("fh cache search failed"); + } +#endif /* DEBUG */ + + if (fp2 && !done) { + fp2->fh_error = ETIMEDOUT; + return 0; + } + + return fp2; +} + + +/* + * Called when a filehandle appears + */ +static void +got_nfs_fh(voidp pkt, int len, struct sockaddr_in * sa, struct sockaddr_in * ia, voidp idv, int done) +{ + fh_cache *fp; + + fp = find_nfs_fhandle_cache(idv, done); + if (!fp) + return; + + /* + * retrieve the correct RPC reply for the file handle, based on the + * NFS protocol version. + */ +#ifdef HAVE_FS_NFS3 + if (fp->fh_nfs_version == NFS_VERSION3) + fp->fh_error = pickup_rpc_reply(pkt, len, (voidp) &fp->fh_nfs_handle.v3, + (XDRPROC_T_TYPE) xdr_mountres3); + else +#endif /* HAVE_FS_NFS3 */ + fp->fh_error = pickup_rpc_reply(pkt, len, (voidp) &fp->fh_nfs_handle.v2, + (XDRPROC_T_TYPE) xdr_fhstatus); + + if (!fp->fh_error) { +#ifdef DEBUG + dlog("got filehandle for %s:%s", fp->fh_fs->fs_host, fp->fh_path); +#endif /* DEBUG */ + + /* + * Wakeup anything sleeping on this filehandle + */ + if (fp->fh_wchan) { +#ifdef DEBUG + dlog("Calling wakeup on %#x", fp->fh_wchan); +#endif /* DEBUG */ + wakeup(fp->fh_wchan); + } + } +} + + +void +flush_nfs_fhandle_cache(fserver *fs) +{ + fh_cache *fp; + + ITER(fp, fh_cache, &fh_head) { + if (fp->fh_fs == fs || fs == 0) { + fp->fh_sin.sin_port = (u_short) 0; + fp->fh_error = -1; + } + } +} + + +static void +discard_fh(voidp v) +{ + fh_cache *fp = v; + + rem_que(&fp->fh_q); + if (fp->fh_fs) { +#ifdef DEBUG + dlog("Discarding filehandle for %s:%s", fp->fh_fs->fs_host, fp->fh_path); +#endif /* DEBUG */ + free_srvr(fp->fh_fs); + } + if (fp->fh_path) + XFREE(fp->fh_path); + XFREE(fp); +} + + +/* + * Determine the file handle for a node + */ +static int +prime_nfs_fhandle_cache(char *path, fserver *fs, am_nfs_handle_t *fhbuf, voidp wchan) +{ + fh_cache *fp, *fp_save = 0; + int error; + int reuse_id = FALSE; + +#ifdef DEBUG + dlog("Searching cache for %s:%s", fs->fs_host, path); +#endif /* DEBUG */ + + /* + * First search the cache + */ + ITER(fp, fh_cache, &fh_head) { + if (fs == fp->fh_fs && STREQ(path, fp->fh_path)) { + switch (fp->fh_error) { + case 0: + plog(XLOG_INFO, "prime_nfs_fhandle_cache: NFS version %d", fp->fh_nfs_version); +#ifdef HAVE_FS_NFS3 + if (fp->fh_nfs_version == NFS_VERSION3) + error = fp->fh_error = unx_error(fp->fh_nfs_handle.v3.fhs_status); + else +#endif /* HAVE_FS_NFS3 */ + error = fp->fh_error = unx_error(fp->fh_nfs_handle.v2.fhs_status); + if (error == 0) { + if (fhbuf) { +#ifdef HAVE_FS_NFS3 + if (fp->fh_nfs_version == NFS_VERSION3) + memmove((voidp) &(fhbuf->v3), (voidp) &(fp->fh_nfs_handle.v3), + sizeof(fp->fh_nfs_handle.v3)); + else +#endif /* HAVE_FS_NFS3 */ + memmove((voidp) &(fhbuf->v2), (voidp) &(fp->fh_nfs_handle.v2), + sizeof(fp->fh_nfs_handle.v2)); + } + if (fp->fh_cid) + untimeout(fp->fh_cid); + fp->fh_cid = timeout(FH_TTL, discard_fh, (voidp) fp); + } else if (error == EACCES) { + /* + * Now decode the file handle return code. + */ + plog(XLOG_INFO, "Filehandle denied for \"%s:%s\"", + fs->fs_host, path); + } else { + errno = error; /* XXX */ + plog(XLOG_INFO, "Filehandle error for \"%s:%s\": %m", + fs->fs_host, path); + } + + /* + * The error was returned from the remote mount daemon. + * Policy: this error will be cached for now... + */ + return error; + + case -1: + /* + * Still thinking about it, but we can re-use. + */ + fp_save = fp; + reuse_id = TRUE; + break; + + default: + /* + * Return the error. + * Policy: make sure we recompute if required again + * in case this was caused by a network failure. + * This can thrash mountd's though... If you find + * your mountd going slowly then: + * 1. Add a fork() loop to main. + * 2. Remove the call to innetgr() and don't use + * netgroups, especially if you don't use YP. + */ + error = fp->fh_error; + fp->fh_error = -1; + return error; + } + break; + } + } + + /* + * Not in cache + */ + if (fp_save) { + fp = fp_save; + /* + * Re-use existing slot + */ + untimeout(fp->fh_cid); + free_srvr(fp->fh_fs); + XFREE(fp->fh_path); + } else { + fp = ALLOC(struct fh_cache); + memset((voidp) fp, 0, sizeof(struct fh_cache)); + ins_que(&fp->fh_q, &fh_head); + } + if (!reuse_id) + fp->fh_id = FHID_ALLOC(struct ); + fp->fh_wchan = wchan; + fp->fh_error = -1; + fp->fh_cid = timeout(FH_TTL, discard_fh, (voidp) fp); + + /* + * if fs->fs_ip is null, remote server is probably down. + */ + if (!fs->fs_ip) { + /* Mark the fileserver down and invalid again */ + fs->fs_flags &= ~FSF_VALID; + fs->fs_flags |= FSF_DOWN; + error = AM_ERRNO_HOST_DOWN; + return error; + } + + /* + * If the address has changed then don't try to re-use the + * port information + */ + if (fp->fh_sin.sin_addr.s_addr != fs->fs_ip->sin_addr.s_addr) { + fp->fh_sin = *fs->fs_ip; + fp->fh_sin.sin_port = 0; + fp->fh_nfs_version = fs->fs_version; + } + fp->fh_fs = dup_srvr(fs); + fp->fh_path = strdup(path); + + error = call_mountd(fp, MOUNTPROC_MNT, got_nfs_fh, wchan); + if (error) { + /* + * Local error - cache for a short period + * just to prevent thrashing. + */ + untimeout(fp->fh_cid); + fp->fh_cid = timeout(error < 0 ? 2 * ALLOWED_MOUNT_TIME : FH_TTL_ERROR, + discard_fh, (voidp) fp); + fp->fh_error = error; + } else { + error = fp->fh_error; + } + + return error; +} + + +int +make_nfs_auth(void) +{ + AUTH_CREATE_GIDLIST_TYPE group_wheel = 0; + + /* Some NFS mounts (particularly cross-domain) require FQDNs to succeed */ + +#ifdef HAVE_TRANSPORT_TYPE_TLI + if (gopt.flags & CFM_FULLY_QUALIFIED_HOSTS) { + plog(XLOG_INFO, "Using NFS auth for fqhn \"%s\"", hostd); + nfs_auth = authsys_create(hostd, 0, 0, 1, &group_wheel); + } else { + nfs_auth = authsys_create_default(); + } +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + if (gopt.flags & CFM_FULLY_QUALIFIED_HOSTS) { + plog(XLOG_INFO, "Using NFS auth for fqhn \"%s\"", hostd); + nfs_auth = authunix_create(hostd, 0, 0, 1, &group_wheel); + } else { + nfs_auth = authunix_create_default(); + } +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + if (!nfs_auth) + return ENOBUFS; + + return 0; +} + + +static int +call_mountd(fh_cache *fp, u_long proc, fwd_fun f, voidp wchan) +{ + struct rpc_msg mnt_msg; + int len; + char iobuf[8192]; + int error; + u_long mnt_version; + + if (!nfs_auth) { + error = make_nfs_auth(); + if (error) + return error; + } + + if (fp->fh_sin.sin_port == 0) { + u_short port; + error = nfs_srvr_port(fp->fh_fs, &port, wchan); + if (error) + return error; + fp->fh_sin.sin_port = port; + } + + /* find the right version of the mount protocol */ +#ifdef HAVE_FS_NFS3 + if (fp->fh_nfs_version == NFS_VERSION3) + mnt_version = MOUNTVERS3; + else +#endif /* HAVE_FS_NFS3 */ + mnt_version = MOUNTVERS; + plog(XLOG_INFO, "call_mountd: NFS version %d, mount version %d", + fp->fh_nfs_version, mnt_version); + + rpc_msg_init(&mnt_msg, MOUNTPROG, mnt_version, MOUNTPROC_NULL); + len = make_rpc_packet(iobuf, + sizeof(iobuf), + proc, + &mnt_msg, + (voidp) &fp->fh_path, + (XDRPROC_T_TYPE) xdr_nfspath, + nfs_auth); + + if (len > 0) { + error = fwd_packet(MK_RPC_XID(RPC_XID_MOUNTD, fp->fh_id), + (voidp) iobuf, + len, + &fp->fh_sin, + &fp->fh_sin, + (voidp) ((long) fp->fh_id), /* for 64-bit archs */ + f); + } else { + error = -len; + } + +/* + * It may be the case that we're sending to the wrong MOUNTD port. This + * occurs if mountd is restarted on the server after the port has been + * looked up and stored in the filehandle cache somewhere. The correct + * solution, if we're going to cache port numbers is to catch the ICMP + * port unreachable reply from the server and cause the portmap request + * to be redone. The quick solution here is to invalidate the MOUNTD + * port. + */ + fp->fh_sin.sin_port = 0; + + return error; +} + + +/* + * NFS needs the local filesystem, remote filesystem + * remote hostname. + * Local filesystem defaults to remote and vice-versa. + */ +char * +nfs_match(am_opts *fo) +{ + char *xmtab; + + if (fo->opt_fs && !fo->opt_rfs) + fo->opt_rfs = fo->opt_fs; + if (!fo->opt_rfs) { + plog(XLOG_USER, "nfs: no remote filesystem specified"); + return NULL; + } + if (!fo->opt_rhost) { + plog(XLOG_USER, "nfs: no remote host specified"); + return NULL; + } + + /* + * Determine magic cookie to put in mtab + */ + xmtab = (char *) xmalloc(strlen(fo->opt_rhost) + strlen(fo->opt_rfs) + 2); + sprintf(xmtab, "%s:%s", fo->opt_rhost, fo->opt_rfs); +#ifdef DEBUG + dlog("NFS: mounting remote server \"%s\", remote fs \"%s\" on \"%s\"", + fo->opt_rhost, fo->opt_rfs, fo->opt_fs); +#endif /* DEBUG */ + + return xmtab; +} + + +/* + * Initialize am structure for nfs + */ +int +nfs_init(mntfs *mf) +{ + int error; + am_nfs_handle_t fhs; + char *colon; + + if (mf->mf_private) + return 0; + + colon = strchr(mf->mf_info, ':'); + if (colon == 0) + return ENOENT; + + error = prime_nfs_fhandle_cache(colon + 1, mf->mf_server, &fhs, (voidp) mf); + if (!error) { + mf->mf_private = (voidp) ALLOC(am_nfs_handle_t); + mf->mf_prfree = (void (*)(voidp)) free; + memmove(mf->mf_private, (voidp) &fhs, sizeof(fhs)); + } + return error; +} + + +int +mount_nfs_fh(am_nfs_handle_t *fhp, char *dir, char *fs_name, char *opts, mntfs *mf) +{ + MTYPE_TYPE type; + char *colon; + char *xopts; + char host[MAXHOSTNAMELEN + MAXPATHLEN + 2]; + fserver *fs = mf->mf_server; + u_long nfs_version = fs->fs_version; + char *nfs_proto = fs->fs_proto; /* "tcp" or "udp" */ + int error; + int genflags; + int retry; + mntent_t mnt; + nfs_args_t nfs_args; + + /* + * Extract HOST name to give to kernel. + * Some systems like osf1/aix3/bsd44 variants may need old code + * for NFS_ARGS_NEEDS_PATH. + */ + if (!(colon = strchr(fs_name, ':'))) + return ENOENT; +#ifdef MOUNT_TABLE_ON_FILE + *colon = '\0'; +#endif /* MOUNT_TABLE_ON_FILE */ + strncpy(host, fs_name, sizeof(host)); +#ifdef MOUNT_TABLE_ON_FILE + *colon = ':'; +#endif /* MOUNT_TABLE_ON_FILE */ +#ifdef MAXHOSTNAMELEN + /* most kernels have a name length restriction */ + if (strlen(host) >= MAXHOSTNAMELEN) + strcpy(host + MAXHOSTNAMELEN - 3, ".."); +#endif /* MAXHOSTNAMELEN */ + + if (mf->mf_remopts && *mf->mf_remopts && !islocalnet(fs->fs_ip->sin_addr.s_addr)) + xopts = strdup(mf->mf_remopts); + else + xopts = strdup(opts); + + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_opts = xopts; + + /* + * Set mount types accordingly + */ +#ifndef HAVE_FS_NFS3 + type = MOUNT_TYPE_NFS; + mnt.mnt_type = MNTTAB_TYPE_NFS; +#else /* HAVE_FS_NFS3 */ + if (nfs_version == NFS_VERSION3) { + type = MOUNT_TYPE_NFS3; + /* + * Systems that include the mount table "vers" option generally do not + * set the mnttab entry to "nfs3", but to "nfs" and then they set + * "vers=3". Setting it to "nfs3" works, but it may break some things + * like "df -t nfs" and the "quota" program (esp. on Solaris and Irix). + * So on those systems, set it to "nfs". + * Note: MNTTAB_OPT_VERS is always set for NFS3 (see am_compat.h). + */ +# if defined(MNTTAB_OPT_VERS) && defined(MOUNT_TABLE_ON_FILE) + mnt.mnt_type = MNTTAB_TYPE_NFS; +# else /* defined(MNTTAB_OPT_VERS) && defined(MOUNT_TABLE_ON_FILE) */ + mnt.mnt_type = MNTTAB_TYPE_NFS3; +# endif /* defined(MNTTAB_OPT_VERS) && defined(MOUNT_TABLE_ON_FILE) */ + } else { + type = MOUNT_TYPE_NFS; + mnt.mnt_type = MNTTAB_TYPE_NFS; + } +#endif /* HAVE_FS_NFS3 */ + plog(XLOG_INFO, "mount_nfs_fh: NFS version %d", nfs_version); +#if defined(HAVE_FS_NFS3) || defined(HAVE_TRANSPORT_TYPE_TLI) + plog(XLOG_INFO, "mount_nfs_fh: using NFS transport %s", nfs_proto); +#endif /* defined(HAVE_FS_NFS3) || defined(HAVE_TRANSPORT_TYPE_TLI) */ + + retry = hasmntval(&mnt, MNTTAB_OPT_RETRY); + if (retry <= 0) + retry = 1; /* XXX */ + + genflags = compute_mount_flags(&mnt); + + /* setup the many fields and flags within nfs_args */ +#ifdef HAVE_TRANSPORT_TYPE_TLI + compute_nfs_args(&nfs_args, + &mnt, + genflags, + NULL, /* struct netconfig *nfsncp */ + fs->fs_ip, + nfs_version, + nfs_proto, + fhp, + host, + fs_name); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + compute_nfs_args(&nfs_args, + &mnt, + genflags, + fs->fs_ip, + nfs_version, + nfs_proto, + fhp, + host, + fs_name); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* finally call the mounting function */ +#ifdef DEBUG + amuDebug(D_TRACE) + print_nfs_args(&nfs_args, nfs_version); +#endif /* DEBUG */ + error = mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type, + nfs_version, nfs_proto, mnttab_file_name); + XFREE(xopts); + +#ifdef HAVE_TRANSPORT_TYPE_TLI + free_knetconfig(nfs_args.knconf); + if (nfs_args.addr) + XFREE(nfs_args.addr); /* allocated in compute_nfs_args() */ +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + + return error; +} + + +static int +mount_nfs(char *dir, char *fs_name, char *opts, mntfs *mf) +{ + if (!mf->mf_private) { + plog(XLOG_ERROR, "Missing filehandle for %s", fs_name); + return EINVAL; + } + + return mount_nfs_fh((am_nfs_handle_t *) mf->mf_private, dir, fs_name, opts, mf); +} + + +int +nfs_fmount(mntfs *mf) +{ + int error = 0; + + error = mount_nfs(mf->mf_mount, mf->mf_info, mf->mf_mopts, mf); + +#ifdef DEBUG + if (error) { + errno = error; + dlog("mount_nfs: %m"); + } +#endif /* DEBUG */ + + return error; +} + + +int +nfs_fumount(mntfs *mf) +{ + int error = UMOUNT_FS(mf->mf_mount, mnttab_file_name); + + /* + * Here is some code to unmount 'restarted' file systems. + * The restarted file systems are marked as 'nfs', not + * 'host', so we only have the map information for the + * the top-level mount. The unmount will fail (EBUSY) + * if there are anything else from the NFS server mounted + * below the mount-point. This code checks to see if there + * is anything mounted with the same prefix as the + * file system to be unmounted ("/a/b/c" when unmounting "/a/b"). + * If there is, and it is a 'restarted' file system, we unmount + * it. + * Added by Mike Mitchell, mcm@unx.sas.com, 09/08/93 + */ + if (error == EBUSY) { + mntfs *new_mf; + int len = strlen(mf->mf_mount); + int didsome = 0; + + ITER(new_mf, mntfs, &mfhead) { + if (new_mf->mf_ops != mf->mf_ops || + new_mf->mf_refc > 1 || + mf == new_mf || + ((new_mf->mf_flags & (MFF_MOUNTED | MFF_UNMOUNTING | MFF_RESTART)) == (MFF_MOUNTED | MFF_RESTART))) + continue; + + if (NSTREQ(mf->mf_mount, new_mf->mf_mount, len) && + new_mf->mf_mount[len] == '/') { + UMOUNT_FS(new_mf->mf_mount, mnttab_file_name); + didsome = 1; + } + } + if (didsome) + error = UMOUNT_FS(mf->mf_mount, mnttab_file_name); + } + if (error) + return error; + + return 0; +} + + +void +nfs_umounted(am_node *mp) +{ + /* + * Don't bother to inform remote mountd that we are finished. Until a + * full track of filehandles is maintained the mountd unmount callback + * cannot be done correctly anyway... + */ + mntfs *mf = mp->am_mnt; + fserver *fs; + char *colon, *path; + + if (mf->mf_error || mf->mf_refc > 1) + return; + + fs = mf->mf_server; + + /* + * Call the mount daemon on the server to announce that we are not using + * the fs any more. + * + * This is *wrong*. The mountd should be called when the fhandle is + * flushed from the cache, and a reference held to the cached entry while + * the fs is mounted... + */ + colon = path = strchr(mf->mf_info, ':'); + if (fs && colon) { + fh_cache f; + +#ifdef DEBUG + dlog("calling mountd for %s", mf->mf_info); +#endif /* DEBUG */ + *path++ = '\0'; + f.fh_path = path; + f.fh_sin = *fs->fs_ip; + f.fh_sin.sin_port = (u_short) 0; + f.fh_nfs_version = fs->fs_version; + f.fh_fs = fs; + f.fh_id = 0; + f.fh_error = 0; + prime_nfs_fhandle_cache(colon + 1, mf->mf_server, (am_nfs_handle_t *) 0, (voidp) mf); + call_mountd(&f, MOUNTPROC_UMNT, (fwd_fun) 0, (voidp) 0); + *colon = ':'; + } +} diff --git a/amd/ops_nfs3.c b/amd/ops_nfs3.c new file mode 100644 index 0000000..8bffc2a --- /dev/null +++ b/amd/ops_nfs3.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_nfs3.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * Network file system version 3.0 + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_nullfs.c b/amd/ops_nullfs.c new file mode 100644 index 0000000..67c2393 --- /dev/null +++ b/amd/ops_nullfs.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_nullfs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * The null filesystem in BSD-4.4 is similar to the loopback one. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_pcfs.c b/amd/ops_pcfs.c new file mode 100644 index 0000000..a00e58a --- /dev/null +++ b/amd/ops_pcfs.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_pcfs.c,v 1.1 1998/11/05 02:04:50 ezk Exp $ + * + */ + +/* + * PC (MS-DOS) file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward definitions */ +static char *pcfs_match(am_opts *fo); +static int pcfs_fmount(mntfs *mf); +static int pcfs_fumount(mntfs *mf); + +/* + * Ops structure + */ +am_ops pcfs_ops = +{ + "pcfs", + pcfs_match, + 0, /* pcfs_init */ + amfs_auto_fmount, + pcfs_fmount, + amfs_auto_fumount, + pcfs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* pcfs_readlink */ + 0, /* pcfs_mounted */ + 0, /* pcfs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_UBACKGROUND | FS_AMQINFO +}; + + + +/* + * PCFS needs remote filesystem. + */ +static char * +pcfs_match(am_opts *fo) +{ + if (!fo->opt_dev) { + plog(XLOG_USER, "pcfs: no source device specified"); + return 0; + } +#ifdef DEBUG + dlog("PCFS: mounting device \"%s\" on \"%s\"", fo->opt_dev, fo->opt_fs); +#endif /* DEBUG */ + + /* + * Determine magic cookie to put in mtab + */ + return strdup(fo->opt_dev); +} + + +static int +mount_pcfs(char *dir, char *fs_name, char *opts) +{ + pcfs_args_t pcfs_args; + mntent_t mnt; + int flags; + + /* + * Figure out the name of the file system type. + */ + MTYPE_TYPE type = MOUNT_TYPE_PCFS; + + memset((voidp) &pcfs_args, 0, sizeof(pcfs_args)); /* Paranoid */ + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_type = MNTTAB_TYPE_PCFS; + mnt.mnt_opts = opts; + + flags = compute_mount_flags(&mnt); + +#ifdef HAVE_FIELD_PCFS_ARGS_T_FSPEC + pcfs_args.fspec = fs_name; +#endif /* HAVE_FIELD_PCFS_ARGS_T_FSPEC */ + +#ifdef HAVE_FIELD_PCFS_ARGS_T_MASK + pcfs_args.mask = 0777; /* this may be the msdos file modes */ +#endif /* HAVE_FIELD_PCFS_ARGS_T_MASK */ + +#ifdef HAVE_FIELD_PCFS_ARGS_T_UID + pcfs_args.uid = 0; /* root */ +#endif /* HAVE_FIELD_PCFS_ARGS_T_UID */ + +#ifdef HAVE_FIELD_PCFS_ARGS_T_GID + pcfs_args.gid = 0; /* wheel */ +#endif /* HAVE_FIELD_PCFS_ARGS_T_GID */ + +#ifdef HAVE_FIELD_PCFS_ARGS_T_SECONDSWEST + pcfs_args.secondswest = 0; /* XXX: fill in correct values */ +#endif /* HAVE_FIELD_PCFS_ARGS_T_SECONDSWEST */ +#ifdef HAVE_FIELD_PCFS_ARGS_T_DSTTIME + pcfs_args.dsttime = 0; /* XXX: fill in correct values */ +#endif /* HAVE_FIELD_PCFS_ARGS_T_DSTTIME */ + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, flags, (caddr_t) & pcfs_args, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +pcfs_fmount(mntfs *mf) +{ + int error; + + error = mount_pcfs(mf->mf_mount, mf->mf_info, mf->mf_mopts); + if (error) { + errno = error; + plog(XLOG_ERROR, "mount_pcfs: %m"); + return error; + } + + return 0; +} + + +static int +pcfs_fumount(mntfs *mf) +{ + return UMOUNT_FS(mf->mf_mount, mnttab_file_name); +} diff --git a/amd/ops_tfs.c b/amd/ops_tfs.c new file mode 100644 index 0000000..0dc2f55 --- /dev/null +++ b/amd/ops_tfs.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_tfs.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * Translucent file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_tmpfs.c b/amd/ops_tmpfs.c new file mode 100644 index 0000000..23daf9b --- /dev/null +++ b/amd/ops_tmpfs.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_tmpfs.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * TMPFS file system (combines RAM-fs and swap-fs) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_ufs.c b/amd/ops_ufs.c new file mode 100644 index 0000000..cd3d52e --- /dev/null +++ b/amd/ops_ufs.c @@ -0,0 +1,173 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_ufs.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * UN*X file system + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static char *ufs_match(am_opts *fo); +static int ufs_fmount(mntfs *mf); +static int ufs_fumount(mntfs *mf); + +/* + * Ops structure + */ +am_ops ufs_ops = +{ + "ufs", + ufs_match, + 0, /* ufs_init */ + amfs_auto_fmount, + ufs_fmount, + amfs_auto_fumount, + ufs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* ufs_readlink */ + 0, /* ufs_mounted */ + 0, /* ufs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_UBACKGROUND | FS_AMQINFO +}; + + +/* + * UFS needs local filesystem and device. + */ +static char * +ufs_match(am_opts *fo) +{ + + if (!fo->opt_dev) { + plog(XLOG_USER, "ufs: no device specified"); + return 0; + } + +#ifdef DEBUG + dlog("UFS: mounting device \"%s\" on \"%s\"", fo->opt_dev, fo->opt_fs); +#endif /* DEBUG */ + + /* + * Determine magic cookie to put in mtab + */ + return strdup(fo->opt_dev); +} + + +static int +mount_ufs(char *dir, char *fs_name, char *opts) +{ + ufs_args_t ufs_args; + mntent_t mnt; + int genflags; + + /* + * Figure out the name of the file system type. + */ + MTYPE_TYPE type = MOUNT_TYPE_UFS; + + memset((voidp) &ufs_args, 0, sizeof(ufs_args)); /* Paranoid */ + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_type = MNTTAB_TYPE_UFS; + mnt.mnt_opts = opts; + + genflags = compute_mount_flags(&mnt); + +#ifdef HAVE_FIELD_UFS_ARGS_T_FLAGS + ufs_args.flags = genflags; /* XXX: is this correct? */ +#endif /* HAVE_FIELD_UFS_ARGS_T_FLAGS */ + +#ifdef HAVE_FIELD_UFS_ARGS_T_UFS_FLAGS + ufs_args.ufs_flags = genflags; /* XXX: is this correct? */ +#endif /* HAVE_FIELD_UFS_ARGS_T_UFS_FLAGS */ + +#ifdef HAVE_FIELD_UFS_ARGS_T_FSPEC + ufs_args.fspec = fs_name; +#endif /* HAVE_FIELD_UFS_ARGS_T_FSPEC */ + +#ifdef HAVE_FIELD_UFS_ARGS_T_UFS_PGTHRESH + ufs_args.ufs_pgthresh = hasmntval(&mnt, MNTTAB_OPT_PGTHRESH); +#endif /* HAVE_FIELD_UFS_ARGS_T_UFS_PGTHRESH */ + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, genflags, (caddr_t) &ufs_args, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +ufs_fmount(mntfs *mf) +{ + int error; + + error = mount_ufs(mf->mf_mount, mf->mf_info, mf->mf_mopts); + if (error) { + errno = error; + plog(XLOG_ERROR, "mount_ufs: %m"); + return error; + } + + return 0; +} + + +static int +ufs_fumount(mntfs *mf) +{ + return UMOUNT_FS(mf->mf_mount, mnttab_file_name); +} diff --git a/amd/ops_umapfs.c b/amd/ops_umapfs.c new file mode 100644 index 0000000..08b9625 --- /dev/null +++ b/amd/ops_umapfs.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_umapfs.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * uid/gid mapping filesystem. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_unionfs.c b/amd/ops_unionfs.c new file mode 100644 index 0000000..b3cae8f --- /dev/null +++ b/amd/ops_unionfs.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_unionfs.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * Union filesystem (ala BSD-4.4) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* FEEL FREE TO IMPLEMENT THIS... :-) */ diff --git a/amd/ops_xfs.c b/amd/ops_xfs.c new file mode 100644 index 0000000..bad6990 --- /dev/null +++ b/amd/ops_xfs.c @@ -0,0 +1,164 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ops_xfs.c,v 1.1 1998/11/05 02:04:51 ezk Exp $ + * + */ + +/* + * Irix UN*X file system: XFS (Extended File System) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* forward declarations */ +static char * xfs_match(am_opts *fo); +static int xfs_fmount(mntfs *mf); +static int xfs_fumount(mntfs *mf); + +/* + * Ops structure + */ +am_ops xfs_ops = +{ + "xfs", + xfs_match, + 0, /* xfs_init */ + amfs_auto_fmount, + xfs_fmount, + amfs_auto_fumount, + xfs_fumount, + amfs_error_lookuppn, + amfs_error_readdir, + 0, /* xfs_readlink */ + 0, /* xfs_mounted */ + 0, /* xfs_umounted */ + find_amfs_auto_srvr, + FS_MKMNT | FS_NOTIMEOUT | FS_UBACKGROUND | FS_AMQINFO +}; + + +/* + * XFS needs local filesystem and device. + */ +static char * +xfs_match(am_opts *fo) +{ + + if (!fo->opt_dev) { + plog(XLOG_USER, "xfs: no device specified"); + return 0; + } + +#ifdef DEBUG + dlog("XFS: mounting device \"%s\" on \"%s\"", fo->opt_dev, fo->opt_fs); +#endif /* DEBUG */ + + /* + * Determine magic cookie to put in mtab + */ + return strdup(fo->opt_dev); +} + + +static int +mount_xfs(char *dir, char *fs_name, char *opts) +{ + xfs_args_t xfs_args; + mntent_t mnt; + int flags; + + /* + * Figure out the name of the file system type. + */ + MTYPE_TYPE type = MOUNT_TYPE_XFS; + + memset((voidp) &xfs_args, 0, sizeof(xfs_args)); /* Paranoid */ + + /* + * Fill in the mount structure + */ + memset((voidp) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir; + mnt.mnt_fsname = fs_name; + mnt.mnt_type = MNTTAB_TYPE_XFS; + mnt.mnt_opts = opts; + + flags = compute_mount_flags(&mnt); + +#ifdef HAVE_FIELD_XFS_ARGS_T_FLAGS + xfs_args.flags = 0; /* XXX: fix this to correct flags */ +#endif /* HAVE_FIELD_XFS_ARGS_T_FLAGS */ +#ifdef HAVE_FIELD_XFS_ARGS_T_FSPEC + xfs_args.fspec = fs_name; +#endif /* HAVE_FIELD_XFS_ARGS_T_FSPEC */ + + /* + * Call generic mount routine + */ + return mount_fs(&mnt, flags, (caddr_t) &xfs_args, 0, type, 0, NULL, mnttab_file_name); +} + + +static int +xfs_fmount(mntfs *mf) +{ + int error; + + error = mount_xfs(mf->mf_mount, mf->mf_info, mf->mf_mopts); + if (error) { + errno = error; + plog(XLOG_ERROR, "mount_xfs: %m"); + return error; + } + + return 0; +} + + +static int +xfs_fumount(mntfs *mf) +{ + return UMOUNT_FS(mf->mf_mount, mnttab_file_name); +} diff --git a/amd/opts.c b/amd/opts.c new file mode 100644 index 0000000..2f4550c --- /dev/null +++ b/amd/opts.c @@ -0,0 +1,1304 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: opts.c,v 1.1 1998/11/05 02:04:48 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * MACROS: + */ +#define NLEN 16 /* Length of longest option name (conservative) */ +#define S(x) (x) , (sizeof(x)-1) +/* + * The BUFSPACE macros checks that there is enough space + * left in the expansion buffer. If there isn't then we + * give up completely. This is done to avoid crashing the + * automounter itself (which would be a bad thing to do). + */ +#define BUFSPACE(ep, len) (((ep) + (len)) < expbuf+MAXPATHLEN) + +/* + * TYPEDEFS: + */ +typedef int (*IntFuncPtr) (char *); +typedef struct opt_apply opt_apply; +enum vs_opt { SelEQ, SelNE, VarAss }; + +/* + * STRUCTURES + */ +struct opt { + char *name; /* Name of the option */ + int nlen; /* Length of option name */ + char **optp; /* Pointer to option value string */ + char **sel_p; /* Pointer to selector value string */ + int (*fxn_p)(char *); /* Pointer to boolean function */ + int case_insensitive; /* How to do selector comparisons */ +}; + +struct opt_apply { + char **opt; + char *val; +}; + +struct functable { + char *name; + IntFuncPtr func; +}; + +/* + * FORWARD DEFINITION: + */ +static int f_in_network(char *); +static int f_netgrp(char *); +static int f_exists(char *); +static int f_false(char *); +static int f_true(char *); + +/* + * STATICS: + */ +static struct am_opts fs_static; /* copy of the options to play with */ +static char NullStr[] = ""; +static char nullstr[] = ""; +static char *opt_dkey = NullStr; +static char *opt_host = hostname; +static char *opt_hostd = hostd; +static char *opt_key = nullstr; +static char *opt_keyd = nullstr; +static char *opt_map = nullstr; +static char *opt_path = nullstr; +static char *vars[8]; + + +/* + * Options in something corresponding to frequency of use so that + * first-match algorithm is sped up. + */ +static struct opt opt_fields[] = { + /* Name and length. + Option str. Selector str. boolean fxn. flags */ + { S("opts"), + &fs_static.opt_opts, 0, 0, FALSE }, + { S("host"), + 0, &opt_host, 0, TRUE }, + { S("hostd"), + 0, &opt_hostd, 0, TRUE }, + { S("type"), + &fs_static.opt_type, 0, 0, FALSE }, + { S("rhost"), + &fs_static.opt_rhost, 0, 0, TRUE }, + { S("rfs"), + &fs_static.opt_rfs, 0, 0, FALSE }, + { S("fs"), + &fs_static.opt_fs, 0, 0, FALSE }, + { S("key"), + 0, &opt_key, 0, FALSE }, + { S("map"), + 0, &opt_map, 0, FALSE }, + { S("sublink"), + &fs_static.opt_sublink, 0, 0, FALSE }, + { S("arch"), + 0, &gopt.arch, 0, TRUE }, + { S("dev"), + &fs_static.opt_dev, 0, 0, FALSE }, + { S("pref"), + &fs_static.opt_pref, 0, 0, FALSE }, + { S("autopref"), + &fs_static.opt_autopref,0, 0, FALSE }, + { S("path"), + 0, &opt_path, 0, FALSE }, + { S("autodir"), + 0, &gopt.auto_dir, 0, FALSE }, + { S("delay"), + &fs_static.opt_delay, 0, 0, FALSE }, + { S("domain"), + 0, &hostdomain, 0, TRUE }, + { S("karch"), + 0, &gopt.karch, 0, TRUE }, + { S("cluster"), + 0, &gopt.cluster, 0, TRUE }, + { S("wire"), + 0, 0, f_in_network, TRUE }, + { S("network"), + 0, 0, f_in_network, TRUE }, + { S("netnumber"), + 0, 0, f_in_network, TRUE }, + { S("byte"), + 0, &endian, 0, TRUE }, + { S("os"), + 0, &gopt.op_sys, 0, TRUE }, + { S("osver"), + 0, &gopt.op_sys_ver, 0, TRUE }, + { S("remopts"), + &fs_static.opt_remopts, 0, 0, FALSE }, + { S("mount"), + &fs_static.opt_mount, 0, 0, FALSE }, + { S("unmount"), + &fs_static.opt_unmount, 0, 0, FALSE }, + { S("cache"), + &fs_static.opt_cache, 0, 0, FALSE }, + { S("user"), + &fs_static.opt_user, 0, 0, FALSE }, + { S("group"), + &fs_static.opt_group, 0, 0, FALSE }, + { S(".key"), + 0, &opt_dkey, 0, FALSE }, + { S("key."), + 0, &opt_keyd, 0, FALSE }, + { S("maptype"), + &fs_static.opt_maptype, 0, 0, FALSE }, + { S("cachedir"), + &fs_static.opt_cachedir, 0, 0, FALSE }, + { S("addopts"), + &fs_static.opt_addopts, 0, 0, FALSE }, + { S("var0"), + &vars[0], 0, 0, FALSE }, + { S("var1"), + &vars[1], 0, 0, FALSE }, + { S("var2"), + &vars[2], 0, 0, FALSE }, + { S("var3"), + &vars[3], 0, 0, FALSE }, + { S("var4"), + &vars[4], 0, 0, FALSE }, + { S("var5"), + &vars[5], 0, 0, FALSE }, + { S("var6"), + &vars[6], 0, 0, FALSE }, + { S("var7"), + &vars[7], 0, 0, FALSE }, + { 0, 0, 0, 0, 0, FALSE }, +}; + +static struct functable functable[] = { + { "in_network", f_in_network }, + { "netgrp", f_netgrp }, + { "exists", f_exists }, + { "false", f_false }, + { "true", f_true }, + { 0, 0 }, +}; + +/* + * Specially expand the remote host name first + */ +static opt_apply rhost_expansion[] = +{ + {&fs_static.opt_rhost, "${host}"}, + {0, 0}, +}; + +/* + * List of options which need to be expanded + * Note that the order here _may_ be important. + */ +static opt_apply expansions[] = +{ + {&fs_static.opt_sublink, 0}, + {&fs_static.opt_rfs, "${path}"}, + {&fs_static.opt_fs, "${autodir}/${rhost}${rfs}"}, + {&fs_static.opt_opts, "rw"}, + {&fs_static.opt_remopts, "${opts}"}, + {&fs_static.opt_mount, 0}, + {&fs_static.opt_unmount, 0}, + {&fs_static.opt_cachedir, 0}, + {&fs_static.opt_addopts, 0}, + {0, 0}, +}; + +/* + * List of options which need to be free'ed before re-use + */ +static opt_apply to_free[] = +{ + {&fs_static.fs_glob, 0}, + {&fs_static.fs_local, 0}, + {&fs_static.fs_mtab, 0}, + {&fs_static.opt_sublink, 0}, + {&fs_static.opt_rfs, 0}, + {&fs_static.opt_fs, 0}, + {&fs_static.opt_rhost, 0}, + {&fs_static.opt_opts, 0}, + {&fs_static.opt_remopts, 0}, + {&fs_static.opt_mount, 0}, + {&fs_static.opt_unmount, 0}, + {&fs_static.opt_cachedir, 0}, + {&fs_static.opt_addopts, 0}, + {&vars[0], 0}, + {&vars[1], 0}, + {&vars[2], 0}, + {&vars[3], 0}, + {&vars[4], 0}, + {&vars[5], 0}, + {&vars[6], 0}, + {&vars[7], 0}, + {0, 0}, +}; + + +/* + * expand backslash escape sequences + */ +static char +backslash(char **p) +{ + char c; + + if ((*p)[1] == '\0') { + plog(XLOG_USER, "Empty backslash escape"); + return **p; + } + + if (**p == '\\') { + (*p)++; + switch (**p) { + case 'a': + c = '\007'; /* Bell */ + break; + case 'b': + c = '\010'; /* Backspace */ + break; + case 't': + c = '\011'; /* Horizontal Tab */ + break; + case 'n': + c = '\012'; /* New Line */ + break; + case 'v': + c = '\013'; /* Vertical Tab */ + break; + case 'f': + c = '\014'; /* Form Feed */ + break; + case 'r': + c = '\015'; /* Carriage Return */ + break; + case 'e': + c = '\033'; /* Escape */ + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + { + int cnt, val, ch; + + for (cnt = 0, val = 0; cnt < 3; cnt++) { + ch = *(*p)++; + if (ch < '0' || ch > '7') { + (*p)--; + break; + } + val = (val << 3) | (ch - '0'); + } + + if ((val & 0xffffff00) != 0) + plog(XLOG_USER, + "Too large character constant %u\n", + val); + c = (char) val; + --(*p); + } + break; + + default: + c = **p; + break; + } + } else + c = **p; + + return c; +} + + +/* + * Skip to next option in the string + */ +static char * +opt(char **p) +{ + char *cp = *p; + char *dp = cp; + char *s = cp; + +top: + while (*cp && *cp != ';') { + if (*cp == '"') { + /* + * Skip past string + */ + for (cp++; *cp && *cp != '"'; cp++) + if (*cp == '\\') + *dp++ = backslash(&cp); + else + *dp++ = *cp; + if (*cp) + cp++; + } else { + *dp++ = *cp++; + } + } + + /* + * Skip past any remaining ';'s + */ + while (*cp == ';') + cp++; + + /* + * If we have a zero length string + * and there are more fields, then + * parse the next one. This allows + * sequences of empty fields. + */ + if (*cp && dp == s) + goto top; + + *dp = '\0'; + + *p = cp; + return s; +} + + +/* + * These routines add a new style of selector; function-style boolean + * operators. To add new ones, just define functions as in true, false, + * exists (below) and add them to the functable, above. + * + * Usage example: Some people have X11R5 local, some go to a server. I do + * this: + * + * * exists(/usr/pkg/${key});type:=link;fs:=/usr/pkg/${key} || \ + * -type:=nfs;rfs=/usr/pkg/${key} \ + * rhost:=server1 \ + * rhost:=server2 + * + * -Rens Troost + */ +static IntFuncPtr +functable_lookup(char *key) +{ + struct functable *fp; + + for (fp = functable; fp->name; fp++) + if (FSTREQ(fp->name, key)) + return (fp->func); + return (IntFuncPtr) NULL; +} + + +static int +eval_opts(char *opts, char *mapkey) +{ + /* + * Fill in the global structure fs_static by + * cracking the string opts. opts may be + * scribbled on at will. + */ + char *o = opts; + char *f; + + /* + * For each user-specified option + */ + while (*(f = opt(&o))) { + struct opt *op; + enum vs_opt vs_opt = VarAss; + char *eq = strchr(f, '='); + char *fx; + IntFuncPtr func; + char *opt = NULL; + + if (!eq || eq[1] == '\0' || eq == f) { + /* + * No value, is it a function call? + */ + char *arg = strchr(f, '('); + + if (!arg || arg[1] == '\0' || arg == f) { + /* + * No, just continue + */ + plog(XLOG_USER, "key %s: No value component in \"%s\"", mapkey, f); + continue; + } + + /* null-terminate the argument */ + *arg++ = '\0'; + fx = strchr(arg, ')'); + if (!arg || fx == arg) { + plog(XLOG_USER, "key %s: Malformed function in \"%s\"", mapkey, f); + continue; + } + *fx = '\0'; + + /* + * look up f in functable and pass it arg. + * func must return 0 on failure, and 1 on success. + */ + if ((func = functable_lookup(f))) { + if (!(*func) (arg)) { + return (0); + } + continue; + } else if (NSTREQ(f, "!", 1) && (func = functable_lookup(&f[1]))) { + /* then this is a negated prefixed function such as "!exists" */ + plog(XLOG_USER, "executing negated function %s", &f[1]); + if ((*func) (arg)) { + return (0); + } + continue; + } else { + plog(XLOG_USER, "key %s: unknown function \"%s\"", mapkey, f); + return (0); + } + + } + + /* + * Check what type of operation is happening + * !=, =! is SelNE + * == is SelEQ + * := is VarAss + */ + if (eq[-1] == '!') { /* != */ + vs_opt = SelNE; + eq[-1] = '\0'; + opt = eq + 1; + } else if (eq[-1] == ':') { /* := */ + vs_opt = VarAss; + eq[-1] = '\0'; + opt = eq + 1; + } else if (eq[1] == '=') { /* == */ + vs_opt = SelEQ; + eq[0] = '\0'; + opt = eq + 2; + } else if (eq[1] == '!') { /* =! */ + vs_opt = SelNE; + eq[0] = '\0'; + opt = eq + 2; + } + + /* + * For each recognized option + */ + for (op = opt_fields; op->name; op++) { + /* + * Check whether they match + */ + if (FSTREQ(op->name, f)) { + int selok; + switch (vs_opt) { + case SelEQ: + case SelNE: + if ((selok = (op->sel_p != NULL))) { + if (op->case_insensitive) { + selok = (STRCEQ(*op->sel_p, opt) == (vs_opt == SelNE)); + } else { + selok = (STREQ(*op->sel_p, opt) == (vs_opt == SelNE)); + } + } + if (selok) { + plog(XLOG_MAP, "key %s: map selector %s (=%s) did not %smatch %s", + mapkey, + op->name, + *op->sel_p, + vs_opt == SelNE ? "mis" : "", + opt); + return 0; + } + /* check if to apply a function */ + if (op->fxn_p && + ((*op->fxn_p)(opt) == (vs_opt == SelNE))) { + plog(XLOG_MAP, "key %s: map function %s did not %smatch %s", + mapkey, + op->name, + vs_opt == SelNE ? "mis" : "", + opt); + return 0; + } + break; + + case VarAss: + if (op->sel_p) { + plog(XLOG_USER, "key %s: Can't assign to a selector (%s)", + mapkey, op->name); + return 0; + } + *op->optp = opt; + break; + + } /* end of "switch (vs_opt)" statement */ + break; /* break out of for loop */ + } + } + + if (!op->name) + plog(XLOG_USER, "key %s: Unrecognized key/option \"%s\"", mapkey, f); + } + + return 1; +} + + +/* + * Skip to next option in the string, but don't scribble over the string. + * However, *p gets repointed to the start of the next string past ';'. + */ +static char * +opt_no_scribble(char **p) +{ + char *cp = *p; + char *dp = cp; + char *s = cp; + +top: + while (*cp && *cp != ';') { + if (*cp == '\"') { + /* + * Skip past string + */ + cp++; + while (*cp && *cp != '\"') + *dp++ = *cp++; + if (*cp) + cp++; + } else { + *dp++ = *cp++; + } + } + + /* + * Skip past any remaining ';'s + */ + while (*cp == ';') + cp++; + + /* + * If we have a zero length string + * and there are more fields, then + * parse the next one. This allows + * sequences of empty fields. + */ + if (*cp && dp == s) + goto top; + + *p = cp; + return s; +} + + +/* + * Strip any selectors from a string. Selectors are all assumed to be + * first in the string. This is used for the new /defaults method which will + * use selectors as well. + */ +char * +strip_selectors(char *opts, char *mapkey) +{ + /* + * Fill in the global structure fs_static by + * cracking the string opts. opts may be + * scribbled on at will. + */ + char *o = opts; + char *oo = opts; + char *f; + + /* + * Scan options. Note that the opt() function scribbles on the opt string. + */ + while (*(f = opt_no_scribble(&o))) { + enum vs_opt vs_opt = VarAss; + char *eq = strchr(f, '='); + + if (!eq || eq[1] == '\0' || eq == f) { + /* + * No option or assignment? Return as is. + */ + plog(XLOG_USER, "key %s: No option or assignment in \"%s\"", mapkey, f); + return o; + } + /* + * Check what type of operation is happening + * !=, =! is SelNE + * == is SelEQ + * := is VarAss + */ + if (eq[-1] == '!') { /* != */ + vs_opt = SelNE; + } else if (eq[-1] == ':') { /* := */ + vs_opt = VarAss; + } else if (eq[1] == '=') { /* == */ + vs_opt = SelEQ; + } else if (eq[1] == '!') { /* =! */ + vs_opt = SelNE; + } + switch (vs_opt) { + case SelEQ: + case SelNE: + /* Skip this selector, maybe there's another one following it */ + plog(XLOG_USER, "skipping selector to \"%s\"", o); + /* store previous match. it may have been the first assignment */ + oo = o; + break; + + case VarAss: + /* found the first assignment, return the string starting with it */ +#ifdef DEBUG + dlog("found first assignment past selectors \"%s\"", o); +#endif /* DEBUG */ + return oo; + } + } + + /* return the same string by default. should not happen. */ + return oo; +} + + +/***************************************************************************** + *** BOOLEAN FUNCTIONS (return 0 if false, 1 if true): *** + *****************************************************************************/ + +/* test if arg is any of this host's network names or numbers */ +static int +f_in_network(char *arg) +{ + int status; + + if (!arg) + return FALSE; + + status = is_network_member(arg); +#ifdef DEBUG + plog(XLOG_USER, "%s is %son a local network", + arg, (status ? "" : "not ")); +#endif /* DEBUG */ + return status; +} + + +/* test if this host is in netgroup (arg) */ +static int +f_netgrp(char *arg) +{ + int status; + + status = innetgr(arg, opt_host, NULL, NULL); +#ifdef DEBUG + plog(XLOG_USER, "netgrp = %s status = %d host = %s", arg, status, opt_host); +#endif /* DEBUG */ + return status; +} + + +/* test if file (arg) exists via lstat */ +static int +f_exists(char *arg) +{ + struct stat buf; + + if (lstat(arg, &buf) < 0) + return (0); + else + return (1); +} + + +/* always false */ +static int +f_false(char *arg) +{ + return (0); +} + + +/* always true */ +static int +f_true(char *arg) +{ + return (1); +} + + +/* + * Free an option + */ +static void +free_op(opt_apply *p, int b) +{ + if (*p->opt) { + XFREE(*p->opt); + *p->opt = 0; + } +} + + +/* + * Normalize slashes in the string. + */ +void +normalize_slash(char *p) +{ + char *f = strchr(p, '/'); + char *f0 = f; + + if (f) { + char *t = f; + do { + /* assert(*f == '/'); */ + if (f == f0 && f[0] == '/' && f[1] == '/') { + /* copy double slash iff first */ + *t++ = *f++; + *t++ = *f++; + } else { + /* copy a single / across */ + *t++ = *f++; + } + + /* assert(f[-1] == '/'); */ + /* skip past more /'s */ + while (*f == '/') + f++; + + /* assert(*f != '/'); */ + /* keep copying up to next / */ + while (*f && *f != '/') { + *t++ = *f++; + } + + /* assert(*f == 0 || *f == '/'); */ + + } while (*f); + *t = 0; /* derived from fix by Steven Glassman */ + } +} + + +/* + * Macro-expand an option. Note that this does not + * handle recursive expansions. They will go badly wrong. + * If sel is true then old expand selectors, otherwise + * don't expand selectors. + */ +static void +expand_op(opt_apply *p, int sel_p) +{ + static char expand_error[] = "No space to expand \"%s\""; + char expbuf[MAXPATHLEN + 1]; + char nbuf[NLEN + 1]; + char *ep = expbuf; + char *cp = *p->opt; + char *dp; + struct opt *op; +#ifdef DEBUG + char *cp_orig = *p->opt; +#endif /* DEBUG */ + + while ((dp = strchr(cp, '$'))) { + char ch; + /* + * First copy up to the $ + */ + { + int len = dp - cp; + + if (BUFSPACE(ep, len)) { + strncpy(ep, cp, len); + ep += len; + } else { + plog(XLOG_ERROR, expand_error, *p->opt); + goto out; + } + } + + cp = dp + 1; + ch = *cp++; + if (ch == '$') { + if (BUFSPACE(ep, 1)) { + *ep++ = '$'; + } else { + plog(XLOG_ERROR, expand_error, *p->opt); + goto out; + } + } else if (ch == '{') { + /* Expansion... */ + enum { + E_All, E_Dir, E_File, E_Domain, E_Host + } todo; + /* + * Find closing brace + */ + char *br_p = strchr(cp, '}'); + int len; + + /* + * Check we found it + */ + if (!br_p) { + /* + * Just give up + */ + plog(XLOG_USER, "No closing '}' in \"%s\"", *p->opt); + goto out; + } + len = br_p - cp; + + /* + * Figure out which part of the variable to grab. + */ + if (*cp == '/') { + /* + * Just take the last component + */ + todo = E_File; + cp++; + --len; + } else if (br_p[-1] == '/') { + /* + * Take all but the last component + */ + todo = E_Dir; + --len; + } else if (*cp == '.') { + /* + * Take domain name + */ + todo = E_Domain; + cp++; + --len; + } else if (br_p[-1] == '.') { + /* + * Take host name + */ + todo = E_Host; + --len; + } else { + /* + * Take the whole lot + */ + todo = E_All; + } + + /* + * Truncate if too long. Since it won't + * match anyway it doesn't matter that + * it has been cut short. + */ + if (len > NLEN) + len = NLEN; + + /* + * Put the string into another buffer so + * we can do comparisons. + */ + strncpy(nbuf, cp, len); + nbuf[len] = '\0'; + + /* + * Advance cp + */ + cp = br_p + 1; + + /* + * Search the option array + */ + for (op = opt_fields; op->name; op++) { + /* + * Check for match + */ + if (len == op->nlen && STREQ(op->name, nbuf)) { + char xbuf[NLEN + 3]; + char *val; + /* + * Found expansion. Copy + * the correct value field. + */ + if (!(!op->sel_p == !sel_p)) { + /* + * Copy the string across unexpanded + */ + sprintf(xbuf, "${%s%s%s}", + todo == E_File ? "/" : + todo == E_Domain ? "." : "", + nbuf, + todo == E_Dir ? "/" : + todo == E_Host ? "." : ""); + val = xbuf; + /* + * Make sure expansion doesn't + * munge the value! + */ + todo = E_All; + } else if (op->sel_p) { + val = *op->sel_p; + } else { + val = *op->optp; + } + + if (val) { + /* + * Do expansion: + * ${/var} means take just the last part + * ${var/} means take all but the last part + * ${.var} means take all but first part + * ${var.} means take just the first part + * ${var} means take the whole lot + */ + int vlen = strlen(val); + char *vptr = val; + switch (todo) { + case E_Dir: + vptr = strrchr(val, '/'); + if (vptr) + vlen = vptr - val; + vptr = val; + break; + case E_File: + vptr = strrchr(val, '/'); + if (vptr) { + vptr++; + vlen = strlen(vptr); + } else + vptr = val; + break; + case E_Domain: + vptr = strchr(val, '.'); + if (vptr) { + vptr++; + vlen = strlen(vptr); + } else { + vptr = ""; + vlen = 0; + } + break; + case E_Host: + vptr = strchr(val, '.'); + if (vptr) + vlen = vptr - val; + vptr = val; + break; + case E_All: + break; + } + + if (BUFSPACE(ep, vlen)) { + strcpy(ep, vptr); + ep += vlen; + } else { + plog(XLOG_ERROR, expand_error, *p->opt); + goto out; + } + } + /* + * Done with this variable + */ + break; + } + } + + /* + * Check that the search was successful + */ + if (!op->name) { + /* + * If it wasn't then scan the + * environment for that name + * and use any value found + */ + char *env = getenv(nbuf); + + if (env) { + int vlen = strlen(env); + + if (BUFSPACE(ep, vlen)) { + strcpy(ep, env); + ep += vlen; + } else { + plog(XLOG_ERROR, expand_error, *p->opt); + goto out; + } +#ifdef DEBUG + amuDebug(D_STR) + plog(XLOG_DEBUG, "Environment gave \"%s\" -> \"%s\"", nbuf, env); +#endif /* DEBUG */ + } else { + plog(XLOG_USER, "Unknown sequence \"${%s}\"", nbuf); + } + } + } else { + /* + * Error, error + */ + plog(XLOG_USER, "Unknown $ sequence in \"%s\"", *p->opt); + } + } + +out: + /* + * Handle common case - no expansion + */ + if (cp == *p->opt) { + *p->opt = strdup(cp); + } else { + /* + * Finish off the expansion + */ + if (BUFSPACE(ep, strlen(cp))) { + strcpy(ep, cp); + /* ep += strlen(ep); */ + } else { + plog(XLOG_ERROR, expand_error, *p->opt); + } + + /* + * Save the expansion + */ + *p->opt = strdup(expbuf); + } + + normalize_slash(*p->opt); + +#ifdef DEBUG + amuDebug(D_STR) { + plog(XLOG_DEBUG, "Expansion of \"%s\"...", cp_orig); + plog(XLOG_DEBUG, "... is \"%s\"", *p->opt); + } +#endif /* DEBUG */ +} + + +/* + * Wrapper for expand_op + */ +static void +expand_opts(opt_apply *p, int sel_p) +{ + if (*p->opt) { + expand_op(p, sel_p); + } else if (p->val) { + /* + * Do double expansion, remembering + * to free the string from the first + * expansion... + */ + char *s = *p->opt = expand_key(p->val); + expand_op(p, sel_p); + XFREE(s); + } +} + + +/* + * Apply a function to a list of options + */ +static void +apply_opts(void (*op) (opt_apply *, int), opt_apply ppp[], int b) +{ + opt_apply *pp; + + for (pp = ppp; pp->opt; pp++) + (*op) (pp, b); +} + + +/* + * Free the option table + */ +void +free_opts(am_opts *fo) +{ + /* + * Copy in the structure we are playing with + */ + fs_static = *fo; + + /* + * Free previously allocated memory + */ + apply_opts(free_op, to_free, FALSE); +} + + +/* + * Expand lookup key + */ +char * +expand_key(char *key) +{ + opt_apply oa; + + oa.opt = &key; + oa.val = 0; + expand_opts(&oa, TRUE); + + return key; +} + + +/* + * Remove trailing /'s from a string + * unless the string is a single / (Steven Glassman) + * or unless it is two slashes // (Kevin D. Bond) + */ +void +deslashify(char *s) +{ + if (s && *s) { + char *sl = s + strlen(s); + + while (*--sl == '/' && sl > s) + *sl = '\0'; + } +} + + +int +eval_fs_opts(am_opts *fo, char *opts, char *g_opts, char *path, char *key, char *map) +{ + int ok = TRUE; + + free_opts(fo); + + /* + * Clear out the option table + */ + memset((voidp) &fs_static, 0, sizeof(fs_static)); + memset((voidp) vars, 0, sizeof(vars)); + memset((voidp) fo, 0, sizeof(*fo)); + + /* + * Set key, map & path before expansion + */ + opt_key = key; + opt_map = map; + opt_path = path; + + opt_dkey = strchr(key, '.'); + if (!opt_dkey) { + opt_dkey = NullStr; + opt_keyd = key; + } else { + opt_keyd = strnsave(key, opt_dkey - key); + opt_dkey++; + if (*opt_dkey == '\0') /* check for 'host.' */ + opt_dkey = NullStr; + } + + /* + * Expand global options + */ + fs_static.fs_glob = expand_key(g_opts); + + /* + * Expand local options + */ + fs_static.fs_local = expand_key(opts); + + /* + * Expand default (global) options + */ + if (!eval_opts(fs_static.fs_glob, key)) + ok = FALSE; + + /* + * Expand local options + */ + if (ok && !eval_opts(fs_static.fs_local, key)) + ok = FALSE; + + /* + * Normalize remote host name. + * 1. Expand variables + * 2. Normalize relative to host tables + * 3. Strip local domains from the remote host + * name before using it in other expansions. + * This makes mount point names and other things + * much shorter, while allowing cross domain + * sharing of mount maps. + */ + apply_opts(expand_opts, rhost_expansion, FALSE); + if (ok && fs_static.opt_rhost && *fs_static.opt_rhost) + host_normalize(&fs_static.opt_rhost); + + /* + * Macro expand the options. + * Do this regardless of whether we are accepting + * this mount - otherwise nasty things happen + * with memory allocation. + */ + apply_opts(expand_opts, expansions, FALSE); + + /* + * Strip trailing slashes from local pathname... + */ + deslashify(fs_static.opt_fs); + + /* + * ok... copy the data back out. + */ + *fo = fs_static; + + /* + * Clear defined options + */ + if (opt_keyd != key && opt_keyd != nullstr) + XFREE(opt_keyd); + opt_keyd = nullstr; + opt_dkey = NullStr; + opt_key = opt_map = opt_path = nullstr; + + return ok; +} diff --git a/amd/restart.c b/amd/restart.c new file mode 100644 index 0000000..32aa641 --- /dev/null +++ b/amd/restart.c @@ -0,0 +1,208 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: restart.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Handle an amd restart. + * + * Scan through the mount list finding all "interesting" mount points. + * Next hack up partial data structures and add the mounted file + * system to the list of known filesystems. This will leave a + * dangling reference to that filesystems, so when the filesystem is + * finally inherited, an extra "free" must be done on it. + * + * This module relies on internal details of other components. If + * you change something else make *sure* restart() still works. + */ +void +restart(void) +{ + /* + * Read the existing mount table + */ + mntlist *ml, *mlp; + + /* + * For each entry, find nfs, ufs or auto mounts + * and create a partial am_node to represent it. + */ + for (mlp = ml = read_mtab("restart", mnttab_file_name); + mlp; + mlp = mlp->mnext) { + mntent_t *me = mlp->mnt; + am_ops *fs_ops = 0; + if (STREQ(me->mnt_type, MNTTAB_TYPE_UFS)) { + /* + * UFS entry + */ + fs_ops = &ufs_ops; + } else if (STREQ(me->mnt_type, MNTTAB_TYPE_NFS)) { + /* + * NFS entry, or possibly an Amd entry... + * The mnt_fsname for daemon mount points is + * host:(pidXXX) + * or (seen on Solaris) + * host:daemon(pidXXX) + */ + char *colon = strchr(me->mnt_fsname, ':'); + + if (colon && strstr(colon, "(pid")) { + plog(XLOG_WARNING, "%s is an existing automount point", me->mnt_dir); + fs_ops = &amfs_link_ops; + } else { + fs_ops = &nfs_ops; + } +#ifdef MNTTAB_TYPE_NFS3 + } else if (STREQ(me->mnt_type, MNTTAB_TYPE_NFS3)) { + fs_ops = &nfs_ops; +#endif /* MNTTAB_TYPE_NFS3 */ +#ifdef MNTTAB_TYPE_LOFS + } else if (STREQ(me->mnt_type, MNTTAB_TYPE_LOFS)) { + fs_ops = &lofs_ops; +#endif /* MNTTAB_TYPE_LOFS */ +#ifdef MNTTAB_TYPE_CDFS + } else if (STREQ(me->mnt_type, MNTTAB_TYPE_CDFS)) { + fs_ops = &cdfs_ops; +#endif /* MNTTAB_TYPE_CDFS */ +#ifdef MNTTAB_TYPE_PCFS + } else if (STREQ(me->mnt_type, MNTTAB_TYPE_PCFS)) { + fs_ops = &pcfs_ops; +#endif /* MNTTAB_TYPE_PCFS */ +#ifdef MNTTAB_TYPE_MFS + } else if (STREQ(me->mnt_type, MNTTAB_TYPE_MFS)) { + /* + * MFS entry. Fake with a symlink. + */ + fs_ops = &amfs_link_ops; +#endif /* MNTTAB_TYPE_MFS */ + } else { + /* + * Catch everything else with symlinks to + * avoid recursive mounts. This is debatable... + */ + fs_ops = &amfs_link_ops; + } + + /* + * If we found something to do + */ + if (fs_ops) { + mntfs *mf; + am_opts mo; + char *cp; + cp = strchr(me->mnt_fsname, ':'); + + /* + * Partially fake up an opts structure + */ + mo.opt_rhost = 0; + mo.opt_rfs = 0; + if (cp) { + *cp = '\0'; + mo.opt_rhost = strdup(me->mnt_fsname); + mo.opt_rfs = strdup(cp + 1); + *cp = ':'; + } else if (fs_ops->ffserver == find_nfs_srvr) { + /* + * Prototype 4.4 BSD used to end up here - + * might as well keep the workaround for now + */ + plog(XLOG_WARNING, "NFS server entry assumed to be %s:/", me->mnt_fsname); + mo.opt_rhost = strdup(me->mnt_fsname); + mo.opt_rfs = strdup("/"); + me->mnt_fsname = str3cat(me->mnt_fsname, mo.opt_rhost, ":", "/"); + } + mo.opt_fs = me->mnt_dir; + mo.opt_opts = me->mnt_opts; + + /* + * Make a new mounted filesystem + */ + mf = find_mntfs(fs_ops, &mo, me->mnt_dir, + me->mnt_fsname, "", me->mnt_opts, ""); + if (mf->mf_refc == 1) { + mf->mf_flags |= MFF_RESTART | MFF_MOUNTED; + mf->mf_error = 0; /* Already mounted correctly */ + mf->mf_fo = 0; + /* + * If the restarted type is a link then + * don't time out. + */ + if (fs_ops == &amfs_link_ops || fs_ops == &ufs_ops) + mf->mf_flags |= MFF_RSTKEEP; + if (fs_ops->fs_init) { + /* + * Don't care whether this worked since + * it is checked again when the fs is + * inherited. + */ + (void) (*fs_ops->fs_init) (mf); + } + plog(XLOG_INFO, "%s restarted fstype %s on %s", + me->mnt_fsname, fs_ops->fs_type, me->mnt_dir); + } else { + /* Something strange happened - two mounts at the same place! */ + free_mntfs(mf); + } + /* + * Clean up mo + */ + if (mo.opt_rhost) + XFREE(mo.opt_rhost); + if (mo.opt_rfs) + XFREE(mo.opt_rfs); + } + } + + /* + * Free the mount list + */ + free_mntlist(ml); +} diff --git a/amd/rpc_fwd.c b/amd/rpc_fwd.c new file mode 100644 index 0000000..478ae46 --- /dev/null +++ b/amd/rpc_fwd.c @@ -0,0 +1,476 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: rpc_fwd.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * RPC packet forwarding + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Note that the ID field in the external packet is only + * ever treated as a 32 bit opaque data object, so there + * is no need to convert to and from network byte ordering. + */ + +#define XID_ALLOC(struct ) (xid++) +#define MAX_PACKET_SIZE 8192 /* Maximum UDP packet size */ + +/* + * Each pending reply has an rpc_forward structure + * associated with it. These have a 15 second lifespan. + * If a new structure is required, then an expired + * one will be re-allocated if available, otherwise a fresh + * one is allocated. Whenever a reply is received the + * structure is discarded. + */ +typedef struct rpc_forward rpc_forward; +struct rpc_forward { + qelem rf_q; /* Linked list */ + time_t rf_ttl; /* Time to live */ + u_int rf_xid; /* Packet id */ + u_int rf_oldid; /* Original packet id */ + fwd_fun rf_fwd; /* Forwarding function */ + voidp rf_ptr; + struct sockaddr_in rf_sin; +}; + +/* + * Head of list of pending replies + */ +qelem rpc_head = {&rpc_head, &rpc_head}; +int fwd_sock; +static u_int xid; + + +/* + * Allocate a rely structure + */ +static rpc_forward * +fwd_alloc(void) +{ + time_t now = clocktime(); + rpc_forward *p = 0, *p2; + + /* + * First search for an existing expired one. + */ + ITER(p2, rpc_forward, &rpc_head) { + if (p2->rf_ttl <= now) { + p = p2; + break; + } + } + + /* + * If one couldn't be found then allocate + * a new structure and link it at the + * head of the list. + */ + if (p) { + /* + * Call forwarding function to say that + * this message was junked. + */ +#ifdef DEBUG + dlog("Re-using packet forwarding slot - id %#x", p->rf_xid); +#endif /* DEBUG */ + if (p->rf_fwd) + (*p->rf_fwd) (0, 0, 0, &p->rf_sin, p->rf_ptr, FALSE); + rem_que(&p->rf_q); + } else { + p = ALLOC(struct rpc_forward); + } + ins_que(&p->rf_q, &rpc_head); + + /* + * Set the time to live field + * Timeout in 43 seconds + */ + p->rf_ttl = now + 43; + + return p; +} + + +/* + * Free an allocated reply structure. + * First unlink it from the list, then + * discard it. + */ +static void +fwd_free(rpc_forward *p) +{ + rem_que(&p->rf_q); + XFREE(p); +} + + +/* + * Initialize the RPC forwarder + */ +int +fwd_init(void) +{ +#ifdef FIONBIO + int on = 1; +#endif /* FIONBIO */ + +#ifdef HAVE_TRANSPORT_TYPE_TLI + /* + * Create ping TLI socket (/dev/tcp and /dev/ticlts did not work) + * (HPUX-11 does not like using O_NDELAY in flags) + */ + fwd_sock = t_open("/dev/udp", O_RDWR|O_NONBLOCK, 0); + if (fwd_sock < 0) { + plog(XLOG_ERROR, "unable to create RPC forwarding TLI socket: %s", + t_errlist[t_errno]); + return errno; + } +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + /* + * Create ping socket + */ + fwd_sock = socket(AF_INET, SOCK_DGRAM, 0); + if (fwd_sock < 0) { + plog(XLOG_ERROR, "unable to create RPC forwarding socket: %m"); + return errno; + } +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* + * Some things we talk to require a priv port - so make one here + */ + if (bind_resv_port(fwd_sock, (u_short *) 0) < 0) + plog(XLOG_ERROR, "can't bind privileged port"); + + if (fcntl(fwd_sock, F_SETFL, FNDELAY) < 0 +#ifdef FIONBIO + && ioctl(fwd_sock, FIONBIO, &on) < 0 +#endif /* FIONBIO */ + ) { + plog(XLOG_ERROR, "Can't set non-block on forwarding socket: %m"); + return errno; + } + + return 0; +} + + +/* + * Locate a packet in the forwarding list + */ +static rpc_forward * +fwd_locate(u_int id) +{ + rpc_forward *p; + + ITER(p, rpc_forward, &rpc_head) { + if (p->rf_xid == id) + return p; + } + + return 0; +} + + +/* + * This is called to forward a packet to another + * RPC server. The message id is changed and noted + * so that when a reply appears we can tie it up + * correctly. Just matching the reply's source address + * would not work because it might come from a + * different address. + */ +int +fwd_packet(int type_id, voidp pkt, int len, struct sockaddr_in *fwdto, struct sockaddr_in *replyto, voidp i, fwd_fun cb) +{ + rpc_forward *p; + u_int *pkt_int; + int error; +#ifdef HAVE_TRANSPORT_TYPE_TLI + struct t_unitdata ud; +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + + if ((int) amd_state >= (int) Finishing) + return ENOENT; + + /* + * See if the type_id is fully specified. + * If so, then discard any old entries + * for this id. + * Otherwise make sure the type_id is + * fully qualified by allocating an id here. + */ +#ifdef DEBUG + switch (type_id & RPC_XID_MASK) { + case RPC_XID_PORTMAP: + dlog("Sending PORTMAP request"); + break; + case RPC_XID_MOUNTD: + dlog("Sending MOUNTD request %#x", type_id); + break; + case RPC_XID_NFSPING: + dlog("Sending NFS ping"); + break; + default: + dlog("UNKNOWN RPC XID"); + break; + } +#endif /* DEBUG */ + + if (type_id & ~RPC_XID_MASK) { + p = fwd_locate(type_id); + if (p) { +#ifdef DEBUG + dlog("Discarding earlier rpc fwd handle"); +#endif /* DEBUG */ + fwd_free(p); + } + } else { +#ifdef DEBUG + dlog("Allocating a new xid..."); +#endif /* DEBUG */ + type_id = MK_RPC_XID(type_id, XID_ALLOC(struct )); + } + + p = fwd_alloc(); + if (!p) + return ENOBUFS; + + error = 0; + + pkt_int = (u_int *) pkt; + + /* + * Get the original packet id + */ + p->rf_oldid = *pkt_int; + + /* + * Replace with newly allocated id + */ + p->rf_xid = *pkt_int = type_id; + + /* + * The sendto may fail if, for example, the route + * to a remote host is lost because an intermediate + * gateway has gone down. Important to fill in the + * rest of "p" otherwise nasty things happen later... + */ +#ifdef DEBUG + { + char dq[20]; + if (p && fwdto) + dlog("Sending packet id %#x to %s.%d", + p->rf_xid, + inet_dquad(dq, fwdto->sin_addr.s_addr), + ntohs(fwdto->sin_port)); + } +#endif /* DEBUG */ + + /* if NULL, remote server probably down */ + if (!fwdto) { + error = AM_ERRNO_HOST_DOWN; + goto out; + } + +#ifdef HAVE_TRANSPORT_TYPE_TLI + ud.addr.buf = (char *) fwdto; + if (fwdto) /* if NULL, set sizes to zero */ + ud.addr.maxlen = ud.addr.len = sizeof(struct sockaddr_in); + else + ud.addr.maxlen = ud.addr.len = 0; + ud.opt.buf = (char *) NULL; + ud.opt.maxlen = ud.opt.len = 0; + ud.udata.buf = pkt; + ud.udata.maxlen = ud.udata.len = len; + if (t_sndudata(fwd_sock, &ud) < 0) { + plog(XLOG_ERROR,"fwd_packet failed: t_errno=%d, errno=%d",t_errno,errno); + error = errno; + } +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + if (sendto(fwd_sock, (char *) pkt, len, 0, + (struct sockaddr *) fwdto, sizeof(*fwdto)) < 0) + error = errno; +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* + * Save callback function and return address + */ +out: + p->rf_fwd = cb; + if (replyto) + p->rf_sin = *replyto; + else + memset((voidp) &p->rf_sin, 0, sizeof(p->rf_sin)); + p->rf_ptr = i; + + return error; +} + + +/* + * Called when some data arrives on the forwarding socket + */ +void +fwd_reply(void) +{ + int len; + u_int pkt[MAX_PACKET_SIZE / sizeof(u_int) + 1]; + u_int *pkt_int; + int rc; + rpc_forward *p; + struct sockaddr_in src_addr; + RECVFROM_FROMLEN_TYPE src_addr_len; +#ifdef HAVE_TRANSPORT_TYPE_TLI + struct t_unitdata ud; + int flags = 0; +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + + /* + * Determine the length of the packet + */ + len = MAX_PACKET_SIZE; + + /* + * Read the packet and check for validity + */ +again: + src_addr_len = sizeof(src_addr); +#ifdef HAVE_TRANSPORT_TYPE_TLI + ud.addr.buf = (char *) &src_addr; + ud.addr.maxlen = ud.addr.len = src_addr_len; + ud.opt.buf = (char *) NULL; + ud.opt.maxlen = ud.opt.len = 0; + ud.udata.buf = (char *) pkt; + ud.udata.maxlen = ud.udata.len = len; + /* XXX: use flags accordingly such as if T_MORE set */ + rc = t_rcvudata(fwd_sock, &ud, &flags); + if (rc == 0) /* success, reset rc to length */ + rc = ud.udata.len; + else { + plog(XLOG_ERROR,"fwd_reply failed: t_errno=%d, errno=%d, flags=%d",t_errno,errno, flags); + } +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + rc = recvfrom(fwd_sock, + (char *) pkt, + len, + 0, + (struct sockaddr *) &src_addr, + &src_addr_len); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* + * XXX: in svr4, if the T_MORE bit of flags is set, what do + * we then do? -Erez + */ + if (rc < 0 || src_addr_len != sizeof(src_addr) || + src_addr.sin_family != AF_INET) { + if (rc < 0 && errno == EINTR) + goto again; + plog(XLOG_ERROR, "Error reading RPC reply: %m"); + goto out; + } + + /* + * Do no more work if finishing soon + */ + if ((int) amd_state >= (int) Finishing) + goto out; + + /* + * Find packet reference + */ + pkt_int = (u_int *) pkt; + +#ifdef DEBUG + switch (*pkt_int & RPC_XID_MASK) { + case RPC_XID_PORTMAP: + dlog("Receiving PORTMAP reply"); + break; + case RPC_XID_MOUNTD: + dlog("Receiving MOUNTD reply %#x", *pkt_int); + break; + case RPC_XID_NFSPING: + dlog("Receiving NFS ping %#x", *pkt_int); + break; + default: + dlog("UNKNOWN RPC XID"); + break; + } +#endif /* DEBUG */ + + p = fwd_locate(*pkt_int); + if (!p) { +#ifdef DEBUG + dlog("Can't forward reply id %#x", *pkt_int); +#endif /* DEBUG */ + goto out; + } + + if (p->rf_fwd) { + /* + * Put the original message id back + * into the packet. + */ + *pkt_int = p->rf_oldid; + + /* + * Call forwarding function + */ + (*p->rf_fwd) ((voidp) pkt, rc, &src_addr, &p->rf_sin, p->rf_ptr, TRUE); + } + + /* + * Free forwarding info + */ + fwd_free(p); + +out:; +} diff --git a/amd/sched.c b/amd/sched.c new file mode 100644 index 0000000..bf7edaf --- /dev/null +++ b/amd/sched.c @@ -0,0 +1,300 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: sched.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Process scheduler + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +typedef struct pjob pjob; + +struct pjob { + qelem hdr; /* Linked list */ + int pid; /* Process ID of job */ + cb_fun cb_fun; /* Callback function */ + voidp cb_closure; /* Closure for callback */ + int w; /* everyone these days uses int, not a "union wait" */ + voidp wchan; /* Wait channel */ +}; + +/* globals */ +qelem proc_list_head = {&proc_list_head, &proc_list_head}; +qelem proc_wait_list = {&proc_wait_list, &proc_wait_list}; +int task_notify_todo; + + +void +ins_que(qelem *elem, qelem *pred) +{ + qelem *p = pred->q_forw; + + elem->q_back = pred; + elem->q_forw = p; + pred->q_forw = elem; + p->q_back = elem; +} + + +void +rem_que(qelem *elem) +{ + qelem *p = elem->q_forw; + qelem *p2 = elem->q_back; + + p2->q_forw = p; + p->q_back = p2; +} + + +static pjob * +sched_job(cb_fun cf, voidp ca) +{ + pjob *p = ALLOC(struct pjob); + + p->cb_fun = cf; + p->cb_closure = ca; + + /* + * Now place on wait queue + */ + ins_que(&p->hdr, &proc_wait_list); + + return p; +} + + +/* + * tf: The task to execute (ta is its arguments) + * cf: Continuation function (ca is its arguments) + */ +void +run_task(task_fun tf, voidp ta, cb_fun cf, voidp ca) +{ + pjob *p = sched_job(cf, ca); +#ifdef HAVE_SIGACTION + sigset_t new, mask; +#else /* not HAVE_SIGACTION */ + int mask; +#endif /* not HAVE_SIGACTION */ + + p->wchan = (voidp) p; + +#ifdef HAVE_SIGACTION + sigemptyset(&new); /* initialize signal set we wish to block */ + sigaddset(&new, SIGCHLD); /* only block on SIGCHLD */ + sigprocmask(SIG_BLOCK, &new, &mask); +#else /* not HAVE_SIGACTION */ + mask = sigblock(sigmask(SIGCHLD)); +#endif /* not HAVE_SIGACTION */ + + if ((p->pid = background())) { +#ifdef HAVE_SIGACTION + sigprocmask(SIG_SETMASK, &mask, NULL); +#else /* not HAVE_SIGACTION */ + sigsetmask(mask); +#endif /* not HAVE_SIGACTION */ + return; + } + + /* child code runs here, parent have returned to caller */ + + exit((*tf) (ta)); + /* firewall... */ + abort(); +} + + +/* + * Schedule a task to be run when woken up + */ +void +sched_task(cb_fun cf, voidp ca, voidp wchan) +{ + /* + * Allocate a new task + */ + pjob *p = sched_job(cf, ca); + +#ifdef DEBUG + dlog("SLEEP on %#x", wchan); +#endif /* DEBUG */ + p->wchan = wchan; + p->pid = 0; + memset((voidp) &p->w, 0, sizeof(p->w)); +} + + +static void +wakeupjob(pjob *p) +{ + rem_que(&p->hdr); + ins_que(&p->hdr, &proc_list_head); + task_notify_todo++; +} + + +void +wakeup(voidp wchan) +{ + pjob *p, *p2; + + if (!foreground) + return; + + /* + * Can't user ITER() here because + * wakeupjob() juggles the list. + */ + for (p = AM_FIRST(pjob, &proc_wait_list); + p2 = NEXT(pjob, p), p != HEAD(pjob, &proc_wait_list); + p = p2) { + if (p->wchan == wchan) { + wakeupjob(p); + } + } +} + + +void +wakeup_task(int rc, int term, voidp cl) +{ + wakeup(cl); +} + + +/* + * Run any pending tasks. + * This must be called with SIGCHLD disabled + */ +void +do_task_notify(void) +{ + /* + * Keep taking the first item off the list and processing it. + * + * Done this way because the the callback can, quite reasonably, + * queue a new task, so no local reference into the list can be + * held here. + */ + while (AM_FIRST(pjob, &proc_list_head) != HEAD(pjob, &proc_list_head)) { + pjob *p = AM_FIRST(pjob, &proc_list_head); + rem_que(&p->hdr); + /* + * This job has completed + */ + --task_notify_todo; + + /* + * Do callback if it exists + */ + if (p->cb_fun) { + /* these two trigraphs will ensure compatibility with strict POSIX.1 */ + (*p->cb_fun) (WIFEXITED(p->w) ? WEXITSTATUS(p->w) : 0, + WIFSIGNALED(p->w) ? WTERMSIG(p->w) : 0, + p->cb_closure); + } + XFREE(p); + } +} + + +RETSIGTYPE +sigchld(int sig) +{ + int w; /* everyone these days uses int, not a "union wait" */ + int pid; + +#ifdef HAVE_WAITPID + while ((pid = waitpid((pid_t) -1, &w, WNOHANG)) > 0) { +#else /* not HAVE_WAITPID */ + while ((pid = wait3( &w, WNOHANG, (struct rusage *) 0)) > 0) { +#endif /* not HAVE_WAITPID */ + pjob *p, *p2; + + if (WIFSIGNALED(w)) + plog(XLOG_ERROR, "Process %d exited with signal %d", + pid, WTERMSIG(w)); +#ifdef DEBUG + else + dlog("Process %d exited with status %d", + pid, WEXITSTATUS(w)); +#endif /* DEBUG */ + + for (p = AM_FIRST(pjob, &proc_wait_list); + p2 = NEXT(pjob, p), p != HEAD(pjob, &proc_wait_list); + p = p2) { + if (p->pid == pid) { + p->w = w; + wakeupjob(p); + break; + } + } /* end of for loop */ + +#ifdef DEBUG + if (!p) + dlog("can't locate task block for pid %d", pid); +#endif /* DEBUG */ + + /* + * Must count down children inside the while loop, otherwise we won't + * count them all, and NumChild (and later backoff) will be set + * incorrectly. SH/RUNIT 940519. + */ + if (--NumChild < 0) + NumChild = 0; + } /* end of "while wait..." loop */ + +#ifdef REINSTALL_SIGNAL_HANDLER + signal(sig, sigchld); +#endif /* REINSTALL_SIGNAL_HANDLER */ + + if (select_intr_valid) + longjmp(select_intr, sig); +} diff --git a/amd/srvr_amfs_auto.c b/amd/srvr_amfs_auto.c new file mode 100644 index 0000000..cf099e8 --- /dev/null +++ b/amd/srvr_amfs_auto.c @@ -0,0 +1,214 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: srvr_amfs_auto.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * Automount FS server ("localhost") modeling + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* globals */ +qelem amfs_auto_srvr_list = {&amfs_auto_srvr_list, &amfs_auto_srvr_list}; + +/* statics */ +static fserver *localhost; + + +/* + * Find an nfs server for the local host + */ +fserver * +find_amfs_auto_srvr(mntfs *mf) +{ + fserver *fs = localhost; + + if (!fs) { + fs = ALLOC(struct fserver); + fs->fs_refc = 0; + fs->fs_host = strdup("localhost"); + fs->fs_ip = 0; + fs->fs_cid = 0; + fs->fs_pinger = 0; + fs->fs_flags = FSF_VALID; + fs->fs_type = "local"; + fs->fs_private = 0; + fs->fs_prfree = 0; + + ins_que(&fs->fs_q, &amfs_auto_srvr_list); + + srvrlog(fs, "starts up"); + + localhost = fs; + } + fs->fs_refc++; + + return fs; +} + + +/***************************************************************************** + *** GENERIC ROUTINES FOLLOW + *****************************************************************************/ + +/* + * Wakeup anything waiting for this server + */ +void +wakeup_srvr(fserver *fs) +{ + fs->fs_flags &= ~FSF_WANT; + wakeup((voidp) fs); +} + + +/* + * Called when final ttl of server has expired + */ +static void +timeout_srvr(voidp v) +{ + fserver *fs = v; + + /* + * If the reference count is still zero then + * we are free to remove this node + */ + if (fs->fs_refc == 0) { +#ifdef DEBUG + dlog("Deleting file server %s", fs->fs_host); +#endif /* DEBUG */ + if (fs->fs_flags & FSF_WANT) + wakeup_srvr(fs); + + /* + * Remove from queue. + */ + rem_que(&fs->fs_q); + /* + * (Possibly) call the private free routine. + */ + if (fs->fs_private && fs->fs_prfree) + (*fs->fs_prfree) (fs->fs_private); + + /* + * Free the net address + */ + if (fs->fs_ip) + XFREE(fs->fs_ip); + + /* + * Free the host name. + */ + XFREE(fs->fs_host); + + /* + * Discard the fserver object. + */ + XFREE(fs); + } +} + + +/* + * Free a file server + */ +void +free_srvr(fserver *fs) +{ + if (--fs->fs_refc == 0) { + /* + * The reference count is now zero, + * so arrange for this node to be + * removed in AM_TTL seconds if no + * other mntfs is referencing it. + */ + int ttl = (fs->fs_flags & (FSF_DOWN | FSF_ERROR)) ? 19 : AM_TTL; + +#ifdef DEBUG + dlog("Last hard reference to file server %s - will timeout in %ds", fs->fs_host, ttl); +#endif /* DEBUG */ + if (fs->fs_cid) { + untimeout(fs->fs_cid); + /* + * Turn off pinging - XXX + */ + fs->fs_flags &= ~FSF_PINGING; + } + + /* + * Keep structure lying around for a while + */ + fs->fs_cid = timeout(ttl, timeout_srvr, (voidp) fs); + + /* + * Mark the fileserver down and invalid again + */ + fs->fs_flags &= ~FSF_VALID; + fs->fs_flags |= FSF_DOWN; + } +} + + +/* + * Make a duplicate fserver reference + */ +fserver * +dup_srvr(fserver *fs) +{ + fs->fs_refc++; + return fs; +} + + +/* + * Log state change + */ +void srvrlog(fserver *fs, char *state) +{ + plog(XLOG_INFO, "file server %s type %s %s", fs->fs_host, fs->fs_type, state); +} diff --git a/amd/srvr_nfs.c b/amd/srvr_nfs.c new file mode 100644 index 0000000..38a2e8e --- /dev/null +++ b/amd/srvr_nfs.c @@ -0,0 +1,851 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: srvr_nfs.c,v 1.1 1998/11/05 02:04:49 ezk Exp $ + * + */ + +/* + * NFS server modeling + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Number of pings allowed to fail before host is declared down + * - three-fifths of the allowed mount time... + */ +#define MAX_ALLOWED_PINGS (3 + /* for luck ... */ 1) + +/* + * How often to ping when starting a new server + */ +#define FAST_NFS_PING 3 + +#if (FAST_NFS_PING * MAX_ALLOWED_PINGS) >= ALLOWED_MOUNT_TIME +# error: sanity check failed in srvr_nfs.c +/* + * you cannot do things this way... + * sufficient fast pings must be given the chance to fail + * within the allowed mount time + */ +#endif /* (FAST_NFS_PING * MAX_ALLOWED_PINGS) >= ALLOWED_MOUNT_TIME */ + +#define NPXID_ALLOC(struct ) (++np_xid) + +/* structures and typedefs */ +typedef struct nfs_private { + u_short np_mountd; /* Mount daemon port number */ + char np_mountd_inval; /* Port *may* be invalid */ + int np_ping; /* Number of failed ping attempts */ + time_t np_ttl; /* Time when server is thought dead */ + int np_xid; /* RPC transaction id for pings */ + int np_error; /* Error during portmap request */ +} nfs_private; + +/* globals */ +qelem nfs_srvr_list = {&nfs_srvr_list, &nfs_srvr_list}; + +/* statics */ +static int np_xid; /* For NFS pings */ +static int ping_len; +static char ping_buf[sizeof(struct rpc_msg) + 32]; + +#if defined(MNTTAB_OPT_PROTO) || defined(HAVE_FS_NFS3) +/* protocols we know about, in order of preference */ +static char *protocols[] = { "tcp", "udp", NULL }; +#endif /* defined(MNTTAB_OPT_PROTO) || defined(HAVE_FS_NFS3) */ + +/* forward definitions */ +static void nfs_keepalive(voidp); + + + +/* + * Flush any cached data + */ +void +flush_srvr_nfs_cache(void) +{ + fserver *fs = 0; + + ITER(fs, fserver, &nfs_srvr_list) { + nfs_private *np = (nfs_private *) fs->fs_private; + if (np) { + np->np_mountd_inval = TRUE; + np->np_error = -1; + } + } +} + + +/* + * Startup the NFS ping for a particular version. + */ +static void +start_ping(u_long nfs_version) +{ + XDR ping_xdr; + struct rpc_msg ping_msg; + + /* + * Non nfs mounts like /afs/glue.umd.edu have ended up here. + */ + if (nfs_version == 0) { + nfs_version = NFS_VERSION; + plog(XLOG_WARNING, "start_ping: nfs_version = 0 fixed"); + } + plog(XLOG_INFO, "start_ping: nfs_version: %d", nfs_version); + + rpc_msg_init(&ping_msg, NFS_PROGRAM, nfs_version, NFSPROC_NULL); + + /* + * Create an XDR endpoint + */ + xdrmem_create(&ping_xdr, ping_buf, sizeof(ping_buf), XDR_ENCODE); + + /* + * Create the NFS ping message + */ + if (!xdr_callmsg(&ping_xdr, &ping_msg)) { + plog(XLOG_ERROR, "Couldn't create ping RPC message"); + going_down(3); + } + /* + * Find out how long it is + */ + ping_len = xdr_getpos(&ping_xdr); + + /* + * Destroy the XDR endpoint - we don't need it anymore + */ + xdr_destroy(&ping_xdr); +} + + +/* + * Called when a portmap reply arrives + */ +static void +got_portmap(voidp pkt, int len, struct sockaddr_in * sa, struct sockaddr_in * ia, voidp idv, int done) +{ + fserver *fs2 = (fserver *) idv; + fserver *fs = 0; + + /* + * Find which fileserver we are talking about + */ + ITER(fs, fserver, &nfs_srvr_list) + if (fs == fs2) + break; + + if (fs == fs2) { + u_long port = 0; /* XXX - should be short but protocol is naff */ + int error = done ? pickup_rpc_reply(pkt, len, (voidp) &port, (XDRPROC_T_TYPE) xdr_u_long) : -1; + nfs_private *np = (nfs_private *) fs->fs_private; + + if (!error && port) { +#ifdef DEBUG + dlog("got port (%d) for mountd on %s", port, fs->fs_host); +#endif /* DEBUG */ + /* + * Grab the port number. Portmap sends back + * an u_long in native ordering, so it + * needs converting to a u_short in + * network ordering. + */ + np->np_mountd = htons((u_short) port); + np->np_mountd_inval = FALSE; + np->np_error = 0; + } else { +#ifdef DEBUG + dlog("Error fetching port for mountd on %s", fs->fs_host); + dlog("\t error=%d, port=%d", error, port); +#endif /* DEBUG */ + /* + * Almost certainly no mountd running on remote host + */ + np->np_error = error ? error : ETIMEDOUT; + } + + if (fs->fs_flags & FSF_WANT) + wakeup_srvr(fs); + } else if (done) { +#ifdef DEBUG + dlog("Got portmap for old port request"); +#endif /* DEBUG */ + } else { +#ifdef DEBUG + dlog("portmap request timed out"); +#endif /* DEBUG */ + } +} + + +/* + * Obtain portmap information + */ +static int +call_portmap(fserver *fs, AUTH * auth, u_long prog, u_long vers, u_long prot) +{ + struct rpc_msg pmap_msg; + int len; + char iobuf[UDPMSGSIZE]; + int error; + struct pmap pmap; + + rpc_msg_init(&pmap_msg, PMAPPROG, PMAPVERS, PMAPPROC_NULL); + pmap.pm_prog = prog; + pmap.pm_vers = vers; + pmap.pm_prot = prot; + pmap.pm_port = 0; + len = make_rpc_packet(iobuf, + sizeof(iobuf), + PMAPPROC_GETPORT, + &pmap_msg, + (voidp) &pmap, + (XDRPROC_T_TYPE) xdr_pmap, + auth); + if (len > 0) { + struct sockaddr_in sin; + memset((voidp) &sin, 0, sizeof(sin)); + sin = *fs->fs_ip; + sin.sin_port = htons(PMAPPORT); + error = fwd_packet(RPC_XID_PORTMAP, (voidp) iobuf, len, + &sin, &sin, (voidp) fs, got_portmap); + } else { + error = -len; + } + + return error; +} + + +static void +recompute_portmap(fserver *fs) +{ + int error; + u_long mnt_version; + + if (nfs_auth) + error = 0; + else + error = make_nfs_auth(); + + if (error) { + nfs_private *np = (nfs_private *) fs->fs_private; + np->np_error = error; + return; + } + + if (fs->fs_version == 0) + plog(XLOG_WARNING, "recompute_portmap: nfs_version = 0 fixed"); + + plog(XLOG_INFO, "recompute_portmap: NFS version %d", fs->fs_version); +#ifdef HAVE_FS_NFS3 + if (fs->fs_version == NFS_VERSION3) + mnt_version = MOUNTVERS3; + else +#endif /* HAVE_FS_NFS3 */ + mnt_version = MOUNTVERS; + + plog(XLOG_INFO, "Using MOUNT version: %d", mnt_version); + call_portmap(fs, nfs_auth, MOUNTPROG, mnt_version, (u_long) IPPROTO_UDP); +} + + +/* + * This is called when we get a reply to an RPC ping. + * The value of id was taken from the nfs_private + * structure when the ping was transmitted. + */ +static void +nfs_pinged(voidp pkt, int len, struct sockaddr_in * sp, struct sockaddr_in * tsp, voidp idv, int done) +{ + int xid = (long) idv; /* for 64-bit archs */ + fserver *fs; +#ifdef DEBUG + int found_map = 0; +#endif /* DEBUG */ + + if (!done) + return; + + /* + * For each node... + */ + ITER(fs, fserver, &nfs_srvr_list) { + nfs_private *np = (nfs_private *) fs->fs_private; + if (np->np_xid == xid && (fs->fs_flags & FSF_PINGING)) { + /* + * Reset the ping counter. + * Update the keepalive timer. + * Log what happened. + */ + if (fs->fs_flags & FSF_DOWN) { + fs->fs_flags &= ~FSF_DOWN; + if (fs->fs_flags & FSF_VALID) { + srvrlog(fs, "is up"); + } else { + if (np->np_ping > 1) + srvrlog(fs, "ok"); +#ifdef DEBUG + else + srvrlog(fs, "starts up"); +#endif /* DEBUG */ + fs->fs_flags |= FSF_VALID; + } + + map_flush_srvr(fs); + } else { + if (fs->fs_flags & FSF_VALID) { +#ifdef DEBUG + dlog("file server %s type nfs is still up", fs->fs_host); +#endif /* DEBUG */ + } else { + if (np->np_ping > 1) + srvrlog(fs, "ok"); + fs->fs_flags |= FSF_VALID; + } + } + + /* + * Adjust ping interval + */ + untimeout(fs->fs_cid); + fs->fs_cid = timeout(fs->fs_pinger, nfs_keepalive, (voidp) fs); + + /* + * Update ttl for this server + */ + np->np_ttl = clocktime() + + (MAX_ALLOWED_PINGS - 1) * FAST_NFS_PING + fs->fs_pinger - 1; + + /* + * New RPC xid... + */ + np->np_xid = NPXID_ALLOC(struct ); + + /* + * Failed pings is zero... + */ + np->np_ping = 0; + + /* + * Recompute portmap information if not known + */ + if (np->np_mountd_inval) + recompute_portmap(fs); + +#ifdef DEBUG + found_map++; +#endif /* DEBUG */ + break; + } + } + +#ifdef DEBUG + if (found_map == 0) + dlog("Spurious ping packet"); +#endif /* DEBUG */ +} + + +/* + * Called when no ping-reply received + */ +static void +nfs_timed_out(voidp v) +{ + fserver *fs = v; + nfs_private *np = (nfs_private *) fs->fs_private; + + /* + * Another ping has failed + */ + np->np_ping++; + + /* + * Not known to be up any longer + */ + if (FSRV_ISUP(fs)) { + fs->fs_flags &= ~FSF_VALID; + if (np->np_ping > 1) + srvrlog(fs, "not responding"); + } + + /* + * If ttl has expired then guess that it is dead + */ + if (np->np_ttl < clocktime()) { + int oflags = fs->fs_flags; + if ((fs->fs_flags & FSF_DOWN) == 0) { + /* + * Server was up, but is now down. + */ + srvrlog(fs, "is down"); + fs->fs_flags |= FSF_DOWN | FSF_VALID; + /* + * Since the server is down, the portmap + * information may now be wrong, so it + * must be flushed from the local cache + */ + flush_nfs_fhandle_cache(fs); + np->np_error = -1; + } else { + /* + * Known to be down + */ +#ifdef DEBUG + if ((fs->fs_flags & FSF_VALID) == 0) + srvrlog(fs, "starts down"); +#endif /* DEBUG */ + fs->fs_flags |= FSF_VALID; + } + if (oflags != fs->fs_flags && (fs->fs_flags & FSF_WANT)) + wakeup_srvr(fs); + } else { +#ifdef DEBUG + if (np->np_ping > 1) + dlog("%d pings to %s failed - at most %d allowed", np->np_ping, fs->fs_host, MAX_ALLOWED_PINGS); +#endif /* DEBUG */ + } + + /* + * Run keepalive again + */ + nfs_keepalive(fs); +} + + +/* + * Keep track of whether a server is alive + */ +static void +nfs_keepalive(voidp v) +{ + fserver *fs = v; + int error; + nfs_private *np = (nfs_private *) fs->fs_private; + int fstimeo = -1; + + /* + * Send an NFS ping to this node + */ + + if (ping_len == 0) + start_ping(fs->fs_version); + + /* + * Queue the packet... + */ + error = fwd_packet(MK_RPC_XID(RPC_XID_NFSPING, np->np_xid), + (voidp) ping_buf, + ping_len, + fs->fs_ip, + (struct sockaddr_in *) 0, + (voidp) ((long) np->np_xid), /* for 64-bit archs */ + nfs_pinged); + + /* + * See if a hard error occurred + */ + switch (error) { + case ENETDOWN: + case ENETUNREACH: + case EHOSTDOWN: + case EHOSTUNREACH: + np->np_ping = MAX_ALLOWED_PINGS; /* immediately down */ + np->np_ttl = (time_t) 0; + /* + * This causes an immediate call to nfs_timed_out + * whenever the server was thought to be up. + * See +++ below. + */ + fstimeo = 0; + break; + + case 0: +#ifdef DEBUG + dlog("Sent NFS ping to %s", fs->fs_host); +#endif /* DEBUG */ + break; + } + + /* + * Back off the ping interval if we are not getting replies and + * the remote system is know to be down. + */ + switch (fs->fs_flags & (FSF_DOWN | FSF_VALID)) { + case FSF_VALID: /* Up */ + if (fstimeo < 0) /* +++ see above */ + fstimeo = FAST_NFS_PING; + break; + + case FSF_VALID | FSF_DOWN: /* Down */ + fstimeo = fs->fs_pinger; + break; + + default: /* Unknown */ + fstimeo = FAST_NFS_PING; + break; + } + +#ifdef DEBUG + dlog("NFS timeout in %d seconds", fstimeo); +#endif /* DEBUG */ + + fs->fs_cid = timeout(fstimeo, nfs_timed_out, (voidp) fs); +} + + +int +nfs_srvr_port(fserver *fs, u_short * port, voidp wchan) +{ + int error = -1; + if ((fs->fs_flags & FSF_VALID) == FSF_VALID) { + if ((fs->fs_flags & FSF_DOWN) == 0) { + nfs_private *np = (nfs_private *) fs->fs_private; + if (np->np_error == 0) { + *port = np->np_mountd; + error = 0; + } else { + error = np->np_error; + } + /* + * Now go get the port mapping again in case it changed. + * Note that it is used even if (np_mountd_inval) + * is True. The flag is used simply as an + * indication that the mountd may be invalid, not + * that it is known to be invalid. + */ + if (np->np_mountd_inval) + recompute_portmap(fs); + else + np->np_mountd_inval = TRUE; + } else { + error = EWOULDBLOCK; + } + } + if (error < 0 && wchan && !(fs->fs_flags & FSF_WANT)) { + /* + * If a wait channel is supplied, and no + * error has yet occurred, then arrange + * that a wakeup is done on the wait channel, + * whenever a wakeup is done on this fs node. + * Wakeup's are done on the fs node whenever + * it changes state - thus causing control to + * come back here and new, better things to happen. + */ + fs->fs_flags |= FSF_WANT; + sched_task(wakeup_task, wchan, (voidp) fs); + } + return error; +} + + +static void +start_nfs_pings(fserver *fs, int pingval) +{ + if (!(fs->fs_flags & FSF_PINGING)) { + fs->fs_flags |= FSF_PINGING; + if (fs->fs_cid) + untimeout(fs->fs_cid); + if (pingval < 0) { + srvrlog(fs, "wired up"); + fs->fs_flags |= FSF_VALID; + fs->fs_flags &= ~FSF_DOWN; + } else { + nfs_keepalive(fs); + } + } else { +#ifdef DEBUG + dlog("Already running pings to %s", fs->fs_host); +#endif /* DEBUG */ + } +} + + +/* + * Find an nfs server for a host. + */ +fserver * +find_nfs_srvr(mntfs *mf) +{ + char *host = mf->mf_fo->opt_rhost; + char *nfs_proto = NULL; + fserver *fs; + int pingval; + mntent_t mnt; + nfs_private *np; + struct hostent *hp = 0; + struct sockaddr_in *ip; + u_long nfs_version = 0; /* default is no version specified */ +#ifdef MNTTAB_OPT_PROTO + char *rfsname = mf->mf_fo->opt_rfs; +#endif /* MNTTAB_OPT_PROTO */ + + /* + * Get ping interval from mount options. + * Current only used to decide whether pings + * are required or not. < 0 = no pings. + */ + mnt.mnt_opts = mf->mf_mopts; + pingval = hasmntval(&mnt, "ping"); + + /* + * Get the NFS version from the mount options. This is used + * to decide the highest NFS version to try. + */ +#ifdef MNTTAB_OPT_VERS + nfs_version = hasmntval(&mnt, MNTTAB_OPT_VERS); +#endif /* MNTTAB_OPT_VERS */ + +#ifdef MNTTAB_OPT_PROTO + { + char *proto_opt = hasmntopt(&mnt, MNTTAB_OPT_PROTO); + if (proto_opt) { + char **p; + + proto_opt += sizeof(MNTTAB_OPT_PROTO) - 1; /* skip the "proto" */ + + for (p = protocols; *p; p ++) + if (proto_opt[0] == '=' && + NSTREQ(&proto_opt[1], *p, strlen(*p))) { + nfs_proto = *p; + break; + } + if (*p == NULL) + plog(XLOG_WARNING, "ignoring unknown protocol option for %s:%s", + host, rfsname); + } + } +#endif /* MNTTAB_OPT_PROTO */ + + /* + * lookup host address and canonical name + */ + hp = gethostbyname(host); + + /* + * New code from Bob Harris + * Use canonical name to keep track of file server + * information. This way aliases do not generate + * multiple NFS pingers. (Except when we're normalizing + * hosts.) + */ + if (hp && !(gopt.flags & CFM_NORMALIZE_HOSTNAMES)) + host = (char *) hp->h_name; + + if (hp) { + switch (hp->h_addrtype) { + case AF_INET: + ip = ALLOC(struct sockaddr_in); + memset((voidp) ip, 0, sizeof(*ip)); + ip->sin_family = AF_INET; + memmove((voidp) &ip->sin_addr, (voidp) hp->h_addr, sizeof(ip->sin_addr)); + + ip->sin_port = htons(NFS_PORT); + break; + + default: + ip = 0; + break; + } + } else { + plog(XLOG_USER, "Unknown host: %s", host); + ip = 0; + } + + /* + * Get the NFS Version, and verify server is up. Probably no + * longer need to start server down below. + */ + if (ip) { +#ifdef HAVE_FS_NFS3 + /* + * Find the best combination of NFS version and protocol. + * When given a choice, use the highest available version, + * and use TCP over UDP if available. + */ + if (nfs_proto) + nfs_version = get_nfs_version(host, ip, nfs_version, nfs_proto); + else { + int best_nfs_version = 0; + int proto_nfs_version; + char **p; + + for (p = protocols; *p; p ++) { + proto_nfs_version = get_nfs_version(host, ip, nfs_version, *p); + + if (proto_nfs_version > best_nfs_version) { + best_nfs_version = proto_nfs_version; + nfs_proto = *p; + } + } + nfs_version = best_nfs_version; + } + + if (!nfs_version) { + /* + * If the NFS server is down or does not support the portmapper call + * (such as certain Novell NFS servers) we mark it as version 2 and we + * let the nfs code deal with the case that is down. If when the + * server comes back up, it can support NFS V.3 and/or TCP, it will + * use those. + */ + nfs_version = NFS_VERSION; + nfs_proto = "udp"; + } +#else /* not HAVE_FS_NFS3 */ + nfs_version = NFS_VERSION; +#endif /* not HAVE_FS_NFS3 */ + } + + if (!nfs_proto) + nfs_proto = "udp"; + + plog(XLOG_INFO, "Using NFS version %d, protocol %s on host %s", + nfs_version, nfs_proto, host); + + /* + * Try to find an existing fs server structure for this host. + * Note that differing versions or protocols have their own structures. + * XXX: Need to fix the ping mechanism to actually use the NFS protocol + * chosen here (right now it always uses datagram sockets). + */ + ITER(fs, fserver, &nfs_srvr_list) { + if (STREQ(host, fs->fs_host) && + nfs_version == fs->fs_version && + STREQ(nfs_proto, fs->fs_proto)) { + /* + * following if statement from Mike Mitchell + * + * Initialize the ping data if we aren't pinging + * now. The np_ttl and np_ping fields are + * especially important. + */ + if (!(fs->fs_flags & FSF_PINGING)) { + np = (nfs_private *) fs->fs_private; + np->np_mountd_inval = TRUE; + np->np_xid = NPXID_ALLOC(struct ); + np->np_error = -1; + np->np_ping = 0; + /* + * Initially the server will be deemed dead + * after MAX_ALLOWED_PINGS of the fast variety + * have failed. + */ + np->np_ttl = MAX_ALLOWED_PINGS * FAST_NFS_PING + clocktime() - 1; + } + /* + * fill in the IP address -- this is only needed + * if there is a chance an IP address will change + * between mounts. + * Mike Mitchell, mcm@unx.sas.com, 09/08/93 + */ + if (hp && fs->fs_ip) + memmove((voidp) &fs->fs_ip->sin_addr, (voidp) hp->h_addr, sizeof(fs->fs_ip->sin_addr)); + + start_nfs_pings(fs, pingval); + fs->fs_refc++; + if (ip) + XFREE(ip); + return fs; + } + } + + /* + * Get here if we can't find an entry + */ + + /* + * Allocate a new server + */ + fs = ALLOC(struct fserver); + fs->fs_refc = 1; + fs->fs_host = strdup(hp ? hp->h_name : "unknown_hostname"); + if (gopt.flags & CFM_NORMALIZE_HOSTNAMES) + host_normalize(&fs->fs_host); + fs->fs_ip = ip; + fs->fs_cid = 0; + if (ip) { + fs->fs_flags = FSF_DOWN; /* Starts off down */ + } else { + fs->fs_flags = FSF_ERROR | FSF_VALID; + mf->mf_flags |= MFF_ERROR; + mf->mf_error = ENOENT; + } + fs->fs_version = nfs_version; + fs->fs_proto = nfs_proto; + fs->fs_type = MNTTAB_TYPE_NFS; + fs->fs_pinger = AM_PINGER; + np = ALLOC(struct nfs_private); + memset((voidp) np, 0, sizeof(*np)); + np->np_mountd_inval = TRUE; + np->np_xid = NPXID_ALLOC(struct ); + np->np_error = -1; + + /* + * Initially the server will be deemed dead after + * MAX_ALLOWED_PINGS of the fast variety have failed. + */ + np->np_ttl = clocktime() + MAX_ALLOWED_PINGS * FAST_NFS_PING - 1; + fs->fs_private = (voidp) np; + fs->fs_prfree = (void (*)(voidp)) free; + + if (!(fs->fs_flags & FSF_ERROR)) { + /* + * Start of keepalive timer + */ + start_nfs_pings(fs, pingval); + } + + /* + * Add to list of servers + */ + ins_que(&fs->fs_q, &nfs_srvr_list); + + return fs; +} diff --git a/amq/Makefile.am b/amq/Makefile.am new file mode 100644 index 0000000..a7a92a4 --- /dev/null +++ b/amq/Makefile.am @@ -0,0 +1,50 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for amq/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = amq +bin_PROGRAMS = pawd + +# man pages +man_MANS = amq.8 pawd.1 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + amq.h + +amq_SOURCES = \ + amq.c \ + amq_clnt.c \ + amq_xdr.c + +pawd_SOURCES = \ + amq_clnt.c \ + amq_xdr.c \ + pawd.c + +LDADD = ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) diff --git a/amq/Makefile.in b/amq/Makefile.in new file mode 100644 index 0000000..408156c --- /dev/null +++ b/amq/Makefile.in @@ -0,0 +1,451 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for amq/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = amq +bin_PROGRAMS = pawd + +# man pages +man_MANS = amq.8 pawd.1 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + amq.h + +amq_SOURCES = \ + amq.c \ + amq_clnt.c \ + amq_xdr.c + +pawd_SOURCES = \ + amq_clnt.c \ + amq_xdr.c \ + pawd.c + +LDADD = ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +pawd_OBJECTS = amq_clnt.o amq_xdr.o pawd.o +pawd_LDADD = $(LDADD) +pawd_DEPENDENCIES = ../libamu/libamu.la +pawd_LDFLAGS = +amq_OBJECTS = amq.o amq_clnt.o amq_xdr.o +amq_LDADD = $(LDADD) +amq_DEPENDENCIES = ../libamu/libamu.la +amq_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man1dir = $(mandir)/man1 +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(pawd_SOURCES) $(amq_SOURCES) +OBJECTS = $(pawd_OBJECTS) $(amq_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps amq/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + done + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +pawd: $(pawd_OBJECTS) $(pawd_DEPENDENCIES) + @rm -f pawd + $(LINK) $(pawd_LDFLAGS) $(pawd_OBJECTS) $(pawd_LDADD) $(LIBS) + +amq: $(amq_OBJECTS) $(amq_DEPENDENCIES) + @rm -f amq + $(LINK) $(amq_LDFLAGS) $(amq_OBJECTS) $(amq_LDADD) $(LIBS) + +install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + +uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man1 install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man1 uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = amq + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-binPROGRAMS install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-binPROGRAMS uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(bindir) $(DATADIR)$(sbindir) \ + $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-binPROGRAMS mostlyclean-sbinPROGRAMS \ + mostlyclean-compile mostlyclean-libtool \ + mostlyclean-tags mostlyclean-generic + +clean: clean-binPROGRAMS clean-sbinPROGRAMS clean-compile clean-libtool \ + clean-tags clean-generic mostlyclean + +distclean: distclean-binPROGRAMS distclean-sbinPROGRAMS \ + distclean-compile distclean-libtool distclean-tags \ + distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-binPROGRAMS \ + maintainer-clean-sbinPROGRAMS maintainer-clean-compile \ + maintainer-clean-libtool maintainer-clean-tags \ + maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS clean-sbinPROGRAMS \ +maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man1 \ +uninstall-man1 install-man8 uninstall-man8 install-man uninstall-man \ +tags mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \ +distdir info dvi installcheck install-exec install-data install \ +uninstall all installdirs mostlyclean-generic distclean-generic \ +clean-generic maintainer-clean-generic clean mostlyclean distclean \ +maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/amq/amq.8 b/amq/amq.8 new file mode 100644 index 0000000..76cfcc0 --- /dev/null +++ b/amq/amq.8 @@ -0,0 +1,214 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1990 Jan-Simon Pendry +.\" Copyright (c) 1990 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1990 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" %W% (Berkeley) %G% +.\" +.\" $Id: amq.8,v 1.1 1998/11/05 02:04:52 ezk Exp $ +.\" +.TH AMQ 8 "25 April 1989" +.SH NAME +amq \- automounter query tool +.SH SYNOPSIS +.B amq +[ +.BI \-fmpsuvTU +] [ +.BI \-h " hostname" +] [ +.BI \-l " log_file" +] [ +.BI \-x " log_options" +] [ +.BI \-D " debug_options" +] [ +.BI \-M " mountmap entry" +] [ +.BI \-P " program_number" +] [ +.I directory +] .\|.\|. +.SH DESCRIPTION +.B Amq +provides a simple way of determining the current state of +.B amd +program. +Communication is by +.SM RPC. +Three modes of operation are supported by the current protocol. By default +a list of mount points and auto-mounted filesystems is output. An +alternative host can be specified using the +.I \-h +option. +.LP +If +.I directory +names are given, as output by default, then per-filesystem +information is displayed. +.SH OPTIONS + +.TP +.B \-f +Ask the automounter to flush the internal caches. + +.TP +.BI \-h " hostname" +Specify an alternate host to query. By default the local host is used. In +an +.SM HP-UX +cluster, the root server is queried by default, since that is the system on +which the automounter is normally run. + +.TP +.BI \-l " log_file" +Tell amd to use +.I log_file +as the log file name. For security reasons, this must be the same log file +which amd used when started. This option is therefore only useful to +refresh amd's open file handle on the log file, so that it can be rotated +and compressed via daily cron jobs. + +.TP +.B \-m +Ask the automounter to provide a list of mounted filesystems, including the +number of references to each filesystem and any error which occurred while +mounting. + +.TP +.B \-p +Return the process ID of the remote or locally running amd. Useful when you +need to send a signal to the local amd process, and would rather not have to +search through the process table. This option is used in the +.I ctl-amd +script. + +.TP +.B \-s +Ask the automounter to provide system-wide mount statistics. + +.TP +.B \-u +Ask the automounter to unmount the filesystems named in +.I directory +instead of providing +information about them. Unmounts are requested, not forced. They merely +cause the mounted filesystem to timeout, which will be picked up by +.BR amd 's +main scheduler thus causing the normal timeout action to be taken. + +.TP +.B \-v +Ask the automounter for its version information. This is a subset of the +information output by +.BR amd 's +.I -v +option. + +.TP +.BI \-x " log_options" +Ask the automounter to use the logging options specified in +.I log_options +from now on. + +.TP +.BI \-D " log_options" +Ask the automounter to use the debugging options specified in +.I debug_options +from now on. + +.TP +.BI \-M " map_ent" +Pass a mount map entry to +.B amd +and wait for it to be evaluated, possible causing a mount. This option is +highly insecure. By default, amd and amq do not support it. You have to +configure am-utils with +.I \-\-enable\-amq\-mount +to enable this option. + +.TP +.BI \-P " program_number" +Contact an alternate running amd that had registered itself on a different +RPC +.I program_number +and apply all other operations to that instance of the automounter. This is +useful when you run multiple copies of amd, and need to manage each +one separately. If not specified, amq will use the default program number +for amd, 300019. For security reasons, the only alternate program numbers +amd can use range from 300019 to 300029, inclusive. + +.TP +.B \-T +Contact +.B amd +using the TCP transport only. Normally +.B amq +will try TCP, and if that failed, will try UDP. + +.TP +.B \-U +Contact +.B amd +using UDP (connectionless) transport only. Normally +.B amq +will try TCP, and if that failed, will try UDP. + +.SH FILES +.PD 0 +.TP 20 +.B amq.x +.SM RPC +protocol description. +.SH CAVEATS +.B Amq +uses a Sun registered +.SM RPC +program number (300019 decimal) which may not +be in the /etc/rpc database. +.SH "SEE ALSO" +.BR amd (8), +.BR ctl-amd (8), +.BR amd.conf (5). +.SH AUTHORS +Jan-Simon Pendry , Department of Computing, Imperial College, London, UK. +.P +Erez Zadok , Department of Computer Science, Columbia +University, New York, USA. +.P +Other authors and contributors to am-utils are listed in the +.B AUTHORS +file distributed with am-utils. diff --git a/amq/amq.c b/amq/amq.c new file mode 100644 index 0000000..91c890e --- /dev/null +++ b/amq/amq.c @@ -0,0 +1,938 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq.c,v 1.1 1998/11/05 02:04:52 ezk Exp $ + * + */ + +/* + * Automounter query tool + */ + +#ifndef lint +char copyright[] = "\ +@(#)Copyright (c) 1997-1998 Erez Zadok\n\ +@(#)Copyright (c) 1990 Jan-Simon Pendry\n\ +@(#)Copyright (c) 1990 Imperial College of Science, Technology & Medicine\n\ +@(#)Copyright (c) 1990 The Regents of the University of California.\n\ +@(#)All rights reserved.\n"; +#if __GNUC__ < 2 +static char rcsid[] = "$Id: amq.c,v 1.1 1998/11/05 02:04:52 ezk Exp $"; +static char sccsid[] = "%W% (Berkeley) %G%"; +#endif /* __GNUC__ < 2 */ +#endif /* not lint */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* locals */ +char *progname; +static int flush_flag; +static int minfo_flag; +static int getpid_flag; +static int unmount_flag; +static int stats_flag; +static int getvers_flag; +static int amd_program_number = AMQ_PROGRAM; +static int use_tcp_flag, use_udp_flag; +static char *debug_opts; +static char *amq_logfile; +static char *mount_map; +static char *xlog_optstr; +static char localhost[] = "localhost"; +static char *def_server = localhost; + +/* externals */ +extern int optind; +extern char *optarg; + +/* forward declarations */ +#ifdef HAVE_TRANSPORT_TYPE_TLI +static CLIENT *get_secure_amd_client(char *host, struct timeval *tv, int *sock); +static int amq_bind_resv_port(int td, u_short *pp); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ +static int privsock(int ty); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + +/* dummy variables */ +char hostname[MAXHOSTNAMELEN]; +int orig_umask, foreground, debug_flags; +pid_t mypid; +serv_state amd_state; + +/* structures */ +enum show_opt { + Full, Stats, Calc, Short, ShowDone +}; + + +/* + * If (e) is Calc then just calculate the sizes + * Otherwise display the mount node on stdout + */ +static void +show_mti(amq_mount_tree *mt, enum show_opt e, int *mwid, int *dwid, int *twid) +{ + switch (e) { + case Calc: + { + int mw = strlen(mt->mt_mountinfo); + int dw = strlen(mt->mt_directory); + int tw = strlen(mt->mt_type); + if (mw > *mwid) + *mwid = mw; + if (dw > *dwid) + *dwid = dw; + if (tw > *twid) + *twid = tw; + } + break; + + case Full: + { + struct tm *tp = localtime((time_t *) &mt->mt_mounttime); + printf("%-*.*s %-*.*s %-*.*s %s\n\t%-5d %-7d %-6d %-7d %-7d %-6d %02d/%02d/%02d %02d:%02d:%02d\n", + *dwid, *dwid, + *mt->mt_directory ? mt->mt_directory : "/", /* XXX */ + *twid, *twid, + mt->mt_type, + *mwid, *mwid, + mt->mt_mountinfo, + mt->mt_mountpoint, + + mt->mt_mountuid, + mt->mt_getattr, + mt->mt_lookup, + mt->mt_readdir, + mt->mt_readlink, + mt->mt_statfs, + + tp->tm_year > 99 ? tp->tm_year - 100 : tp->tm_year, + tp->tm_mon + 1, tp->tm_mday, + tp->tm_hour, tp->tm_min, tp->tm_sec); + } + break; + + case Stats: + { + struct tm *tp = localtime((time_t *) &mt->mt_mounttime); + printf("%-*.*s %-5d %-7d %-6d %-7d %-7d %-6d %02d/%02d/%02d %02d:%02d:%02d\n", + *dwid, *dwid, + *mt->mt_directory ? mt->mt_directory : "/", /* XXX */ + + mt->mt_mountuid, + mt->mt_getattr, + mt->mt_lookup, + mt->mt_readdir, + mt->mt_readlink, + mt->mt_statfs, + + tp->tm_year > 99 ? tp->tm_year - 100 : tp->tm_year, + tp->tm_mon + 1, tp->tm_mday, + tp->tm_hour, tp->tm_min, tp->tm_sec); + } + break; + + case Short: + { + printf("%-*.*s %-*.*s %-*.*s %s\n", + *dwid, *dwid, + *mt->mt_directory ? mt->mt_directory : "/", + *twid, *twid, + mt->mt_type, + *mwid, *mwid, + mt->mt_mountinfo, + mt->mt_mountpoint); + } + break; + + default: + break; + } +} + +/* + * Display a mount tree. + */ +static void +show_mt(amq_mount_tree *mt, enum show_opt e, int *mwid, int *dwid, int *pwid) +{ + while (mt) { + show_mti(mt, e, mwid, dwid, pwid); + show_mt(mt->mt_next, e, mwid, dwid, pwid); + mt = mt->mt_child; + } +} + +static void +show_mi(amq_mount_info_list *ml, enum show_opt e, int *mwid, int *dwid, int *twid) +{ + int i; + + switch (e) { + + case Calc: + { + for (i = 0; i < ml->amq_mount_info_list_len; i++) { + amq_mount_info *mi = &ml->amq_mount_info_list_val[i]; + int mw = strlen(mi->mi_mountinfo); + int dw = strlen(mi->mi_mountpt); + int tw = strlen(mi->mi_type); + if (mw > *mwid) + *mwid = mw; + if (dw > *dwid) + *dwid = dw; + if (tw > *twid) + *twid = tw; + } + } + break; + + case Full: + { + for (i = 0; i < ml->amq_mount_info_list_len; i++) { + amq_mount_info *mi = &ml->amq_mount_info_list_val[i]; + printf("%-*.*s %-*.*s %-*.*s %-3d %s is %s", + *mwid, *mwid, mi->mi_mountinfo, + *dwid, *dwid, mi->mi_mountpt, + *twid, *twid, mi->mi_type, + mi->mi_refc, mi->mi_fserver, + mi->mi_up > 0 ? "up" : + mi->mi_up < 0 ? "starting" : "down"); + if (mi->mi_error > 0) { + extern int sys_nerr; + if (mi->mi_error < sys_nerr) + printf(" (%s)", sys_errlist[mi->mi_error]); + else + printf(" (Error %d)", mi->mi_error); + } else if (mi->mi_error < 0) { + fputs(" (in progress)", stdout); + } + fputc('\n', stdout); + } + } + break; + + default: + break; + } +} + + +/* + * Display general mount statistics + */ +static void +show_ms(amq_mount_stats *ms) +{ + printf("\ +requests stale mount mount unmount\n\ +deferred fhandles ok failed failed\n\ +%-9d %-9d %-9d %-9d %-9d\n", + ms->as_drops, ms->as_stale, ms->as_mok, ms->as_merr, ms->as_uerr); +} + + +#if defined(HAVE_CLUSTER_H) && defined(HAVE_CNODEID) && defined(HAVE_GETCCENT) +static char * +cluster_server(void) +{ + struct cct_entry *cp; + + if (cnodeid() == 0) { + /* + * Not clustered + */ + return def_server; + } + while (cp = getccent()) + if (cp->cnode_type == 'r') + return cp->cnode_name; + + return def_server; +} +#endif /* defined(HAVE_CLUSTER_H) && defined(HAVE_CNODEID) && defined(HAVE_GETCCENT) */ + + +/* + * MAIN + */ +int +main(int argc, char *argv[]) +{ + int opt_ch; + int errs = 0; + char *server; + struct sockaddr_in server_addr; + int s; /* to pass the Amd security check, we must use a priv port */ + CLIENT *clnt = NULL; + struct hostent *hp; + int nodefault = 0; + struct timeval tv; +#ifndef HAVE_TRANSPORT_TYPE_TLI + enum clnt_stat cs; +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + + /* + * Compute program name + */ + if (argv[0]) { + progname = strrchr(argv[0], '/'); + if (progname && progname[1]) + progname++; + else + progname = argv[0]; + } + if (!progname) + progname = "amq"; + + /* + * Parse arguments + */ + while ((opt_ch = getopt(argc, argv, "fh:l:msuvx:D:M:pP:TU")) != EOF) + switch (opt_ch) { + case 'f': + flush_flag = 1; + nodefault = 1; + break; + + case 'h': + def_server = optarg; + break; + + case 'l': + amq_logfile = optarg; + nodefault = 1; + break; + + case 'm': + minfo_flag = 1; + nodefault = 1; + break; + + case 'p': + getpid_flag = 1; + nodefault = 1; + break; + + case 's': + stats_flag = 1; + nodefault = 1; + break; + + case 'u': + unmount_flag = 1; + nodefault = 1; + break; + + case 'v': + getvers_flag = 1; + nodefault = 1; + break; + + case 'x': + xlog_optstr = optarg; + nodefault = 1; + break; + + case 'D': + debug_opts = optarg; + nodefault = 1; + break; + + case 'M': + mount_map = optarg; + nodefault = 1; + break; + + case 'P': + amd_program_number = atoi(optarg); + break; + + case 'T': + use_tcp_flag = 1; + break; + + case 'U': + use_udp_flag = 1; + break; + + default: + errs = 1; + break; + } + + if (optind == argc) { + if (unmount_flag) + errs = 1; + } + if (errs) { + show_usage: + fprintf(stderr, "\ +Usage: %s [-h host] [[-f] [-m] [-p] [-v] [-s]] | [[-u] directory ...]]\n\ +\t[-l logfile|\"syslog\"] [-x log_flags] [-D dbg_opts] [-M mapent]\n\ +\t[-P prognum] [-T] [-U]\n", progname); + exit(1); + } + + /* set use_udp and use_tcp flags both to on if none are defined */ + if (!use_tcp_flag && !use_udp_flag) + use_tcp_flag = use_udp_flag = 1; + +#if defined(HAVE_CLUSTER_H) && defined(HAVE_CNODEID) && defined(HAVE_GETCCENT) + /* + * Figure out root server of cluster + */ + if (def_server == localhost) + server = cluster_server(); + else +#endif /* defined(HAVE_CLUSTER_H) && defined(HAVE_CNODEID) && defined(HAVE_GETCCENT) */ + server = def_server; + + /* + * Get address of server + */ + if ((hp = gethostbyname(server)) == 0 && !STREQ(server, localhost)) { + fprintf(stderr, "%s: Can't get address of %s\n", progname, server); + exit(1); + } + memset(&server_addr, 0, sizeof server_addr); + server_addr.sin_family = AF_INET; + if (hp) { + memmove((voidp) &server_addr.sin_addr, (voidp) hp->h_addr, + sizeof(server_addr.sin_addr)); + } else { + /* fake "localhost" */ + server_addr.sin_addr.s_addr = htonl(0x7f000001); + } + + /* + * Create RPC endpoint + */ + tv.tv_sec = 5; /* 5 seconds for timeout or per retry */ + tv.tv_usec = 0; + +#ifdef HAVE_TRANSPORT_TYPE_TLI + clnt = get_secure_amd_client(server, &tv, &s); + if (!clnt && use_tcp_flag) /* try tcp first */ + clnt = clnt_create(server, amd_program_number, AMQ_VERSION, "tcp"); + if (!clnt && use_udp_flag) { /* try udp next */ + clnt = clnt_create(server, amd_program_number, AMQ_VERSION, "udp"); + /* if ok, set timeout (valid for connectionless transports only) */ + if (clnt) + clnt_control(clnt, CLSET_RETRY_TIMEOUT, (char *) &tv); + } +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* first check if remote portmapper is up */ + cs = pmap_ping(&server_addr); + if (cs == RPC_TIMEDOUT) { + fprintf(stderr, "%s: failed to contact portmapper on host \"%s\". %s\n", + progname, server, clnt_sperrno(cs)); + exit(1); + } + + /* portmapper exists: get remote amd info from it */ + if (!clnt && use_tcp_flag) { /* try tcp first */ + s = RPC_ANYSOCK; + clnt = clnttcp_create(&server_addr, amd_program_number, + AMQ_VERSION, &s, 0, 0); + } + if (!clnt && use_udp_flag) { /* try udp next */ + /* XXX: do we need to close(s) ? */ + s = privsock(SOCK_DGRAM); + clnt = clntudp_create(&server_addr, amd_program_number, + AMQ_VERSION, tv, &s); + } +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + if (!clnt) { + fprintf(stderr, "%s: ", progname); + clnt_pcreateerror(server); + exit(1); + } + + /* + * Control debugging + */ + if (debug_opts) { + int *rc; + amq_setopt opt; + opt.as_opt = AMOPT_DEBUG; + opt.as_str = debug_opts; + rc = amqproc_setopt_1(&opt, clnt); + if (rc && *rc < 0) { + fprintf(stderr, "%s: daemon not compiled for debug\n", progname); + errs = 1; + } else if (!rc || *rc > 0) { + fprintf(stderr, "%s: debug setting for \"%s\" failed\n", progname, debug_opts); + errs = 1; + } + } + + /* + * Control logging + */ + if (xlog_optstr) { + int *rc; + amq_setopt opt; + opt.as_opt = AMOPT_XLOG; + opt.as_str = xlog_optstr; + rc = amqproc_setopt_1(&opt, clnt); + if (!rc || *rc) { + fprintf(stderr, "%s: setting log level to \"%s\" failed\n", progname, xlog_optstr); + errs = 1; + } + } + + /* + * Control log file + */ + if (amq_logfile) { + int *rc; + amq_setopt opt; + opt.as_opt = AMOPT_LOGFILE; + opt.as_str = amq_logfile; + rc = amqproc_setopt_1(&opt, clnt); + if (!rc || *rc) { + fprintf(stderr, "%s: setting logfile to \"%s\" failed\n", progname, amq_logfile); + errs = 1; + } + } + + /* + * Flush map cache + */ + if (flush_flag) { + int *rc; + amq_setopt opt; + opt.as_opt = AMOPT_FLUSHMAPC; + opt.as_str = ""; + rc = amqproc_setopt_1(&opt, clnt); + if (!rc || *rc) { + fprintf(stderr, "%s: amd on %s cannot flush the map cache\n", progname, server); + errs = 1; + } + } + + /* + * Mount info + */ + if (minfo_flag) { + int dummy; + amq_mount_info_list *ml = amqproc_getmntfs_1(&dummy, clnt); + if (ml) { + int mwid = 0, dwid = 0, twid = 0; + show_mi(ml, Calc, &mwid, &dwid, &twid); + mwid++; + dwid++; + twid++; + show_mi(ml, Full, &mwid, &dwid, &twid); + + } else { + fprintf(stderr, "%s: amd on %s cannot provide mount info\n", progname, server); + } + } + + /* + * Mount map + */ + if (mount_map) { + int *rc; + do { + rc = amqproc_mount_1(&mount_map, clnt); + } while (rc && *rc < 0); + if (!rc || *rc > 0) { + if (rc) + errno = *rc; + else + errno = ETIMEDOUT; + fprintf(stderr, "%s: could not start new ", progname); + perror("automount point"); + } + } + + /* + * Get Version + */ + if (getvers_flag) { + amq_string *spp = amqproc_getvers_1((voidp) 0, clnt); + if (spp && *spp) { + fputs(*spp, stdout); + XFREE(*spp); + } else { + fprintf(stderr, "%s: failed to get version information\n", progname); + errs = 1; + } + } + + /* + * Get PID of amd + */ + if (getpid_flag) { + int *ip = amqproc_getpid_1((voidp) 0, clnt); + if (ip && *ip) { + printf("%d\n", *ip); + } else { + fprintf(stderr, "%s: failed to get PID of amd\n", progname); + errs = 1; + } + } + + /* + * Apply required operation to all remaining arguments + */ + if (optind < argc) { + do { + char *fs = argv[optind++]; + if (unmount_flag) { + /* + * Unmount request + */ + amqproc_umnt_1(&fs, clnt); + } else { + /* + * Stats request + */ + amq_mount_tree_p *mtp = amqproc_mnttree_1(&fs, clnt); + if (mtp) { + amq_mount_tree *mt = *mtp; + if (mt) { + int mwid = 0, dwid = 0, twid = 0; + show_mt(mt, Calc, &mwid, &dwid, &twid); + mwid++; + dwid++, twid++; + printf("%-*.*s Uid Getattr Lookup RdDir RdLnk Statfs Mounted@\n", + dwid, dwid, "What"); + show_mt(mt, Stats, &mwid, &dwid, &twid); + } else { + fprintf(stderr, "%s: %s not automounted\n", progname, fs); + } + xdr_pri_free((XDRPROC_T_TYPE) xdr_amq_mount_tree_p, (caddr_t) mtp); + } else { + fprintf(stderr, "%s: ", progname); + clnt_perror(clnt, server); + errs = 1; + } + } + } while (optind < argc); + + } else if (unmount_flag) { + goto show_usage; + + } else if (stats_flag) { + amq_mount_stats *ms = amqproc_stats_1((voidp) 0, clnt); + if (ms) { + show_ms(ms); + } else { + fprintf(stderr, "%s: ", progname); + clnt_perror(clnt, server); + errs = 1; + } + + } else if (!nodefault) { + amq_mount_tree_list *mlp = amqproc_export_1((voidp) 0, clnt); + if (mlp) { + enum show_opt e = Calc; + int mwid = 0, dwid = 0, pwid = 0; + while (e != ShowDone) { + int i; + for (i = 0; i < mlp->amq_mount_tree_list_len; i++) { + show_mt(mlp->amq_mount_tree_list_val[i], + e, &mwid, &dwid, &pwid); + } + mwid++; + dwid++, pwid++; + if (e == Calc) + e = Short; + else if (e == Short) + e = ShowDone; + } + + } else { + fprintf(stderr, "%s: ", progname); + clnt_perror(clnt, server); + errs = 1; + } + } + exit(errs); + return errs; /* should never reach here */ +} + + +#ifdef HAVE_TRANSPORT_TYPE_TLI + +/* + * How to bind to reserved ports. + * TLI handle (socket) and port version. + */ +/* defined here so that it does not have to resolve it with libamu.a */ +static int +amq_bind_resv_port(int td, u_short *pp) +{ + int rc = -1, port; + struct t_bind *treq, *tret; + struct sockaddr_in *sin; + + treq = (struct t_bind *) t_alloc(td, T_BIND, T_ADDR); + if (!treq) { + plog(XLOG_ERROR, "t_alloc 1"); + return -1; + } + tret = (struct t_bind *) t_alloc(td, T_BIND, T_ADDR); + if (!tret) { + t_free((char *) treq, T_BIND); + plog(XLOG_ERROR, "t_alloc 2"); + return -1; + } + memset((char *) treq->addr.buf, 0, treq->addr.len); + sin = (struct sockaddr_in *) treq->addr.buf; + sin->sin_family = AF_INET; + treq->qlen = 0; + treq->addr.len = treq->addr.maxlen; + errno = EADDRINUSE; + port = IPPORT_RESERVED; + + do { + --port; + sin->sin_port = htons(port); + rc = t_bind(td, treq, tret); + if (rc < 0) { + } else { + if (memcmp(treq->addr.buf, tret->addr.buf, tret->addr.len) == 0) + break; + else + t_unbind(td); + } + } while ((rc < 0 || errno == EADDRINUSE) && (int) port > IPPORT_RESERVED / 2); + + if (pp) { + if (rc == 0) + *pp = port; + else + plog(XLOG_ERROR, "could not t_bind to any reserved port"); + } + t_free((char *) tret, T_BIND); + t_free((char *) treq, T_BIND); + return rc; +} + + +/* + * Create a secure rpc client attached to the amd daemon. + */ +static CLIENT * +get_secure_amd_client(char *host, struct timeval *tv, int *sock) +{ + CLIENT *client; + struct netbuf nb; + struct netconfig *nc, *pm_nc; + struct sockaddr_in sin; + + + nb.maxlen = sizeof(sin); + nb.buf = (char *) &sin; + + /* + * Ensure that remote portmapper is alive + * (must use connectionless netconfig). + */ + if ((pm_nc = getnetconfigent(NC_UDP)) != NULL) { + enum clnt_stat cs; + + cs = rpcb_rmtcall(pm_nc, + host, + amd_program_number, + AMQ_VERSION, + AMQPROC_NULL, + (XDRPROC_T_TYPE) xdr_void, + NULL, + (XDRPROC_T_TYPE) xdr_void, + NULL, + *tv, + NULL); + if (cs == RPC_TIMEDOUT) { + fprintf(stderr, "%s: failed to contact portmapper on host \"%s\". %s\n", + progname, host, clnt_sperrno(cs)); + exit(1); + } + } + + /* + * First transport type to try: TCP + */ + if (use_tcp_flag) { + /* Find amd address on TCP */ + nc = getnetconfigent(NC_TCP); + if (!nc) { + fprintf(stderr, "getnetconfig for tcp failed: %s\n", nc_sperror()); + goto tryudp; + } + + if (!rpcb_getaddr(amd_program_number, AMQ_VERSION, nc, &nb, host)) { + /* + * don't print error messages here, since amd might legitimately + * serve udp only + */ + goto tryudp; + } + /* Create privileged TCP socket */ + *sock = t_open(nc->nc_device, O_RDWR, 0); + + if (*sock < 0) { + fprintf(stderr, "t_open %s: %m\n", nc->nc_device); + goto tryudp; + } + if (amq_bind_resv_port(*sock, (u_short *) 0) < 0) + goto tryudp; + + client = clnt_vc_create(*sock, &nb, amd_program_number, AMQ_VERSION, 0, 0); + if (!client) { + fprintf(stderr, "clnt_vc_create failed"); + t_close(*sock); + goto tryudp; + } + /* tcp succeeded */ + return client; + } + +tryudp: + /* + * TCP failed so try UDP + */ + if (use_udp_flag) { + /* find amd address on UDP */ + nc = getnetconfigent(NC_UDP); + if (!nc) { + fprintf(stderr, "getnetconfig for udp failed: %s\n", nc_sperror()); + return NULL; + } + if (!rpcb_getaddr(amd_program_number, AMQ_VERSION, nc, &nb, host)) { + fprintf(stderr, "%s\n", + clnt_spcreateerror("couldn't get amd address on udp")); + return NULL; + } + /* create privileged UDP socket */ + *sock = t_open(nc->nc_device, O_RDWR, 0); + + if (*sock < 0) { + fprintf(stderr, "t_open %s: %m\n", nc->nc_device); + return NULL; /* neither tcp not udp succeeded */ + } + if (amq_bind_resv_port(*sock, (u_short *) 0) < 0) + return NULL; + + client = clnt_dg_create(*sock, &nb, amd_program_number, AMQ_VERSION, 0, 0); + if (!client) { + fprintf(stderr, "clnt_dg_create failed\n"); + t_close(*sock); + return NULL; /* neither tcp not udp succeeded */ + } + if (clnt_control(client, CLSET_RETRY_TIMEOUT, (char *) tv) == FALSE) { + fprintf(stderr, "clnt_control CLSET_RETRY_TIMEOUT for udp failed\n"); + clnt_destroy(client); + return NULL; /* neither tcp not udp succeeded */ + } + /* udp succeeded */ + return client; + } + + /* should never get here */ + return NULL; +} + +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + +/* + * inetresport creates a datagram socket and attempts to bind it to a + * secure port. + * returns: The bound socket, or -1 to indicate an error. + */ +static int +inetresport(int ty) +{ + int alport; + struct sockaddr_in addr; + int fd; + + /* Use internet address family */ + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + if ((fd = socket(AF_INET, ty, 0)) < 0) + return -1; + + for (alport = IPPORT_RESERVED - 1; alport > IPPORT_RESERVED / 2 + 1; alport--) { + addr.sin_port = htons((u_short) alport); + if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) >= 0) + return fd; + if (errno != EADDRINUSE) { + close(fd); + return -1; + } + } + close(fd); + errno = EAGAIN; + return -1; +} + + +/* + * Privsock() calls inetresport() to attempt to bind a socket to a secure + * port. If inetresport() fails, privsock returns a magic socket number which + * indicates to RPC that it should make its own socket. + * returns: A privileged socket # or RPC_ANYSOCK. + */ +static int +privsock(int ty) +{ + int sock = inetresport(ty); + + if (sock < 0) { + errno = 0; + /* Couldn't get a secure port, let RPC make an insecure one */ + sock = RPC_ANYSOCK; + } + return sock; +} + +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ diff --git a/amq/amq.h b/amq/amq.h new file mode 100644 index 0000000..76eadac --- /dev/null +++ b/amq/amq.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq.h,v 1.1 1998/11/05 02:04:52 ezk Exp $ + * + */ + +#ifndef _AMQ_H +#define _AMQ_H + +/* + * external definitions for building amq + */ + +extern voidp amqproc_null_1(voidp argp, CLIENT *rqstp); +extern amq_mount_tree_p *amqproc_mnttree_1(amq_string *argp, CLIENT *rqstp); +extern voidp amqproc_umnt_1(amq_string *argp, CLIENT *rqstp); +extern amq_mount_stats *amqproc_stats_1(voidp argp, CLIENT *rqstp); +extern amq_mount_tree_list *amqproc_export_1(voidp argp, CLIENT *rqstp); +extern int *amqproc_setopt_1(amq_setopt *argp, CLIENT *rqstp); +extern amq_mount_info_list *amqproc_getmntfs_1(voidp argp, CLIENT *rqstp); +extern int *amqproc_mount_1(voidp argp, CLIENT *rqstp); +extern amq_string *amqproc_getvers_1(voidp argp, CLIENT *rqstp); +extern int *amqproc_getpid_1(voidp argp, CLIENT *rqstp); + +#endif /* not _AMQ_H */ diff --git a/amq/amq_clnt.c b/amq/amq_clnt.c new file mode 100644 index 0000000..96ec29e --- /dev/null +++ b/amq/amq_clnt.c @@ -0,0 +1,208 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq_clnt.c,v 1.1 1998/11/05 02:04:52 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +static struct timeval TIMEOUT = {ALLOWED_MOUNT_TIME, 0}; + + +voidp +amqproc_null_1(voidp argp, CLIENT *clnt) +{ + static char res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_NULL, + (XDRPROC_T_TYPE) xdr_void, argp, + (XDRPROC_T_TYPE) xdr_void, &res, TIMEOUT) + != RPC_SUCCESS) { + return (NULL); + } + return ((voidp) &res); +} + + +amq_mount_tree_p * +amqproc_mnttree_1(amq_string *argp, CLIENT *clnt) +{ + static amq_mount_tree_p res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_MNTTREE, + (XDRPROC_T_TYPE) xdr_amq_string, (SVC_IN_ARG_TYPE) argp, + (XDRPROC_T_TYPE) xdr_amq_mount_tree_p, (SVC_IN_ARG_TYPE) & res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +voidp +amqproc_umnt_1(amq_string *argp, CLIENT *clnt) +{ + static char res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_UMNT, + (XDRPROC_T_TYPE) xdr_amq_string, (SVC_IN_ARG_TYPE) argp, + (XDRPROC_T_TYPE) xdr_void, &res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return ((voidp) &res); +} + + +amq_mount_stats * +amqproc_stats_1(voidp argp, CLIENT *clnt) +{ + static amq_mount_stats res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_STATS, + (XDRPROC_T_TYPE) xdr_void, argp, + (XDRPROC_T_TYPE) xdr_amq_mount_stats, + (SVC_IN_ARG_TYPE) & res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +amq_mount_tree_list * +amqproc_export_1(voidp argp, CLIENT *clnt) +{ + static amq_mount_tree_list res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_EXPORT, + (XDRPROC_T_TYPE) xdr_void, argp, + (XDRPROC_T_TYPE) xdr_amq_mount_tree_list, + (SVC_IN_ARG_TYPE) & res, TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +int * +amqproc_setopt_1(amq_setopt *argp, CLIENT *clnt) +{ + static int res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_SETOPT, (XDRPROC_T_TYPE) xdr_amq_setopt, + (SVC_IN_ARG_TYPE) argp, (XDRPROC_T_TYPE) xdr_int, + (SVC_IN_ARG_TYPE) & res, TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +amq_mount_info_list * +amqproc_getmntfs_1(voidp argp, CLIENT *clnt) +{ + static amq_mount_info_list res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_GETMNTFS, (XDRPROC_T_TYPE) xdr_void, argp, + (XDRPROC_T_TYPE) xdr_amq_mount_info_list, + (SVC_IN_ARG_TYPE) & res, TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +int * +amqproc_mount_1(voidp argp, CLIENT *clnt) +{ + static int res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_MOUNT, (XDRPROC_T_TYPE) xdr_amq_string, argp, + (XDRPROC_T_TYPE) xdr_int, (SVC_IN_ARG_TYPE) & res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +amq_string * +amqproc_getvers_1(voidp argp, CLIENT *clnt) +{ + static amq_string res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_GETVERS, (XDRPROC_T_TYPE) xdr_void, argp, + (XDRPROC_T_TYPE) xdr_amq_string, (SVC_IN_ARG_TYPE) & res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} + + +int * +amqproc_getpid_1(voidp argp, CLIENT *clnt) +{ + static int res; + + memset((char *) &res, 0, sizeof(res)); + if (clnt_call(clnt, AMQPROC_GETPID, (XDRPROC_T_TYPE) xdr_void, argp, + (XDRPROC_T_TYPE) xdr_int, (SVC_IN_ARG_TYPE) & res, + TIMEOUT) != RPC_SUCCESS) { + return (NULL); + } + return (&res); +} diff --git a/amq/amq_xdr.c b/amq/amq_xdr.c new file mode 100644 index 0000000..9edefac --- /dev/null +++ b/amq/amq_xdr.c @@ -0,0 +1,259 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq_xdr.c,v 1.1 1998/11/05 02:04:52 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +bool_t +xdr_time_type(XDR *xdrs, time_type *objp) +{ + if (!xdr_long(xdrs, (long *) objp)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_tree(XDR *xdrs, amq_mount_tree *objp) +{ + + if (!xdr_amq_string(xdrs, &objp->mt_mountinfo)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->mt_directory)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->mt_mountpoint)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->mt_type)) { + return (FALSE); + } + + if (!xdr_time_type(xdrs, &objp->mt_mounttime)) { + return (FALSE); + } + + if (!xdr_u_short(xdrs, &objp->mt_mountuid)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mt_getattr)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mt_lookup)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mt_readdir)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mt_readlink)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mt_statfs)) { + return (FALSE); + } + + if (!xdr_pointer(xdrs, (char **) &objp->mt_next, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_tree)) { + return (FALSE); + } + + if (!xdr_pointer(xdrs, (char **) &objp->mt_child, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_tree)) { + return (FALSE); + } + + return (TRUE); +} + + +bool_t +xdr_amq_mount_tree_p(XDR *xdrs, amq_mount_tree_p *objp) +{ + if (!xdr_pointer(xdrs, (char **) objp, sizeof(amq_mount_tree), (XDRPROC_T_TYPE) xdr_amq_mount_tree)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_info(XDR *xdrs, amq_mount_info *objp) +{ + + if (!xdr_amq_string(xdrs, &objp->mi_type)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->mi_mountpt)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->mi_mountinfo)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->mi_fserver)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mi_error)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mi_refc)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->mi_up)) { + return (FALSE); + } + + return (TRUE); +} + + +bool_t +xdr_amq_mount_info_list(XDR *xdrs, amq_mount_info_list *objp) +{ + if (!xdr_array(xdrs, + (char **) &objp->amq_mount_info_list_val, + (u_int *) &objp->amq_mount_info_list_len, + ~0, + sizeof(amq_mount_info), + (XDRPROC_T_TYPE) xdr_amq_mount_info)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_tree_list(XDR *xdrs, amq_mount_tree_list *objp) +{ + if (!xdr_array(xdrs, + (char **) &objp->amq_mount_tree_list_val, + (u_int *) &objp->amq_mount_tree_list_len, + ~0, + sizeof(amq_mount_tree_p), + (XDRPROC_T_TYPE) xdr_amq_mount_tree_p)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_mount_stats(XDR *xdrs, amq_mount_stats *objp) +{ + + if (!xdr_int(xdrs, &objp->as_drops)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->as_stale)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->as_mok)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->as_merr)) { + return (FALSE); + } + + if (!xdr_int(xdrs, &objp->as_uerr)) { + return (FALSE); + } + + return (TRUE); +} + + +bool_t +xdr_amq_opt(XDR *xdrs, amq_opt *objp) +{ + if (!xdr_enum(xdrs, (enum_t *) objp)) { + return (FALSE); + } + return (TRUE); +} + + +bool_t +xdr_amq_setopt(XDR *xdrs, amq_setopt *objp) +{ + + if (!xdr_amq_opt(xdrs, &objp->as_opt)) { + return (FALSE); + } + + if (!xdr_amq_string(xdrs, &objp->as_str)) { + return (FALSE); + } + + return (TRUE); +} + + +bool_t +xdr_pri_free(XDRPROC_T_TYPE xdr_args, caddr_t args_ptr) +{ + XDR xdr; + + xdr.x_op = XDR_FREE; + return ((*xdr_args) (&xdr, (caddr_t *) args_ptr)); +} diff --git a/amq/pawd.1 b/amq/pawd.1 new file mode 100644 index 0000000..7db5eb6 --- /dev/null +++ b/amq/pawd.1 @@ -0,0 +1,72 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1990 Jan-Simon Pendry +.\" Copyright (c) 1990 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1990 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" %W% (Berkeley) %G% +.\" +.\" $Id: pawd.1,v 1.1 1998/11/05 02:04:52 ezk Exp $ +.\" +.TH PAWD 1 "6 Jan 1998" +.SH NAME +pawd \- print automounter working directory +.SH SYNOPSIS +.B pawd +[ +.I path ... +] +.SH DESCRIPTION +.LP +.B pawd +is used to print the current working directory, adjusted to reflect proper +paths that can be reused to go through the automounter for the shortest +possible path. In particular, the path printed back does not include any +of +.BR Amd 's +local mount points. Using them is unsafe, because +.B Amd +may unmount managed file systems from the mount points, and thus including +them in paths may not always find the files within. +.P +Without any arguments, +.B pawd +will print the automounter adjusted current working directory. With any +number of arguments, it will print the adjusted path of each one of the +arguments. +.SH "SEE ALSO" +.BR amd (8), +.BR amq (8), +.BR pwd (1). diff --git a/amq/pawd.c b/amq/pawd.c new file mode 100644 index 0000000..46593e6 --- /dev/null +++ b/amq/pawd.c @@ -0,0 +1,295 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: pawd.c,v 1.1 1998/11/05 02:04:52 ezk Exp $ + * + */ + +/* + * pawd is similar to pwd, except that it returns more "natural" versions of + * pathnames for directories automounted with the amd automounter. If any + * arguments are given, the "more natural" form of the given pathnames are + * printed. + * + * Paul Anderson (paul@ed.lfcs) + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* dummy variables */ +char *progname; +char hostname[MAXHOSTNAMELEN]; +int orig_umask, foreground, debug_flags; +pid_t mypid; +serv_state amd_state; + +/* statics */ +static char *localhost="localhost"; +static char newdir[MAXPATHLEN]; +static char transform[MAXPATHLEN]; + +static int +find_mt(amq_mount_tree *mt, char *dir) +{ + while (mt) { + if (STREQ(mt->mt_type, "link") || STREQ(mt->mt_type, "nfs")) { + int len = strlen(mt->mt_mountpoint); + if (NSTREQ(mt->mt_mountpoint, dir, len) && + ((dir[len] == '\0') || (dir[len] == '/'))) { + char tmp_buf[MAXPATHLEN]; + strcpy(tmp_buf, mt->mt_directory); + strcat(tmp_buf, &dir[len]); + strcpy(newdir, tmp_buf); + return 1; + } + } + if (find_mt(mt->mt_next,dir)) + return 1; + mt = mt->mt_child; + } + return 0; +} + + +static int +find_mlp(amq_mount_tree_list *mlp, char *dir) +{ + int i; + + for (i = 0; i < mlp->amq_mount_tree_list_len; i++) { + if (find_mt(mlp->amq_mount_tree_list_val[i], dir)) + return 1; + } + return 0; +} + + +#ifdef HAVE_CNODEID +static char * +cluster_server(void) +{ +# ifdef HAVE_EXTERN_GETCCENT + struct cct_entry *cp; +# endif /* HAVE_EXTERN_GETCCENT */ + + if (cnodeid() == 0) + return localhost; + +# ifdef HAVE_EXTERN_GETCCENT + while ((cp = getccent())) + if (cp->cnode_type == 'r') + return cp->cnode_name; +# endif /* HAVE_EXTERN_GETCCENT */ + + return localhost; +} +#endif /* HAVE_CNODEID */ + + +/* DISK_HOME_HACK added by gdmr */ +#ifdef DISK_HOME_HACK +static char * +hack_name(char *dir) +{ + char partition[MAXPATHLEN]; + char username[MAXPATHLEN]; + char hesiod_lookup[MAXPATHLEN]; + char *to, *ch, *hes_name, *dot; + char **hes; + +#ifdef DEBUG + fprintf(stderr, "hack_name(%s)\n", dir); +#endif /* DEBUG */ + + if (dir[0] == '/' && dir[1] == 'a' && dir[2] == '/') { + /* Could be /a/server/disk/home/partition/user... */ + ch = dir + 3; + while (*ch && *ch != '/') ch++; /* Skip server */ + if (!NSTREQ(ch, "/disk/home/", 11)) + return NULL; /* Nope */ + /* Looking promising, next should be the partition name */ + ch += 11; + to = partition; + while (*ch && *ch != '/') *to++ = *ch++; + to = '\0'; + if (!(*ch)) + return NULL; /* Off the end */ + /* Now the username */ + ch++; + to = username; + while (*ch && *ch != '/') *to++ = *ch++; + to = '\0'; +#ifdef DEBUG + fprintf(stderr, "partition %s, username %s\n", partition, username); +#endif /* DEBUG */ + + sprintf(hesiod_lookup, "%s.homes-remote", username); + hes = hes_resolve(hesiod_lookup, "amd"); + if (!hes) + return NULL; +#ifdef DEBUG + fprintf(stderr, "hesiod -> <%s>\n", *hes); +#endif /* DEBUG */ + hes_name = strstr(*hes, "/homes/remote/"); + if (!hes_name) return NULL; + hes_name += 14; +#ifdef DEBUG + fprintf(stderr, "hesiod -> <%s>\n", hes_name); +#endif /* DEBUG */ + dot = hes_name; + while (*dot && *dot != '.') dot++; + *dot = '\0'; +#ifdef DEBUG + fprintf(stderr, "hesiod -> <%s>\n", hes_name); +#endif /* DEBUG */ + + if (strcmp(partition, hes_name)) return NULL; +#ifdef DEBUG + fprintf(stderr, "A match, munging....\n"); +#endif /* DEBUG */ + strcpy(transform, "/home/"); + strcat(transform, username); + if (*ch) strcat(transform, ch); +#ifdef DEBUG + fprintf(stderr, "Munged to <%s>\n", transform); +#endif /* DEBUG */ + return transform; + } + return NULL; +} +#endif /* DISK_HOME_HACK */ + + +/* + * The routine transform_dir(path) transforms pathnames of directories + * mounted with the amd automounter to produce a more "natural" version. + * The automount table is obtained from the local amd via the rpc interface + * and reverse lookups are repeatedly performed on the directory name + * substituting the name of the automount link for the value of the link + * whenever it occurs as a prefix of the directory name. + */ +static char * +transform_dir(char *dir) +{ +#ifdef DISK_HOME_HACK + char *ch; +#endif /* DISK_HOME_HACK */ + char *server; + struct sockaddr_in server_addr; + int s = RPC_ANYSOCK; + CLIENT *clnt; + struct hostent *hp; + amq_mount_tree_list *mlp; + struct timeval tmo = {10, 0}; + +#ifdef DISK_HOME_HACK + if (ch = hack_name(dir)) + return ch; +#endif /* DISK_HOME_HACK */ + +#ifdef HAVE_CNODEID + server = cluster_server(); +#else /* not HAVE_CNODEID */ + server = localhost; +#endif /* not HAVE_CNODEID */ + + if ((hp = gethostbyname(server)) == 0) + return dir; + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_addr = *(struct in_addr *) hp->h_addr; + + clnt = clntudp_create(&server_addr, AMQ_PROGRAM, AMQ_VERSION, tmo, &s); + if (clnt == 0) + return dir; + + strcpy(transform,dir); + while ( (mlp = amqproc_export_1((voidp)0, clnt)) && + find_mlp(mlp,transform) ) { + strcpy(transform,newdir); + } + return transform; +} + + +/* getawd() is a substitute for getwd() which transforms the path */ +static char * +getawd(char *path) +{ +#ifdef HAVE_GETCWD + char *wd = getcwd(path, MAXPATHLEN+1); +#else /* not HAVE_GETCWD */ + char *wd = getwd(path); +#endif /* not HAVE_GETCWD */ + + if (wd == NULL) { + return NULL; + } + strcpy(path, transform_dir(wd)); + return path; +} + + +int +main(int argc, char *argv[]) +{ + char tmp_buf[MAXPATHLEN], *wd; + + if (argc == 1) { + wd = getawd(tmp_buf); + if (wd == NULL) { + fprintf(stderr, "pawd: %s\n", tmp_buf); + exit(1); + } else { + fprintf(stdout, "%s\n", wd); + } + } else { + while (--argc) { + wd = transform_dir(*++argv); + fprintf(stdout, "%s\n", wd); + } + } + exit(0); +} diff --git a/buildall b/buildall new file mode 100755 index 0000000..cf92296 --- /dev/null +++ b/buildall @@ -0,0 +1,285 @@ +#!/bin/sh +# Build all of the am-utils package in a directory A. +# Used by am-utils users. +# Erez Zadok +# +# Usage: buildall [-b] [-c] [-C] [-D] [-K] [-q] [-h] [-- makeopts] +# -b: build only +# -c: configure only (full re/configure) +# -C: configure with developer options turned on +# -D: configure with very strict developer options turned on +# -K: run mkconf to update *.in files (developers only) +# -q: quick configure only (run config.guess) +# -h: print usage +# makeopts: options to pass to make (must be last and after a --) +# You may pass variables: CFLAGS for build, MAKE for your make program +# and AM_CFLAGS for additional build flags. +#set -x + +############################################################################## +# first test if we are in the right directory to run this script +if test -f ./aux/config.guess ; then + host_alias=`./aux/config.guess` +else + cd .. # maybe we are inside the A.* directory +fi +if test -f ./aux/config.guess ; then + host_alias=`./aux/config.guess` +else + cd .. # maybe we are inside a subdirectory of the the A.* directory +fi +if test -f ./aux/config.guess ; then + host_alias=`./aux/config.guess` +else + echo "$0: must run from the source or the A. directory." + echo "$0: cannot find ./aux/config.guess" + exit 1 +fi + +############################################################################## +# pattern of lines to remove from config.cache (for developers only) +# Example: if you change TRY_COMPILE_NFS, redo these: +#pat='fhandle|nfs_fh|nfs_args|struct_nfs|opt' +#pat='style_|mount_trap|mtype|transport|dref' +#pat='mntent|mnttab' +#pat='nfs_args|fh_len|irix|proto|vers' +#pat='3|proto|tcp|ver|nfs_prot|mtype' +#pat='trap|style|mtype|transport|os_libs|restartable|unmount_args|yp_order' +#pat='yp_all|nsl|nis' + +############################################################################## +# initialize variables (build command, config command, variables) +bld_cmd="" +bld_flags="" +cnf_cmd="" +cnf_flags="" +mkcnf_cmd="" +vars="" +expvars="" +default=yes + +############################################################################## +# check if CFLAGS or AM_CFLAGS was passed +test -z "$CFLAGS" || vars="$vars CFLAGS=\"${CFLAGS}\"" +test -z "$CFLAGS" || expvars="$expvars CFLAGS" +test -z "$AM_CFLAGS" || vars="$vars AM_CFLAGS=\"${AM_CFLAGS}\"" + +############################################################################## +# functions + +add_gcc_flags1 () { + case "${CC}" in + cc | */cc ) + # do nothing + ;; + * ) + vars="$vars AM_CFLAGS=\"-Werror\"" + AM_CFLAGS="-Werror" + expvars="$expvars AM_CFLAGS" + ;; + esac +} + +add_gcc_flags2 () { + case "${CC}" in + cc | */cc ) + # do nothing + ;; + * ) + vars="$vars AM_CFLAGS=\"-Wall -Werror\"" + AM_CFLAGS="-Wall -Werror" + expvars="$expvars AM_CFLAGS" + ;; + esac +} + +############################################################################## +# iterate over all options, and set the command to run with any variables +while [ $# != 0 ]; do +case "$1" in + -b ) + # look for GNU make if possible + gmake --version -f /dev/null > /dev/null 2>&1 + if [ $? = 0 ] + then + bld_cmd="${MAKE:-gmake}" + else + bld_cmd="${MAKE:-make}" + fi + default=no + shift + ;; + + -c ) + cnf_cmd="../configure --srcdir=.." + default=no + shift + ;; + + -C ) + cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes" +# cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-cppflags=-I${HOME}/hesiod/include --enable-ldflags=-L${HOME}/hesiod/lib" +# cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-cppflags=-I${HOME}/hesiod2/include --enable-ldflags=-L${HOME}/hesiod2/lib" +# add_gcc_flags1 + default=no + shift + ;; + + -Cs ) + cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-shared --disable-static" + add_gcc_flags1 + default=no + shift + ;; + + -D ) + cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes" +# cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-cppflags=-I${HOME}/hesiod2/include --enable-ldflags=-L${HOME}/hesiod2/lib" + add_gcc_flags2 + default=no + shift + ;; + + -Ds ) + cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-shared --disable-static \ + --enable-cppflags=\"-I${HOME}/ldap/include -I${HOME}/hesiod/include\" \ + --enable-ldflags=\"-L${HOME}/ldap/lib -L${HOME}/hesiod/lib\"" + cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-shared --disable-static \ + --enable-cppflags=-I${HOME}/hesiod1/include \ + --enable-ldflags=-L${HOME}/hesiod1/lib" +# cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-cppflags=-I/u/zing/ezk/ldap/include --enable-ldflags=-L/u/zing/ezk/ldap/lib" + cnf_cmd="../configure --srcdir=.. --prefix=/usr/local/AMD --enable-debug=yes --enable-shared --disable-static" + add_gcc_flags2 + default=no + shift + ;; + + -K ) + mkcnf_cmd="../aux/mkconf" + default=no + shift + ;; + + -q ) + cnf_cmd="./config.status" + default=no + shift + ;; + + -- ) + shift + bld_flags="$*" + break # from while loop + ;; + + -h | * ) +cat < /dev/null 2>&1 + if [ $? = 0 ] + then + bld_cmd="${MAKE:-gmake}" + else + bld_cmd="${MAKE:-make}" + fi + cnf_cmd="../configure --srcdir=.." +fi + +############################################################################## +# make build directory if needed +if test -d ./A.${host_alias} ; then + : +else + mkdir ./A.${host_alias} +fi +echo "Configuring/building am-utils in directory ./A.${host_alias} ..." +echo cd ./A.${host_alias} +cd ./A.${host_alias} || exit 1 + +############################################################################## +# this is for developers only (remove config.cache entries) +if test -n "$pat"; then + if test -f config.cache; then + egrep $pat config.cache | while read i; do echo ' '$i;done + egrep -v $pat config.cache > tmp.$$ && \ + mv config.cache config.cache.old && mv tmp.$$ config.cache + fi +fi + +############################################################################## +# Some system's /bin/sh has limits/bugs which prevent it from being used +# with configure +case "${host_alias}" in + *hpux9* ) + if test -f /bin/bash; then + cnf_cmd="/bin/bash $cnf_cmd" + elif test -f /bin/ksh; then + cnf_cmd="/bin/ksh $cnf_cmd" + fi + echo "WARNING: do not use /bin/make under this system." + echo "Instead, use GNU make or 'ksh ./configure' directly." + ;; + mips-sgi-irix5.2) + echo "WARNING: do not use /bin/make under this system." + echo "Instead, use GNU make or ./configure directly." + ;; +esac + +############################################################################## +# see if need to run mkconf +if test -n "$mkcnf_cmd"; then + echo $mkcnf_cmd + $mkcnf_cmd || exit 1 +fi + +############################################################################## +# see if need to [re]configure +if test -n "$cnf_cmd"; then + if test -n "$vars"; then + echo $vars + eval $vars + echo export $expvars + export $expvars + fi + if test -z "$cnf_flags"; then + echo $cnf_cmd + $cnf_cmd || exit 1 + else + echo $cnf_cmd "$cnf_flags" + $cnf_cmd "$cnf_flags" || exit 1 + fi +fi + +############################################################################## +# if need to [re]build +if test -n "$bld_cmd"; then + echo $bld_cmd $bld_flags + $bld_cmd $bld_flags || exit 1 +fi + +############################################################################## diff --git a/conf/checkmount/checkmount_aix.c b/conf/checkmount/checkmount_aix.c new file mode 100644 index 0000000..2b1917f --- /dev/null +++ b/conf/checkmount/checkmount_aix.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: checkmount_aix.c,v 1.1 1998/11/05 02:04:33 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +extern int is_same_host(char *name1, char *name2, struct in_addr addr2); + + +int +fixmount_check_mount(char *host, struct in_addr hostaddr, char *path) +{ + int ret, i; + char *mntinfo = 0, *cp; + char *short_hostname, *long_hostname, *mount_point; + struct vmount *vp; + + /* + * First figure out size of mount table and allocate space for a copy... + * Then get mount table for real. + */ + ret = mntctl(MCTL_QUERY, sizeof(i), &i); + if (ret == 0) { + mntinfo = xmalloc(i); + ret = mntctl(MCTL_QUERY, i, mntinfo); + } + if (ret <= 0) { + fprintf(stderr, "mntctl: %m"); + XFREE(mntinfo); + exit(1); + } + + /* iterate over each vmount structure */ + for (i = 0, cp = mntinfo; i < ret; i++, cp += vp->vmt_length) { + vp = (struct vmount *) cp; + mount_point = vmt2dataptr(vp, VMT_STUB); + long_hostname = vmt2dataptr(vp, VMT_HOSTNAME); + short_hostname = vmt2dataptr(vp, VMT_HOST); + if (STREQ(path, mount_point) && + (is_same_host(long_hostname, host, hostaddr) || + is_same_host(short_hostname, host, hostaddr))) + return 1; + } + + return 0; +} diff --git a/conf/checkmount/checkmount_bsd44.c b/conf/checkmount/checkmount_bsd44.c new file mode 100644 index 0000000..5d71590 --- /dev/null +++ b/conf/checkmount/checkmount_bsd44.c @@ -0,0 +1,78 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: checkmount_bsd44.c,v 1.1 1998/11/05 02:04:33 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +extern int is_same_host(char *name1, char *name2, struct in_addr addr2); +int fixmount_check_mount(char *host, struct in_addr hostaddr, char *path); + +int +fixmount_check_mount(char *host, struct in_addr hostaddr, char *path) +{ + struct statfs *mntbufp, *mntp; + int nloc, i; + char *colon; + + /* read mount table from kernel */ + nloc = getmntinfo(&mntbufp, MNT_NOWAIT); + if (nloc <= 0) { + perror("getmntinfo"); + exit(1); + } + + mntp = mntbufp; + for (i=0; if_mntfromname, ':'))) { + *colon = '\0'; + if (STREQ(colon + 1, path) && + is_same_host(mntp->f_mntfromname, host, hostaddr)) + return 1; + } + } + + return 0; +} diff --git a/conf/checkmount/checkmount_default.c b/conf/checkmount/checkmount_default.c new file mode 100644 index 0000000..4ba5bb7 --- /dev/null +++ b/conf/checkmount/checkmount_default.c @@ -0,0 +1,110 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: checkmount_default.c,v 1.1 1998/11/05 02:04:33 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +#ifndef _PATH_MTAB +#define _PATH_MTAB "/etc/mtab" +#endif /* not _PATH_MTAB */ + +extern int is_same_host(char *name1, char *name2, struct in_addr addr2); + + +int +fixmount_check_mount(char *host, struct in_addr hostaddr, char *path) +{ + FILE *mtab; + mntent_t *ment; + int found = 0; + + /* scan mtab for path */ + if (!(mtab = setmntent(_PATH_MTAB, "r"))) { + perror(_PATH_MTAB); + exit(1); + } + + /* + * setmntent() doesn't do locking in read-only mode. Too bad -- it seems to + * rely on mount() and friends to do atomic updates by renaming the file. + * Well, our patched amd rewrites mtab in place to avoid NFS lossage, so + * better do the locking ourselves. + */ +#ifdef HAVE_FLOCK + if (flock(fileno(mtab), LOCK_SH) < 0) { +#else /* not HAVE_FLOCK */ + if (lockf(fileno(mtab), F_LOCK, 0) < 0) { +#endif /* not HAVE_FLOCK */ + perror(_PATH_MTAB); + exit(1); + } + + while (!found && (ment = getmntent(mtab))) { + char *colon; + + if ((colon = strchr(ment->mnt_fsname, ':'))) { + *colon = '\0'; + if ((STREQ(colon + 1, path) || + STREQ(ment->mnt_dir, path)) && + is_same_host(ment->mnt_fsname, host, hostaddr)) + found = 1; + } + } + + (void) endmntent(mtab); + + if (!found) { + char *swap; + + /* swap files never show up in mtab, only root fs */ + if ((swap = strstr(path, "swap"))) { + strncpy(swap, "root", 4); + found = fixmount_check_mount(host, hostaddr, path); + strncpy(swap, "swap", 4); + } + } + return found; +} diff --git a/conf/checkmount/checkmount_osf.c b/conf/checkmount/checkmount_osf.c new file mode 100644 index 0000000..3a57577 --- /dev/null +++ b/conf/checkmount/checkmount_osf.c @@ -0,0 +1,90 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: checkmount_osf.c,v 1.1 1998/11/05 02:04:33 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +extern int is_same_host(char *name1, char *name2, struct in_addr addr2); + + +int +fixmount_check_mount(char *host, struct in_addr hostaddr, char *path) +{ + int nentries, i; + struct statfs *fslist; + int found = 0; + + nentries = getmntinfo(&fslist, MNT_NOWAIT); + if (nentries <= 0) { + perror("getmntinfo"); + exit(1); + } + + for (i = 0; !found && (i < nentries); i++) { + char *delim; + + /* + * Apparently two forms of nfs mount syntax are + * accepted: host:/path or /path@host + */ + if (delim = strchr(fslist[i].f_mntfromname, ':')) { + *delim = '\0'; + if ((STREQ(delim + 1, path) || + STREQ(fslist[i].f_mntonname, path)) && + is_same_host(fslist[i].f_mntfromname, + host, hostaddr)) + found = 1; + } else if (delim = strchr(fslist[i].f_mntfromname, '@')) { + *delim = '\0'; + if ((STREQ(fslist[i].f_mntfromname, path) || + STREQ(fslist[i].f_mntonname, path)) && + is_same_host(delim + 1, host, hostaddr)) + found = 1; + } + } + + return found; +} diff --git a/conf/checkmount/checkmount_svr4.c b/conf/checkmount/checkmount_svr4.c new file mode 100644 index 0000000..afb38da --- /dev/null +++ b/conf/checkmount/checkmount_svr4.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: checkmount_svr4.c,v 1.1 1998/11/05 02:04:33 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +extern int is_same_host(char *name1, char *name2, struct in_addr addr2); + + +int +fixmount_check_mount(char *host, struct in_addr hostaddr, char *path) +{ + FILE *mtab; + struct mnttab ment; + int err = 0; + int found = 0; + + /* scan mtab for path */ + if (!(mtab = fopen(MNTTAB, "r"))) { + perror(MNTTAB); + exit(1); + } + + while (!found && (err = getmntent(mtab, &ment)) == 0) { + char *colon; + + if ((colon = strchr(ment.mnt_fsname, ':'))) { + *colon = '\0'; + if ((STREQ(colon + 1, path) || + STREQ(ment.mnt_dir, path)) && + is_same_host(ment.mnt_fsname, host, hostaddr)) + found = 1; + } + } + + if (err > 0) { + fprintf(stderr, "getmntent: %s: %s\n", MNTTAB, + err == MNT_TOOLONG ? "entry exceeds MNT_LINE_MAX" : + err == MNT_TOOMANY ? "too many fields in line" : + err == MNT_TOOFEW ? "too few fields in line" : + "unknown error code"); + exit(1); + } + (void) fclose(mtab); + + /* XXX: Is this still valid in SunOS 5.x ? */ + if (!found) { + char *swap; + + /* swap files never show up in mtab, only root fs */ + if ((swap = strstr(path, "swap"))) { + strncpy(swap, "root", 4); + found = fixmount_check_mount(host, hostaddr, path); + strncpy(swap, "swap", 4); + } + } + return found; +} diff --git a/conf/checkmount/checkmount_ultrix.c b/conf/checkmount/checkmount_ultrix.c new file mode 100644 index 0000000..3e3481f --- /dev/null +++ b/conf/checkmount/checkmount_ultrix.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: checkmount_ultrix.c,v 1.1 1998/11/05 02:04:33 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +extern int is_same_host(char *name1, char *name2, struct in_addr addr2); + + +int +fixmount_check_mount(char *host, struct in_addr hostaddr, char *path) +{ + int start = 0; + int err = 0; + struct fs_data ment; + int found = 0; + + /* scan mtab for path */ + while (!found && (err = getmnt(&start, &ment, sizeof(ment), + NOSTAT_MANY, NULL)) > 0) { + char *colon; + + if (colon = strchr(ment.fd_devname, ':')) { + *colon = '\0'; + if ((STREQ(colon + 1, path) || + STREQ(ment.fd_path, path)) && + is_same_host(ment.fd_devname, host, hostaddr)) + found = 1; + } + } + + if (!found && err < 0) { + perror("getmnt"); + exit(1); + } + return found; +} diff --git a/conf/fh_dref/fh_dref_aix3.h b/conf/fh_dref/fh_dref_aix3.h new file mode 100644 index 0000000..c7abaa0 --- /dev/null +++ b/conf/fh_dref/fh_dref_aix3.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_aix3.h */ +#define NFS_FH_DREF(dst, src) memcpy((char *) &(dst.x), (char *) src, sizeof(struct nfs_fh)) diff --git a/conf/fh_dref/fh_dref_aix42.h b/conf/fh_dref/fh_dref_aix42.h new file mode 100644 index 0000000..02ba305 --- /dev/null +++ b/conf/fh_dref/fh_dref_aix42.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_aix42.h */ +#define NFS_FH_DREF(dst, src) (dst) = (caddr_t)(src) diff --git a/conf/fh_dref/fh_dref_bsd44.h b/conf/fh_dref/fh_dref_bsd44.h new file mode 100644 index 0000000..72ec8cf --- /dev/null +++ b/conf/fh_dref/fh_dref_bsd44.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_bsd44.h */ +#define NFS_FH_DREF(dst, src) (dst) = (nfsv2fh_t *) (src) diff --git a/conf/fh_dref/fh_dref_default.h b/conf/fh_dref/fh_dref_default.h new file mode 100644 index 0000000..9a07476 --- /dev/null +++ b/conf/fh_dref/fh_dref_default.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_default.h */ +#define NFS_FH_DREF(dst, src) (dst) = (src) diff --git a/conf/fh_dref/fh_dref_freebsd22.h b/conf/fh_dref/fh_dref_freebsd22.h new file mode 100644 index 0000000..989561d --- /dev/null +++ b/conf/fh_dref/fh_dref_freebsd22.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_freebsd22.h */ +#define NFS_FH_DREF(dst, src) (dst) = (u_char *) (src) diff --git a/conf/fh_dref/fh_dref_hpux.h b/conf/fh_dref/fh_dref_hpux.h new file mode 100644 index 0000000..b3a7570 --- /dev/null +++ b/conf/fh_dref/fh_dref_hpux.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_hpux.h */ +#define NFS_FH_DREF(dst, src) (dst) = (fhandle_t *) (src) diff --git a/conf/fh_dref/fh_dref_irix.h b/conf/fh_dref/fh_dref_irix.h new file mode 100644 index 0000000..1a5de20 --- /dev/null +++ b/conf/fh_dref/fh_dref_irix.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_irix.h */ +#define NFS_FH_DREF(dst, src) (dst) = (fhandle_t *) (src) diff --git a/conf/fh_dref/fh_dref_isc3.h b/conf/fh_dref/fh_dref_isc3.h new file mode 100644 index 0000000..0ff1ad4 --- /dev/null +++ b/conf/fh_dref/fh_dref_isc3.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_isc3.h */ +#define NFS_FH_DREF(dst, src) (dst) = *(src) diff --git a/conf/fh_dref/fh_dref_linux.h b/conf/fh_dref/fh_dref_linux.h new file mode 100644 index 0000000..7ffa5b5 --- /dev/null +++ b/conf/fh_dref/fh_dref_linux.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_linux.h */ +#define NFS_FH_DREF(dst, src) memcpy((char *) &(dst.data), (char *) src, sizeof(struct nfs_fh)) diff --git a/conf/fh_dref/fh_dref_nextstep.h b/conf/fh_dref/fh_dref_nextstep.h new file mode 100644 index 0000000..8190354 --- /dev/null +++ b/conf/fh_dref/fh_dref_nextstep.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_nextstep.h */ +#define NFS_FH_DREF(dst, src) (dst) = (caddr_t) (src) diff --git a/conf/fh_dref/fh_dref_osf2.h b/conf/fh_dref/fh_dref_osf2.h new file mode 100644 index 0000000..74669a7 --- /dev/null +++ b/conf/fh_dref/fh_dref_osf2.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_osf2.h */ +#define NFS_FH_DREF(dst, src) (dst) = (nfsv2fh_t *) (src) diff --git a/conf/fh_dref/fh_dref_osf4.h b/conf/fh_dref/fh_dref_osf4.h new file mode 100644 index 0000000..5bb073c --- /dev/null +++ b/conf/fh_dref/fh_dref_osf4.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_osf4.h */ +#define NFS_FH_DREF(dst, src) (dst) = (caddr_t) (src) diff --git a/conf/fh_dref/fh_dref_sunos3.h b/conf/fh_dref/fh_dref_sunos3.h new file mode 100644 index 0000000..c3dd0b6 --- /dev/null +++ b/conf/fh_dref/fh_dref_sunos3.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_sunos3.h */ +#define NFS_FH_DREF(dst, src) (dst) = (caddr_t) (src) diff --git a/conf/fh_dref/fh_dref_sunos4.h b/conf/fh_dref/fh_dref_sunos4.h new file mode 100644 index 0000000..f13c6be --- /dev/null +++ b/conf/fh_dref/fh_dref_sunos4.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_sunos4.h */ +#define NFS_FH_DREF(dst, src) (dst) = (caddr_t) (src) diff --git a/conf/fh_dref/fh_dref_svr4.h b/conf/fh_dref/fh_dref_svr4.h new file mode 100644 index 0000000..2b9b686 --- /dev/null +++ b/conf/fh_dref/fh_dref_svr4.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/fh_dref/fh_dref_svr4.h */ +#define NFS_FH_DREF(dst, src) (dst) = (caddr_t) (src) diff --git a/conf/hn_dref/hn_dref_default.h b/conf/hn_dref/hn_dref_default.h new file mode 100644 index 0000000..d495ea8 --- /dev/null +++ b/conf/hn_dref/hn_dref_default.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/hn_dref/hn_dref_default.h */ +#define NFS_HN_DREF(dst, src) (dst) = (src) diff --git a/conf/hn_dref/hn_dref_isc3.h b/conf/hn_dref/hn_dref_isc3.h new file mode 100644 index 0000000..ec484c6 --- /dev/null +++ b/conf/hn_dref/hn_dref_isc3.h @@ -0,0 +1,5 @@ +/* $srcdir/conf/hn_dref/hn_dref_isc3.h */ +#define NFS_HN_DREF(dst, src) { \ + strncpy((dst), (src), MAXHOSTNAMELEN); \ + (dst)[MAXHOSTNAMELEN] = '\0'; \ + } diff --git a/conf/hn_dref/hn_dref_linux.h b/conf/hn_dref/hn_dref_linux.h new file mode 100644 index 0000000..bc6dc45 --- /dev/null +++ b/conf/hn_dref/hn_dref_linux.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/hn_dref/hn_dref_linux.h */ +#define NFS_HN_DREF(dst, src) strncpy((dst), (src), MAXHOSTNAMELEN) diff --git a/conf/mount/mount_aix.c b/conf/mount/mount_aix.c new file mode 100644 index 0000000..1a9cb57 --- /dev/null +++ b/conf/mount/mount_aix.c @@ -0,0 +1,223 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_aix.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * AIX 3 Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define VMT_ROUNDUP(len) (4 * ((len + 3) / 4)) +#define VMT_ASSIGN(vp, idx, data, size) \ + vp->vmt_data[idx].vmt_off = p - (char *) vp; \ + vp->vmt_data[idx].vmt_size = size; \ + memmove(p, data, size); \ + p += VMT_ROUNDUP(size); + + +static int +aix3_mkvp(char *p, int gfstype, int flags, char *object, char *stub, char *host, char *info, int info_size, char *args) +{ + struct vmount *vp = (struct vmount *) p; + + memset((voidp) vp, 0, sizeof(*vp)); + /* + * Fill in standard fields + */ + vp->vmt_revision = VMT_REVISION; + vp->vmt_flags = flags; + vp->vmt_gfstype = gfstype; + + /* + * Fill in all variable length data + */ + p += sizeof(*vp); + + VMT_ASSIGN(vp, VMT_OBJECT, object, strlen(object) + 1); + VMT_ASSIGN(vp, VMT_STUB, stub, strlen(stub) + 1); + VMT_ASSIGN(vp, VMT_HOST, host, strlen(host) + 1); + VMT_ASSIGN(vp, VMT_HOSTNAME, host, strlen(host) + 1); + VMT_ASSIGN(vp, VMT_INFO, info, info_size); + VMT_ASSIGN(vp, VMT_ARGS, args, strlen(args) + 1); + + /* + * Return length + */ + return vp->vmt_length = p - (char *) vp; +} + + +#ifdef HAVE_FS_NFS3 +static void +print_nfs3_args(nfs_args_t *na) +{ + int i; + char buf[1024], str[10], *cp; + + plog(XLOG_INFO, " NA: %s = 0x%x", "addr", na->addr); + plog(XLOG_INFO, " NA: %s = %d", "addr.len", na->addr.sin_len); + plog(XLOG_INFO, " NA: %s = %d", "addr.family", na->addr.sin_family); + plog(XLOG_INFO, " NA: %s = %d", "addr.port", na->addr.sin_port); + plog(XLOG_INFO, " NA: %s = 0x%x", "addr.addr", na->addr.sin_addr); + /* plog(XLOG_INFO, " NA: %s = 0x%x", "addr.zero", na->addr.zero); */ + + plog(XLOG_INFO, " NA: %s = %d", "u0", na->u0); + plog(XLOG_INFO, " NA: %s = %d", "proto", na->proto); + plog(XLOG_INFO, " NA: %s = %s", "hostname", na->hostname ? na->hostname : "null"); + plog(XLOG_INFO, " NA: %s = %s", "netname", na->netname ? na->netname : "null"); + plog(XLOG_INFO, " NA: %s = 0x%x", "fh", na->fh); + plog(XLOG_INFO, " NA: %s = %d", "fh.len", ((nfs_fh3 *)na->fh)->fh3_length); + cp = ((nfs_fh3 *)na->fh)->fh3_u.data; + buf[0] = '\0'; + for (i=0; i<64; ++i) { + sprintf(str, "%d,", (int) cp[i]); + strcat(buf, str); + } + plog(XLOG_INFO, " NA: %s = %s", "fh.val", buf); + plog(XLOG_INFO, " NA: %s = %d", "flags", na->flags); + plog(XLOG_INFO, " NA: %s = %d", "wsize", na->wsize); + plog(XLOG_INFO, " NA: %s = %d", "rsize", na->rsize); + plog(XLOG_INFO, " NA: %s = %d", "timeo", na->timeo); + plog(XLOG_INFO, " NA: %s = %d", "retrans", na->retrans); + plog(XLOG_INFO, " NA: %s = %d", "acregmin", na->acregmin); + plog(XLOG_INFO, " NA: %s = %d", "acregmax", na->acregmax); + plog(XLOG_INFO, " NA: %s = %d", "acdirmin", na->acdirmin); + plog(XLOG_INFO, " NA: %s = %d", "acdirmax", na->acdirmax); + plog(XLOG_INFO, " NA: %s = %d", "u14", na->u14); + plog(XLOG_INFO, " NA: %s = 0x%x", "pathconf", na->pathconf); +} +#endif /* HAVE_FS_NFS3 */ + + +/* + * Map from conventional mount arguments + * to AIX 3-style arguments. + */ +int +mount_aix3(char *fsname, char *dir, int flags, int type, void *data, char *mnt_opts) +{ + char buf[4096]; + int size, ret; + int real_size = sizeof(nfs_args_t); /* size passed to aix3_mkvp() */ + char *real_args = data; /* args passed to aix3_mkvp() */ + char *host = strdup(fsname); + char *rfs = strchr(host, ':'); + int free_rfs = 0; +#ifdef HAVE_FS_NFS3 + struct nfs_args v2args; + nfs_args_t *v3args = (nfs_args_t *) data; +#endif /* HAVE_FS_NFS3 */ + +#ifdef DEBUG + dlog("mount_aix3: fsname %s, dir %s, type %d", fsname, dir, type); +#endif /* DEBUG */ + + switch (type) { + + case MOUNT_TYPE_NFS: + +#ifdef HAVE_FS_NFS3 + /* + * This is tricky. If we have v3 support, but this nfs mount is v2, + * then I must copy the arguments from the v3 nfs_args to the v2 one. + */ + memmove((voidp) &v2args.addr, (voidp) &v3args->addr, sizeof(struct sockaddr_in)); + /* v2args.u0 = v3args->u0; */ + /* v2args.proto = v3args->proto; */ + v2args.hostname = v3args->hostname; + v2args.netname = v3args->netname; + memmove(v2args.fh.x, ((fhandle_t *)v3args->fh)->x, FHSIZE); + v2args.flags = v3args->flags; + v2args.wsize = v3args->wsize; + v2args.rsize = v3args->rsize; + v2args.timeo = v3args->timeo; + v2args.retrans = v3args->retrans; + v2args.acregmin = v3args->acregmin; + v2args.acregmax = v3args->acregmax; + v2args.acdirmin = v3args->acdirmin; + v2args.acdirmax = v3args->acdirmax; + /* v2args.u14 = v3args->u14; */ + v2args.pathconf = v3args->pathconf; + + /* now set real_* stuff */ + real_size = sizeof(struct nfs_args); + real_args = (char *) &v2args; + + case MOUNT_TYPE_NFS3: + /* do nothing, because the nfs_args passed is already a v3 one */ + /* just fall through */ +#endif /* HAVE_FS_NFS3 */ + + if (rfs) { + *rfs++ = '\0'; + } else { + rfs = host; + free_rfs = 1; + host = strdup(hostname); + } + + size = aix3_mkvp(buf, type, flags, rfs, dir, host, + real_args, real_size, mnt_opts); + if (free_rfs) + XFREE(rfs); + XFREE(host); + break; + + case MOUNT_TYPE_UFS: + /* Need to open block device and extract log device info from sblk. */ + return EINVAL; + + default: + return EINVAL; + } + + ret = vmount(buf, size); + if (ret < 0) + plog(XLOG_ERROR, "mount_aix3: vmount failed with errno %d", errno); + return ret; +} diff --git a/conf/mount/mount_bsdi3.c b/conf/mount/mount_bsdi3.c new file mode 100644 index 0000000..4f7dcf3 --- /dev/null +++ b/conf/mount/mount_bsdi3.c @@ -0,0 +1,53 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_bsdi3.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * BSD/OS 3 Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include diff --git a/conf/mount/mount_freebsd3.c b/conf/mount/mount_freebsd3.c new file mode 100644 index 0000000..64de2ec --- /dev/null +++ b/conf/mount/mount_freebsd3.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_freebsd3.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * FreeBSD 3.x (as of 3.0-19981006-BETA) Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Map from conventional mount arguments to FreeBSD 3.0 style arguments. + */ +int +mount_freebsd3(MTYPE_TYPE type, const char *dir, int flags, voidp data) +{ + /* + * No longer need to dereference into the INITMOUNTNAMES macro. + * This code will NOT work for 3.0 snapshots! + */ + return mount(type, dir, flags, data); +} diff --git a/conf/mount/mount_hpux.c b/conf/mount/mount_hpux.c new file mode 100644 index 0000000..971576d --- /dev/null +++ b/conf/mount/mount_hpux.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_hpux.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * HPUX: + * HPUX 9.0 and 10.0 Mount helper. + * -Erez Zadok + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Map from conventional mount arguments + * to HPUX style arguments. + */ +int +mount_hpux(MTYPE_TYPE type, const char *dir, int flags, caddr_t data) +{ + +#if defined(MOUNT_TYPE_NFS) && defined(MOUNT_NFS) + if (STREQ(type, MOUNT_TYPE_NFS)) + return vfsmount(MOUNT_NFS, dir, flags, data); +#endif /* defined(MOUNT_TYPE_NFS) && defined(MOUNT_NFS) */ + +#if defined(MOUNT_TYPE_UFS) && defined(MOUNT_UFS) + if (STREQ(type, MOUNT_TYPE_UFS)) + return vfsmount(MOUNT_UFS, dir, flags, data); +#endif /* defined(MOUNT_TYPE_UFS) && defined(MOUNT_UFS) */ + +#if defined(MOUNT_TYPE_PCFS) && defined(MOUNT_PC) + /* + * MOUNT_TYPE_PCFS gets redefined in conf/trap/trap_hpux.h because of + * stupidities in HPUX 9.0's headers. + */ + if (STREQ(type, MOUNT_TYPE_PCFS)) + return vfsmount(MOUNT_PC, dir, flags, data); +#endif /* defined(MOUNT_TYPE_PCFS) && defined(MOUNT_PC) */ + +#if defined(MOUNT_TYPE_CDFS) && defined(MOUNT_CDFS) + if (STREQ(type, MOUNT_TYPE_CDFS)) + return vfsmount(MOUNT_CDFS, dir, flags, data); +#endif /* defined(MOUNT_TYPE_CDFS) && defined(MOUNT_CDFS) */ + + return EINVAL; +} diff --git a/conf/mount/mount_irix5.c b/conf/mount/mount_irix5.c new file mode 100644 index 0000000..beb6cf8 --- /dev/null +++ b/conf/mount/mount_irix5.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_irix5.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * IRIX Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Map from conventional mount arguments + * to IRIX style arguments. + * + * NOTE: We have to use struct nfs_args (not nfs_args_t) below because + * while IRIX5.3 needs the fh_len field added to struct nfs_args for NFS3 + * mounts to succeed, the the mount syscall fails if the argument size + * includes fh_len! Talk about a broken interface ... -- stolcke 7/4/97 + */ +int +mount_irix(char *fsname, char *dir, int flags, MTYPE_TYPE type, voidp data) +{ + +#ifdef DEBUG + dlog("mount_irix: fsname %s, dir %s, type %d", fsname, dir, type); +#endif /* DEBUG */ + +#ifdef HAVE_FS_NFS3 + if (STREQ(type, MOUNT_TYPE_NFS3)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (struct nfs_args *) data, sizeof(struct nfs_args)); +#endif /* HAVE_FS_NFS3 */ + +#ifdef HAVE_FS_NFS + if (STREQ(type, MOUNT_TYPE_NFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (struct nfs_args *) data, sizeof(struct nfs_args)); +#endif /* HAVE_FS_NFS */ + + /* XXX: do I need to pass {u,x,e}fs_args ? */ + +#ifdef HAVE_FS_UFS + if (STREQ(type, MOUNT_TYPE_UFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), type); +#endif /* HAVE_FS_UFS */ + +#ifdef HAVE_FS_EFS + if (STREQ(type, MOUNT_TYPE_EFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), type); +#endif /* HAVE_FS_EFS */ + +#ifdef HAVE_FS_XFS + if (STREQ(type, MOUNT_TYPE_XFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), type); +#endif /* HAVE_FS_XFS */ + + return EINVAL; +} diff --git a/conf/mount/mount_irix6.c b/conf/mount/mount_irix6.c new file mode 100644 index 0000000..1f3c4ee --- /dev/null +++ b/conf/mount/mount_irix6.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_irix6.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * IRIX Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Map from conventional mount arguments + * to IRIX style arguments. + */ +int +mount_irix(char *fsname, char *dir, int flags, MTYPE_TYPE type, voidp data) +{ + +#ifdef DEBUG + dlog("mount_irix: fsname %s, dir %s, type %d", fsname, dir, type); +#endif /* DEBUG */ + +#ifdef HAVE_FS_NFS3 + if (STREQ(type, MOUNT_TYPE_NFS3)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (nfs_args_t *) data, sizeof(nfs_args_t)); +#endif /* HAVE_FS_NFS3 */ + +#ifdef HAVE_FS_NFS + if (STREQ(type, MOUNT_TYPE_NFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (nfs_args_t *) data, sizeof(nfs_args_t)); +#endif /* HAVE_FS_NFS */ + +#ifdef HAVE_FS_UFS + if (STREQ(type, MOUNT_TYPE_UFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (ufs_args_t *) data, sizeof(ufs_args_t)); +#endif /* HAVE_FS_UFS */ + +#ifdef HAVE_FS_XFS + if (STREQ(type, MOUNT_TYPE_XFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (xfs_args_t *) data, sizeof(xfs_args_t)); +#endif /* HAVE_FS_XFS */ + +#ifdef HAVE_FS_EFS + if (STREQ(type, MOUNT_TYPE_EFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (efs_args_t *) data, sizeof(efs_args_t)); +#endif /* HAVE_FS_EFS */ + + return EINVAL; +} diff --git a/conf/mount/mount_isc3.c b/conf/mount/mount_isc3.c new file mode 100644 index 0000000..1a4c958 --- /dev/null +++ b/conf/mount/mount_isc3.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_isc3.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + */ + +/* + * IX/386 Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Map from conventional mount arguments + * to IX/386 style arguments. + */ +int +mount_isc3(char *fsname, char *dir, int flags, int type, void *data) +{ + +#ifdef DEBUG + dlog("mount_isc3: fsname %s, dir %s, type %d", fsname, dir, type); +#endif /* DEBUG */ + + if (type == MOUNT_TYPE_NFS) + return mount("/dev/nfsd", dir, + (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_DATA | flags), + type, (struct nfs_args *) data, + sizeof(struct nfs_args)); + + if (type == MOUNT_TYPE_UFS) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), type); + + return EINVAL; +} diff --git a/conf/mount/mount_linux.c b/conf/mount/mount_linux.c new file mode 100644 index 0000000..ec52b05 --- /dev/null +++ b/conf/mount/mount_linux.c @@ -0,0 +1,513 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_linux.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + */ + +/* + * Linux mount helper. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +struct opt_map { + const char *opt; /* option name */ + int inv; /* true if flag value should be inverted */ + int mask; /* flag mask value */ +}; + +const struct opt_map opt_map[] = +{ + {"defaults", 0, 0}, + {MNTTAB_OPT_RO, 0, MNT2_GEN_OPT_RDONLY}, + {MNTTAB_OPT_RW, 1, MNT2_GEN_OPT_RDONLY}, + {MNTTAB_OPT_EXEC, 1, MNT2_GEN_OPT_NOEXEC}, + {MNTTAB_OPT_NOEXEC, 0, MNT2_GEN_OPT_NOEXEC}, + {MNTTAB_OPT_SUID, 1, MNT2_GEN_OPT_NOSUID}, + {MNTTAB_OPT_NOSUID, 0, MNT2_GEN_OPT_NOSUID}, +#ifdef MNT2_GEN_OPT_NODEV + {MNTTAB_OPT_DEV, 1, MNT2_GEN_OPT_NODEV}, + {MNTTAB_OPT_NODEV, 0, MNT2_GEN_OPT_NODEV}, +#endif /* MNT2_GEN_OPT_NODEV */ +#ifdef MNT2_GEN_OPT_SYNC + {MNTTAB_OPT_SYNC, 0, MNT2_GEN_OPT_SYNC}, + {MNTTAB_OPT_ASYNC, 1, MNT2_GEN_OPT_SYNC}, +#endif /* MNT2_GEN_OPT_SYNC */ +#ifdef MNT2_GEN_OPT_NOSUB + {MNTTAB_OPT_SUB, 1, MNT2_GEN_OPT_NOSUB}, + {MNTTAB_OPT_NOSUB, 0, MNT2_GEN_OPT_NOSUB}, +#endif /* MNT2_GEN_OPT_NOSUB */ + {NULL, 0, 0} +}; + +struct fs_opts { + const char *opt; + int type; +}; + +const struct fs_opts iso_opts[] = { + { "map", 0 }, + { "norock", 0 }, + { "cruft", 0 }, + { "unhide", 0 }, + { "conv", 1 }, + { "block", 1 }, + { "mode", 1 }, + { "gid", 1 }, + { "uid", 1 }, + { NULL, 0 } +}; + +const struct fs_opts dos_opts[] = { + { "check", 1 }, + { "conv", 1 }, + { "uid", 1 }, + { "gid", 1 }, + { "umask", 1 }, + { "debug", 0 }, + { "fat", 1 }, + { "quiet", 0 }, + { "blocksize",1 }, + { NULL, 0 } +}; + + +/* + * New parser for linux-specific mounts Should now handle fs-type specific + * mount-options correctly Currently implemented: msdos, iso9660 + * + */ +static char * +parse_opts(char *type, char *optstr, int *flags, char **xopts, int *noauto) +{ + const struct opt_map *std_opts; + const struct fs_opts *dev_opts; + char *opt, *topts; + + *noauto = 0; + if (optstr != NULL) { + *xopts = (char *) xmalloc (strlen(optstr) + 2); + topts = (char *) xmalloc (strlen(optstr) + 2); + *topts = '\0'; + **xopts = '\0'; + + for (opt = strtok(optstr, ","); opt; opt = strtok(NULL, ",")) { + /* + * First, parse standard options + */ + std_opts = opt_map; + while (std_opts->opt && + !NSTREQ(std_opts->opt, opt, strlen(std_opts->opt))) + ++std_opts; + if (!(*noauto = STREQ(opt, MNTTAB_OPT_NOAUTO)) || std_opts->opt) { + strcat(topts, opt); + strcat(topts, ","); + if (std_opts->inv) + *flags &= ~std_opts->mask; + else + *flags |= std_opts->mask; + } + /* + * Next, select which fs-type is to be used + * and parse the fs-specific options + */ +#ifdef MOUNT_TYPE_PCFS + if (!STREQ(type, MOUNT_TYPE_PCFS)) + dev_opts = dos_opts; + else +#endif /* MOUNT_TYPE_PCFS */ +#ifdef MOUNT_TYPE_CDFS + if (!STREQ(type, MOUNT_TYPE_CDFS)) + dev_opts = iso_opts; + else +#endif /* MOUNT_TYPE_CDFS */ + { + plog(XLOG_FATAL, "linux mount: unknown fs-type: %s\n", type); + return NULL; + } + while (dev_opts->opt && + !NSTREQ(dev_opts->opt, opt, strlen(dev_opts->opt))) + ++dev_opts; + if (dev_opts->opt && *xopts) { + strcat(*xopts, opt); + strcat(*xopts, ","); + } + } + /* + * All other options are discarded + */ + if (strlen(*xopts)) + *(*xopts + strlen(*xopts)-1) = '\0'; + if (strlen(topts)) + topts[strlen(topts)-1] = 0; + return topts; + } /* end of "if (optstr != NULL)" statement */ + + return NULL; +} + + +static int +linux_version_code(void) +{ + struct utsname my_utsname; + static int release = 0; + + if ( 0 == release && 0 == uname(&my_utsname)) { + release = 65536 * atoi(strtok(my_utsname.release, ".")) + + 256 * atoi(strtok(NULL, ".")) + + atoi(strtok(NULL, ".")); + } + return release; +} + + +int +mount_linux(MTYPE_TYPE type, mntent_t *mnt, int flags, caddr_t data) +{ + char *extra_opts = NULL; + char *tmp_opts = NULL; + char *sub_type = NULL; + int noauto = 0; + int errorcode; + nfs_args_t *mnt_data = (nfs_args_t *) data; + + if (mnt->mnt_opts && STREQ (mnt->mnt_opts, "defaults")) + mnt->mnt_opts = NULL; + + if (type == NULL) + type = index(mnt->mnt_fsname, ':') ? MOUNT_TYPE_NFS : MOUNT_TYPE_UFS; + + if (STREQ(type, MOUNT_TYPE_NFS)) { + /* Fake some values for linux */ + mnt_data->version = NFS_MOUNT_VERSION; + if (!mnt_data->timeo) + mnt_data->timeo = 7; + if (!mnt_data->retrans) + mnt_data->retrans = 3; + + /* These are the only two reliable values currently */ + if (!mnt_data->rsize) + mnt_data->rsize = 1024; + if (!mnt_data->wsize) + mnt_data->wsize = 1024; + + mnt_data->fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (mnt_data->fd < 0) { + plog(XLOG_ERROR, "Can't create socket for kernel"); + errorcode = 1; + goto fail; + } + if (bindresvport(mnt_data->fd, 0) < 0) { + plog(XLOG_ERROR, "Can't bind to reserved port"); + errorcode = 1; + goto fail; + } + /* + * connect() the socket for kernels 1.3.10 and below + * only to avoid problems with multihomed hosts. + * --Swen + */ + if (linux_version_code() <= 66314 && connect(mnt_data->fd, (struct sockaddr *) &mnt_data->addr, sizeof(mnt_data->addr)) < 0) { + plog(XLOG_ERROR, "Can't connect socket for kernel"); + errorcode = 1; + goto fail; + } +#ifdef DEBUG + amuDebug(D_FULL) { + plog(XLOG_DEBUG, "linux mount: type %s\n",type); + plog(XLOG_DEBUG, "linux mount: version %d\n",mnt_data->version); + plog(XLOG_DEBUG, "linux mount: fd %d\n",mnt_data->fd); + plog(XLOG_DEBUG, "linux mount: hostname %s\n", + inet_ntoa(mnt_data->addr.sin_addr)); + plog(XLOG_DEBUG, "linux mount: port %d\n", + htons(mnt_data->addr.sin_port)); + } +#endif /* DEBUG */ + + } else { + + /* Non nfs mounts */ + if ((sub_type = hasmntopt(mnt, "type")) && + (sub_type = index(sub_type, '=')) && + (sub_type = strdup(sub_type + 1))) { + type = strpbrk(sub_type, ",:;\n\t"); + if (type == NULL) + type = MOUNT_TYPE_UFS; + else { + *type = '\0'; + type = sub_type; + } + } + + if (!hasmntopt(mnt, "type")) + mnt->mnt_type = type; + + /* We only parse opts if non-NFS drive */ + tmp_opts = parse_opts(type, mnt->mnt_opts, &flags, &extra_opts, &noauto); + +#ifdef DEBUG + amuDebug(D_FULL) { + plog(XLOG_DEBUG, "linux mount: type %s\n", type); + plog(XLOG_DEBUG, "linux mount: xopts %s\n", extra_opts); + } +#endif /* DEBUG */ + } + +#ifdef DEBUG + amuDebug(D_FULL) { + plog(XLOG_DEBUG, "linux mount: fsname %s\n", mnt->mnt_fsname); + plog(XLOG_DEBUG, "linux mount: type (mntent) %s\n", mnt->mnt_type); + plog(XLOG_DEBUG, "linux mount: opts %s\n", tmp_opts); + plog(XLOG_DEBUG, "linux mount: dir %s\n", mnt->mnt_dir); + } +#endif /* DEBUG */ + + /* + * If we have an nfs mount, the 5th argument to system mount() must be the + * nfs_mount_data structure, otherwise it is the return from parse_opts() + */ + errorcode = mount(mnt->mnt_fsname, + mnt->mnt_dir, + type, + MS_MGC_VAL | flags, + STREQ(type, MOUNT_TYPE_NFS) ? (char *) mnt_data : extra_opts); + + /* + * If we failed, (i.e. errorcode != 0), then close the socket if its is + * open. mnt_data->fd is valid only for NFS. + */ + if (errorcode && STREQ(type,"nfs") && mnt_data->fd != -1) { + /* save errno, may be clobbered by close() call! */ + int save_errno = errno; + close(mnt_data->fd); + errno = save_errno; + } + + /* + * Free all allocated space and return errorcode. + */ +fail: + if (extra_opts != NULL) + XFREE(extra_opts); + if (tmp_opts != NULL) + XFREE(tmp_opts); + if (sub_type != NULL) + XFREE(sub_type); + + return errorcode; +} + + +/****************************************************************************/ +/* + * NFS error numbers and Linux errno's are two different things! Linux is + * `worse' than other OSes in the respect that it loudly complains about + * undefined NFS return value ("bad NFS return value.."). So we should + * translate ANY possible Linux errno to their NFS equivalent. Just, there + * aren't much NFS numbers, so most go to EINVAL or EIO. The mapping below + * should fit at least for Linux/i386 and Linux/68k. I haven't checked + * other architectures yet. + */ + +#define nfs_error linux_nfs_error + +#define NE_PERM 1 +#define NE_NOENT 2 +#define NE_IO 5 +#define NE_NXIO 6 +#define NE_AGAIN 11 +#define NE_ACCES 13 +#define NE_EXIST 17 +#define NE_NODEV 19 +#define NE_NOTDIR 20 +#define NE_ISDIR 21 +#define NE_INVAL 22 +#define NE_FBIG 27 +#define NE_NOSPC 28 +#define NE_ROFS 30 +#define NE_NAMETOOLONG 63 +#define NE_NOTEMPTY 66 +#define NE_DQUOT 69 +#define NE_STALE 70 + +#define NFS_LOMAP 2 +#define NFS_HIMAP 123 + +static int nfs_errormap[] = { + 0, /* (2, unused) */ + NE_INVAL, /* ESRCH (3) */ + NE_IO, /* EINTR (4) */ + NE_IO, /* EIO (5) */ + NE_NXIO, /* ENXIO (6) */ + NE_INVAL, /* E2BIG (7) */ + NE_INVAL, /* ENOEXEC (8) */ + NE_INVAL, /* EBADF (9) */ + NE_IO, /* ECHILD (10) */ + NE_AGAIN, /* EAGAIN (11) */ + NE_IO, /* ENOMEM (12) */ + NE_ACCES, /* EACCES (13) */ + NE_INVAL, /* EFAULT (14) */ + NE_INVAL, /* ENOTBLK (15) */ + NE_IO, /* EBUSY (16) */ + NE_EXIST, /* EEXIST (17) */ + NE_INVAL, /* EXDEV (18) */ + NE_NODEV, /* ENODEV (19) */ + NE_NOTDIR, /* ENOTDIR (20) */ + NE_ISDIR, /* EISDIR (21) */ + NE_INVAL, /* EINVAL (22) */ + NE_IO, /* ENFILE (23) */ + NE_IO, /* EMFILE (24) */ + NE_INVAL, /* ENOTTY (25) */ + NE_ACCES, /* ETXTBSY (26) */ + NE_FBIG, /* EFBIG (27) */ + NE_NOSPC, /* ENOSPC (28) */ + NE_INVAL, /* ESPIPE (29) */ + NE_ROFS, /* EROFS (30) */ + NE_INVAL, /* EMLINK (31) */ + NE_INVAL, /* EPIPE (32) */ + NE_INVAL, /* EDOM (33) */ + NE_INVAL, /* ERANGE (34) */ + NE_INVAL, /* EDEADLK (35) */ + NE_NAMETOOLONG, /* ENAMETOOLONG (36) */ + NE_INVAL, /* ENOLCK (37) */ + NE_INVAL, /* ENOSYS (38) */ + NE_NOTEMPTY, /* ENOTEMPTY (39) */ + NE_INVAL, /* ELOOP (40) */ + NE_INVAL, /* ENOMSG (42) */ + NE_INVAL, /* EIDRM (43) */ + NE_INVAL, /* ECHRNG (44) */ + NE_INVAL, /* EL2NSYNC (45) */ + NE_INVAL, /* EL3HLT (46) */ + NE_INVAL, /* EL3RST (47) */ + NE_INVAL, /* ELNRNG (48) */ + NE_INVAL, /* EUNATCH (49) */ + NE_INVAL, /* ENOCSI (50) */ + NE_INVAL, /* EL2HLT (51) */ + NE_INVAL, /* EBADE (52) */ + NE_INVAL, /* EBADR (53) */ + NE_INVAL, /* EXFULL (54) */ + NE_INVAL, /* ENOANO (55) */ + NE_INVAL, /* EBADRQC (56) */ + NE_INVAL, /* EBADSLT (57) */ + NE_INVAL, /* 58: unused */ + NE_INVAL, /* EBFONT (59) */ + NE_INVAL, /* ENOSTR (60) */ + NE_INVAL, /* ENODATA (61) */ + NE_INVAL, /* ETIME (62) */ + NE_INVAL, /* ENOSR (63) */ + NE_INVAL, /* ENONET (64) */ + NE_INVAL, /* ENOPKG (65) */ + NE_INVAL, /* EREMOTE (66) */ + NE_INVAL, /* ENOLINK (67) */ + NE_INVAL, /* EADV (68) */ + NE_INVAL, /* ESRMNT (69) */ + NE_IO, /* ECOMM (70) */ + NE_IO, /* EPROTO (71) */ + NE_IO, /* EMULTIHOP (72) */ + NE_IO, /* EDOTDOT (73) */ + NE_INVAL, /* EBADMSG (74) */ + NE_INVAL, /* EOVERFLOW (75) */ + NE_INVAL, /* ENOTUNIQ (76) */ + NE_INVAL, /* EBADFD (77) */ + NE_IO, /* EREMCHG (78) */ + NE_IO, /* ELIBACC (79) */ + NE_IO, /* ELIBBAD (80) */ + NE_IO, /* ELIBSCN (81) */ + NE_IO, /* ELIBMAX (82) */ + NE_IO, /* ELIBEXEC (83) */ + NE_INVAL, /* EILSEQ (84) */ + NE_INVAL, /* ERESTART (85) */ + NE_INVAL, /* ESTRPIPE (86) */ + NE_INVAL, /* EUSERS (87) */ + NE_INVAL, /* ENOTSOCK (88) */ + NE_INVAL, /* EDESTADDRREQ (89) */ + NE_INVAL, /* EMSGSIZE (90) */ + NE_INVAL, /* EPROTOTYPE (91) */ + NE_INVAL, /* ENOPROTOOPT (92) */ + NE_INVAL, /* EPROTONOSUPPORT (93) */ + NE_INVAL, /* ESOCKTNOSUPPORT (94) */ + NE_INVAL, /* EOPNOTSUPP (95) */ + NE_INVAL, /* EPFNOSUPPORT (96) */ + NE_INVAL, /* EAFNOSUPPORT (97) */ + NE_INVAL, /* EADDRINUSE (98) */ + NE_INVAL, /* EADDRNOTAVAIL (99) */ + NE_IO, /* ENETDOWN (100) */ + NE_IO, /* ENETUNREACH (101) */ + NE_IO, /* ENETRESET (102) */ + NE_IO, /* ECONNABORTED (103) */ + NE_IO, /* ECONNRESET (104) */ + NE_IO, /* ENOBUFS (105) */ + NE_IO, /* EISCONN (106) */ + NE_IO, /* ENOTCONN (107) */ + NE_IO, /* ESHUTDOWN (108) */ + NE_IO, /* ETOOMANYREFS (109) */ + NE_IO, /* ETIMEDOUT (110) */ + NE_IO, /* ECONNREFUSED (111) */ + NE_IO, /* EHOSTDOWN (112) */ + NE_IO, /* EHOSTUNREACH (113) */ + NE_IO, /* EALREADY (114) */ + NE_IO, /* EINPROGRESS (115) */ + NE_STALE, /* ESTALE (116) */ + NE_IO, /* EUCLEAN (117) */ + NE_INVAL, /* ENOTNAM (118) */ + NE_INVAL, /* ENAVAIL (119) */ + NE_INVAL, /* EISNAM (120) */ + NE_IO, /* EREMOTEIO (121) */ + NE_DQUOT, /* EDQUOT (122) */ +}; + + +int +linux_nfs_error(int e) +{ + int idx = e; + + if (idx > NFS_LOMAP && idx < NFS_HIMAP) + idx = nfs_errormap[idx - NFS_LOMAP]; + return (nfsstat)(idx); +} + +/****************************************************************************/ diff --git a/conf/mount/mount_mach3.c b/conf/mount/mount_mach3.c new file mode 100644 index 0000000..b560e10 --- /dev/null +++ b/conf/mount/mount_mach3.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_mach3.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +int +mount_mach3(char *type, char *mnt, int flags, caddr_t mnt_data) +{ + int err = 0; + errno = 0; + + if (syscall(SYS_vfsmount, type, mnt->mnt_dir, flags, mnt_data)) { + err = -1; + if (errno == ENODEV) { + /* + * might be an old kernel, need to try again + * with file type number instead of string + */ + int typeno = 1; + plog(XLOG_ERROR, "%s: 1SYS_vfsmount: %m", mnt->mnt_dir); + + if (STREQ(mnt->mnt_type, MOUNT_TYPE_UFS)) + typeno = 0; + else if (STREQ(mnt->mnt_type, MOUNT_TYPE_NFS)) + typeno = 1; + else + plog(XLOG_ERROR, "%s: type defaults to nfs...", mnt->mnt_dir); + + plog(XLOG_ERROR, "%s: retry SYS_vfsmount %s %d", mnt->mnt_dir, + mnt->mnt_type, typeno); + if (typeno >= 0) { + if (syscall(SYS_vfsmount, typeno, mnt->mnt_dir, flags, mnt_data)) { + plog(XLOG_ERROR, "%s: 2SYS_vfsmount: %m", mnt->mnt_dir); + } else { + err = 0; + } + } + } + } + return err; +} diff --git a/conf/mount/mount_stellix.c b/conf/mount/mount_stellix.c new file mode 100644 index 0000000..b27de00 --- /dev/null +++ b/conf/mount/mount_stellix.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_stellix.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * STELLIX Mount helper + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Map from conventional mount arguments + * to STELLIX style arguments. + */ +int +mount_stellix(char *fsname, char *dir, int flags, int type, void *data) +{ + +#ifdef DEBUG + dlog("stellix_mount: fsname %s, dir %s, type %d", fsname, dir, type); +#endif /* DEBUG */ + + if (type == MOUNT_TYPE_NFS) + return mount(dir, dir, (MNT2_GEN_OPT_FSS | MNT2_GEN_OPT_NFS | flags), + type, (caddr_t) data); + + if (type == MOUNT_TYPE_UFS) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), type); + + return EINVAL; +} diff --git a/conf/mount/mount_svr4.c b/conf/mount/mount_svr4.c new file mode 100644 index 0000000..0405147 --- /dev/null +++ b/conf/mount/mount_svr4.c @@ -0,0 +1,133 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_svr4.c,v 1.1 1998/11/05 02:04:36 ezk Exp $ + * + */ + +/* + * SVR4: + * Solaris 2.x (SunOS 5.x) and HPUX-11 Mount helper. + * -Erez Zadok + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Map from conventional mount arguments + * to Solaris 2.x (SunOS 5.x) style arguments. + */ +int +mount_svr4(char *fsname, char *dir, int flags, MTYPE_TYPE type, caddr_t data) +{ + +#if defined(MOUNT_TYPE_NFS3) && defined(MNTTAB_TYPE_NFS3) + if (STREQ(type, MOUNT_TYPE_NFS3)) { + return mount(fsname, dir, (MNT2_GEN_OPT_DATA | flags), + type, (char *) data, sizeof(nfs_args_t)); + } +#endif /* defined(MOUNT_TYPE_NFS3) && defined(MNTTAB_TYPE_NFS3) */ + +#if defined(MOUNT_TYPE_NFS) && defined(MNTTAB_TYPE_NFS) + if (STREQ(type, MOUNT_TYPE_NFS)) { + return mount(fsname, dir, (MNT2_GEN_OPT_DATA | flags), + type, (char *) data, sizeof(nfs_args_t)); + } +#endif /* defined(MOUNT_TYPE_NFS) && defined(MNTTAB_TYPE_NFS) */ + +#if defined(MOUNT_TYPE_UFS) && defined(MNTTAB_TYPE_UFS) + if (STREQ(type, MOUNT_TYPE_UFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_DATA | flags), + type, (char *) data, sizeof(ufs_args_t)); +#endif /* defined(MOUNT_TYPE_UFS) && defined(MNTTAB_TYPE_UFS) */ + +#if defined(MOUNT_TYPE_PCFS) && defined(MNTTAB_TYPE_PCFS) + if (STREQ(type, MOUNT_TYPE_PCFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_DATA | flags), + type, (char *) data, sizeof(pcfs_args_t)); +#endif /* defined(MOUNT_TYPE_PCFS) && defined(MNTTAB_TYPE_PCFS) */ + +#if defined(MOUNT_TYPE_CDFS) && defined(MNTTAB_TYPE_CDFS) + /* + * HSFS on Solaris allows for 3 HSFSMNT_* flags to be passed + * as arguments to the mount(). These flags are bit fields in an + * integer, and that integer is passed as the "data" of this system + * call. The flags are described in . However, + * Solaris does not have an interface to these. It does not define + * a structure hsfs_args or anything that one can figure out what + * arguments to pass to mount(2) for this type of filesystem. + * Therefore, until Sun does, no arguments are passed to this mount + * below. + * -Erez Zadok . + */ + if (STREQ(type, MOUNT_TYPE_CDFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), + type, (char *) NULL, 0); +#endif /* defined(MOUNT_TYPE_CDFS) && defined(MNTTAB_TYPE_CDFS) */ + +#if defined(MOUNT_TYPE_LOFS) && defined(MNTTAB_TYPE_LOFS) + if (STREQ(type, MOUNT_TYPE_LOFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_FSS | flags), + type, (char *) NULL, 0); +#endif /* defined(MOUNT_TYPE_LOFS) && defined(MNTTAB_TYPE_LOFS) */ + +#ifdef HAVE_FS_CACHEFS +# if defined(MOUNT_TYPE_CACHEFS) && defined(MNTTAB_TYPE_CACHEFS) + if (STREQ(type, MOUNT_TYPE_CACHEFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_DATA | flags), + type, (char *) data, sizeof(cachefs_args_t)); +# endif /* defined(MOUNT_TYPE_CACHEFS) && defined(MNTTAB_TYPE_CACHEFS) */ +#endif /*HAVE_FS_CACHEFS */ + +#ifdef HAVE_FS_AUTOFS +# if defined(MOUNT_TYPE_AUTOFS) && defined(MNTTAB_TYPE_AUTOFS) + if (STREQ(type, MOUNT_TYPE_AUTOFS)) + return mount(fsname, dir, (MNT2_GEN_OPT_DATA | flags), + type, (char *) data, sizeof(autofs_args_t)); +# endif /* defined(MOUNT_TYPE_AUTOFS) && defined(MNTTAB_TYPE_AUTOFS) */ +#endif /* HAVE_FS_AUTOFS */ + + return EINVAL; +} diff --git a/conf/mtab/mtab_aix.c b/conf/mtab/mtab_aix.c new file mode 100644 index 0000000..c1d4dfb --- /dev/null +++ b/conf/mtab/mtab_aix.c @@ -0,0 +1,154 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_aix.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +/* + * AIX systems don't write their mount tables on a file. Instead, they + * use a (better) system where the kernel keeps this state, and you access + * the mount tables via a known interface. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +static mntent_t * +mnt_dup(struct vmount *mp) +{ + mntent_t *new_mp = ALLOC(mntent_t); + char *ty; + char *fsname = strdup(vmt2dataptr(mp, VMT_OBJECT)); + + new_mp->mnt_dir = strdup(vmt2dataptr(mp, VMT_STUB)); + new_mp->mnt_opts = strdup(vmt2dataptr(mp, VMT_ARGS)); + + switch (mp->vmt_gfstype) { + + case MNT_JFS: + ty = MNTTAB_TYPE_UFS; + new_mp->mnt_fsname = strdup(fsname); + break; + + case MNT_NFS: + ty = MNTTAB_TYPE_NFS; + new_mp->mnt_fsname = str3cat((char *) 0, + vmt2dataptr(mp, VMT_HOSTNAME), ":", + fsname); + break; + + default: + ty = "unknown"; + new_mp->mnt_fsname = strdup(fsname); + break; + + } + + new_mp->mnt_type = strdup(ty); + /* store the VFS ID for uvmount() */ + new_mp->mnt_passno = mp->vmt_vfsnumber; + new_mp->mnt_freq = 0; + + XFREE(fsname); + + return new_mp; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + + int i; + char *mntinfo = 0, *cp; + struct vmount *vp; + int ret; + + /* + * First figure out size of mount table + * and allocate space for a copy... + * Then get mount table for real. + */ + ret = mntctl(MCTL_QUERY, sizeof(i), &i); + if (ret == 0) { + mntinfo = xmalloc(i); + ret = mntctl(MCTL_QUERY, i, mntinfo); + } + if (ret <= 0) { + plog(XLOG_ERROR, "mntctl: %m"); + goto out; + } + + mpp = &mhp; + for (i = 0, cp = mntinfo; i < ret; i++, cp += vp->vmt_length) { + vp = (struct vmount *) cp; + + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by mntctl + */ + (*mpp)->mnt = mnt_dup(vp); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + + *mpp = 0; + +out: + if (mntinfo) + XFREE(mntinfo); + return mhp; +} diff --git a/conf/mtab/mtab_bsd.c b/conf/mtab/mtab_bsd.c new file mode 100644 index 0000000..d084965 --- /dev/null +++ b/conf/mtab/mtab_bsd.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_bsd.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +/* + * BSD 4.4 systems don't write their mount tables on a file. Instead, they + * use a (better) system where the kernel keeps this state, and you access + * the mount tables via a known interface. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +static mntent_t * +mnt_dup(struct statfs *mp) +{ + mntent_t *new_mp = ALLOC(mntent_t); + char *ty; + + new_mp->mnt_fsname = strdup(mp->f_mntfromname); + new_mp->mnt_dir = strdup(mp->f_mntonname); + +#ifdef HAVE_FIELD_STRUCT_STATFS_F_FSTYPENAME + ty = mp->f_fstypename; +#else /* not HAVE_FIELD_STRUCT_STATFS_F_FSTYPENAME */ + switch (mp->f_type) { + +# if defined(MOUNT_UFS) && defined(MNTTAB_TYPE_UFS) + case MOUNT_UFS: + ty = MNTTAB_TYPE_UFS; + break; +# endif /* defined(MOUNT_UFS) && defined(MNTTAB_TYPE_UFS) */ + +# if defined(MOUNT_NFS) && defined(MNTTAB_TYPE_NFS) + case MOUNT_NFS: + ty = MNTTAB_TYPE_NFS; + break; +# endif /* defined(MOUNT_NFS) && defined(MNTTAB_TYPE_NFS) */ + +# if defined(MOUNT_MFS) && defined(MNTTAB_TYPE_MFS) + case MOUNT_MFS: + ty = MNTTAB_TYPE_MFS; + break; +# endif /* defined(MOUNT_MFS) && defined(MNTTAB_TYPE_MFS) */ + + default: + ty = "unknown"; + + break; + } +#endif /* not HAVE_FIELD_STRUCT_STATFS_F_FSTYPENAME */ + + new_mp->mnt_type = strdup(ty); + new_mp->mnt_opts = strdup("unset"); + new_mp->mnt_freq = 0; + new_mp->mnt_passno = 0; + + return new_mp; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + struct statfs *mntbufp, *mntp; + + int nloc = getmntinfo(&mntbufp, MNT_NOWAIT); + + if (nloc == 0) { + plog(XLOG_ERROR, "Can't read mount table"); + return 0; + } + mpp = &mhp; + for (mntp = mntbufp; mntp < mntbufp + nloc; mntp++) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(mntp); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + + /* + * Terminate the list + */ + *mpp = 0; + + return mhp; +} diff --git a/conf/mtab/mtab_file.c b/conf/mtab/mtab_file.c new file mode 100644 index 0000000..557d5f2 --- /dev/null +++ b/conf/mtab/mtab_file.c @@ -0,0 +1,446 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_file.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define NFILE_RETRIES 10 /* number of retries (seconds) */ + +#ifdef MOUNT_TABLE_ON_FILE + +static FILE *mnt_file; + + +/* + * If the system is being trashed by something, then + * opening mtab may fail with ENFILE. So, go to sleep + * for a second and try again. (Yes - this has happened to me.) + * + * Note that this *may* block the automounter, oh well. + * If we get to this state then things are badly wrong anyway... + * + * Give the system 10 seconds to recover but then give up. + * Hopefully something else will exit and free up some file + * table slots in that time. + */ +# ifdef HAVE_FLOCK +# define lock(fd) (flock((fd), LOCK_EX)) +# else /* not HAVE_FLOCK */ +static int +lock(int fd) +{ + int rc; + struct flock lk; + + lk.l_type = F_WRLCK; + lk.l_whence = 0; + lk.l_start = 0; + lk.l_len = 0; + +again: + rc = fcntl(fd, F_SETLKW, (caddr_t) & lk); + if (rc < 0 && (errno == EACCES || errno == EAGAIN)) { +# ifdef DEBUG + dlog("Blocked, trying to obtain exclusive mtab lock"); +# endif /* DEBUG */ + sleep(1); + goto again; + } + return rc; +} +# endif /* not HAVE_FLOCK */ + + +static FILE * +open_locked_mtab(const char *mnttabname, char *mode, char *fs) +{ + FILE *mfp = 0; + + /* + * There is a possible race condition if two processes enter + * this routine at the same time. One will be blocked by the + * exclusive lock below (or by the shared lock in setmntent) + * and by the time the second process has the exclusive lock + * it will be on the wrong underlying object. To check for this + * the mtab file is stat'ed before and after all the locking + * sequence, and if it is a different file then we assume that + * it may be the wrong file (only "may", since there is another + * race between the initial stat and the setmntent). + * + * Simpler solutions to this problem are invited... + */ + int racing = 2; + int rc; + int retries = 0; + struct stat st_before, st_after; + + if (mnt_file) { +# ifdef DEBUG + dlog("Forced close on %s in read_mtab", mnttabname); +# endif /* DEBUG */ + endmntent(mnt_file); + mnt_file = 0; + } +again: + if (mfp) { + endmntent(mfp); + mfp = 0; + } + clock_valid = 0; + if (stat(mnttabname, &st_before) < 0) { + plog(XLOG_ERROR, "%s: stat: %m", mnttabname); + if (errno == ESTALE) { + /* happens occasionally */ + sleep(1); + goto again; + } + return 0; + } + +eacces: + mfp = setmntent((char *)mnttabname, mode); + if (!mfp) { + /* + * Since setmntent locks the descriptor, it + * is possible it can fail... so retry if + * needed. + */ + if (errno == EACCES || errno == EAGAIN) { +# ifdef DEBUG + dlog("Blocked, trying to obtain exclusive mtab lock"); +# endif /* DEBUG */ + goto eacces; + } else if (errno == ENFILE && retries++ < NFILE_RETRIES) { + sleep(1); + goto eacces; + } + plog(XLOG_ERROR, "setmntent(\"%s\", \"%s\"): %m", mnttabname, mode); + return 0; + } + /* + * At this point we have an exclusive lock on the mount list, + * but it may be the wrong one so... + */ + + /* + * Need to get an exclusive lock on the current + * mount table until we have a new copy written + * out, when the lock is released in free_mntlist. + * flock is good enough since the mount table is + * not shared between machines. + */ + do + rc = lock(fileno(mfp)); + while (rc < 0 && errno == EINTR); + if (rc < 0) { + plog(XLOG_ERROR, "Couldn't lock %s: %m", mnttabname); + endmntent(mfp); + return 0; + } + /* + * Now check whether the mtab file has changed under our feet + */ + if (stat(mnttabname, &st_after) < 0) { + plog(XLOG_ERROR, "%s: stat", mnttabname); + goto again; + } + if (st_before.st_dev != st_after.st_dev || + st_before.st_ino != st_after.st_ino) { + struct timeval tv; + if (racing == 0) { + /* Sometimes print a warning */ + plog(XLOG_WARNING, + "Possible mount table race - retrying %s", fs); + } + racing = (racing + 1) & 3; + /* + * Take a nap. From: Doug Kingston + */ + tv.tv_sec = 0; + tv.tv_usec = (mypid & 0x07) << 17; + if (tv.tv_usec) + if (select(0, (voidp) 0, (voidp) 0, (voidp) 0, &tv) < 0) + plog(XLOG_WARNING, "mtab nap failed: %m"); + + goto again; + } + + return mfp; +} + + +/* + * Unlock the mount table + */ +void +unlock_mntlist(void) +{ + /* + * Release file lock, by closing the file + */ + if (mnt_file) { + endmntent(mnt_file); + mnt_file = 0; + } +} + + +/* + * Write out a mount list + */ +void +rewrite_mtab(mntlist *mp, const char *mnttabname) +{ + FILE *mfp; + int error = 0; + + /* + * Concoct a temporary name in the same directory as the target mount + * table so that rename() will work. + */ + char tmpname[64]; + int retries; + int tmpfd; + char *cp; + char mcp[128]; + + strcpy(mcp, mnttabname); + cp = strrchr(mcp, '/'); + if (cp) { + memmove(tmpname, mcp, cp - mcp); + tmpname[cp - mcp] = '\0'; + } else { + plog(XLOG_WARNING, "No '/' in mtab (%s), using \".\" as tmp directory", mnttabname); + tmpname[0] = '.'; + tmpname[1] = '\0'; + } + strcat(tmpname, "/mtabXXXXXX"); + mktemp(tmpname); + retries = 0; +enfile1: + if ((tmpfd = open(tmpname, O_RDWR | O_CREAT | O_TRUNC, 0644)) < 0) { + if (errno == ENFILE && retries++ < NFILE_RETRIES) { + sleep(1); + goto enfile1; + } + plog(XLOG_ERROR, "%s: open: %m", tmpname); + return; + } + if (close(tmpfd) < 0) + plog(XLOG_ERROR, "Couldn't close tmp file descriptor: %m"); + + retries = 0; +enfile2: + mfp = setmntent(tmpname, "w"); + if (!mfp) { + if (errno == ENFILE && retries++ < NFILE_RETRIES) { + sleep(1); + goto enfile2; + } + plog(XLOG_ERROR, "setmntent(\"%s\", \"w\"): %m", tmpname); + error = 1; + goto out; + } + while (mp) { + if (mp->mnt) { + if (addmntent(mfp, mp->mnt)) { + plog(XLOG_ERROR, "Can't write entry to %s", tmpname); + error = 1; + goto out; + } + } + mp = mp->mnext; + } + + /* + * SunOS 4.1 manuals say that the return code from entmntent() + * is always 1 and to treat as a void. That means we need to + * call fflush() to make sure the new mtab file got written. + */ + if (fflush(mfp)) { + plog(XLOG_ERROR, "flush new mtab file: %m"); + error = 1; + goto out; + } + (void) endmntent(mfp); + + /* + * Rename temporary mtab to real mtab + */ + if (rename(tmpname, mnttabname) < 0) { + plog(XLOG_ERROR, "rename %s to %s: %m", tmpname, mnttabname); + error = 1; + goto out; + } +out: + if (error) + (void) unlink(tmpname); +} + + +static void +mtab_stripnl(char *s) +{ + do { + s = strchr(s, '\n'); + if (s) + *s++ = ' '; + } while (s); +} + + +/* + * Append a mntent structure to the + * current mount table. + */ +void +write_mntent(mntent_t *mp, const char *mnttabname) +{ + int retries = 0; + FILE *mfp; +enfile: + mfp = open_locked_mtab(mnttabname, "a", mp->mnt_dir); + if (mfp) { + mtab_stripnl(mp->mnt_opts); + if (addmntent(mfp, mp)) + plog(XLOG_ERROR, "Couldn't write %s: %m", mnttabname); + if (fflush(mfp)) + plog(XLOG_ERROR, "Couldn't flush %s: %m", mnttabname); + (void) endmntent(mfp); + } else { + if (errno == ENFILE && retries < NFILE_RETRIES) { + sleep(1); + goto enfile; + } + plog(XLOG_ERROR, "setmntent(\"%s\", \"a\"): %m", mnttabname); + } +} + +#endif /* MOUNT_TABLE_ON_FILE */ + + +static mntent_t * +mnt_dup(mntent_t *mp) +{ + mntent_t *new_mp = ALLOC(mntent_t); + + new_mp->mnt_fsname = strdup(mp->mnt_fsname); + new_mp->mnt_dir = strdup(mp->mnt_dir); + new_mp->mnt_type = strdup(mp->mnt_type); + new_mp->mnt_opts = strdup(mp->mnt_opts); + + new_mp->mnt_freq = mp->mnt_freq; + new_mp->mnt_passno = mp->mnt_passno; + +#ifdef HAVE_FIELD_MNTENT_T_MNT_TIME +# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING + new_mp->mnt_time = strdup(mp->mnt_time); +# else /* not HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */ + new_mp->mnt_time = mp->mnt_time; +# endif /* not HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */ +#endif /* HAVE_FIELD_MNTENT_T_MNT_TIME */ + +#ifdef HAVE_FIELD_MNTENT_T_MNT_CNODE + new_mp->mnt_cnode = mp->mnt_cnode; +#endif /* HAVE_FIELD_MNTENT_T_MNT_CNODE */ + + return new_mp; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + + mntent_t *mep; + FILE *mfp = open_locked_mtab(mnttabname, "r+", fs); + + if (!mfp) + return 0; + + mpp = &mhp; + +/* + * XXX - In SunOS 4 there is (yet another) memory leak + * which loses 1K the first time getmntent is called. + * (jsp) + */ + while ((mep = getmntent(mfp))) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(mep); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + *mpp = 0; + +#ifdef MOUNT_TABLE_ON_FILE + /* + * If we are not updating the mount table then we + * can free the resources held here, otherwise they + * must be held until the mount table update is complete + */ + mnt_file = mfp; +#else /* not MOUNT_TABLE_ON_FILE */ + endmntent(mfp); +#endif /* not MOUNT_TABLE_ON_FILE */ + + return mhp; +} diff --git a/conf/mtab/mtab_isc3.c b/conf/mtab/mtab_isc3.c new file mode 100644 index 0000000..c9588fe --- /dev/null +++ b/conf/mtab/mtab_isc3.c @@ -0,0 +1,281 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_isc3.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* fd for /etc/.mnt.lock (also act as flag for: is_locked) */ +static int mtlckf = 0; +static char mtlckname[] = "/etc/.mnt.lock"; +static char mnttabname[] = "/etc/mnttab"; + + +static void +unlockmnttab(void) +{ + if (mtlckf) { + close(mtlckf); + mtlckf = 0; + } +} + + +static +lockfile(int fd, int type) +{ + struct flock lk; + + lk.l_type = type; + lk.l_whence = 0; + lk.l_start = 0; + lk.l_len = 0; + + return fcntl(fd, F_SETLKW, &lk); +} + + +static +lockmnttab(void) +{ + if (mtlckf == 0) { /* need lock on /etc/.mnt.lock */ + mtlckf = open(mtlckname, O_RDWR); + if (mtlckf >= 0) { + if (lockfile(mtlckf, F_WRLCK) < 0) { + close(mtlckf); + mtlckf = 0; +#ifdef DEBUG + dlog("lock lock failed %m"); +#endif /* DEBUG */ + } else { + return 0; + } + } + } + plog(XLOG_ERROR, "Unable to lock %s: %m", mtlckname); + return -1; +} + + +void +unlock_mntlist(void) +{ + unlockmnttab(); +} + + +/* convert from ix386 mnttab to amd mntent */ +static mntent_t * +mnt_dup(mntent_t *mp) +{ + /* note: may not be null terminated */ + mntent_t *new_mp = ALLOC(mntent_t); + char nullcpy[128]; + + strncpy(nullcpy, mp->mt_dev, 32); + nullcpy[32] = '\0'; + new_mp->mnt_fsname = strdup(nullcpy); + + strncpy(nullcpy, mp->mt_filsys, 32); + nullcpy[32] = '\0'; + new_mp->mnt_dir = strdup(nullcpy); + + strncpy(nullcpy, mp->mt_fstyp, 16); + nullcpy[16] = '\0'; + new_mp->mnt_type = strdup(nullcpy); + + strncpy(nullcpy, mp->mt_mntopts, 64); + nullcpy[64] = '\0'; + new_mp->mnt_opts = strdup(nullcpy); + + new_mp->mnt_freq = 0; + new_mp->mnt_passno = 0; + + new_mp->mnt_time = mp->mt_time; + new_mp->mnt_ro = mp->mt_ro_flg; + + return new_mp; +} + + +/* convert back (static alloc) */ +static mntent_t * +mtab_of(mntent_t *mnt) +{ + static mntent_t mt; + + memset(mt.mt_dev, '\0', 32); + strncpy(mt.mt_dev, mnt->mnt_fsname, 32); + memset(mt.mt_filsys, '\0', 32); + strncpy(mt.mt_filsys, mnt->mnt_dir, 32); + + mt.mt_ro_flg = mnt->mnt_ro; + mt.mt_time = mnt->mnt_time; + + memset(mt.mt_fstyp, '\0', 16); + strncpy(mt.mt_fstyp, mnt->mnt_type, 16); + memset(mt.mt_mntopts, '\0', 64); + strncpy(mt.mt_mntopts, mnt->mnt_opts, 64); + + return &mt; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + /* From: Piete Brooks */ + int fd; + mntent_t mountbuffer[NMOUNT], *fs_data; + int ret; + int nmts; + + if (lockmnttab() != 0) + return (mntlist *) 0; + + fd = open(mnttabname, O_RDONLY); + if (fd < 0) { + plog(XLOG_ERROR, "Can't open %s: %m", mnttabname); + return (mntlist *) 0; + } + mpp = &mhp; + while ((ret = read(fd, (char *) mountbuffer, NMOUNT * sizeof(mntent_t))) > 0) { + nmts = ret / sizeof(mntent_t); + for (fs_data = mountbuffer; fs_data < &mountbuffer[nmts]; fs_data++) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(fs_data); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + } + if (ret < 0) { + plog(XLOG_ERROR, "read error on %s: %m", mnttabname); + unlockmnttab(); + mhp = (mntlist *) 0; + } + *mpp = 0; + + close(fd); + return mhp; +} + + +static +write_mntent_to_mtab(int fd, mntent_t *mnt) +{ + int wr; + +eagain: + wr = write(fd, (char *) mtab_of(mnt), sizeof(mntent_t)); + if (wr < 0) { + switch (wr) { + case EAGAIN: + goto eagain; + default: + return -1; + } + } + if (wr != sizeof(mntent_t)) + plog(XLOG_ERROR, "Can't write entry to %s: %m", mnttabname); + return 0; +} + + +void +rewrite_mtab(mntlist *mp, const char *mnttabname) +{ + int fd; + + assert(mtlckf != 0); + + fd = open(mnttabname, O_RDWR | O_TRUNC); + if (fd < 0) { + plog(XLOG_ERROR, "Can't open %s: %m", mnttabname); + unlockmnttab(); + } + while (mp) { + if (mp->mnt) + write_mntent_to_mtab(fd, mp->mnt); + mp = mp->mnext; + } + + close(fd); + unlockmnttab(); +} + + +void +write_mntent(mntent_t *mp, const char *mnttabname) +{ + int fd; + + if (lockmnttab() == -1) + return; + + fd = open(mnttabname, O_RDWR | O_APPEND); + if (fd < 0) { + plog(XLOG_ERROR, "Unable to append %s: %m", mnttabname); + return; + } + write_mntent_to_mtab(fd, mp); + + close(fd); + unlockmnttab(); +} diff --git a/conf/mtab/mtab_mach3.c b/conf/mtab/mtab_mach3.c new file mode 100644 index 0000000..1fba342 --- /dev/null +++ b/conf/mtab/mtab_mach3.c @@ -0,0 +1,493 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_mach3.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define NFILE_RETRIES 10 /* number of retries (seconds) */ + +static FILE *mnt_file; + + +/* + * If the system is being trashed by something, then + * opening mtab may fail with ENFILE. So, go to sleep + * for a second and try again. (Yes - this has happened to me.) + * + * Note that this *may* block the automounter, oh well. + * If we get to this state then things are badly wrong anyway... + * + * Give the system 10 seconds to recover but then give up. + * Hopefully something else will exit and free up some file + * table slots in that time. + */ +#ifdef HAVE_FCNTL_H +static int +lock(int fd) +{ + int rc; + struct flock lk; + + lk.l_type = F_WRLCK; + lk.l_whence = 0; + lk.l_start = 0; + lk.l_len = 0; + +again: + rc = fcntl(fd, F_SETLKW, (caddr_t) & lk); + if (rc < 0 && (errno == EACCES || errno == EAGAIN)) { +# ifdef DEBUG + dlog("Blocked, trying to obtain exclusive mtab lock"); +# endif /* DEBUG */ + sleep(1); + goto again; + } + return rc; +} +#else /* not HAVE_FCNTL_H */ +# define lock(fd) (flock((fd), LOCK_EX)) +#endif /* not HAVE_FCNTL_H */ + + +static FILE * +open_locked_mtab(char *mnttabname, char *mode, char *fs) +{ + FILE *mfp = 0; + + /* + * There is a possible race condition if two processes enter + * this routine at the same time. One will be blocked by the + * exclusive lock below (or by the shared lock in setmntent) + * and by the time the second process has the exclusive lock + * it will be on the wrong underlying object. To check for this + * the mtab file is stat'ed before and after all the locking + * sequence, and if it is a different file then we assume that + * it may be the wrong file (only "may", since there is another + * race between the initial stat and the setmntent). + * + * Simpler solutions to this problem are invited... + */ + int racing = 2; + int rc; + int retries = 0; + struct stat st_before, st_after; + + if (mnt_file) { +#ifdef DEBUG + dlog("Forced close on %s in read_mtab", mnttabname); +#endif /* DEBUG */ + endmntent(mnt_file); + mnt_file = 0; + } +again: + if (mfp) { + endmntent(mfp); + mfp = 0; + } + clock_valid = 0; + if (stat(mnttabname, &st_before) < 0) { + plog(XLOG_ERROR, "%s: stat: %m", mnttabname); + if (errno == ESTALE) { + /* happens occasionally */ + sleep(1); + goto again; + } + return 0; + } +eacces: + mfp = setmntent(mnttabname, mode); + if (!mfp) { + /* + * Since setmntent locks the descriptor, it + * is possible it can fail... so retry if + * needed. + */ + if (errno == EACCES || errno == EAGAIN) { +#ifdef DEBUG + dlog("Blocked, trying to obtain exclusive mtab lock"); +#endif /* DEBUG */ + goto eacces; + } else if (errno == ENFILE && retries++ < NFILE_RETRIES) { + sleep(1); + goto eacces; + } + plog(XLOG_ERROR, "setmntent(\"%s\", \"%s\"): %m", mnttabname, mode); + return 0; + } + /* + * At this point we have an exclusive lock on the mount list, + * but it may be the wrong one so... + */ + + /* + * Need to get an exclusive lock on the current + * mount table until we have a new copy written + * out, when the lock is released in free_mntlist. + * flock is good enough since the mount table is + * not shared between machines. + */ + do + rc = lock(fileno(mfp)); + while (rc < 0 && errno == EINTR); + if (rc < 0) { + plog(XLOG_ERROR, "Couldn't lock %s: %m", mnttabname); + endmntent(mfp); + return 0; + } + /* + * Now check whether the mtab file has changed under our feet + */ + if (stat(mnttabname, &st_after) < 0) { + plog(XLOG_ERROR, "%s: stat", mnttabname); + goto again; + } + if (st_before.st_dev != st_after.st_dev || + st_before.st_ino != st_after.st_ino) { + struct timeval tv; + if (racing == 0) { + /* Sometimes print a warning */ + plog(XLOG_WARNING, + "Possible mount table race - retrying %s", fs); + } + racing = (racing + 1) & 3; + /* + * Take a nap. From: Doug Kingston + */ + tv.tv_sec = 0; + tv.tv_usec = (mypid & 0x07) << 17; + if (tv.tv_usec) + if (select(0, (voidp) 0, (voidp) 0, (voidp) 0, &tv) < 0) + plog(XLOG_WARNING, "mtab nap failed: %m"); + + goto again; + } + return mfp; +} + + +/* + * Unlock the mount table + */ +void +unlock_mntlist(void) +{ + /* + * Release file lock, by closing the file + */ + if (mnt_file) { + endmntent(mnt_file); + mnt_file = 0; + } +} + + +/* + * routine to convert notation "/@honeydew" to the notation + * honeydew:/ and vice versa (honeydew:/ to /@honeydew) + * This lets you put /@honeydew in /etc/fstab without changing + * fstab.c and it lets you use EITHER notation on the command line! + */ +static char * +convert(register char *s, char bad, char good) +{ + char *index(); + register char *t, *p; + register int len1, len2, i; + char *ptr; + + if ((p = index(s, bad)) == NULL) { + return (s); + } + ptr = t = (char *) xzalloc(MAXPATHLEN * sizeof(char)); + len1 = p - s; + len2 = strlen(s) - len1 - 1; + p++; + for (i = 0; i < len2; i++) + *t++ = p[i]; + *t++ = good; + for (i = 0; i < len1; i++) + *t++ = s[i]; + return (ptr); +} + + +static +mntprtent3(FILE *mnttabp, register mntent_t *mnt) +{ + char *cvtd = convert(mnt->mnt_fsname, ':', '@'); + + dlog("%x:%s:%s:%s:%d:%d:%s:%s:\n", + mnttabp, + (cvtd ? cvtd : ""), + (mnt->mnt_dir ? mnt->mnt_dir : ""), + (mnt->mnt_opts ? mnt->mnt_opts : ""), + mnt->mnt_freq, + mnt->mnt_passno, + (mnt->mnt_type ? mnt->mnt_type : ""), + (mnt->mnt_opts2 ? mnt->mnt_opts2 : "") + ); + fprintf(mnttabp, "%s:%s:%s:%d:%d:%s:%s:\n", + (cvtd ? cvtd : ""), + (mnt->mnt_dir ? mnt->mnt_dir : ""), + (mnt->mnt_opts ? mnt->mnt_opts : ""), + mnt->mnt_freq, + mnt->mnt_passno, + (mnt->mnt_type ? mnt->mnt_type : ""), + (mnt->mnt_opts2 ? mnt->mnt_opts2 : "") + ); + XFREE(cvtd); + cvtd = NULL; + return (0); +} + + +addmntent3(FILE *mnttabp, register mntent_t *mnt) +{ + if (fseek(mnttabp, 0, 2) < 0) { + return (1); + } + mntprtent3(mnttabp, mnt); + return (0); +} + + +/* + * Write out a mount list + */ +void +rewrite_mtab(mntlist *mp, const char *mnttabname) +{ + FILE *mfp; + int error = 0; + /* + * Concoct a temporary name in the same + * directory as the target mount table + * so that rename() will work. + */ + char tmpname[64]; + int retries; + int tmpfd; + char *cp; + char *mcp = mnttabname; + cp = strrchr(mcp, '/'); + if (cp) { + memmove(tmpname, mcp, cp - mcp); + tmpname[cp - mcp] = '\0'; + } else { + plog(XLOG_WARNING, "No '/' in mtab (%s), using \".\" as tmp directory", mnttabname); + tmpname[0] = '.'; + tmpname[1] = '\0'; + } + strcat(tmpname, "/mtabXXXXXX"); + mktemp(tmpname); + retries = 0; +enfile1: + if ((tmpfd = open(tmpname, O_RDWR | O_CREAT | O_TRUNC, 0644)) < 0) { + if (errno == ENFILE && retries++ < NFILE_RETRIES) { + sleep(1); + goto enfile1; + } + plog(XLOG_ERROR, "%s: open: %m", tmpname); + return; + } + if (close(tmpfd) < 0) + plog(XLOG_ERROR, "Couldn't close tmp file descriptor: %m"); + + retries = 0; +enfile2: + mfp = setmntent(tmpname, "w"); + if (!mfp) { + if (errno == ENFILE && retries++ < NFILE_RETRIES) { + sleep(1); + goto enfile2; + } + plog(XLOG_ERROR, "setmntent(\"%s\", \"w\"): %m", tmpname); + error = 1; + goto out; + } + while (mp) { + if (mp->mnt) { + if (addmntent3(mfp, mp->mnt)) { + plog(XLOG_ERROR, "Can't write entry to %s", tmpname); + error = 1; + goto out; + } + } + mp = mp->mnext; + } + + /* + * SunOS 4.1 manuals say that the return code from endmntent() + * is always 1 and to treat as a void. That means we need to + * call fflush() to make sure the new mtab file got written. + */ + if (fflush(mfp)) { + plog(XLOG_ERROR, "flush new mtab file: %m"); + error = 1; + goto out; + } + (void) endmntent(mfp); + + /* + * Rename temporary mtab to real mtab + */ + if (rename(tmpname, mnttabname) < 0) { + plog(XLOG_ERROR, "rename %s to %s: %m", tmpname, mnttabname); + error = 1; + goto out; + } +out: + if (error) + (void) unlink(tmpname); +} + + +static void +mtab_stripnl(char *s) +{ + do { + s = strchr(s, '\n'); + if (s) + *s++ = ' '; + } while (s); +} + + +/* + * Append a mntent structure to the + * current mount table. + */ +void +write_mntent(mntent_t *mp, const char *mnttabname) +{ + int retries = 0; + FILE *mfp; +enfile: + mfp = open_locked_mtab(mnttabname, "a", mp->mnt_dir); + if (mfp) { + mtab_stripnl(mp->mnt_opts); + if (addmntent3(mfp, mp)) + plog(XLOG_ERROR, "Couldn't write %s: %m", mnttabname); + if (fflush(mfp)) + plog(XLOG_ERROR, "Couldn't flush %s: %m", mnttabname); + (void) endmntent(mfp); + } else { + if (errno == ENFILE && retries < NFILE_RETRIES) { + sleep(1); + goto enfile; + } + plog(XLOG_ERROR, "setmntent(\"%s\", \"a\"): %m", mnttabname); + } +} + + +static mntent_t * +mnt_dup(mntent_t *mp) +{ + mntent_t *new_mp = ALLOC(mntent_t); + + new_mp->mnt_fsname = convert(mp->mnt_fsname, '@', ':'); + + new_mp->mnt_dir = strdup(mp->mnt_dir); + new_mp->mnt_type = strdup(mp->mnt_type); + new_mp->mnt_opts = strdup(mp->mnt_opts); + + new_mp->mnt_freq = mp->mnt_freq; + new_mp->mnt_passno = mp->mnt_passno; + + return new_mp; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + + mntent_t *mep; + FILE *mfp = open_locked_mtab(mnttabname, "r+", fs); + + if (!mfp) + return 0; + + mpp = &mhp; + +/* + * XXX - In SunOS 4 there is (yet another) memory leak + * which loses 1K the first time getmntent is called. + * (jsp) + */ + while (mep = getmntent(mfp)) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(mep); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + *mpp = 0; + + /* + * If we are not updating the mount table then we + * can free the resources held here, otherwise they + * must be held until the mount table update is complete + */ + mnt_file = mfp; + + return mhp; +} diff --git a/conf/mtab/mtab_osf.c b/conf/mtab/mtab_osf.c new file mode 100644 index 0000000..cf613cf --- /dev/null +++ b/conf/mtab/mtab_osf.c @@ -0,0 +1,151 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_osf.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +static mntent_t * +mnt_dup(struct statfs *mp) +{ + mntent_t *new_mp = ALLOC(mntent_t); + char *ty; + char *at; + char mntfrombuf[MNAMELEN]; + char *mntfromptr; + + /* + * Under DEC OSF/1 T1.2-2 the f_mntfromname fields of + * the statfs structure can be in the format @ + * instead of :. Here we check for this and + * reformat it if necessary. + */ + mntfromptr = mp->f_mntfromname; + + switch (mp->f_type) { + case MOUNT_TYPE_NFS: +#ifdef HAVE_FS_NFS3 + case MOUNT_TYPE_NFS3: +#endif /* HAVE_FS_NFS3 */ + at = strchr(mp->f_mntfromname, '@'); + if (at != '\0') { + strcpy(mntfrombuf, (at + 1)); + strcat(mntfrombuf, ":"); + strncat(mntfrombuf, mp->f_mntfromname, (at - mp->f_mntfromname)); + mntfromptr = mntfrombuf; + } + } + new_mp->mnt_fsname = strdup(mntfromptr); + + new_mp->mnt_dir = strdup(mp->f_mntonname); + switch (mp->f_type) { + case MOUNT_TYPE_UFS: + ty = MNTTAB_TYPE_UFS; + break; +#ifdef HAVE_FS_NFS3 + case MOUNT_TYPE_NFS3: + ty = MNTTAB_TYPE_NFS3; + break; +#endif /* HAVE_FS_NFS3 */ + case MOUNT_TYPE_NFS: + ty = MNTTAB_TYPE_NFS; + break; + case MOUNT_TYPE_MFS: + ty = MNTTAB_TYPE_MFS; + break; + default: + ty = "unknown"; + break; + } + + new_mp->mnt_type = strdup(ty); + new_mp->mnt_opts = strdup("unset"); + new_mp->mnt_freq = 0; + new_mp->mnt_passno = 0; + + return new_mp; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + struct statfs *mntbufp, *mntp; + + int nloc = getmntinfo(&mntbufp, MNT_NOWAIT); + + if (nloc == 0) { + plog(XLOG_ERROR, "Can't read mount table"); + return 0; + } + mpp = &mhp; + for (mntp = mntbufp; mntp < mntbufp + nloc; mntp++) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(mntp); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + + /* terminate the linked list */ + *mpp = 0; + + return mhp; +} diff --git a/conf/mtab/mtab_svr4.c b/conf/mtab/mtab_svr4.c new file mode 100644 index 0000000..72dc45b --- /dev/null +++ b/conf/mtab/mtab_svr4.c @@ -0,0 +1,298 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_svr4.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + * How to manage the mount table file. Based on other SVR3 ports. + * -Erez Zadok + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * file descriptor for lock file + * values: -1 no file-descriptor was set yet (or mnttab unlocked, or error + * in locking). + * >=0 legal file-descriptor value (file lock succeeded) + */ +static int mntent_lock_fd = -1; + +/* static char mnttabname[] = MNTTAB_FILE_NAME; */ + +#ifdef MNTTAB_LOCK_FILE +static char mtlckname[] = MNTTAB_LOCK_FILE; +#else /* not MTAB_LOCK_FILE */ +static char mtlckname[] = "/etc/.mnttab.lock"; +#endif /* not MTAB_LOCK_FILE */ + + +/****************************************************************************/ +/*** Private functions */ +/****************************************************************************/ + +static void +unlockmnttab(void) +{ + if (mntent_lock_fd >= 0) { + close(mntent_lock_fd); + mntent_lock_fd = -1; + } +} + + +static int +lockfile(int fd, int type) +{ + struct flock lk; + int ret; + + lk.l_type = type; + lk.l_whence = 0; + lk.l_start = 0; + lk.l_len = 0; + + /* + * F_SETLKW means to block until the read or write block is free to be + * locked. + */ + ret = fcntl(fd, F_SETLKW, &lk); + return ret; +} + +/* return 0 if locking succeeded, -1 if failed */ +static int +lockmnttab(void) +{ + + /* if mnttab file is locked, all is well */ + if (mntent_lock_fd >= 0) + return 0; + + /* need to lock mnttab file. first, open the file */ + mntent_lock_fd = open(mtlckname, O_RDWR | O_CREAT, 0600); + if (mntent_lock_fd < 0) { + plog(XLOG_ERROR, "Unable to open/creat %s: %m", mtlckname); + return -1; + } + + /* if succeeded in opening the file, try to lock it */ + if (lockfile(mntent_lock_fd, F_WRLCK) < 0) { + close(mntent_lock_fd); + mntent_lock_fd = -1; +#ifdef DEBUG + dlog("lock %s failed %m", mtlckname); +#endif /* DEBUG */ + return -1; + } + + /* finally, succeeded in also locking the file */ + return 0; +} + + +/* + * Convert from solaris mnttab to Amd mntent. Since am-utils uses + * native "struct mnttab" if available, this really copies fields of + * the same structure. + */ +static mntent_t * +mnt_dup(const mntent_t *mtp) +{ + mntent_t *mep = ALLOC(mntent_t); + + mep->mnt_fsname = strdup(mtp->mnt_fsname); + mep->mnt_dir = strdup(mtp->mnt_dir); + mep->mnt_type = strdup(mtp->mnt_type); + mep->mnt_opts = strdup(mtp->mnt_opts); + mep->mnt_time = strdup(mtp->mnt_time); + + return mep; +} + + +/* + * Adjust arguments in mntent_t. + */ +static mntent_t * +update_mnttab_fields(const mntent_t *mnt) +{ + static mntent_t mt; + static char timestr[16]; + struct timeval tv; + + /* most fields don't change, only update mnt_time below */ + mt.mnt_fsname = mnt->mnt_fsname; + mt.mnt_dir = mnt->mnt_dir; + mt.mnt_type = mnt->mnt_type; + mt.mnt_opts = mnt->mnt_opts; + + /* + * Solaris 2.5 and newer take a second argument to gettimeofday(). If you + * find a useful svr4-like OS that uses the old style, and this code here + * fails, then create a new autoconf test that will determine the number + * of arguments gettimeofday() takes. -Erez. + */ + if (gettimeofday(&tv, NULL) < 0) + timestr[0] = '\0'; + else + sprintf(timestr, "%ld", tv.tv_sec); + + mt.mnt_time = timestr; + + return &mt; +} + + +static void +write_mntent_to_mtab(FILE *fp, const mntent_t *mnt) +{ + putmntent(fp, update_mnttab_fields(mnt)); +} + + +/****************************************************************************/ +/*** Public functions */ +/****************************************************************************/ + + +void +unlock_mntlist(void) +{ + unlockmnttab(); +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + FILE *fp; + mntent_t mountbuf; + int ret; + + if (lockmnttab() < 0) /* failed locking */ + return NULL; + + fp = fopen(mnttabname, "r"); + if (fp == NULL) { + plog(XLOG_ERROR, "Can't open %s: %m", mnttabname); + return NULL; + } + mpp = &mhp; + + while ((ret = getmntent(fp, &mountbuf)) == 0) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(&mountbuf); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + + if (ret > 0) { + plog(XLOG_ERROR, "read error on %s: %m", mnttabname); + unlockmnttab(); + mhp = NULL; + } + *mpp = 0; + + fclose(fp); + return mhp; +} + + +void +rewrite_mtab(mntlist *mp, const char *mnttabname) +{ + FILE *fp; + + assert(mntent_lock_fd >= 0); /* ensure lock fd is valid */ + + fp = fopen(mnttabname, "r+"); + if (fp == NULL) { + plog(XLOG_ERROR, "Can't open %s: %m", mnttabname); + unlockmnttab(); + return; + } + while (mp) { + if (mp->mnt) + write_mntent_to_mtab(fp, mp->mnt); + mp = mp->mnext; + } + + ftruncate(fileno(fp), ftell(fp)); + fclose(fp); + unlockmnttab(); +} + + +void +write_mntent(mntent_t *mtp, const char *mnttabname) +{ + FILE *fp; + + if (lockmnttab() < 0) + return; + + fp = fopen(mnttabname, "a"); + if (fp == NULL) { + plog(XLOG_ERROR, "Unable to append %s: %m", mnttabname); + return; + } + write_mntent_to_mtab(fp, mtp); + + fclose(fp); + unlockmnttab(); +} diff --git a/conf/mtab/mtab_ultrix.c b/conf/mtab/mtab_ultrix.c new file mode 100644 index 0000000..da5cc44 --- /dev/null +++ b/conf/mtab/mtab_ultrix.c @@ -0,0 +1,117 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab_ultrix.c,v 1.1 1998/11/05 02:04:37 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#ifndef NMOUNT +# define NMOUNT 20 +#endif /* NMOUNT */ + + +static mntent_t * +mnt_dup(struct fs_data *mp) +{ + mntent_t *new_mp = ALLOC(mntent_t); + + new_mp->mnt_fsname = strdup(mp->fd_devname); + new_mp->mnt_dir = strdup(mp->fd_path); + if (mp->fd_fstype >= GT_NUMTYPES) + mp->fd_fstype = GT_UNKWN; + else if (gt_names[mp->fd_fstype] == 0) + mp->fd_fstype = GT_UNKWN; + new_mp->mnt_type = strdup(gt_names[mp->fd_fstype]); + new_mp->mnt_opts = strdup("unset"); + + new_mp->mnt_freq = 0; + new_mp->mnt_passno = mp->fd_dev; + + return new_mp; +} + + +/* + * Read a mount table into memory + */ +mntlist * +read_mtab(char *fs, const char *mnttabname) +{ + mntlist **mpp, *mhp; + + /* From: Piete Brooks */ + + int loc = 0; + struct fs_data mountbuffer[NMOUNT], *fs_data; + int ret; + + mpp = &mhp; + while ((ret = getmountent(&loc, mountbuffer, NMOUNT)) > 0) { + for (fs_data = mountbuffer; fs_data < &mountbuffer[ret]; fs_data++) { + /* + * Allocate a new slot + */ + *mpp = ALLOC(struct mntlist); + + /* + * Copy the data returned by getmntent + */ + (*mpp)->mnt = mnt_dup(fs_data); + + /* + * Move to next pointer + */ + mpp = &(*mpp)->mnext; + } + } + if (ret < 0) { + plog(XLOG_ERROR, "getmountent: %m"); + return 0; + } + *mpp = 0; + + return mhp; +} diff --git a/conf/nfs_prot/nfs_prot_aix3.h b/conf/nfs_prot/nfs_prot_aix3.h new file mode 100644 index 0000000..0ade1a6 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_aix3.h @@ -0,0 +1,217 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_aix3.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ + +/* don't include this one */ +#ifdef HAVE_RPCSVC_MOUNT_H_not +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#ifndef MNTPATHLEN +# define MNTPATHLEN 1024 +#endif /* not MNTPATHLEN */ +#ifndef MNTNAMLEN +# define MNTNAMLEN 255 +#endif /* not MNTNAMLEN */ + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt + +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *name; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct mountlist *mountlist; + +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropokres nfsdiropokres; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readokres nfsreadokres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattr nfssattr; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + +/* + * EXTERNALS: + */ + + +/* + * STRUCTURES: + */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_aix4.h b/conf/nfs_prot/nfs_prot_aix4.h new file mode 100644 index 0000000..08d824d --- /dev/null +++ b/conf/nfs_prot/nfs_prot_aix4.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_aix4.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#ifndef MNTPATHLEN +# define MNTPATHLEN 1024 +#endif /* not MNTPATHLEN */ +#ifndef MNTNAMLEN +# define MNTNAMLEN 255 +#endif /* not MNTNAMLEN */ + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt + +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *name; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct mountlist *mountlist; + +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropokres nfsdiropokres; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readokres nfsreadokres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattr nfssattr; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + +/* + * EXTERNALS: + */ + + +/* + * STRUCTURES: + */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_aix4_2.h b/conf/nfs_prot/nfs_prot_aix4_2.h new file mode 100644 index 0000000..80b53a4 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_aix4_2.h @@ -0,0 +1,308 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_aix4_2.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + + +/* + * AIX 4.2 and newer support NFS V.3, hence the separate header. + */ + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#ifndef MNTPATHLEN +# define MNTPATHLEN 1024 +#endif /* not MNTPATHLEN */ +#ifndef MNTNAMLEN +# define MNTNAMLEN 255 +#endif /* not MNTNAMLEN */ + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt + +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *name; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct mountlist *mountlist; + +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropokres nfsdiropokres; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readokres nfsreadokres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattr nfssattr; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + + +/* + * STRUCTURES: + */ + +/* + * AIX 4.2 has NFS V3, but it is undefined in the header files. + * so I define everything that's needed for NFS V3 here. + */ +#ifdef MNT_NFS3 + +#define FHSIZE3 64 /* size in bytes of a file handle (v3) */ +#define NFS3_FHSIZE 64 +#define MOUNTVERS3 ((unsigned long)(3)) +#define NFS_V3 ((unsigned long)(3)) + +#if 0 +struct nfs_fh3 { + u_int len; + char val[64]; /* !!! */ +}; +#endif + +struct aix42_nfs_args { + struct sockaddr_in addr; /* server address and port */ + caddr_t u0; /* ??? UNKNOWN ??? */ + unsigned long proto; /* IPPROTO_TCP/IPPROTO_UDP */ + char *hostname; /* pointer to hostname? */ + char *netname; /* pointer to netname? */ + caddr_t fh; /* pointer to NFS v3 fh? */ + unsigned long flags; /* flags */ + unsigned long wsize; /* wsize */ + unsigned long rsize; /* rsize */ + unsigned long timeo; /* timeo */ + unsigned long retrans; /* retrans */ + unsigned long acregmin; /* acregmin */ + unsigned long acregmax; /* acregmax */ + unsigned long acdirmin; /* acdirmin */ + unsigned long acdirmax; /* acdirmax */ + unsigned long u14; /* ??? UNKNOWN ??? */ + struct pathcnf *pathconf; /* pathconf */ +}; + +typedef struct { + u_int fhandle3_len; + char *fhandle3_val; +} fhandle3; + +enum mountstat3 { + MNT3_OK = 0, + MNT3ERR_PERM = 1, + MNT3ERR_NOENT = 2, + MNT3ERR_IO = 5, + MNT3ERR_ACCES = 13, + MNT3ERR_NOTDIR = 20, + MNT3ERR_INVAL = 22, + MNT3ERR_NAMETOOLONG = 63, + MNT3ERR_NOTSUPP = 10004, + MNT3ERR_SERVERFAULT = 10006 +}; +typedef enum mountstat3 mountstat3; + +struct mountres3_ok { + fhandle3 fhandle; + struct { + u_int auth_flavors_len; + int *auth_flavors_val; + } auth_flavors; +}; +typedef struct mountres3_ok mountres3_ok; + +struct mountres3 { + mountstat3 fhs_status; + union { + mountres3_ok mountinfo; + } mountres3_u; +}; +typedef struct mountres3 mountres3; + +struct nfs_fh3 { + u_int fh3_length; + union nfs_fh3_u { + struct nfs_fh3_i { + fhandle_t fh3_i; + } nfs_fh3_i; + char data[NFS3_FHSIZE]; + } fh3_u; +}; +typedef struct nfs_fh3 nfs_fh3; + +#endif /* MNT_NFS3 */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_bsdi2.h b/conf/nfs_prot/nfs_prot_bsdi2.h new file mode 100644 index 0000000..675bd12 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_bsdi2.h @@ -0,0 +1,485 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_bsdi2.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +/* + * is for kernel only on bsdi2, so do not + * include it. + */ +#ifndef ____MSDOSFS_MSDOSFSMOUNT_H__ +# define ____MSDOSFS_MSDOSFSMOUNT_H__ +#endif /* ____MSDOSFS_MSDOSFSMOUNT_H__ */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#ifndef NFS_MAXDATA +# define NFS_MAXDATA 8192 +#endif /* NFS_MAXDATA */ +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +/* + * BSD/OS 2.1 deprecated NFSPROC_ROOT and NFSPROC_WRITECACHE and set them + * to NFSPROC_NOOP. + * Since amd is its own NFS server, reinstate them. + */ +#if (NFSPROC_ROOT == NFSPROC_NOOP) +# undef NFSPROC_ROOT +# define NFSPROC_ROOT 3 +#endif /* (NFSPROC_ROOT == NFSPROC_NOOP) */ +#if (NFSPROC_WRITECACHE == NFSPROC_NOOP) +# undef NFSPROC_WRITECACHE +# define NFSPROC_WRITECACHE 7 +#endif /* (NFSPROC_WRITECACHE == NFSPROC_NOOP) */ + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt +#define fh_data fh_bytes + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef nfstype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern nfsattrstat * nfsproc_getattr_2_svc(nfsv2fh_t *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(nfsv2fh_t *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(nfsv2fh_t *, struct svc_req *); +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); + +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_mountlist(XDR *xdrs, mountlist *objp); +extern bool_t xdr_nfs_fh(XDR *, nfsv2fh_t*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); + + +/* + * ENUMS: + */ + +/* + * Use AMU_ prefixes so as to not conflict with #define's in . + * It is vital! that the AMU_* match one-to-one with the NFS_OK and NFSERR_* + * codes listed in . + */ +enum nfsstat { + AMU_NFS_OK = 0, + AMU_NFSERR_PERM = 1, + AMU_NFSERR_NOENT = 2, + AMU_NFSERR_IO = 5, + AMU_NFSERR_NXIO = 6, + AMU_NFSERR_ACCES = 13, + AMU_NFSERR_EXIST = 17, + AMU_NFSERR_NODEV = 19, + AMU_NFSERR_NOTDIR = 20, + AMU_NFSERR_ISDIR = 21, + AMU_NFSERR_FBIG = 27, + AMU_NFSERR_NOSPC = 28, + AMU_NFSERR_ROFS = 30, + AMU_NFSERR_NAMETOOLONG = 63, + AMU_NFSERR_NOTEMPTY = 66, + AMU_NFSERR_DQUOT = 69, + AMU_NFSERR_STALE = 70, + AMU_NFSERR_WFLUSH = 99 +}; + + +/* + * STRUCTURES: + */ + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfsv2fh_t sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfsv2fh_t da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfsv2fh_t drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfsv2fh_t ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfsv2fh_t wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfsv2fh_t la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfsv2fh_t rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + + +/****************************************************************************/ +/*** XDR ADDITIONS ***/ +/****************************************************************************/ + +struct exports { + dirpath ex_dir; + groups ex_groups; + exports ex_next; +}; + +typedef char fhandle[NFS_FHSIZE]; + +struct fhstatus { + u_int fhs_status; + union { + fhandle fhs_fhandle; + } fhstatus_u; +}; + +struct groups { + name gr_name; + groups gr_next; +}; + +struct mountlist { + name ml_hostname; + dirpath ml_directory; + mountlist ml_next; +}; + + +/****************************************************************************/ +/*** NFS ADDITIONS ***/ +/****************************************************************************/ + +#ifndef MOUNTPROG +# define MOUNTPROG RPCPROG_MNT +#endif /* not MOUNTPROG */ + +#ifndef MOUNTVERS +# define MOUNTVERS RPCMNT_VER1 +#endif /* not MOUNTVERS */ + +#ifndef MOUNTPROC_MNT +# define MOUNTPROC_MNT RPCMNT_MOUNT +#endif /* not MOUNTPROC_MNT */ + +#ifndef MOUNTPROC_DUMP +# define MOUNTPROC_DUMP RPCMNT_DUMP +#endif /* not MOUNTPROC_DUMP */ + +#ifndef MOUNTPROC_UMNT +# define MOUNTPROC_UMNT RPCMNT_UMOUNT +#endif /* not MOUNTPROC_UMNT */ + +#ifndef MOUNTPROC_UMNTALL +# define MOUNTPROC_UMNTALL RPCMNT_UMNTALL +#endif /* not MOUNTPROC_UMNTALL */ + +#ifndef MOUNTPROC_EXPORT +# define MOUNTPROC_EXPORT RPCMNT_EXPORT +#endif /* not MOUNTPROC_EXPORT */ + + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_bsdi3.h b/conf/nfs_prot/nfs_prot_bsdi3.h new file mode 100644 index 0000000..7f16cc1 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_bsdi3.h @@ -0,0 +1,223 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_bsdi3.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ + +#ifndef NFS_NPROCS +# define NFS_NPROCS 26 +#endif /* not NFS_NPROCS */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +/****************************************************************************/ +/* + * NFS V3 support: + * BSD/OS 3.0 has it but no easy way to figure it out from the header files. + */ +#ifndef MNTTYPE_NFS3 +# define MNTTYPE_NFS3 "nfs" +#endif /* MNTTYPE_NFS3 */ + +#ifndef MOUNTVERS3 +# define MOUNTVERS3 ((unsigned long)(3)) +#endif /* not MOUNTVERS */ + +#ifndef FHSIZE3 +# define FHSIZE3 64 +#endif /* not FHSIZE3 */ +#ifndef NFS3_FHSIZE +# define NFS3_FHSIZE 64 +#endif /* not NFS3_FHSIZE */ + +typedef struct { + u_int fhandle3_len; + char *fhandle3_val; +} fhandle3; + +enum mountstat3 { + MNT_OK = 0, + MNT3ERR_PERM = 1, + MNT3ERR_NOENT = 2, + MNT3ERR_IO = 5, + MNT3ERR_ACCES = 13, + MNT3ERR_NOTDIR = 20, + MNT3ERR_INVAL = 22, + MNT3ERR_NAMETOOLONG = 63, + MNT3ERR_NOTSUPP = 10004, + MNT3ERR_SERVERFAULT = 10006 +}; +typedef enum mountstat3 mountstat3; + +struct mountres3_ok { + fhandle3 fhandle; + struct { + u_int auth_flavors_len; + int *auth_flavors_val; + } auth_flavors; +}; +typedef struct mountres3_ok mountres3_ok; + +struct mountres3 { + mountstat3 fhs_status; + union { + mountres3_ok mountinfo; + } mountres3_u; +}; +typedef struct mountres3 mountres3; + +struct nfs_fh3 { + u_int fh3_length; + union nfs_fh3_u { + char data[NFS3_FHSIZE]; + } fh3_u; +}; +typedef struct nfs_fh3 nfs_fh3; + +extern bool_t xdr_mountres3(XDR *xdrs, mountres3 *objp); +/****************************************************************************/ + + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_size size +#define na_type type +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_status status +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_from from +#define wra_fhandle file + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_default.h b/conf/nfs_prot/nfs_prot_default.h new file mode 100644 index 0000000..415011e --- /dev/null +++ b/conf/nfs_prot/nfs_prot_default.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_default.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ + + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropokres nfsdiropokres; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readokres nfsreadokres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattr nfssattr; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_freebsd2.h b/conf/nfs_prot/nfs_prot_freebsd2.h new file mode 100644 index 0000000..b9a0543 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_freebsd2.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_freebsd2.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_size size +#define na_type type +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_status status +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_from from +#define wra_fhandle file + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +/* + * FreeBSD 2.2.x has NFS V3, but it does not define enough macros + * in the headers to automatically detect it. + * So fake it in the meant time. + */ +#if 0 +#define MOUNT_NFS3 MOUNT_NFS +#endif + + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_freebsd3.h b/conf/nfs_prot/nfs_prot_freebsd3.h new file mode 100644 index 0000000..76567c1 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_freebsd3.h @@ -0,0 +1,212 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_freebsd3.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_size size +#define na_type type +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_status status +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_from from +#define wra_fhandle file + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +/* + * + * FreeBSD 3.0 snapshots have NFS V3, but you need to regenerate the rpcsvc + * header files as follows: + * cd /usr/local/rpcsvc + * rpcgen -DWANT_NFS3 mount.x + * rpcgen -DWANT_NFS3 nfs_prot.x + * But that's not expected of everyone, plus there are additional things + * needed so I define everything that's needed for NFS V3 here. + * The problem is fixed in FreeBSD-3.0-19981006-BETA hence this code is off. + */ +#ifdef NFSMNT_NFSV3_off + +# define MOUNT_NFS3 MOUNT_NFS +# define MNTOPT_NFS3 "nfs" + +#define FHSIZE3 64 /* size in bytes of a file handle (v3) */ +#define NFS3_FHSIZE 64 +#define MOUNTVERS3 ((unsigned long)(3)) +#define NFS_V3 ((unsigned long)(3)) + +typedef struct { + u_int fhandle3_len; + char *fhandle3_val; +} fhandle3; + +enum mountstat3 { + MNT3_OK = 0, + MNT3ERR_PERM = 1, + MNT3ERR_NOENT = 2, + MNT3ERR_IO = 5, + MNT3ERR_ACCES = 13, + MNT3ERR_NOTDIR = 20, + MNT3ERR_INVAL = 22, + MNT3ERR_NAMETOOLONG = 63, + MNT3ERR_NOTSUPP = 10004, + MNT3ERR_SERVERFAULT = 10006 +}; +typedef enum mountstat3 mountstat3; + +struct mountres3_ok { + fhandle3 fhandle; + struct { + u_int auth_flavors_len; + int *auth_flavors_val; + } auth_flavors; +}; +typedef struct mountres3_ok mountres3_ok; + +struct mountres3 { + mountstat3 fhs_status; + union { + mountres3_ok mountinfo; + } mountres3_u; +}; +typedef struct mountres3 mountres3; + +struct nfs_fh3 { + u_int fh3_length; + union nfs_fh3_u { + struct nfs_fh3_i { + fhandle_t fh3_i; + } nfs_fh3_i; + char data[NFS3_FHSIZE]; + } fh3_u; +}; +typedef struct nfs_fh3 nfs_fh3; + +#endif /* NFSMNT_NFSV3 */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_hpux.h b/conf/nfs_prot/nfs_prot_hpux.h new file mode 100644 index 0000000..334980c --- /dev/null +++ b/conf/nfs_prot/nfs_prot_hpux.h @@ -0,0 +1,390 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_hpux.h,v 1.1 1998/11/05 02:04:38 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_NFS_EXPORT_H_not +/* don't include this b/c it'll get included twice */ +# include +#endif /* HAVE_NFS_EXPORT_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +#ifndef HAVE_FHANDLE +typedef fhandle_t fhandle; +#endif /* not HAVE_FHANDLE */ +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(fhandle_t *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(fhandle_t *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(fhandle_t *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, fhandle_t*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + fhandle_t sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + fhandle_t da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + fhandle_t drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + fhandle_t ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + fhandle_t wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + fhandle_t la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + fhandle_t rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_hpux11.h b/conf/nfs_prot/nfs_prot_hpux11.h new file mode 100644 index 0000000..13ff83d --- /dev/null +++ b/conf/nfs_prot/nfs_prot_hpux11.h @@ -0,0 +1,489 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_hpux11.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * NOTE: HPUX 11 is missing many header definitions which had to be + * guessed and copied over from HPUX 10.20. + */ + +/* don't include this file as it isn't needed on hpux */ +#ifndef _TIUSER_H +# define _TIUSER_H +#endif /* TIUSER_H */ +/* if T_NULL is defined, undefine it due to a conflict with */ +#ifdef T_NULL +# undef T_NULL +#endif /* T_NULL */ + +#ifdef HAVE_NFS_EXPORT_H_not +/* don't include this b/c it'll get included twice */ +# include +#endif /* HAVE_NFS_EXPORT_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* + * NFS mount option flags + */ +#define NFSMNT_SOFT 0x001 /* soft mount (hard is default) */ +#define NFSMNT_WSIZE 0x002 /* set write size */ +#define NFSMNT_RSIZE 0x004 /* set read size */ +#define NFSMNT_TIMEO 0x008 /* set initial timeout */ +#define NFSMNT_RETRANS 0x010 /* set number of request retries */ +#define NFSMNT_HOSTNAME 0x020 /* set hostname for error printf */ +#define NFSMNT_INT 0x040 /* allow interrupts on hard mount */ +#define NFSMNT_NOAC 0x080 /* don't cache attributes */ +#define NFSMNT_ACREGMIN 0x0100 /* set min secs for file attr cache */ +#define NFSMNT_ACREGMAX 0x0200 /* set max secs for file attr cache */ +#define NFSMNT_ACDIRMIN 0x0400 /* set min secs for dir attr cache */ +#define NFSMNT_ACDIRMAX 0x0800 /* set max secs for dir attr cache */ +#define NFSMNT_SECURE 0x1000 /* secure mount */ +#define NFSMNT_NOCTO 0x2000 /* no close-to-open consistency */ +#define NFSMNT_KNCONF 0x4000 /* transport's knetconfig structure */ +#define NFSMNT_GRPID 0x8000 /* System V-style gid inheritance */ +#define NFSMNT_RPCTIMESYNC 0x10000 /* use RPC to do secure NFS time sync */ +#define NFSMNT_KERBEROS 0x20000 /* use kerberos credentials */ +#define NFSMNT_POSIX 0x40000 /* static pathconf kludge info */ +#define NFSMNT_LLOCK 0x80000 /* Local locking (no lock manager) */ +#define NFSMNT_FSNAME 0x1000000 /* set f/s name */ + +#define MS_FSS 0x00 /* fake flag to do nothing */ + +/* no am-utils support for NFS V.3 yet */ +#undef MNTTYPE_NFS3 +#undef HAVE_FS_NFS3 + +/* + * ENUMS: + */ + +/* + * Error status + * Should include all possible net errors. + * For now we just cast errno into an enum nfsstat. + */ +enum nfsstat { + NFS_OK = 0, /* no error */ + NFSERR_PERM = 1, /* Not owner */ + NFSERR_NOENT = 2, /* No such file or directory */ + NFSERR_IO = 5, /* I/O error */ + NFSERR_NXIO = 6, /* No such device or address */ + NFSERR_ACCES = 13, /* Permission denied */ + NFSERR_EXIST = 17, /* File exists */ + NFSERR_XDEV = 18, /* Cross-device link */ + NFSERR_NODEV = 19, /* No such device */ + NFSERR_NOTDIR = 20, /* Not a directory */ + NFSERR_ISDIR = 21, /* Is a directory */ + NFSERR_INVAL = 22, /* Invalid argument */ + NFSERR_FBIG = 27, /* File too large */ + NFSERR_NOSPC = 28, /* No space left on device */ + NFSERR_ROFS = 30, /* Read-only file system */ + NFSERR_OPNOTSUPP = 45, /* Operation not supported */ + NFSERR_NAMETOOLONG = 63, /* File name too long */ + NFSERR_NOTEMPTY = 66, /* Directory not empty */ + NFSERR_DQUOT = 69, /* Disc quota exceeded */ + NFSERR_STALE = 70, /* Stale NFS file handle */ + NFSERR_REMOTE = 71, /* Object is remote */ + NFSERR_WFLUSH /* write cache flushed */ +}; + +/* + * File types + */ +enum nfsftype { + NFNON, + NFREG, /* regular file */ + NFDIR, /* directory */ + NFBLK, /* block special */ + NFCHR, /* character special */ + NFLNK, /* symbolic link */ + NFSOC /* socket */ +}; + + +/* + * TYPEDEFS: + */ +typedef struct nfs_fh nfs_fh; +typedef char *filename; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct fattr nfsfattr; +typedef struct linkargs nfslinkargs; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + +/* + * STRUCTURES: + */ + +/* HP shamelessly stole this from Solaris 2.5.1 */ +struct nfs_args { + struct netbuf *addr; /* file server address */ + struct netbuf *syncaddr; /* secure NFS time sync addr */ + struct knetconfig *knconf; /* transport netconfig struct */ + char *hostname; /* server's hostname */ + char *netname; /* server's netname */ + caddr_t fh; /* File handle to be mounted */ + int flags; /* flags */ + int wsize; /* write size in bytes */ + int rsize; /* read size in bytes */ + int timeo; /* initial timeout in .1 secs */ + int retrans; /* times to retry send */ + int acregmin; /* attr cache file min secs */ + int acregmax; /* attr cache file max secs */ + int acdirmin; /* attr cache dir min secs */ + int acdirmax; /* attr cache dir max secs */ + char *fsname; /* F/S name */ +#if 0 + struct pathcnf *pathconf; /* static pathconf kludge */ +#endif +}; + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_irix5.h b/conf/nfs_prot/nfs_prot_irix5.h new file mode 100644 index 0000000..a0d7282 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_irix5.h @@ -0,0 +1,454 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_irix5.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_SYS_UIO_H +# define _KMEMUSER +# include +# undef _KMEMUSER +#endif /* HAVE_SYS_UIO_H */ +#ifdef HAVE_SYS_VNODE_H +# include +#endif /* HAVE_SYS_VNODE_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ +#ifdef HAVE_SYS_FSTYP_H +# include +#endif /* HAVE_SYS_FSTYP_H */ + +/* XFS isn't really supported in 5.3, but the header files are confusing */ +#undef MNTTYPE_XFS + +/****************************************************************************/ +/* + * NFS V3 SUPPORT: + * + * IRIX5.3 requires the fh_len field to be added to the struct nfs_args + * defined in for NFS3 mounts (it doesn't hurt for + * NFS2 mounts). The mount syscall however always expects the argument + * structure size to be sizeof(struct nfs_args). + * So we need to use an extended struct nfs_args in amd/ops_nfs.c, + * while using the original struct nfs_arg in libamu/mountutil.c. + * -- stolcke 7/4/97 + */ + +/* + * NFS arguments to the mount system call. + */ +struct irix5_nfs_args { + struct sockaddr_in *addr; /* file server address */ + fhandle_t *fh; /* File handle to be mounted */ + int flags; /* flags */ + u_int wsize; /* write size in bytes */ + u_int rsize; /* read size in bytes */ + u_int timeo; /* initial timeout in .1 secs */ + u_int retrans; /* times to retry send */ + char *hostname; /* server's name */ + u_int acregmin; /* attr cache file min secs */ + u_int acregmax; /* attr cache file max secs */ + u_int acdirmin; /* attr cache dir min secs */ + u_int acdirmax; /* attr cache dir max secs */ + u_int symttl; /* symlink cache time-to-live */ + char base[FSTYPSZ]; /* base type for statvfs */ + u_int namemax; /* name length for statvfs */ + u_int fh_len; /* length for a v3 filehandle */ +}; + +#ifndef MNTOPT_PROTO +# define MNTOPT_PROTO "proto" +#endif /* not MNTOPT_PROTO */ +#ifndef MNTOPT_VERS +# define MNTOPT_VERS "vers" +#endif /* not MNTOPT_VERS */ + +/****************************************************************************/ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#ifndef FHSIZE +/* Irix 5.2 is missing the definition for FHSIZE */ +# define FHSIZE NFS_FHSIZE +#endif /* not FHSIZE */ +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_irix6.h b/conf/nfs_prot/nfs_prot_irix6.h new file mode 100644 index 0000000..ce117bf --- /dev/null +++ b/conf/nfs_prot/nfs_prot_irix6.h @@ -0,0 +1,419 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_irix6.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + +/* + * Irix 6.2 does not define the proto/dev options, although they + * do support them for NFS V3. + */ +#ifdef MNTTYPE_NFS3 +# ifndef MNTOPT_PROTO +# define MNTOPT_PROTO "proto" +# endif /* not MNTOPT_PROTO */ +# ifndef MNTOPT_VERS +# define MNTOPT_VERS "vers" +# endif /* not MNTOPT_VERS */ +#endif /* MNTTYPE_NFS3 */ + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + +/* + * STRUCTURES: + */ + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +/* + ************************************************************************** + * Irix 6's autofs is not ported or tested yet... + * For now, undefine it or define dummy entries. + ************************************************************************** + */ +#ifdef MNTTYPE_AUTOFS +# undef MNTTYPE_AUTOFS +#endif /* MNTTYPE_AUTOFS */ +#ifdef HAVE_FS_AUTOFS +# undef HAVE_FS_AUTOFS +#endif /* HAVE_FS_AUTOFS */ +#ifdef HAVE_AM_FS_AUTOFS +# undef HAVE_AM_FS_AUTOFS +#endif /* HAVE_AM_FS_AUTOFS */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_linux.h b/conf/nfs_prot/nfs_prot_linux.h new file mode 100644 index 0000000..6957d78 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_linux.h @@ -0,0 +1,254 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_linux.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ + + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropokres nfsdiropokres; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readokres nfsreadokres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattr nfssattr; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +/* + * AUTOFS definitions (missing on linux): + */ + +#define AUTOFS_PROG ((unsigned long)(100099)) +#define AUTOFS_VERS ((unsigned long)(1)) +#define AUTOFS_MOUNT ((unsigned long)(1)) +#define AUTOFS_UNMOUNT ((unsigned long)(2)) +#define A_MAXNAME 255 +#define A_MAXOPTS 255 +#define A_MAXPATH 1024 + +typedef struct mntrequest mntrequest; +typedef struct mntres mntres; +typedef struct umntrequest umntrequest; +typedef struct umntres umntres; +typedef struct auto_args autofs_args_t; + +struct auto_args { +#if 0 + struct netbuf addr; /* daemon address */ +#endif + char *path; /* autofs mountpoint */ + char *opts; /* default mount options */ + char *map; /* name of map */ + int mount_to; /* time in sec the fs is to remain */ + /* mounted after last reference */ + int rpc_to; /* timeout for rpc calls */ + int direct; /* 1 = direct mount */ +}; + +struct mntrequest { + char *name; + char *map; + char *opts; + char *path; +}; + +struct mntres { + int status; +}; + +struct umntrequest { + int isdirect; + u_int devid; + u_long rdevid; + struct umntrequest *next; +}; + +struct umntres { + int status; +}; + +extern bool_t xdr_mntrequest(XDR *, mntrequest *); +extern bool_t xdr_mntres(XDR *, mntres *); +extern bool_t xdr_umntrequest(XDR *, umntrequest *); +extern bool_t xdr_umntres(XDR *, umntres *); + + +/* + * Missing definitions on redhat alpha linux + */ +#ifdef _SELECTBITS_H +# ifndef __FD_ZERO +/* This line MUST be split! Otherwise m4 will not change it. */ +# define __FD_ZERO(set) \ + ((void) memset ((__ptr_t) (set), 0, sizeof (fd_set))) +# endif /* not __FD_ZERO */ +# ifndef __FD_SET +# define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) +# endif /* not __FD_SET */ +# ifndef __FD_CLR +# define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) +# endif /* not __FD_CLR */ +# ifndef __FD_ISSET +# define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) +# endif /* not __FD_ISSET */ + +#endif /* _SELECTBITS_H */ + +/* turn off this (b/c of hlfsd) */ +#undef HAVE_RPC_AUTH_DES_H + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_ncr2.h b/conf/nfs_prot/nfs_prot_ncr2.h new file mode 100644 index 0000000..b243555 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_ncr2.h @@ -0,0 +1,481 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_ncr2.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * Do NOT include to get NFS V2 specs, because + * it will result in conflicts with . The latter is a must + * for NFS V3 specs. + */ + +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + + +/* + * MACROS + */ + +/* ncr2 does not define this one! Incredible */ +#ifndef MNTTYPE_NFS +# define MNTTYPE_NFS "nfs" +#endif /* MNTTYPE_NFS */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#define NFSPROC_NULL ((unsigned long)(0)) +#define NFSPROC_GETATTR ((unsigned long)(1)) +#define NFSPROC_SETATTR ((unsigned long)(2)) +#define NFSPROC_ROOT ((unsigned long)(3)) +#define NFSPROC_LOOKUP ((unsigned long)(4)) +#define NFSPROC_READLINK ((unsigned long)(5)) +#define NFSPROC_READ ((unsigned long)(6)) +#define NFSPROC_WRITECACHE ((unsigned long)(7)) +#define NFSPROC_WRITE ((unsigned long)(8)) +#define NFSPROC_CREATE ((unsigned long)(9)) +#define NFSPROC_REMOVE ((unsigned long)(10)) +#define NFSPROC_RENAME ((unsigned long)(11)) +#define NFSPROC_LINK ((unsigned long)(12)) +#define NFSPROC_SYMLINK ((unsigned long)(13)) +#define NFSPROC_MKDIR ((unsigned long)(14)) +#define NFSPROC_RMDIR ((unsigned long)(15)) +#define NFSPROC_READDIR ((unsigned long)(16)) +#define NFSPROC_STATFS ((unsigned long)(17)) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct fattr nfsfattr; +typedef struct linkargs nfslinkargs; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + +typedef char *name; +typedef fhandle_t fhandle; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; + + +/* + * EXTERNALS: + */ + +extern bool_t xdr_nfsstat(XDR *, nfsstat *); +extern bool_t xdr_ftype(XDR *, nfsftype *); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh *); +extern bool_t xdr_nfstime(XDR *, nfstime *); +extern bool_t xdr_fattr(XDR *, nfsfattr *); +extern bool_t xdr_sattr(XDR *, nfssattr *); +extern bool_t xdr_filename(XDR *, filename *); +extern bool_t xdr_nfspath(XDR *, nfspath *); +extern bool_t xdr_attrstat(XDR *, nfsattrstat *); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs *); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs *); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres *); +extern bool_t xdr_diropres(XDR *, nfsdiropres *); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres *); +extern bool_t xdr_readargs(XDR *, nfsreadargs *); +extern bool_t xdr_readokres(XDR *, nfsreadokres *); +extern bool_t xdr_readres(XDR *, nfsreadres *); +extern bool_t xdr_writeargs(XDR *, nfswriteargs *); +extern bool_t xdr_createargs(XDR *, nfscreateargs *); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs *); +extern bool_t xdr_linkargs(XDR *, nfslinkargs *); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs *); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs *); +extern bool_t xdr_entry(XDR *, nfsentry *); +extern bool_t xdr_dirlist(XDR *, nfsdirlist *); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres *); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres *); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres *); + +extern nfsattrstat *nfsproc_getattr_2(nfs_fh *, CLIENT *); +extern nfsattrstat *nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat *nfsproc_setattr_2(nfssattrargs *, CLIENT *); +extern nfsattrstat *nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern nfsattrstat *nfsproc_write_2(nfswriteargs *, CLIENT *); +extern nfsattrstat *nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres *nfsproc_create_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsdiropres *nfsproc_lookup_2(nfsdiropargs *, CLIENT *); +extern nfsdiropres *nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsdiropres *nfsproc_mkdir_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat *nfsproc_link_2(nfslinkargs *, CLIENT *); +extern nfsstat *nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat *nfsproc_remove_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_rename_2(nfsrenameargs *, CLIENT *); +extern nfsstat *nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat *nfsproc_rmdir_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_symlink_2(nfssymlinkargs *, CLIENT *); +extern nfsstat *nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsreaddirres *nfsproc_readdir_2(nfsreaddirargs *, CLIENT *); +extern nfsreaddirres *nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsreadlinkres *nfsproc_readlink_2(nfs_fh *, CLIENT *); +extern nfsreadlinkres *nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres *nfsproc_read_2(nfsreadargs *, CLIENT *); +extern nfsreadres *nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern nfsstatfsres *nfsproc_statfs_2(nfs_fh *, CLIENT *); +extern nfsstatfsres *nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); +extern void *nfsproc_null_2(void *, CLIENT *); +extern void *nfsproc_null_2_svc(void *, struct svc_req *); +extern void *nfsproc_root_2(void *, CLIENT *); +extern void *nfsproc_root_2_svc(void *, struct svc_req *); +extern void *nfsproc_writecache_2(void *, CLIENT *); +extern void *nfsproc_writecache_2_svc(void *, struct svc_req *); +extern int nfs_program_2_freeresult(SVCXPRT *, xdrproc_t, caddr_t); + + +/* + * ENUMS: + */ + + +/* + * STRUCTURES: + */ +/* ncr2 (sysv4) forgets to include this in */ +struct rusage { + struct timeval ru_utime; /* user time used */ + struct timeval ru_stime; /* system time used */ + long ru_maxrss; /* XXX: 0 */ + long ru_ixrss; /* XXX: 0 */ + long ru_idrss; /* XXX: sum of rm_asrss */ + long ru_isrss; /* XXX: 0 */ + long ru_minflt; /* any page faults not requiring I/O */ + long ru_majflt; /* any page faults requiring I/O */ + long ru_nswap; /* swaps */ + long ru_inblock; /* block input operations */ + long ru_oublock; /* block output operations */ + long ru_msgsnd; /* messages sent */ + long ru_msgrcv; /* messages received */ + long ru_nsignals; /* signals received */ + long ru_nvcsw; /* voluntary context switches */ + long ru_nivcsw; /* involuntary " */ +}; + +/* + * ncr2 has ndbm functions, but no + * only a partial + */ +#define PBLKSIZ 1024 +#define DBLKSIZ 4096 +typedef struct { + int dbm_dirf; /* open directory file */ + int dbm_pagf; /* open page file */ + int dbm_flags; /* flags, see below */ + long dbm_maxbno; /* last ``bit'' in dir file */ + long dbm_bitno; /* current bit number */ + long dbm_hmask; /* hash mask */ + long dbm_blkptr; /* current block for dbm_nextkey */ + int dbm_keyptr; /* current key for dbm_nextkey */ + long dbm_blkno; /* current page to read/write */ + long dbm_pagbno; /* current page in pagbuf */ + char dbm_pagbuf[PBLKSIZ]; /* page file block buffer */ + long dbm_dirbno; /* current block in dirbuf */ + char dbm_dirbuf[DBLKSIZ]; /* directory file block buffer */ +} DBM; +#define _DBM_RDONLY 0x1 /* data base open read-only */ +#define _DBM_IOERR 0x2 /* data base I/O error */ +#define dbm_rdonly(db) ((db)->dbm_flags & _DBM_RDONLY) +#define dbm_error(db) ((db)->dbm_flags & _DBM_IOERR) + /* use this one at your own risk! */ +#define dbm_clearerr(db) ((db)->dbm_flags &= ~_DBM_IOERR) +/* for fstat(2) */ +#define dbm_dirfno(db) ((db)->dbm_dirf) +#define dbm_pagfno(db) ((db)->dbm_pagf) +/* + * flags to dbm_store() + */ +#define DBM_INSERT 0 +#define DBM_REPLACE 1 +extern DBM *dbm_open(char *, int, int); +extern void dbm_close(DBM *); +#ifndef DATUM +typedef struct { + char *dptr; + int dsize; +} datum; +# define DATUM +#endif /* not DATUM */ +extern datum dbm_fetch(DBM *, datum); +extern datum dbm_firstkey(DBM *); +extern datum dbm_nextkey(DBM *); +extern int dbm_delete(DBM *, datum); +extern int dbm_store(DBM *, datum, datum, int); + + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_netbsd.h b/conf/nfs_prot/nfs_prot_netbsd.h new file mode 100644 index 0000000..dcf634e --- /dev/null +++ b/conf/nfs_prot/nfs_prot_netbsd.h @@ -0,0 +1,222 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_netbsd.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ + +#ifndef NFS_NPROCS +# define NFS_NPROCS 26 +#endif /* not NFS_NPROCS */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +/* NON-NFS STUFF (doesn't really belong here) */ +#ifndef DEFINED_YPALL_CALLBACK_FXN_T +# define DEFINED_YPALL_CALLBACK_FXN_T +/* this is RIGHT for 1.2G and 1.2.1 */ +typedef int (*ypall_callback_fxn_t)(u_long, char *, int, char *, int, void *); +#if 0 +/* this is right for 1.3beta */ +typedef int (*ypall_callback_fxn_t)(int, char *, int, char *, int, char *); +#endif +#endif /* DEFINED_YPALL_CALLBACK_FXN_T */ + + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_size size +#define na_type type +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_status status +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_from from +#define wra_fhandle file + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +/* + * + * NetBSD 1.2 has NFS V3, but it is undefined in the header files. + * so I define everything that's needed for NFS V3 here. + */ +#ifdef NFSMNT_NFSV3 + +# define MOUNT_NFS3 MOUNT_NFS +# define MNTOPT_NFS3 "nfs" + +#define FHSIZE3 64 /* size in bytes of a file handle (v3) */ +#define NFS3_FHSIZE 64 +#define MOUNTVERS3 ((unsigned long)(3)) +#define NFS_V3 ((unsigned long)(3)) + +typedef struct { + u_int fhandle3_len; + char *fhandle3_val; +} fhandle3; + +enum mountstat3 { + MNT3_OK = 0, + MNT3ERR_PERM = 1, + MNT3ERR_NOENT = 2, + MNT3ERR_IO = 5, + MNT3ERR_ACCES = 13, + MNT3ERR_NOTDIR = 20, + MNT3ERR_INVAL = 22, + MNT3ERR_NAMETOOLONG = 63, + MNT3ERR_NOTSUPP = 10004, + MNT3ERR_SERVERFAULT = 10006 +}; +typedef enum mountstat3 mountstat3; + +struct mountres3_ok { + fhandle3 fhandle; + struct { + u_int auth_flavors_len; + int *auth_flavors_val; + } auth_flavors; +}; +typedef struct mountres3_ok mountres3_ok; + +struct mountres3 { + mountstat3 fhs_status; + union { + mountres3_ok mountinfo; + } mountres3_u; +}; +typedef struct mountres3 mountres3; + +struct nfs_fh3 { + u_int fh3_length; + union nfs_fh3_u { + struct nfs_fh3_i { + fhandle_t fh3_i; + } nfs_fh3_i; + char data[NFS3_FHSIZE]; + } fh3_u; +}; +typedef struct nfs_fh3 nfs_fh3; + +#endif /* NFSMNT_NFSV3 */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_netbsd1_3.h b/conf/nfs_prot/nfs_prot_netbsd1_3.h new file mode 100644 index 0000000..43a4496 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_netbsd1_3.h @@ -0,0 +1,212 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_netbsd1_3.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ + + +/* NON-NFS STUFF (doesn't really belong here) */ +#ifndef DEFINED_YPALL_CALLBACK_FXN_T +# define DEFINED_YPALL_CALLBACK_FXN_T +#if 0 +/* this is RIGHT for 1.2G and 1.2.1 */ +typedef int (*ypall_callback_fxn_t)(u_long, char *, int, char *, int, void *); +#endif +/* this is right for 1.3beta and newer */ +typedef int (*ypall_callback_fxn_t)(int, char *, int, char *, int, char *); +#endif /* DEFINED_YPALL_CALLBACK_FXN_T */ + + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_size size +#define na_type type +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_status status +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_from from +#define wra_fhandle file + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + +/* + * + * NetBSD 1.2 has NFS V3, but it is undefined in the header files. + * so I define everything that's needed for NFS V3 here. + */ +#ifdef NFSMNT_NFSV3 + +# define MOUNT_NFS3 MOUNT_NFS +# define MNTOPT_NFS3 "nfs" + +#define FHSIZE3 64 /* size in bytes of a file handle (v3) */ +#define NFS3_FHSIZE 64 +#define MOUNTVERS3 ((unsigned long)(3)) +#define NFS_V3 ((unsigned long)(3)) + +typedef struct { + u_int fhandle3_len; + char *fhandle3_val; +} fhandle3; + +enum mountstat3 { + MNT3_OK = 0, + MNT3ERR_PERM = 1, + MNT3ERR_NOENT = 2, + MNT3ERR_IO = 5, + MNT3ERR_ACCES = 13, + MNT3ERR_NOTDIR = 20, + MNT3ERR_INVAL = 22, + MNT3ERR_NAMETOOLONG = 63, + MNT3ERR_NOTSUPP = 10004, + MNT3ERR_SERVERFAULT = 10006 +}; +typedef enum mountstat3 mountstat3; + +struct mountres3_ok { + fhandle3 fhandle; + struct { + u_int auth_flavors_len; + int *auth_flavors_val; + } auth_flavors; +}; +typedef struct mountres3_ok mountres3_ok; + +struct mountres3 { + mountstat3 fhs_status; + union { + mountres3_ok mountinfo; + } mountres3_u; +}; +typedef struct mountres3 mountres3; + +struct nfs_fh3 { + u_int fh3_length; + union nfs_fh3_u { + struct nfs_fh3_i { + fhandle_t fh3_i; + } nfs_fh3_i; + char data[NFS3_FHSIZE]; + } fh3_u; +}; +typedef struct nfs_fh3 nfs_fh3; + +#endif /* NFSMNT_NFSV3 */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_nextstep.h b/conf/nfs_prot/nfs_prot_nextstep.h new file mode 100644 index 0000000..075695d --- /dev/null +++ b/conf/nfs_prot/nfs_prot_nextstep.h @@ -0,0 +1,600 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_nextstep.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_BSD_RPC_RPC_H +# include +#endif /* HAVE_BSD_RPC_RPC_H */ +#ifdef HAVE_SYS_STAT_H +# include +#endif /* HAVE_SYS_STAT_H */ + +/* + * odd problems happen during configuration and nextstep's /bin/cc + * gets strange errors from /bin/sh. I suspect it may be a conflict + * over some memory, a bad /bin/cc, or even kernel bug. + * this is what I get, as a result of running cc inside configure: + * /bin/cc -o conftest -g -O2 -D_POSIX_SOURCE conftest.c -lrpcsvc + * configure:2294: illegal external declaration, found `#' + * configure:2388: illegal file name 'AMU_NFS_PROTOCOL_HEADER' + * configure:2416: illegal external declaration, found `{' + * I have no explanation for it... -Erez + * Solution: don't use /bin/cc, but gcc 2.7.2.1 or better! + */ + +#if 0 +/* cannot include this file b/c it refers to non-existing headers */ +# include +#endif + + +/* + * MACROS: + */ + +/* ugly: fix up nextstep's nfs mount type */ +#ifdef MOUNT_TYPE_NFS___off_no_longer_needed +# undef MOUNT_TYPE_UFS +# define MOUNT_TYPE_UFS MOUNT_UFS +# undef MOUNT_TYPE_NFS +# define MOUNT_TYPE_NFS MOUNT_NFS +# undef MOUNT_TYPE_PCFS +# define MOUNT_TYPE_PCFS MOUNT_PC +# undef MOUNT_TYPE_LOFS +# define MOUNT_TYPE_LOFS MOUNT_LO +# undef MOUNT_TYPE_SPECFS +# define MOUNT_TYPE_SPECFS MOUNT_SPECFS +# undef MOUNT_TYPE_CFS +# define MOUNT_TYPE_CFS MOUNT_CFS +#endif /* MOUNT_TYPE_NFS */ + +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt + +/* + * NFS mount option flags + */ +#define NFSMNT_SOFT 0x001 /* soft mount (hard is default) */ +#define NFSMNT_WSIZE 0x002 /* set write size */ +#define NFSMNT_RSIZE 0x004 /* set read size */ +#define NFSMNT_TIMEO 0x008 /* set initial timeout */ +#define NFSMNT_RETRANS 0x010 /* set number of request retries */ +#define NFSMNT_HOSTNAME 0x020 /* set hostname for error printf */ +#define NFSMNT_INT 0x040 /* allow interrupts on hard mount */ +#define NFSMNT_NOAC 0x080 /* don't cache attributes */ +#define NFSMNT_ACREGMIN 0x0100 /* set min secs for file attr cache */ +#define NFSMNT_ACREGMAX 0x0200 /* set max secs for file attr cache */ +#define NFSMNT_ACDIRMIN 0x0400 /* set min secs for dir attr cache */ +#define NFSMNT_ACDIRMAX 0x0800 /* set max secs for dir attr cache */ +#define NFSMNT_SECURE 0x1000 /* secure mount */ +#define NFSMNT_NOCTO 0x2000 /* no close-to-open consistency */ + +#define NFS_PORT 2049 +#ifndef NFS_MAXDATA +# define NFS_MAXDATA 8192 +#endif /* NFS_MAXDATA */ +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* + * fix up or complete other some definitions... + */ +#define WNOHANG 01 +#define WUNTRACED 02 +#define WIFSTOPPED(status) ((status) & 0100) +#define WSTOPSIG(status) (int)(WIFSTOPPED(status) ? \ + (((status) >> 8) & 0177) : -1) +#define WIFSIGNALED(status) ( !WIFEXITED(status) && \ + !WIFSTOPPED(status) ) +#define WTERMSIG(status) (int)(WIFSIGNALED(status) ? \ + ((status) & 0177) : -1) +/* define missing macros */ +#ifndef S_ISDIR +# ifdef S_IFMT +# define S_ISDIR(mode) (((mode) & (S_IFMT)) == (S_IFDIR)) +# else /* not S_IFMT */ +# define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR)) +# endif /* not S_IFMT */ +#endif /* not S_ISDIR */ + +/* + * ENUMS: + */ + +enum nfstype { + NFNON = 0, + NFREG = 1, + NFDIR = 2, + NFBLK = 3, + NFCHR = 4, + NFLNK = 5, + NFSOCK = 6, + NFBAD = 7, + NFFIFO = 8, +}; + +enum nfsstat { + NFS_OK = 0, /* no error */ + NFSERR_PERM=EPERM, /* Not owner */ + NFSERR_NOENT=ENOENT, /* No such file or directory */ + NFSERR_IO=EIO, /* I/O error */ + NFSERR_NXIO=ENXIO, /* No such device or address */ + NFSERR_ACCES=EACCES, /* Permission denied */ + NFSERR_EXIST=EEXIST, /* File exists */ + NFSERR_NODEV=ENODEV, /* No such device */ + NFSERR_NOTDIR=ENOTDIR, /* Not a directory */ + NFSERR_ISDIR=EISDIR, /* Is a directory */ + NFSERR_FBIG=EFBIG, /* File too large */ + NFSERR_NOSPC=ENOSPC, /* No space left on device */ + NFSERR_ROFS=EROFS, /* Read-only file system */ + NFSERR_NAMETOOLONG=ENAMETOOLONG,/* File name too long */ + NFSERR_NOTEMPTY=ENOTEMPTY, /* Directory not empty */ + NFSERR_DQUOT=EDQUOT, /* Disc quota exceeded */ + NFSERR_STALE=ESTALE, /* Stale NFS file handle */ + NFSERR_WFLUSH /* write cache flushed */ +}; + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char fhandle[NFS_FHSIZE]; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum ftype ftype; +typedef enum nfsstat nfsstat; +typedef enum nfstype nfsftype; +typedef fhandle fhandle_t; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern nfsattrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); + +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_mountlist(XDR *xdrs, mountlist *objp); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); + + +/* + * STRUCTURES: + */ + +struct nfs_args { + struct sockaddr_in *addr; /* file server address */ + caddr_t fh; /* File handle to be mounted */ + int flags; /* flags */ + int wsize; /* write size in bytes */ + int rsize; /* read size in bytes */ + int timeo; /* initial timeout in .1 secs */ + int retrans; /* times to retry send */ + char *hostname; /* server's hostname */ + int acregmin; /* attr cache file min secs */ + int acregmax; /* attr cache file max secs */ + int acdirmin; /* attr cache dir min secs */ + int acdirmax; /* attr cache dir max secs */ + char *netname; /* server's netname */ +}; + +struct nfs_fh { + char data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_openbsd.h b/conf/nfs_prot/nfs_prot_openbsd.h new file mode 100644 index 0000000..c96b1f0 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_openbsd.h @@ -0,0 +1,216 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_openbsd.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ + +#ifndef NFS_NPROCS +# define NFS_NPROCS 26 +#endif /* not NFS_NPROCS */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + + +/* + * MACROS: + */ +#define dr_drok_u diropres +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_size size +#define na_type type +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_status status +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_from from +#define wra_fhandle file + + +/* + * TYPEDEFS: + */ +typedef attrstat nfsattrstat; +typedef createargs nfscreateargs; +typedef dirlist nfsdirlist; +typedef diropargs nfsdiropargs; +typedef diropres nfsdiropres; +typedef entry nfsentry; +typedef fattr nfsfattr; +typedef ftype nfsftype; +typedef linkargs nfslinkargs; +typedef readargs nfsreadargs; +typedef readdirargs nfsreaddirargs; +typedef readdirres nfsreaddirres; +typedef readlinkres nfsreadlinkres; +typedef readres nfsreadres; +typedef renameargs nfsrenameargs; +typedef sattrargs nfssattrargs; +typedef statfsokres nfsstatfsokres; +typedef statfsres nfsstatfsres; +typedef symlinkargs nfssymlinkargs; +typedef writeargs nfswriteargs; + + +/* + * OpenBSD 2.2 has NFS V3, but it is undefined in the header files. + * so I define everything that's needed for NFS V3 here. + */ +#ifdef NFSMNT_NFSV3 + +/* + * turn of this function so it cannot be used! OpenBSD seems to + * require that NFS sockets be connected. + * See aux/macros/check_nfs_socket_connection.m4. + */ + +# define MOUNT_NFS3 MOUNT_NFS +# define MNTOPT_NFS3 "nfs" + +#define FHSIZE3 64 /* size in bytes of a file handle (v3) */ +#define NFS3_FHSIZE 64 +#define MOUNTVERS3 ((unsigned long)(3)) +#define NFS_V3 ((unsigned long)(3)) + +typedef struct { + u_int fhandle3_len; + char *fhandle3_val; +} fhandle3; + +enum mountstat3 { + MNT3_OK = 0, + MNT3ERR_PERM = 1, + MNT3ERR_NOENT = 2, + MNT3ERR_IO = 5, + MNT3ERR_ACCES = 13, + MNT3ERR_NOTDIR = 20, + MNT3ERR_INVAL = 22, + MNT3ERR_NAMETOOLONG = 63, + MNT3ERR_NOTSUPP = 10004, + MNT3ERR_SERVERFAULT = 10006 +}; +typedef enum mountstat3 mountstat3; + +struct mountres3_ok { + fhandle3 fhandle; + struct { + u_int auth_flavors_len; + int *auth_flavors_val; + } auth_flavors; +}; +typedef struct mountres3_ok mountres3_ok; + +struct mountres3 { + mountstat3 fhs_status; + union { + mountres3_ok mountinfo; + } mountres3_u; +}; +typedef struct mountres3 mountres3; + +struct nfs_fh3 { + u_int fh3_length; + union nfs_fh3_u { + struct nfs_fh3_i { + fhandle_t fh3_i; + } nfs_fh3_i; + char data[NFS3_FHSIZE]; + } fh3_u; +}; +typedef struct nfs_fh3 nfs_fh3; + +#endif /* NFSMNT_NFSV3 */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_osf2.h b/conf/nfs_prot/nfs_prot_osf2.h new file mode 100644 index 0000000..834b45c --- /dev/null +++ b/conf/nfs_prot/nfs_prot_osf2.h @@ -0,0 +1,315 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_osf2.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ + +/* avoid conflicts with Irix's EFS */ +#undef MOUNT_EFS /* DCE Episode FS */ +/* includes a global symbol in every module! */ +#define _SYS_FS_TYPES_H_ + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define fh_data fh_bytes + +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + +#define drok_attributes drok_attr +#define na_fileid na_nodeid +#define la_fhandle la_from +#define nt_seconds tv_sec +#define nt_useconds tv_usec +#define ra_totalcount ra_totcount +#define sla_to sla_tnm +#define sla_attributes sla_sa +#define sag_fhandle saa_fh +#define sag_attributes saa_sa +#define sfrok_tsize fsok_tsize +#define sfrok_bsize fsok_bsize +#define sfrok_blocks fsok_blocks +#define sfrok_bfree fsok_bfree +#define sfrok_bavail fsok_bavail +#define sfr_status fs_status +#define sfr_u fs_u +#define sfr_reply_u fs_fsok_u +#define wra_fhandle wa_fhandle +#define wra_beginoffset wa_begoff +#define wra_offset wa_offset +#define wra_totalcount wa_totcount +#define wra_u wa_mbuf->m_hdr +#define wra_val_u mh_data +#define wra_len_u mh_len + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct nfssvcfh fhandle; +typedef struct nfsattrstat nfsattrstat; +typedef struct nfscreateargs nfscreateargs; +typedef struct nfsdirlist nfsdirlist; +typedef struct nfsdiropargs nfsdiropargs; +typedef struct nfsdrok nfsdiropokres; +typedef struct nfsdiropres nfsdiropres; +typedef struct nfsentry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct nfsfattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct nfslinkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct _nfs_fh _nfs_fh; +typedef struct timeval nfstime; +typedef struct nfsreadargs nfsreadargs; +typedef struct nfsreaddirargs nfsreaddirargs; +typedef struct nfsreaddirres nfsreaddirres; +typedef struct nfsreadlinkres nfsreadlinkres; +typedef struct nfsreadokres nfsreadokres; +typedef struct nfsreadres nfsreadres; +typedef struct nfsrenameargs nfsrenameargs; +typedef struct nfssattr nfssattr; +typedef struct nfssaargs nfssattrargs; +typedef struct nfsstatfsok nfsstatfsokres; +typedef struct nfsstatfs nfsstatfsres; +typedef struct nfsslargs nfssymlinkargs; +typedef struct nfswriteargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct _nfs_fh { + char data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct nfsreadlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct nfsreadokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct nfsreadres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct nfscreateargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct nfsrenameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct nfsreaddirargs { + nfsv2fh_t rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct nfsentry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct nfsdirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct nfsreaddirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_osf4.h b/conf/nfs_prot/nfs_prot_osf4.h new file mode 100644 index 0000000..43db598 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_osf4.h @@ -0,0 +1,419 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_osf4.h,v 1.1 1998/11/05 02:04:39 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNTV3_H +# include +#endif /* HAVE_RPCSVC_MOUNTV3_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ + +/* avoid conflicts with Irix's EFS */ +#undef MOUNT_EFS /* DCE Episode FS */ + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + +#define drok_attributes drok_attr +#define na_fileid na_nodeid +#define la_fhandle la_from +#define nt_seconds tv_sec +#define nt_useconds tv_usec +#define ra_totalcount ra_totcount +#define sla_to sla_tnm +#define sla_attributes sla_sa +#define sag_fhandle saa_fh +#define sag_attributes saa_sa +#define sfrok_tsize fsok_tsize +#define sfrok_bsize fsok_bsize +#define sfrok_blocks fsok_blocks +#define sfrok_bfree fsok_bfree +#define sfrok_bavail fsok_bavail +#define sfr_status fs_status +#define sfr_u fs_u +#define sfr_reply_u fs_fsok_u +#define wra_fhandle wa_fhandle +#define wra_beginoffset wa_begoff +#define wra_offset wa_offset +#define wra_totalcount wa_totcount +#define wra_u wa_mbuf->m_hdr +#define wra_val_u mh_data +#define wra_len_u mh_len + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct nfssvcfh fhandle; +typedef struct nfsattrstat nfsattrstat; +typedef struct nfscreateargs nfscreateargs; +typedef struct nfsdirlist nfsdirlist; +typedef struct nfsdiropargs nfsdiropargs; +typedef struct nfsdrok nfsdiropokres; +typedef struct nfsdiropres nfsdiropres; +typedef struct nfsentry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct nfsfattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct nfslinkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct _nfs_fh _nfs_fh; +typedef struct timeval nfstime; +typedef struct nfsreadargs nfsreadargs; +typedef struct nfsreaddirargs nfsreaddirargs; +typedef struct nfsreaddirres nfsreaddirres; +typedef struct nfsreadlinkres nfsreadlinkres; +typedef struct nfsreadokres nfsreadokres; +typedef struct nfsreadres nfsreadres; +typedef struct nfsrenameargs nfsrenameargs; +typedef struct nfssattr nfssattr; +typedef struct nfssaargs nfssattrargs; +typedef struct nfsstatfsok nfsstatfsokres; +typedef struct nfsstatfs nfsstatfsres; +typedef struct nfsslargs nfssymlinkargs; +typedef struct nfswriteargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(struct nfssvcfh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(struct nfssvcfh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(struct nfssvcfh *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, struct nfssvcfh*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct _nfs_fh { + char data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct _fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct _sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct _attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct _sattrargs { + struct nfssvcfh sag_fhandle; + nfssattr sag_attributes; +}; + +struct _diropargs { + struct nfssvcfh da_fhandle; /* was dir */ + filename da_name; +}; + +struct _diropokres { + struct nfssvcfh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct _diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct nfsreadlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct _readargs { + struct nfssvcfh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct nfsreadokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct nfsreadres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +#if 0 +struct _writeargs { + struct nfssvcfh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; +#endif + +struct nfscreateargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct nfsrenameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct _linkargs { + struct nfssvcfh la_fhandle; + nfsdiropargs la_to; +}; + +struct _symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct nfsreaddirargs { + struct nfssvcfh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct nfsentry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct nfsdirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct nfsreaddirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct _statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct _statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_sunos3.h b/conf/nfs_prot/nfs_prot_sunos3.h new file mode 100644 index 0000000..e956e0a --- /dev/null +++ b/conf/nfs_prot/nfs_prot_sunos3.h @@ -0,0 +1,406 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_sunos3.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_SYS_ERRNO_H +#include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_RPC_RPC_H +#include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +# ifdef HAVE_NFS_NFS_CLNT_H +# include +# endif /* HAVE_NFS_NFS_CLNT_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +/* complete missing definition that is actually used in SunOS 3.x */ +#ifndef MNTOPT_DEV +# define MNTOPT_DEV "dev" +#endif /* not MNTOPT_DEV */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name +#define na_fileid na_nodeid +#define la_fhandle la_from +#define ra_totalcount ra_totcount + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef char fhandle[NFS_FHSIZE]; +typedef struct attrstat nfsattrstat; +typedef struct nfscreateargs nfscreateargs; +typedef struct nfsdirlist nfsdirlist; +typedef struct nfsdiropargs nfsdiropargs; +typedef struct nfsdiropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct nfsentry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct nfsfhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct nfslinkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfstime nfstime; +typedef struct nfsreadargs nfsreadargs; +typedef struct nfsreaddirargs nfsreaddirargs; +typedef struct nfsreaddirres nfsreaddirres; +typedef struct nfsreadlinkres nfsreadlinkres; +typedef struct nfsreadokres nfsreadokres; +typedef struct nfsreadres nfsreadres; +typedef struct nfsrenameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct nfssattrargs nfssattrargs; +typedef struct nfsstatfsokres nfsstatfsokres; +typedef struct nfsstatfsres nfsstatfsres; +typedef struct nfssymlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(fhandle_t *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(fhandle_t *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(fhandle_t *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, fhandle_t*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct nfssattrargs { + fhandle_t sag_fhandle; + nfssattr sag_attributes; +}; + +struct _nfsdiropargs { + fhandle_t da_fhandle; /* was dir */ + filename da_name; +}; + +struct nfsdiropokres { + fhandle_t drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct nfsreadlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct _nfsreadargs { + fhandle_t ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct nfsreadokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct nfsreadres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + fhandle_t wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct nfscreateargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct nfsrenameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct _nfslinkargs { + fhandle_t la_fhandle; + nfsdiropargs la_to; +}; + +struct nfssymlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct nfsreaddirargs { + fhandle_t rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct nfsentry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct nfsdirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct nfsreaddirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct nfsstatfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct nfsstatfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +struct nfsfhstatus { + int fhs_status; + fhandle fhs_fh; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_sunos4.h b/conf/nfs_prot/nfs_prot_sunos4.h new file mode 100644 index 0000000..0413618 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_sunos4.h @@ -0,0 +1,406 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_sunos4.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_SYS_ERRNO_H +#include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_RPC_RPC_H +#include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_NFS_NFSV2_H +# include +#endif /* HAVE_NFS_NFSV2_H */ +#ifdef HAVE_NFS_RPCV2_H +# include +#endif /* HAVE_NFS_RPCV2_H */ +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ +# ifdef HAVE_NFS_NFS_CLNT_H +# include +# endif /* HAVE_NFS_NFS_CLNT_H */ +#ifdef HAVE_SYS_FS_NFS_H +# include +#endif /* HAVE_SYS_FS_NFS_H */ +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ + +/* complete missing definition that is actually used in SunOS 4.x */ +#ifndef MNTOPT_DEV +# define MNTOPT_DEV "dev" +#endif /* not MNTOPT_DEV */ + +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name +#define na_fileid na_nodeid +#define la_fhandle la_from +#define ra_totalcount ra_totcount + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef char fhandle[NFS_FHSIZE]; +typedef struct attrstat nfsattrstat; +typedef struct nfscreateargs nfscreateargs; +typedef struct nfsdirlist nfsdirlist; +typedef struct nfsdiropargs nfsdiropargs; +typedef struct nfsdiropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct nfsentry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct nfsfhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct nfslinkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct nfstime nfstime; +typedef struct nfsreadargs nfsreadargs; +typedef struct nfsreaddirargs nfsreaddirargs; +typedef struct nfsreaddirres nfsreaddirres; +typedef struct nfsreadlinkres nfsreadlinkres; +typedef struct nfsreadokres nfsreadokres; +typedef struct nfsreadres nfsreadres; +typedef struct nfsrenameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct nfssattrargs nfssattrargs; +typedef struct nfsstatfsokres nfsstatfsokres; +typedef struct nfsstatfsres nfsstatfsres; +typedef struct nfssymlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(fhandle_t *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(fhandle_t *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(fhandle_t *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, fhandle_t*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct nfssattrargs { + fhandle_t sag_fhandle; + nfssattr sag_attributes; +}; + +struct _nfsdiropargs { + fhandle_t da_fhandle; /* was dir */ + filename da_name; +}; + +struct nfsdiropokres { + fhandle_t drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct nfsreadlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct _nfsreadargs { + fhandle_t ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct nfsreadokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct nfsreadres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + fhandle_t wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct nfscreateargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct nfsrenameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct _nfslinkargs { + fhandle_t la_fhandle; + nfsdiropargs la_to; +}; + +struct nfssymlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct nfsreaddirargs { + fhandle_t rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct nfsentry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct nfsdirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct nfsreaddirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct nfsstatfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct nfsstatfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +struct nfsfhstatus { + int fhs_status; + fhandle fhs_fh; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_sunos5_3.h b/conf/nfs_prot/nfs_prot_sunos5_3.h new file mode 100644 index 0000000..96d7133 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_sunos5_3.h @@ -0,0 +1,269 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_sunos5_3.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * Do not include because Solaris 2.3 really does not have NFS + * V.3 support, despite what their header files claim. + */ + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ + +#ifndef fhandle_t +# define fhandle_t nfs_fh +#endif /* not fhandle_t */ + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ +#ifdef HAVE_RPC_RPC_H +#include +#endif /* HAVE_RPC_RPC_H */ + +/* missing mntent definition for cachefs */ +#ifndef MNTTYPE_CACHEFS +# define MNTTYPE_CACHEFS "cachefs" /* Cache File System */ +#endif /* not MNTTYPE_CACHEFS */ + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define FHSIZE 32 +#define NFS_COOKIESIZE 4 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt + + +/* + * TYPEDEFS: + */ + +typedef char *dirpath; +typedef char *name; +typedef char fhandle[FHSIZE]; +typedef enum ftype nfsftype; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct nfsfhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern bool_t xdr_createargs(XDR *, nfscreateargs *); +extern bool_t xdr_dirlist(XDR *, nfsdirlist *); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres *); +extern bool_t xdr_entry(XDR *, nfsentry *); +extern bool_t xdr_filename(XDR *, filename *); +extern bool_t xdr_ftype(XDR *, nfsftype *); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh *); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_nfspath(XDR *, nfspath *); +extern bool_t xdr_nfsstat(XDR *, nfsstat *); +extern bool_t xdr_nfstime(XDR *, nfstime *); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs *); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres *); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres *); +extern bool_t xdr_readokres(XDR *, nfsreadokres *); +extern bool_t xdr_readres(XDR *, nfsreadres *); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs *); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs *); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres *); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres *); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs *); + + +/* + * ENUMS: + */ + + +/* + * STRUCTURES: + */ + +struct nfsfhstatus { + int fhs_status; + fhandle fhs_fh; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_sunos5_4.h b/conf/nfs_prot/nfs_prot_sunos5_4.h new file mode 100644 index 0000000..bb84bef --- /dev/null +++ b/conf/nfs_prot/nfs_prot_sunos5_4.h @@ -0,0 +1,266 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_sunos5_4.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * Do not include because Solaris 2.4 really does not have NFS + * V.3 support, despite what their header files claim. + */ + +#ifdef HAVE_RPCSVC_NFS_PROT_H +# include +#endif /* HAVE_RPCSVC_NFS_PROT_H */ + +#define FHSIZE 32 +typedef char fhandle[FHSIZE]; +#define fhandle_t fhandle + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ +#ifdef HAVE_RPC_RPC_H +#include +#endif /* HAVE_RPC_RPC_H */ + +/* + * Solaris 2.4 has header definitions for NFS V.3, but does not really + * have NFS V.3 support in the kernel. So I must undefine these. + */ +#ifdef MNTTYPE_NFS3 +# undef MNTTYPE_NFS3 +#endif /* MNTTYPE_NFS3 */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#define dr_drok_u diropres +#define ca_attributes attributes +#define ca_where where +#define da_fhandle dir +#define da_name name +#define dl_entries entries +#define dl_eof eof +#define dr_status status +#define dr_u diropres_u +#define drok_attributes attributes +#define drok_fhandle file +#define fh_data data +#define la_fhandle from +#define la_to to +#define na_atime atime +#define na_blocks blocks +#define na_blocksize blocksize +#define na_ctime ctime +#define na_fileid fileid +#define na_fsid fsid +#define na_gid gid +#define na_mode mode +#define na_mtime mtime +#define na_nlink nlink +#define na_rdev rdev +#define na_size size +#define na_type type +#define na_uid uid +#define ne_cookie cookie +#define ne_fileid fileid +#define ne_name name +#define ne_nextentry nextentry +#define ns_attr_u attributes +#define ns_status status +#define ns_u attrstat_u +#define nt_seconds seconds +#define nt_useconds useconds +#define ra_count count +#define ra_fhandle file +#define ra_offset offset +#define ra_totalcount totalcount +#define raok_attributes attributes +#define raok_len_u data_len +#define raok_u data +#define raok_val_u data_val +#define rda_cookie cookie +#define rda_count count +#define rda_fhandle dir +#define rdr_reply_u reply +#define rdr_status status +#define rdr_u readdirres_u +#define rlr_data_u data +#define rlr_status status +#define rlr_u readlinkres_u +#define rna_from from +#define rna_to to +#define rr_reply_u reply +#define rr_status status +#define rr_u readres_u +#define sa_atime atime +#define sa_gid gid +#define sa_mode mode +#define sa_mtime mtime +#define sa_size size +#define sa_uid uid +#define sag_attributes attributes +#define sag_fhandle file +#define sfr_reply_u reply +#define sfr_status status +#define sfr_u statfsres_u +#define sfrok_bavail bavail +#define sfrok_bfree bfree +#define sfrok_blocks blocks +#define sfrok_bsize bsize +#define sfrok_tsize tsize +#define sla_attributes attributes +#define sla_from from +#define sla_to to +#define wra_beginoffset beginoffset +#define wra_fhandle file +#define wra_len_u data_len +#define wra_offset offset +#define wra_totalcount totalcount +#define wra_u data +#define wra_val_u data_val + +/* map field names */ +#define ex_dir ex_name +#define gr_name g_name +#define gr_next g_next +#define ml_directory ml_path +#define ml_hostname ml_name +#define ml_next ml_nxt + + +/* + * TYPEDEFS: + */ + +typedef char *dirpath; +typedef char *name; +typedef enum ftype nfsftype; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct linkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern bool_t xdr_createargs(XDR *, nfscreateargs *); +extern bool_t xdr_dirlist(XDR *, nfsdirlist *); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres *); +extern bool_t xdr_entry(XDR *, nfsentry *); +extern bool_t xdr_filename(XDR *, filename *); +extern bool_t xdr_ftype(XDR *, nfsftype *); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh *); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_nfspath(XDR *, nfspath *); +extern bool_t xdr_nfsstat(XDR *, nfsstat *); +extern bool_t xdr_nfstime(XDR *, nfstime *); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs *); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres *); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres *); +extern bool_t xdr_readokres(XDR *, nfsreadokres *); +extern bool_t xdr_readres(XDR *, nfsreadres *); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs *); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs *); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres *); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres *); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs *); + + +/* + * ENUMS: + */ + + +/* + * STRUCTURES: + */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_sunos5_5.h b/conf/nfs_prot/nfs_prot_sunos5_5.h new file mode 100644 index 0000000..83c03bf --- /dev/null +++ b/conf/nfs_prot/nfs_prot_sunos5_5.h @@ -0,0 +1,384 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_sunos5_5.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * Do NOT include to get NFS V2 specs, because + * it will result in conflicts with . The latter is a must + * for NFS V3 specs. + */ + +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#define NFSPROC_NULL ((unsigned long)(0)) +#define NFSPROC_GETATTR ((unsigned long)(1)) +#define NFSPROC_SETATTR ((unsigned long)(2)) +#define NFSPROC_ROOT ((unsigned long)(3)) +#define NFSPROC_LOOKUP ((unsigned long)(4)) +#define NFSPROC_READLINK ((unsigned long)(5)) +#define NFSPROC_READ ((unsigned long)(6)) +#define NFSPROC_WRITECACHE ((unsigned long)(7)) +#define NFSPROC_WRITE ((unsigned long)(8)) +#define NFSPROC_CREATE ((unsigned long)(9)) +#define NFSPROC_REMOVE ((unsigned long)(10)) +#define NFSPROC_RENAME ((unsigned long)(11)) +#define NFSPROC_LINK ((unsigned long)(12)) +#define NFSPROC_SYMLINK ((unsigned long)(13)) +#define NFSPROC_MKDIR ((unsigned long)(14)) +#define NFSPROC_RMDIR ((unsigned long)(15)) +#define NFSPROC_READDIR ((unsigned long)(16)) +#define NFSPROC_STATFS ((unsigned long)(17)) + + +/* + * TYPEDEFS: + */ + +typedef char *filename; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct fattr nfsfattr; +typedef struct linkargs nfslinkargs; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern bool_t xdr_nfsstat(XDR *, nfsstat *); +extern bool_t xdr_ftype(XDR *, nfsftype *); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh *); +extern bool_t xdr_nfstime(XDR *, nfstime *); +extern bool_t xdr_fattr(XDR *, nfsfattr *); +extern bool_t xdr_sattr(XDR *, nfssattr *); +extern bool_t xdr_filename(XDR *, filename *); +extern bool_t xdr_nfspath(XDR *, nfspath *); +extern bool_t xdr_attrstat(XDR *, nfsattrstat *); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs *); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs *); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres *); +extern bool_t xdr_diropres(XDR *, nfsdiropres *); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres *); +extern bool_t xdr_readargs(XDR *, nfsreadargs *); +extern bool_t xdr_readokres(XDR *, nfsreadokres *); +extern bool_t xdr_readres(XDR *, nfsreadres *); +extern bool_t xdr_writeargs(XDR *, nfswriteargs *); +extern bool_t xdr_createargs(XDR *, nfscreateargs *); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs *); +extern bool_t xdr_linkargs(XDR *, nfslinkargs *); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs *); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs *); +extern bool_t xdr_entry(XDR *, nfsentry *); +extern bool_t xdr_dirlist(XDR *, nfsdirlist *); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres *); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres *); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres *); + +extern nfsattrstat *nfsproc_getattr_2(nfs_fh *, CLIENT *); +extern nfsattrstat *nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat *nfsproc_setattr_2(nfssattrargs *, CLIENT *); +extern nfsattrstat *nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern nfsattrstat *nfsproc_write_2(nfswriteargs *, CLIENT *); +extern nfsattrstat *nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres *nfsproc_create_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsdiropres *nfsproc_lookup_2(nfsdiropargs *, CLIENT *); +extern nfsdiropres *nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsdiropres *nfsproc_mkdir_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat *nfsproc_link_2(nfslinkargs *, CLIENT *); +extern nfsstat *nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat *nfsproc_remove_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_rename_2(nfsrenameargs *, CLIENT *); +extern nfsstat *nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat *nfsproc_rmdir_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_symlink_2(nfssymlinkargs *, CLIENT *); +extern nfsstat *nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsreaddirres *nfsproc_readdir_2(nfsreaddirargs *, CLIENT *); +extern nfsreaddirres *nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsreadlinkres *nfsproc_readlink_2(nfs_fh *, CLIENT *); +extern nfsreadlinkres *nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres *nfsproc_read_2(nfsreadargs *, CLIENT *); +extern nfsreadres *nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern nfsstatfsres *nfsproc_statfs_2(nfs_fh *, CLIENT *); +extern nfsstatfsres *nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); +extern void *nfsproc_null_2(void *, CLIENT *); +extern void *nfsproc_null_2_svc(void *, struct svc_req *); +extern void *nfsproc_root_2(void *, CLIENT *); +extern void *nfsproc_root_2_svc(void *, struct svc_req *); +extern void *nfsproc_writecache_2(void *, CLIENT *); +extern void *nfsproc_writecache_2_svc(void *, struct svc_req *); +extern int nfs_program_2_freeresult(SVCXPRT *, xdrproc_t, caddr_t); + + +/* + * ENUMS: + */ + + +/* + * STRUCTURES: + */ + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_sunos5_6.h b/conf/nfs_prot/nfs_prot_sunos5_6.h new file mode 100644 index 0000000..f88178d --- /dev/null +++ b/conf/nfs_prot/nfs_prot_sunos5_6.h @@ -0,0 +1,406 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_sunos5_6.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * Do NOT include to get NFS V2 specs, because + * it will result in conflicts with . The latter is a must + * for NFS V3 specs. + */ + +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#define NFSPROC_NULL ((unsigned long)(0)) +#define NFSPROC_GETATTR ((unsigned long)(1)) +#define NFSPROC_SETATTR ((unsigned long)(2)) +#define NFSPROC_ROOT ((unsigned long)(3)) +#define NFSPROC_LOOKUP ((unsigned long)(4)) +#define NFSPROC_READLINK ((unsigned long)(5)) +#define NFSPROC_READ ((unsigned long)(6)) +#define NFSPROC_WRITECACHE ((unsigned long)(7)) +#define NFSPROC_WRITE ((unsigned long)(8)) +#define NFSPROC_CREATE ((unsigned long)(9)) +#define NFSPROC_REMOVE ((unsigned long)(10)) +#define NFSPROC_RENAME ((unsigned long)(11)) +#define NFSPROC_LINK ((unsigned long)(12)) +#define NFSPROC_SYMLINK ((unsigned long)(13)) +#define NFSPROC_MKDIR ((unsigned long)(14)) +#define NFSPROC_RMDIR ((unsigned long)(15)) +#define NFSPROC_READDIR ((unsigned long)(16)) +#define NFSPROC_STATFS ((unsigned long)(17)) + + +/* + * TYPEDEFS: + */ + +typedef char *filename; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct fattr nfsfattr; +typedef struct linkargs nfslinkargs; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern bool_t xdr_nfsstat(XDR *, nfsstat *); +extern bool_t xdr_ftype(XDR *, nfsftype *); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh *); +extern bool_t xdr_nfstime(XDR *, nfstime *); +extern bool_t xdr_fattr(XDR *, nfsfattr *); +extern bool_t xdr_sattr(XDR *, nfssattr *); +extern bool_t xdr_filename(XDR *, filename *); +extern bool_t xdr_nfspath(XDR *, nfspath *); +extern bool_t xdr_attrstat(XDR *, nfsattrstat *); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs *); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs *); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres *); +extern bool_t xdr_diropres(XDR *, nfsdiropres *); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres *); +extern bool_t xdr_readargs(XDR *, nfsreadargs *); +extern bool_t xdr_readokres(XDR *, nfsreadokres *); +extern bool_t xdr_readres(XDR *, nfsreadres *); +extern bool_t xdr_writeargs(XDR *, nfswriteargs *); +extern bool_t xdr_createargs(XDR *, nfscreateargs *); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs *); +extern bool_t xdr_linkargs(XDR *, nfslinkargs *); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs *); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs *); +extern bool_t xdr_entry(XDR *, nfsentry *); +extern bool_t xdr_dirlist(XDR *, nfsdirlist *); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres *); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres *); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres *); + +extern nfsattrstat *nfsproc_getattr_2(nfs_fh *, CLIENT *); +extern nfsattrstat *nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat *nfsproc_setattr_2(nfssattrargs *, CLIENT *); +extern nfsattrstat *nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern nfsattrstat *nfsproc_write_2(nfswriteargs *, CLIENT *); +extern nfsattrstat *nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres *nfsproc_create_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsdiropres *nfsproc_lookup_2(nfsdiropargs *, CLIENT *); +extern nfsdiropres *nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsdiropres *nfsproc_mkdir_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat *nfsproc_link_2(nfslinkargs *, CLIENT *); +extern nfsstat *nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat *nfsproc_remove_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_rename_2(nfsrenameargs *, CLIENT *); +extern nfsstat *nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat *nfsproc_rmdir_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_symlink_2(nfssymlinkargs *, CLIENT *); +extern nfsstat *nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsreaddirres *nfsproc_readdir_2(nfsreaddirargs *, CLIENT *); +extern nfsreaddirres *nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsreadlinkres *nfsproc_readlink_2(nfs_fh *, CLIENT *); +extern nfsreadlinkres *nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres *nfsproc_read_2(nfsreadargs *, CLIENT *); +extern nfsreadres *nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern nfsstatfsres *nfsproc_statfs_2(nfs_fh *, CLIENT *); +extern nfsstatfsres *nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); +extern void *nfsproc_null_2(void *, CLIENT *); +extern void *nfsproc_null_2_svc(void *, struct svc_req *); +extern void *nfsproc_root_2(void *, CLIENT *); +extern void *nfsproc_root_2_svc(void *, struct svc_req *); +extern void *nfsproc_writecache_2(void *, CLIENT *); +extern void *nfsproc_writecache_2_svc(void *, struct svc_req *); +extern int nfs_program_2_freeresult(SVCXPRT *, xdrproc_t, caddr_t); + + +/* + * ENUMS: + */ + + +/* + * STRUCTURES: + */ + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + + +/* + ************************************************************************** + * Solaris 2.6 changed autofs a lot. A re-port to am-utils is required. + * For now, undefine it or define dummy entries. + ************************************************************************** + */ +#ifdef MNTTYPE_AUTOFS +# undef MNTTYPE_AUTOFS +#endif /* MNTTYPE_AUTOFS */ +#ifdef HAVE_FS_AUTOFS +# undef HAVE_FS_AUTOFS +#endif /* HAVE_FS_AUTOFS */ +#ifdef HAVE_AM_FS_AUTOFS +# undef HAVE_AM_FS_AUTOFS +#endif /* HAVE_AM_FS_AUTOFS */ + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_svr4.h b/conf/nfs_prot/nfs_prot_svr4.h new file mode 100644 index 0000000..e31e52f --- /dev/null +++ b/conf/nfs_prot/nfs_prot_svr4.h @@ -0,0 +1,406 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_svr4.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +/* + * Do NOT include to get NFS V2 specs, because + * it will result in conflicts with . The latter is a must + * for NFS V3 specs. + */ + +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + + +/* + * MACROS + */ + +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#define NFS_COOKIESIZE 4 + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#define NFSPROC_NULL ((unsigned long)(0)) +#define NFSPROC_GETATTR ((unsigned long)(1)) +#define NFSPROC_SETATTR ((unsigned long)(2)) +#define NFSPROC_ROOT ((unsigned long)(3)) +#define NFSPROC_LOOKUP ((unsigned long)(4)) +#define NFSPROC_READLINK ((unsigned long)(5)) +#define NFSPROC_READ ((unsigned long)(6)) +#define NFSPROC_WRITECACHE ((unsigned long)(7)) +#define NFSPROC_WRITE ((unsigned long)(8)) +#define NFSPROC_CREATE ((unsigned long)(9)) +#define NFSPROC_REMOVE ((unsigned long)(10)) +#define NFSPROC_RENAME ((unsigned long)(11)) +#define NFSPROC_LINK ((unsigned long)(12)) +#define NFSPROC_SYMLINK ((unsigned long)(13)) +#define NFSPROC_MKDIR ((unsigned long)(14)) +#define NFSPROC_RMDIR ((unsigned long)(15)) +#define NFSPROC_READDIR ((unsigned long)(16)) +#define NFSPROC_STATFS ((unsigned long)(17)) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef struct attrstat nfsattrstat; +typedef struct createargs nfscreateargs; +typedef struct dirlist nfsdirlist; +typedef struct diropargs nfsdiropargs; +typedef struct diropokres nfsdiropokres; +typedef struct diropres nfsdiropres; +typedef struct entry nfsentry; +typedef struct fattr nfsfattr; +typedef struct linkargs nfslinkargs; +typedef struct nfs_fh nfs_fh; +typedef struct nfstime nfstime; +typedef struct readargs nfsreadargs; +typedef struct readdirargs nfsreaddirargs; +typedef struct readdirres nfsreaddirres; +typedef struct readlinkres nfsreadlinkres; +typedef struct readokres nfsreadokres; +typedef struct readres nfsreadres; +typedef struct renameargs nfsrenameargs; +typedef struct sattr nfssattr; +typedef struct sattrargs nfssattrargs; +typedef struct statfsokres nfsstatfsokres; +typedef struct statfsres nfsstatfsres; +typedef struct symlinkargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + +typedef char *name; +typedef fhandle_t fhandle; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; + + +/* + * EXTERNALS: + */ + +extern bool_t xdr_nfsstat(XDR *, nfsstat *); +extern bool_t xdr_ftype(XDR *, nfsftype *); +extern bool_t xdr_nfs_fh(XDR *, nfs_fh *); +extern bool_t xdr_nfstime(XDR *, nfstime *); +extern bool_t xdr_fattr(XDR *, nfsfattr *); +extern bool_t xdr_sattr(XDR *, nfssattr *); +extern bool_t xdr_filename(XDR *, filename *); +extern bool_t xdr_nfspath(XDR *, nfspath *); +extern bool_t xdr_attrstat(XDR *, nfsattrstat *); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs *); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs *); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres *); +extern bool_t xdr_diropres(XDR *, nfsdiropres *); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres *); +extern bool_t xdr_readargs(XDR *, nfsreadargs *); +extern bool_t xdr_readokres(XDR *, nfsreadokres *); +extern bool_t xdr_readres(XDR *, nfsreadres *); +extern bool_t xdr_writeargs(XDR *, nfswriteargs *); +extern bool_t xdr_createargs(XDR *, nfscreateargs *); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs *); +extern bool_t xdr_linkargs(XDR *, nfslinkargs *); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs *); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs *); +extern bool_t xdr_entry(XDR *, nfsentry *); +extern bool_t xdr_dirlist(XDR *, nfsdirlist *); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres *); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres *); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres *); + +extern nfsattrstat *nfsproc_getattr_2(nfs_fh *, CLIENT *); +extern nfsattrstat *nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); +extern nfsattrstat *nfsproc_setattr_2(nfssattrargs *, CLIENT *); +extern nfsattrstat *nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern nfsattrstat *nfsproc_write_2(nfswriteargs *, CLIENT *); +extern nfsattrstat *nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres *nfsproc_create_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsdiropres *nfsproc_lookup_2(nfsdiropargs *, CLIENT *); +extern nfsdiropres *nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsdiropres *nfsproc_mkdir_2(nfscreateargs *, CLIENT *); +extern nfsdiropres *nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat *nfsproc_link_2(nfslinkargs *, CLIENT *); +extern nfsstat *nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat *nfsproc_remove_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_rename_2(nfsrenameargs *, CLIENT *); +extern nfsstat *nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat *nfsproc_rmdir_2(nfsdiropargs *, CLIENT *); +extern nfsstat *nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat *nfsproc_symlink_2(nfssymlinkargs *, CLIENT *); +extern nfsstat *nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsreaddirres *nfsproc_readdir_2(nfsreaddirargs *, CLIENT *); +extern nfsreaddirres *nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsreadlinkres *nfsproc_readlink_2(nfs_fh *, CLIENT *); +extern nfsreadlinkres *nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); +extern nfsreadres *nfsproc_read_2(nfsreadargs *, CLIENT *); +extern nfsreadres *nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern nfsstatfsres *nfsproc_statfs_2(nfs_fh *, CLIENT *); +extern nfsstatfsres *nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); +extern void *nfsproc_null_2(void *, CLIENT *); +extern void *nfsproc_null_2_svc(void *, struct svc_req *); +extern void *nfsproc_root_2(void *, CLIENT *); +extern void *nfsproc_root_2_svc(void *, struct svc_req *); +extern void *nfsproc_writecache_2(void *, CLIENT *); +extern void *nfsproc_writecache_2_svc(void *, struct svc_req *); +extern int nfs_program_2_freeresult(SVCXPRT *, xdrproc_t, caddr_t); + + +/* + * ENUMS: + */ + + +/* + * STRUCTURES: + */ + +struct nfs_fh { + char fh_data[NFS_FHSIZE]; +}; + +struct nfstime { + u_int nt_seconds; + u_int nt_useconds; +}; + +struct fattr { + nfsftype na_type; + u_int na_mode; + u_int na_nlink; + u_int na_uid; + u_int na_gid; + u_int na_size; + u_int na_blocksize; + u_int na_rdev; + u_int na_blocks; + u_int na_fsid; + u_int na_fileid; + nfstime na_atime; + nfstime na_mtime; + nfstime na_ctime; +}; + +struct sattr { + u_int sa_mode; + u_int sa_uid; + u_int sa_gid; + u_int sa_size; + nfstime sa_atime; + nfstime sa_mtime; +}; + +struct attrstat { + nfsstat ns_status; + union { + nfsfattr ns_attr_u; + } ns_u; +}; + +struct sattrargs { + nfs_fh sag_fhandle; + nfssattr sag_attributes; +}; + +struct diropargs { + nfs_fh da_fhandle; /* was dir */ + filename da_name; +}; + +struct diropokres { + nfs_fh drok_fhandle; + nfsfattr drok_attributes; +}; + +struct diropres { + nfsstat dr_status; /* was status */ + union { + nfsdiropokres dr_drok_u; /* was diropres */ + } dr_u; /* was diropres_u */ +}; + +struct readlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct readargs { + nfs_fh ra_fhandle; + u_int ra_offset; + u_int ra_count; + u_int ra_totalcount; +}; + +struct readokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct readres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + nfs_fh wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct createargs { + nfsdiropargs ca_where; + nfssattr ca_attributes; +}; + +struct renameargs { + nfsdiropargs rna_from; + nfsdiropargs rna_to; +}; + +struct linkargs { + nfs_fh la_fhandle; + nfsdiropargs la_to; +}; + +struct symlinkargs { + nfsdiropargs sla_from; + nfspath sla_to; + nfssattr sla_attributes; +}; + +struct readdirargs { + nfs_fh rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct entry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct dirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct readdirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct statfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct statfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; + +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/nfs_prot/nfs_prot_ultrix.h b/conf/nfs_prot/nfs_prot_ultrix.h new file mode 100644 index 0000000..2cb2329 --- /dev/null +++ b/conf/nfs_prot/nfs_prot_ultrix.h @@ -0,0 +1,309 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_ultrix.h,v 1.1 1998/11/05 02:04:40 ezk Exp $ + * + */ + +#ifndef _AMU_NFS_PROT_H +#define _AMU_NFS_PROT_H + +#ifdef HAVE_NFS_NFS_H +# include +#endif /* HAVE_NFS_NFS_H */ + +/* + * MACROS + */ + +#if 0 +/* */ +#define NFS_PORT 2049 +#define NFS_MAXDATA 8192 +#define NFS_MAXPATHLEN 1024 +#define NFS_MAXNAMLEN 255 +#define NFS_FHSIZE 32 +#endif /* 0 */ +/* sizeof(u_long) */ +#define NFS_COOKIESIZE 4 +#if 0 +/* defaults: libamu/amu.h */ +#define MNTPATHLEN 1024 +#define MNTNAMLEN 255 +#endif + +#define NFSMODE_FMT 0170000 +#define NFSMODE_DIR 0040000 +#define NFSMODE_CHR 0020000 +#define NFSMODE_BLK 0060000 +#define NFSMODE_REG 0100000 +#define NFSMODE_LNK 0120000 +#define NFSMODE_SOCK 0140000 +#define NFSMODE_FIFO 0010000 + +#if 0 +/* */ +#ifndef NFS_PROGRAM +# define NFS_PROGRAM ((u_long)100003) +#endif /* not NFS_PROGRAM */ +#ifndef NFS_VERSION +# define NFS_VERSION ((u_long)2) +#endif /* not NFS_VERSION */ +#endif /* 0 */ + +/* could use (u_long)RFS_* with RFS_* from */ +#define NFSPROC_NULL ((u_long)0) +#define NFSPROC_GETATTR ((u_long)1) +#define NFSPROC_SETATTR ((u_long)2) +#define NFSPROC_ROOT ((u_long)3) +#define NFSPROC_LOOKUP ((u_long)4) +#define NFSPROC_READLINK ((u_long)5) +#define NFSPROC_READ ((u_long)6) +#define NFSPROC_WRITECACHE ((u_long)7) +#define NFSPROC_WRITE ((u_long)8) +#define NFSPROC_CREATE ((u_long)9) +#define NFSPROC_REMOVE ((u_long)10) +#define NFSPROC_RENAME ((u_long)11) +#define NFSPROC_LINK ((u_long)12) +#define NFSPROC_SYMLINK ((u_long)13) +#define NFSPROC_MKDIR ((u_long)14) +#define NFSPROC_RMDIR ((u_long)15) +#define NFSPROC_READDIR ((u_long)16) +#define NFSPROC_STATFS ((u_long)17) + +/* map field names */ +#define ml_hostname ml_name +#define ml_directory ml_path +#define ml_next ml_nxt +#define gr_next g_next +#define gr_name g_name +#define ex_dir ex_name + +#define ca_where ca_da +#define ca_attributes ca_sa +#define drok_attributes drok_attr +#define fh_data fh_pad +#define na_fileid na_nodeid +#define la_fhandle la_from +#define nt_seconds tv_sec +#define nt_useconds tv_usec +#define ra_totalcount ra_totcount +#define rlr_status rl_status +#define rlr_u rl_u +#define sla_to sla_tnm +#define sla_attributes sla_sa +#define sag_fhandle saa_fh +#define sag_attributes saa_sa + + +/* + * TYPEDEFS: + */ +typedef char *dirpath; +typedef char *filename; +typedef char *name; +typedef char *nfspath; +typedef char nfscookie[NFS_COOKIESIZE]; +typedef enum nfsftype nfsftype; +typedef enum nfsstat nfsstat; +typedef fhandle_t fhandle; +typedef struct nfsattrstat nfsattrstat; +typedef struct nfscreatargs nfscreateargs; +typedef struct nfsdirlist nfsdirlist; +typedef struct nfsdiropargs nfsdiropargs; +typedef struct nfsdrok nfsdiropokres; +typedef struct nfsdiropres nfsdiropres; +typedef struct nfsentry nfsentry; +typedef struct exports *exports; +typedef struct exports exportnode; +typedef struct nfsfattr nfsfattr; +typedef struct fhstatus fhstatus; +typedef struct groups *groups; +typedef struct groups groupnode; +typedef struct nfslinkargs nfslinkargs; +typedef struct mountlist *mountlist; +typedef struct mountlist mountbody; +typedef struct timeval nfstime; +typedef struct nfsreadargs nfsreadargs; +typedef struct nfsreaddirargs nfsreaddirargs; +typedef struct nfsreaddirres nfsreaddirres; +typedef struct nfsreadlinkres nfsreadlinkres; +typedef struct nfsreadokres nfsreadokres; +typedef struct nfsreadres nfsreadres; +typedef struct nfsrnmargs nfsrenameargs; +typedef struct nfssattr nfssattr; +typedef struct nfssaargs nfssattrargs; +typedef struct nfsstatfsokres nfsstatfsokres; +typedef struct nfsstatfsres nfsstatfsres; +typedef struct nfsslargs nfssymlinkargs; +typedef struct writeargs nfswriteargs; + + +/* + * EXTERNALS: + */ + +extern void * nfsproc_null_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(fhandle_t *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern void * nfsproc_root_2_svc(void *, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(fhandle_t *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(fhandle_t *, struct svc_req *); + +extern bool_t xdr_nfsstat(XDR *, nfsstat*); +extern bool_t xdr_ftype(XDR *, nfsftype*); +extern bool_t xdr_nfs_fh(XDR *, fhandle_t*); +extern bool_t xdr_nfstime(XDR *, nfstime*); +extern bool_t xdr_fattr(XDR *, nfsfattr*); +extern bool_t xdr_sattr(XDR *, nfssattr*); +extern bool_t xdr_filename(XDR *, filename*); +extern bool_t xdr_nfspath(XDR *, nfspath*); +extern bool_t xdr_attrstat(XDR *, nfsattrstat*); +extern bool_t xdr_sattrargs(XDR *, nfssattrargs*); +extern bool_t xdr_diropargs(XDR *, nfsdiropargs*); +extern bool_t xdr_diropokres(XDR *, nfsdiropokres*); +extern bool_t xdr_diropres(XDR *, nfsdiropres*); +extern bool_t xdr_readlinkres(XDR *, nfsreadlinkres*); +extern bool_t xdr_readargs(XDR *, nfsreadargs*); +extern bool_t xdr_readokres(XDR *, nfsreadokres*); +extern bool_t xdr_readres(XDR *, nfsreadres*); +extern bool_t xdr_writeargs(XDR *, nfswriteargs*); +extern bool_t xdr_createargs(XDR *, nfscreateargs*); +extern bool_t xdr_renameargs(XDR *, nfsrenameargs*); +extern bool_t xdr_linkargs(XDR *, nfslinkargs*); +extern bool_t xdr_symlinkargs(XDR *, nfssymlinkargs*); +extern bool_t xdr_nfscookie(XDR *, nfscookie); +extern bool_t xdr_readdirargs(XDR *, nfsreaddirargs*); +extern bool_t xdr_entry(XDR *, nfsentry*); +extern bool_t xdr_dirlist(XDR *, nfsdirlist*); +extern bool_t xdr_readdirres(XDR *, nfsreaddirres*); +extern bool_t xdr_statfsokres(XDR *, nfsstatfsokres*); +extern bool_t xdr_statfsres(XDR *, nfsstatfsres*); + + +/* + * STRUCTURES: + */ + +struct nfsreadlinkres { + nfsstat rlr_status; + union { + nfspath rlr_data_u; + } rlr_u; +}; + +struct nfsreadokres { + nfsfattr raok_attributes; + struct { + u_int raok_len_u; + char *raok_val_u; + } raok_u; +}; + +struct nfsreadres { + nfsstat rr_status; + union { + nfsreadokres rr_reply_u; + } rr_u; +}; + +struct writeargs { + fhandle_t wra_fhandle; + u_int wra_beginoffset; + u_int wra_offset; + u_int wra_totalcount; + struct { + u_int wra_len_u; + char *wra_val_u; + } wra_u; +}; + +struct nfsreaddirargs { + fhandle_t rda_fhandle; + nfscookie rda_cookie; + u_int rda_count; +}; + +struct nfsentry { + u_int ne_fileid; + filename ne_name; + nfscookie ne_cookie; + nfsentry *ne_nextentry; +}; + +struct nfsdirlist { + nfsentry *dl_entries; + bool_t dl_eof; +}; + +struct nfsreaddirres { + nfsstat rdr_status; + union { + nfsdirlist rdr_reply_u; + } rdr_u; +}; + +struct nfsstatfsokres { + u_int sfrok_tsize; + u_int sfrok_bsize; + u_int sfrok_blocks; + u_int sfrok_bfree; + u_int sfrok_bavail; +}; + +struct nfsstatfsres { + nfsstat sfr_status; + union { + nfsstatfsokres sfr_reply_u; + } sfr_u; +}; +#endif /* not _AMU_NFS_PROT_H */ diff --git a/conf/sa_dref/sa_dref_386bsd.h b/conf/sa_dref/sa_dref_386bsd.h new file mode 100644 index 0000000..ec0f15a --- /dev/null +++ b/conf/sa_dref/sa_dref_386bsd.h @@ -0,0 +1,4 @@ +/* $srcdir/conf/sa_dref/sa_dref_386bsd.h */ +#define NFS_SA_DREF(dst, src) { \ + (dst)->addr = (struct sockaddr *) (src); \ + } diff --git a/conf/sa_dref/sa_dref_aix3.h b/conf/sa_dref/sa_dref_aix3.h new file mode 100644 index 0000000..095f596 --- /dev/null +++ b/conf/sa_dref/sa_dref_aix3.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/sa_dref/sa_dref_aix3.h */ +#define NFS_SA_DREF(dst, src) (dst)->addr = *(src) diff --git a/conf/sa_dref/sa_dref_aoi.h b/conf/sa_dref/sa_dref_aoi.h new file mode 100644 index 0000000..012ceea --- /dev/null +++ b/conf/sa_dref/sa_dref_aoi.h @@ -0,0 +1,6 @@ +/* $srcdir/conf/sa_dref/sa_dref_aoi.h */ +#define NFS_SA_DREF(dst, src) { \ + (dst)->addr->buf = (char *) (src); \ + (dst)->addr->len = sizeof(struct sockaddr_in); \ + (dst)->addr->maxlen = sizeof(struct sockaddr_in); \ + } diff --git a/conf/sa_dref/sa_dref_bsd44.h b/conf/sa_dref/sa_dref_bsd44.h new file mode 100644 index 0000000..e76c16b --- /dev/null +++ b/conf/sa_dref/sa_dref_bsd44.h @@ -0,0 +1,5 @@ +/* $srcdir/conf/sa_dref/sa_dref_bsd44.h */ +#define NFS_SA_DREF(dst, src) { \ + (dst)->addr = (struct sockaddr *) (src); \ + (dst)->addrlen = sizeof(*src); \ + } diff --git a/conf/sa_dref/sa_dref_default.h b/conf/sa_dref/sa_dref_default.h new file mode 100644 index 0000000..2f8e0cf --- /dev/null +++ b/conf/sa_dref/sa_dref_default.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/sa_dref/sa_dref_default.h */ +#define NFS_SA_DREF(dst, src) (dst)->addr = (src) diff --git a/conf/sa_dref/sa_dref_isc3.h b/conf/sa_dref/sa_dref_isc3.h new file mode 100644 index 0000000..d1f6f3c --- /dev/null +++ b/conf/sa_dref/sa_dref_isc3.h @@ -0,0 +1,6 @@ +/* $srcdir/conf/sa_dref/sa_dref_isc3.h */ +#define NFS_SA_DREF(dst, src) { \ + (dst)->raddr.buf = (char *) (src); \ + (dst)->raddr.len = sizeof(struct sockaddr_in); \ + (dst)->trans = 1; \ + } diff --git a/conf/sa_dref/sa_dref_linux.h b/conf/sa_dref/sa_dref_linux.h new file mode 100644 index 0000000..b351150 --- /dev/null +++ b/conf/sa_dref/sa_dref_linux.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/sa_dref/sa_dref_linux.h */ +#define NFS_SA_DREF(dst, src) memmove((char *)&dst->addr, (char *) src, sizeof(struct sockaddr_in)) diff --git a/conf/sa_dref/sa_dref_svr4.h b/conf/sa_dref/sa_dref_svr4.h new file mode 100644 index 0000000..94bee12 --- /dev/null +++ b/conf/sa_dref/sa_dref_svr4.h @@ -0,0 +1,6 @@ +/* $srcdir/conf/sa_dref/sa_dref_svr4.h */ +#define NFS_SA_DREF(dst, src) { \ + (dst)->addr->buf = (char *) (src); \ + (dst)->addr->len = sizeof(struct sockaddr_in); \ + (dst)->addr->maxlen = sizeof(struct sockaddr_in); \ + } diff --git a/conf/transp/transp_sockets.c b/conf/transp/transp_sockets.c new file mode 100644 index 0000000..e1ceae5 --- /dev/null +++ b/conf/transp/transp_sockets.c @@ -0,0 +1,400 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: transp_sockets.c,v 1.1 1998/11/05 02:04:41 ezk Exp $ + * + * Socket specific utilities. + * -Erez Zadok + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * find the IP address that can be used to connect to the local host + */ +void +amu_get_myaddress(struct in_addr *iap) +{ + struct sockaddr_in sin; + + memset((char *) &sin, 0, sizeof(sin)); + get_myaddress(&sin); + iap->s_addr = sin.sin_addr.s_addr; +} + + +/* + * How to bind to reserved ports. + */ +int +bind_resv_port(int so, u_short *pp) +{ + struct sockaddr_in sin; + int rc; + u_short port; + + memset((voidp) &sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + + port = IPPORT_RESERVED; + + do { + --port; + sin.sin_port = htons(port); + rc = bind(so, (struct sockaddr *) &sin, sizeof(sin)); + } while (rc < 0 && (int) port > IPPORT_RESERVED / 2); + + if (pp && rc == 0) + *pp = port; + + return rc; +} + + +/* + * close a descriptor, Sockets style + */ +int +amu_close(int fd) +{ + return close(fd); +} + + +/* + * Create an rpc client attached to the mount daemon. + */ +CLIENT * +get_mount_client(char *unused_host, struct sockaddr_in *sin, struct timeval *tv, int *sock, u_long mnt_version) +{ + CLIENT *client; + + /* + * First try a TCP socket + */ + if ((*sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) > 0) { + /* + * Bind to a privileged port + */ + if (bind_resv_port(*sock, (u_short *) 0) < 0) + plog(XLOG_ERROR, "can't bind privileged port"); + + /* + * Find mountd port to connect to. + * Connect to mountd. + * Create a tcp client. + */ + if ((sin->sin_port = htons(pmap_getport(sin, MOUNTPROG, mnt_version, IPPROTO_TCP))) != 0) { + if (connect(*sock, (struct sockaddr *) sin, sizeof(*sin)) >= 0 + && ((client = clnttcp_create(sin, MOUNTPROG, mnt_version, sock, 0, 0)) != NULL)) + return client; + } + /* + * Failed so close socket + */ + (void) close(*sock); + } /* tcp socket opened */ + /* TCP failed so try UDP */ + if ((*sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + plog(XLOG_ERROR, "Can't create socket to connect to mountd: %m"); + *sock = RPC_ANYSOCK; + return NULL; + } + /* + * Bind to a privileged port + */ + if (bind_resv_port(*sock, (u_short *) 0) < 0) + plog(XLOG_ERROR, "can't bind privileged port"); + + /* + * Zero out the port - make sure we recompute + */ + sin->sin_port = 0; + + /* + * Make a UDP client + */ + if ((client = clntudp_create(sin, MOUNTPROG, mnt_version, *tv, sock)) == NULL) { + (void) close(*sock); + *sock = RPC_ANYSOCK; + return NULL; + } +#ifdef DEBUG + dlog("get_mount_client: Using udp, port %d", sin->sin_port); +#endif /* DEBUG */ + return client; +} + + +/* + * find the address of the caller of an RPC procedure. + */ +struct sockaddr_in * +amu_svc_getcaller(SVCXPRT *xprt) +{ + return svc_getcaller(xprt); +} + + +/* + * Bind NFS to a reserved port. + */ +static int +bindnfs_port(int so, u_short *nfs_portp) +{ + u_short port; + int error = bind_resv_port(so, &port); + + if (error == 0) + *nfs_portp = port; + return error; +} + + +/* + * Create the nfs service for amd + */ +int +create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)) +{ + + *soNFSp = socket(AF_INET, SOCK_DGRAM, 0); + + plog(XLOG_INFO, "EZK: nfs_portp: %d\n", *nfs_portp); + if (*soNFSp < 0 || bindnfs_port(*soNFSp, nfs_portp) < 0) { + plog(XLOG_FATAL, "Can't create privileged nfs port"); + return 1; + } + plog(XLOG_INFO, "EZK: soNFSp: %d\n", *soNFSp); + if ((*nfs_xprtp = svcudp_create(*soNFSp)) == NULL) { + plog(XLOG_FATAL, "cannot create rpc/udp service"); + return 2; + } + plog(XLOG_INFO, "EZK: NFS_XPRTP: %x\n", (int) *nfs_xprtp); // XXX: EZK + if (!svc_register(*nfs_xprtp, NFS_PROGRAM, NFS_VERSION, dispatch_fxn, 0)) { + plog(XLOG_FATAL, "unable to register (NFS_PROGRAM, NFS_VERSION, 0)"); + return 3; + } + + return 0; /* all is well */ +} + + +/* + * Create the amq service for amd (both TCP and UDP) + */ +int +create_amq_service(int *udp_soAMQp, SVCXPRT **udp_amqpp, int *tcp_soAMQp, SVCXPRT **tcp_amqpp) +{ + /* first create TCP service */ + if (tcp_soAMQp) { + *tcp_soAMQp = socket(AF_INET, SOCK_STREAM, 0); + if (*tcp_soAMQp < 0) { + plog(XLOG_FATAL, "cannot create tcp socket for amq service: %m"); + return 1; + } + + /* now create RPC service handle for amq */ + if (tcp_amqpp && + (*tcp_amqpp = svctcp_create(*tcp_soAMQp, AMQ_SIZE, AMQ_SIZE)) == NULL) { + plog(XLOG_FATAL, "cannot create tcp service for amq: soAMQp=%d", *tcp_soAMQp); + return 2; + } + } + + /* next create UDP service */ + if (udp_soAMQp) { + *udp_soAMQp = socket(AF_INET, SOCK_DGRAM, 0); + if (*udp_soAMQp < 0) { + plog(XLOG_FATAL, "cannot create udp socket for amq service: %m"); + return 3; + } + + /* now create RPC service handle for amq */ + if (udp_amqpp && + (*udp_amqpp = svcudp_bufcreate(*udp_soAMQp, AMQ_SIZE, AMQ_SIZE)) == NULL) { + plog(XLOG_FATAL, "cannot create udp service for amq: soAMQp=%d", *udp_soAMQp); + return 4; + } + } + + return 0; /* all is well */ +} + + +/* + * Ping the portmapper on a remote system by calling the nullproc + */ +enum clnt_stat +pmap_ping(struct sockaddr_in *address) +{ + CLIENT *client; + enum clnt_stat clnt_stat = RPC_TIMEDOUT; /* assume failure */ + int socket = RPC_ANYSOCK; + struct timeval timeout; + + timeout.tv_sec = 3; + timeout.tv_usec = 0; + address->sin_port = htons(PMAPPORT); + client = clntudp_create(address, PMAPPROG, PMAPVERS, timeout, &socket); + if (client != (CLIENT *) NULL) { + clnt_stat = clnt_call(client, + PMAPPROC_NULL, + (XDRPROC_T_TYPE) xdr_void, + NULL, + (XDRPROC_T_TYPE) xdr_void, + NULL, + timeout); + clnt_destroy(client); + } + close(socket); + address->sin_port = 0; + + return clnt_stat; +} + + +/* + * Find the best NFS version for a host and protocol. + */ +u_long +get_nfs_version(char *host, struct sockaddr_in *sin, u_long nfs_version, const char *proto) +{ + CLIENT *clnt; + int again = 0; + enum clnt_stat clnt_stat; + struct timeval tv; + int sock; + + /* + * If not set or set wrong, then try from NFS_VERS_MAX on down. If + * set, then try from nfs_version on down. + */ + if (nfs_version <= 0 || nfs_version > NFS_VERS_MAX) { + nfs_version = NFS_VERS_MAX; + again = 1; + } + tv.tv_sec = 3; /* retry every 3 seconds, but also timeout */ + tv.tv_usec = 0; + + /* + * First check if remote portmapper is up (verify if remote host is up). + */ + clnt_stat = pmap_ping(sin); + if (clnt_stat == RPC_TIMEDOUT) { + plog(XLOG_ERROR, "get_nfs_version: failed to contact portmapper on host \"%s\": %s", host, clnt_sperrno(clnt_stat)); + return 0; + } + +#ifdef HAVE_FS_NFS3 +try_again: +#endif /* HAVE_FS_NFS3 */ + + sock = RPC_ANYSOCK; + if (STREQ(proto, "tcp")) + clnt = clnttcp_create(sin, NFS_PROGRAM, nfs_version, &sock, 0, 0); + else if (STREQ(proto, "udp")) + clnt = clntudp_create(sin, NFS_PROGRAM, nfs_version, tv, &sock); + else + clnt = NULL; + + if (clnt == NULL) { +#ifdef HAVE_CLNT_SPCREATEERROR + plog(XLOG_INFO, "get_nfs_version NFS(%d,%s) failed for %s :%s", + nfs_version, proto, host, clnt_spcreateerror("")); +#else /* not HAVE_CLNT_SPCREATEERROR */ + plog(XLOG_INFO, "get_nfs_version NFS(%d,%s) failed for %s", + nfs_version, proto, host); +#endif /* not HAVE_CLNT_SPCREATEERROR */ + return 0; + } + + /* Try a couple times to verify the CLIENT handle. */ + tv.tv_sec = 6; + clnt_stat = clnt_call(clnt, + NFSPROC_NULL, + (XDRPROC_T_TYPE) xdr_void, + 0, + (XDRPROC_T_TYPE) xdr_void, + 0, + tv); + close(sock); + clnt_destroy(clnt); + if (clnt_stat != RPC_SUCCESS) { + if (again) { +#ifdef HAVE_FS_NFS3 + if (nfs_version == NFS_VERSION3) { + plog(XLOG_INFO, "get_nfs_version trying a lower version"); + nfs_version = NFS_VERSION; + again = 0; + } + goto try_again; +#endif /* HAVE_FS_NFS3 */ + } + plog(XLOG_INFO, "get_nfs_version NFS(%d,%s) failed for %s", + nfs_version, proto, host); + return 0; + } + + plog(XLOG_INFO, "get_nfs_version: returning (%d,%s) on host %s", + nfs_version, proto, host); + return nfs_version; +} + + +/* + * AUTOFS FUNCTIONS FOR SOCKETS: + */ +#ifdef HAVE_FS_AUTOFS +/* + * Create the nfs service for amd + */ +int +create_autofs_service(int *soAUTOFSp, u_short *autofs_portp, SVCXPRT **autofs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)) +{ + /* NOT IMPLEMENTED! */ + return -1; +} +#endif /* HAVE_FS_AUTOFS */ diff --git a/conf/transp/transp_tli.c b/conf/transp/transp_tli.c new file mode 100644 index 0000000..e0448fb --- /dev/null +++ b/conf/transp/transp_tli.c @@ -0,0 +1,789 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: transp_tli.c,v 1.1 1998/11/05 02:04:41 ezk Exp $ + * + * TLI specific utilities. + * -Erez Zadok + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +struct netconfig *nfsncp; + +#ifdef HAVE_FS_AUTOFS +struct netconfig *autofsncp; +#endif /* HAVE_FS_AUTOFS */ + + +/* + * find the IP address that can be used to connect to the local host + */ +void +amu_get_myaddress(struct in_addr *iap) +{ + int ret; + voidp handlep; + struct netconfig *ncp; + struct nd_addrlist *addrs = (struct nd_addrlist *) NULL; + struct nd_hostserv service; + + handlep = setnetconfig(); + ncp = getnetconfig(handlep); + service.h_host = HOST_SELF_CONNECT; + service.h_serv = (char *) NULL; + + ret = netdir_getbyname(ncp, &service, &addrs); + + if (ret || !addrs || addrs->n_cnt < 1) { + plog(XLOG_FATAL, "cannot get local host address. using 127.0.0.1"); + iap->s_addr = 0x7f000001; + } else { + /* + * XXX: there may be more more than one address for this local + * host. Maybe something can be done with those. + */ + struct sockaddr_in *sinp = (struct sockaddr_in *) addrs->n_addrs[0].buf; + iap->s_addr = htonl(sinp->sin_addr.s_addr); + } + + endnetconfig(handlep); /* free's up internal resources too */ + netdir_free((voidp) addrs, ND_ADDRLIST); +} + + +/* + * How to bind to reserved ports. + * TLI handle (socket) and port version. + */ +int +bind_resv_port(int td, u_short *pp) +{ + int rc = -1, port; + struct t_bind *treq, *tret; + struct sockaddr_in *sin; + + treq = (struct t_bind *) t_alloc(td, T_BIND, T_ADDR); + if (!treq) { + plog(XLOG_ERROR, "t_alloc 1"); + return -1; + } + tret = (struct t_bind *) t_alloc(td, T_BIND, T_ADDR); + if (!tret) { + t_free((char *) treq, T_BIND); + plog(XLOG_ERROR, "t_alloc 2"); + return -1; + } + memset((char *) treq->addr.buf, 0, treq->addr.len); + sin = (struct sockaddr_in *) treq->addr.buf; + sin->sin_family = AF_INET; + treq->qlen = 0; + treq->addr.len = treq->addr.maxlen; + errno = EADDRINUSE; + port = IPPORT_RESERVED; + + do { + --port; + sin->sin_port = htons(port); + rc = t_bind(td, treq, tret); + if (rc < 0) { + plog(XLOG_ERROR, "t_bind"); + } else { + if (memcmp(treq->addr.buf, tret->addr.buf, tret->addr.len) == 0) + break; + else + t_unbind(td); + } + } while ((rc < 0 || errno == EADDRINUSE) && (int) port > IPPORT_RESERVED / 2); + + if (pp) { + if (rc == 0) + *pp = port; + else + plog(XLOG_ERROR, "could not t_bind to any reserved port"); + } + t_free((char *) tret, T_BIND); + t_free((char *) treq, T_BIND); + return rc; +} + + +/* + * How to bind to reserved ports. + * (port-only) version. + */ +int +bind_resv_port2(u_short *pp) +{ + int td, rc = -1, port; + struct t_bind *treq, *tret; + struct sockaddr_in *sin; + extern char *t_errlist[]; + extern int t_errno; + struct netconfig *nc = (struct netconfig *) NULL; + voidp nc_handle; + + if ((nc_handle = setnetconfig()) == (voidp) NULL) { + plog(XLOG_ERROR, "Cannot rewind netconfig: %s", nc_sperror()); + return -1; + } + /* + * Search the netconfig table for INET/UDP. + * This loop will terminate if there was an error in the /etc/netconfig + * file or if you reached the end of the file without finding the udp + * device. Either way your machine has probably far more problems (for + * example, you cannot have nfs v2 w/o UDP). + */ + while (1) { + if ((nc = getnetconfig(nc_handle)) == (struct netconfig *) NULL) { + plog(XLOG_ERROR, "Error accessing getnetconfig: %s", nc_sperror()); + endnetconfig(nc_handle); + return -1; + } + if (STREQ(nc->nc_protofmly, NC_INET) && + STREQ(nc->nc_proto, NC_UDP)) + break; + } + + /* + * This is the primary reason for the getnetconfig code above: to get the + * correct device name to udp, and t_open a descriptor to be used in + * t_bind below. + */ + td = t_open(nc->nc_device, O_RDWR, (struct t_info *) 0); + endnetconfig(nc_handle); + + if (td < 0) { + plog(XLOG_ERROR, "t_open failed: %d: %s", t_errno, t_errlist[t_errno]); + return -1; + } + treq = (struct t_bind *) t_alloc(td, T_BIND, T_ADDR); + if (!treq) { + plog(XLOG_ERROR, "t_alloc 1"); + return -1; + } + tret = (struct t_bind *) t_alloc(td, T_BIND, T_ADDR); + if (!tret) { + t_free((char *) treq, T_BIND); + plog(XLOG_ERROR, "t_alloc 2"); + return -1; + } + memset((char *) treq->addr.buf, 0, treq->addr.len); + sin = (struct sockaddr_in *) treq->addr.buf; + sin->sin_family = AF_INET; + treq->qlen = 0; + treq->addr.len = treq->addr.maxlen; + errno = EADDRINUSE; + port = IPPORT_RESERVED; + + do { + --port; + sin->sin_port = htons(port); + rc = t_bind(td, treq, tret); + if (rc < 0) { + plog(XLOG_ERROR, "t_bind for port %d: %s", port, t_errlist[t_errno]); + } else { + if (memcmp(treq->addr.buf, tret->addr.buf, tret->addr.len) == 0) + break; + else + t_unbind(td); + } + } while ((rc < 0 || errno == EADDRINUSE) && (int) port > IPPORT_RESERVED / 2); + + if (pp && rc == 0) + *pp = port; + t_free((char *) tret, T_BIND); + t_free((char *) treq, T_BIND); + return rc; +} + + +/* + * close a descriptor, TLI style + */ +int +amu_close(int fd) +{ + return t_close(fd); +} + + +/* + * Create an rpc client attached to the mount daemon. + */ +CLIENT * +get_mount_client(char *host, struct sockaddr_in *unused_sin, struct timeval * tv, int *sock, u_long mnt_version) +{ + CLIENT *client; + struct netbuf nb; + struct netconfig *nc = NULL; + struct sockaddr_in sin; + + nb.maxlen = sizeof(sin); + nb.buf = (char *) &sin; + + /* + * First try a TCP handler + */ + + /* + * Find mountd address on TCP + */ + if ((nc = getnetconfigent(NC_TCP)) == NULL) { + plog(XLOG_ERROR, "getnetconfig for tcp failed: %s", nc_sperror()); + goto tryudp; + } + if (!rpcb_getaddr(MOUNTPROG, mnt_version, nc, &nb, host)) { + /* + * don't print error messages here, since mountd might legitimately + * serve udp only + */ + goto tryudp; + } + /* + * Create privileged TCP socket + */ + *sock = t_open(nc->nc_device, O_RDWR, 0); + + if (*sock < 0) { + plog(XLOG_ERROR, "t_open %s: %m", nc->nc_device); + goto tryudp; + } + if (bind_resv_port(*sock, (u_short *) 0) < 0) + plog(XLOG_ERROR, "couldn't bind mountd socket to privileged port"); + + if ((client = clnt_vc_create(*sock, &nb, MOUNTPROG, mnt_version, 0, 0)) + == (CLIENT *) NULL) { + plog(XLOG_ERROR, "clnt_vc_create failed"); + t_close(*sock); + goto tryudp; + } + /* tcp succeeded */ +#ifdef DEBUG + dlog("get_mount_client: using tcp, port %d", sin.sin_port); +#endif /* DEBUG */ + if (nc) + freenetconfigent(nc); + return client; + +tryudp: + /* first free possibly previously allocated netconfig entry */ + if (nc) + freenetconfigent(nc); + + /* + * TCP failed so try UDP + */ + + /* + * Find mountd address on UDP + */ + if ((nc = getnetconfigent(NC_UDP)) == NULL) { + plog(XLOG_ERROR, "getnetconfig for udp failed: %s", nc_sperror()); + goto badout; + } + if (!rpcb_getaddr(MOUNTPROG, mnt_version, nc, &nb, host)) { + plog(XLOG_ERROR, "%s", + clnt_spcreateerror("couldn't get mountd address on udp")); + goto badout; + } + /* + * Create privileged UDP socket + */ + *sock = t_open(nc->nc_device, O_RDWR, 0); + + if (*sock < 0) { + plog(XLOG_ERROR, "t_open %s: %m", nc->nc_device); + goto badout; /* neither tcp not udp succeeded */ + } + if (bind_resv_port(*sock, (u_short *) 0) < 0) + plog(XLOG_ERROR, "couldn't bind mountd socket to privileged port"); + + if ((client = clnt_dg_create(*sock, &nb, MOUNTPROG, mnt_version, 0, 0)) + == (CLIENT *) NULL) { + plog(XLOG_ERROR, "clnt_dg_create failed"); + t_close(*sock); + goto badout; /* neither tcp not udp succeeded */ + } + if (clnt_control(client, CLSET_RETRY_TIMEOUT, (char *) tv) == FALSE) { + plog(XLOG_ERROR, "clnt_control CLSET_RETRY_TIMEOUT for udp failed"); + clnt_destroy(client); + goto badout; /* neither tcp not udp succeeded */ + } + /* udp succeeded */ +#ifdef DEBUG + dlog("get_mount_client: using udp, port %d", sin.sin_port); +#endif /* DEBUG */ + return client; + +badout: + /* failed */ + if (nc) + freenetconfigent(nc); + return NULL; +} + + +/* + * find the address of the caller of an RPC procedure. + */ +struct sockaddr_in * +amu_svc_getcaller(SVCXPRT *xprt) +{ + struct netbuf *nbp = (struct netbuf *) NULL; + + if ((nbp = svc_getrpccaller(xprt)) != NULL) + return (struct sockaddr_in *) nbp->buf; /* all OK */ + + return NULL; /* failed */ +} + + +/* + * Bind NFS to a reserved port. + */ +static int +bindnfs_port(int unused_so, u_short *nfs_portp) +{ + u_short port; + int error = bind_resv_port2(&port); + + if (error == 0) + *nfs_portp = port; + return error; +} + + +/* + * Create the nfs service for amd + * return 0 (TRUE) if OK, 1 (FALSE) if failed. + */ +int +create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)) +{ + char *nettype = "ticlts"; + + nfsncp = getnetconfigent(nettype); + if (nfsncp == NULL) { + plog(XLOG_ERROR, "cannot getnetconfigent for %s", nettype); + /* failed with ticlts, try plain udp (hpux11) */ + nettype = "udp"; + nfsncp = getnetconfigent(nettype); + if (nfsncp == NULL) { + plog(XLOG_ERROR, "cannot getnetconfigent for %s", nettype); + return 1; + } + } + *nfs_xprtp = svc_tli_create(RPC_ANYFD, nfsncp, NULL, 0, 0); + if (*nfs_xprtp == NULL) { + plog(XLOG_ERROR, "cannot create nfs tli service for amd"); + return 1; + } + + /* + * Get the service file descriptor and check its number to see if + * the t_open failed. If it succeeded, then go on to binding to a + * reserved nfs port. + */ + *soNFSp = (*nfs_xprtp)->xp_fd; + if (*soNFSp < 0 || bindnfs_port(*soNFSp, nfs_portp) < 0) { + plog(XLOG_ERROR, "Can't create privileged nfs port"); + return 1; + } + if (svc_reg(*nfs_xprtp, NFS_PROGRAM, NFS_VERSION, dispatch_fxn, NULL) != 1) { + plog(XLOG_ERROR, "could not register amd NFS service"); + return 1; + } + + return 0; /* all is well */ +} + + +/* + * Create the amq service for amd (both TCP and UDP) + */ +int +create_amq_service(int *udp_soAMQp, SVCXPRT **udp_amqpp, struct netconfig **udp_amqncpp, int *tcp_soAMQp, SVCXPRT **tcp_amqpp, struct netconfig **tcp_amqncpp) +{ + /* + * (partially) create the amq service for amd + * to be completed further in by caller. + */ + + /* first create the TCP service */ + if (tcp_amqncpp) + if ((*tcp_amqncpp = getnetconfigent(NC_TCP)) == NULL) { + plog(XLOG_ERROR, "cannot getnetconfigent for %s", NC_TCP); + return 1; + } + if (tcp_amqpp) { + *tcp_amqpp = svc_tli_create(RPC_ANYFD, *tcp_amqncpp, NULL, 0, 0); + if (*tcp_amqpp == NULL) { + plog(XLOG_ERROR, "cannot create (tcp) tli service for amq"); + return 1; + } + } + if (tcp_soAMQp && tcp_amqpp) + *tcp_soAMQp = (*tcp_amqpp)->xp_fd; + + /* next create the UDP service */ + if (udp_amqncpp) + if ((*udp_amqncpp = getnetconfigent(NC_UDP)) == NULL) { + plog(XLOG_ERROR, "cannot getnetconfigent for %s", NC_UDP); + return 1; + } + if (udp_amqpp) { + *udp_amqpp = svc_tli_create(RPC_ANYFD, *udp_amqncpp, NULL, 0, 0); + if (*udp_amqpp == NULL) { + plog(XLOG_ERROR, "cannot create (udp) tli service for amq"); + return 1; + } + } + if (udp_soAMQp && udp_amqpp) + *udp_soAMQp = (*udp_amqpp)->xp_fd; + + return 0; /* all is well */ +} + + +/* + * Find netconfig info for TCP/UDP device, and fill in the knetconfig + * structure. If in_ncp is not NULL, use that instead of defaulting + * to a TCP/UDP service. If in_ncp is NULL, then use the service type + * specified in nc_protoname (which may be either "tcp" or "udp"). If + * nc_protoname is NULL, default to UDP. + */ +int +get_knetconfig(struct knetconfig **kncpp, struct netconfig *in_ncp, char *nc_protoname) +{ + struct netconfig *ncp = NULL; + struct stat statbuf; + + if (in_ncp) + ncp = in_ncp; + else { + if (nc_protoname) + ncp = getnetconfigent(nc_protoname); + else + ncp = getnetconfigent(NC_UDP); + } + if (!ncp) + return -2; + + *kncpp = (struct knetconfig *) xzalloc(sizeof(struct knetconfig)); + if (*kncpp == (struct knetconfig *) NULL) { + if (!in_ncp) + freenetconfigent(ncp); + return -3; + } + (*kncpp)->knc_semantics = ncp->nc_semantics; + (*kncpp)->knc_protofmly = strdup(ncp->nc_protofmly); + (*kncpp)->knc_proto = strdup(ncp->nc_proto); + + if (stat(ncp->nc_device, &statbuf) < 0) { + plog(XLOG_ERROR, "could not stat() %s: %m", ncp->nc_device); + XFREE(*kncpp); + *kncpp = NULL; + if (!in_ncp) + freenetconfigent(ncp); + return -3; /* amd will end (free not needed) */ + } + (*kncpp)->knc_rdev = (dev_t) statbuf.st_rdev; + if (!in_ncp) { /* free only if argument not passed */ + freenetconfigent(ncp); + ncp = NULL; + } + return 0; +} + + +/* + * Free a previously allocated knetconfig structure. + */ +void +free_knetconfig(struct knetconfig *kncp) +{ + if (kncp) { + if (kncp->knc_protofmly) + XFREE(kncp->knc_protofmly); + if (kncp->knc_proto) + XFREE(kncp->knc_proto); + XFREE(kncp); + kncp = (struct knetconfig *) NULL; + } +} + + +/* get the best possible NFS version for a host and transport */ +static CLIENT * +amu_clnt_create_best_vers(const char *hostname, u_long program, u_long *out_version, u_long low_version, u_long high_version, const char *nettype) +{ + CLIENT *clnt; + enum clnt_stat rpc_stat; + struct rpc_err rpcerr; + struct timeval tv; + u_long lo, hi; + + /* 3 seconds is more than enough for a LAN */ + tv.tv_sec = 3; + tv.tv_usec = 0; + +#ifdef HAVE_CLNT_CREATE_TIMED + clnt = clnt_create_timed(hostname, program, high_version, nettype, &tv); + if (!clnt) { + plog(XLOG_INFO, "failed to create RPC client to \"%s\" after %d seconds", + hostname, tv.tv_sec); + return NULL; + } +#else /* not HAVE_CLNT_CREATE_TIMED */ + /* Solaris 2.3 and earlier didn't have clnt_create_timed() */ + clnt = clnt_create(hostname, program, high_version, nettype); + if (!clnt) { + plog(XLOG_INFO, "failed to create RPC client to \"%s\"", hostname); + return NULL; + } +#endif /* not HAVE_CLNT_CREATE_TIMED */ + + rpc_stat = clnt_call(clnt, + NULLPROC, + (XDRPROC_T_TYPE) xdr_void, + NULL, + (XDRPROC_T_TYPE) xdr_void, + NULL, + tv); + if (rpc_stat == RPC_SUCCESS) { + *out_version = high_version; + return clnt; + } + while (low_version < high_version) { + if (rpc_stat != RPC_PROGVERSMISMATCH) + break; + clnt_geterr(clnt, &rpcerr); + lo = rpcerr.re_vers.low; + hi = rpcerr.re_vers.high; + if (hi < high_version) + high_version = hi; + else + high_version--; + if (lo > low_version) + low_version = lo; + if (low_version > high_version) + goto out; + + CLNT_CONTROL(clnt, CLSET_VERS, (char *)&high_version); + rpc_stat = clnt_call(clnt, + NULLPROC, + (XDRPROC_T_TYPE) xdr_void, + NULL, + (XDRPROC_T_TYPE) xdr_void, + NULL, + tv); + if (rpc_stat == RPC_SUCCESS) { + *out_version = high_version; + return clnt; + } + } + clnt_geterr(clnt, &rpcerr); + +out: + rpc_createerr.cf_stat = rpc_stat; + rpc_createerr.cf_error = rpcerr; + clnt_destroy(clnt); + return NULL; +} + + +/* + * Find the best NFS version for a host. + */ +u_long +get_nfs_version(char *host, struct sockaddr_in *sin, u_long nfs_version, const char *proto) +{ + CLIENT *clnt = NULL; + u_long versout; + + /* + * If not set or set wrong, then try from NFS_VERS_MAX on down. If + * set, then try from nfs_version on down. + */ + if (nfs_version <= 0 || nfs_version > NFS_VERS_MAX) { + nfs_version = NFS_VERS_MAX; + } + +#ifdef DEBUG + if (nfs_version == NFS_VERSION) { + dlog("get_nfs_version trying NFS(%d,%s) for %s", + nfs_version, proto, host); + } else { + dlog("get_nfs_version trying NFS(%d-%d,%s) for %s", + NFS_VERSION, nfs_version, proto, host); + } +#endif /* DEBUG */ + /* get the best NFS version, and timeout quickly if remote host is down */ + clnt = amu_clnt_create_best_vers(host, NFS_PROGRAM, &versout, + NFS_VERSION, nfs_version, proto); + + if (clnt == NULL) { + if (nfs_version == NFS_VERSION) + plog(XLOG_INFO, "get_nfs_version NFS(%d,%s) failed for %s %s", + nfs_version, proto, host, clnt_spcreateerror("")); + else + plog(XLOG_INFO, "get_nfs_version NFS(%d-%d,%s) failed for %s %s", + NFS_VERSION, nfs_version, proto, host, clnt_spcreateerror("")); + return 0; + } + clnt_destroy(clnt); + + return versout; +} + + +/* + * AUTOFS FUNCTIONS FOR TLI: + */ +#ifdef HAVE_FS_AUTOFS +/* + * find the IP address that can be used to connect autofs service to. + */ +int +amu_get_autofs_address(struct netconfig *ncp, struct t_bind *tbp) +{ + int ret; + struct nd_addrlist *addrs = (struct nd_addrlist *) NULL; + struct nd_hostserv service; + + service.h_host = HOST_SELF_CONNECT; + service.h_serv = "autofs"; + + ret = netdir_getbyname(ncp, &service, &addrs); + + if (ret || !addrs || addrs->n_cnt < 1) { + plog(XLOG_FATAL, "amu_get_autofs_address: cannot get local host address: %s", netdir_sperror()); + return ret; + } else { + /* + * XXX: there may be more more than one address for this local + * host. Maybe something can be done with those. + */ + tbp->addr.len = addrs->n_addrs->len; + tbp->addr.maxlen = addrs->n_addrs->len; + memcpy(tbp->addr.buf, addrs->n_addrs->buf, addrs->n_addrs->len); + tbp->qlen = 8; /* arbitrary? */ + } + + netdir_free((voidp) addrs, ND_ADDRLIST); + + return 0; /* all OK */ +} + + +/* + * Create the nfs service for amd + */ +int +create_autofs_service(int *soAUTOFSp, u_short *autofs_portp, SVCXPRT **autofs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)) +{ + struct t_bind *tbp = 0; + char *conftype = "ticlts"; /* ticlts, ticotsord, or ticots */ + int fd = -1, err = 1; /* assume failed */ + + autofsncp = getnetconfigent(conftype); + if (autofsncp == NULL) { + plog(XLOG_ERROR, "create_autofs_service: cannot getnetconfigent for %s", conftype); + goto out; + } + + fd = t_open(autofsncp->nc_device, O_RDWR, NULL); + if (fd < 0) { + plog(XLOG_ERROR, "create_autofs_service: t_open failed (%s)", + t_errlist[t_errno]); + goto out; + } + + tbp = (struct t_bind *) t_alloc(fd, T_BIND, T_ADDR); + if (!tbp) { + plog(XLOG_ERROR, "create_autofs_service: t_alloca failed"); + goto out; + } + + if (amu_get_autofs_address(autofsncp, tbp) != 0) { + plog(XLOG_ERROR, "create_autofs_service: amu_get_autofs_address failed"); + goto out; + } + + *autofs_xprtp = svc_tli_create(fd, autofsncp, tbp, 0, 0); + if (*autofs_xprtp == NULL) { + plog(XLOG_ERROR, "cannot create autofs tli service for amd"); + goto out; + } + + /* + * Get the service file descriptor and check its number to see if + * the t_open failed. If it succeeded, then go on to binding to a + * reserved autofs port. + */ + *soAUTOFSp = (*autofs_xprtp)->xp_fd; + if (*soAUTOFSp < 0 || bindnfs_port(*soAUTOFSp, autofs_portp) < 0) { + plog(XLOG_ERROR, "Can't create privileged autofs port"); + goto out; + } + if (svc_reg(*autofs_xprtp, AUTOFS_PROG, AUTOFS_VERS, dispatch_fxn, NULL) != 1) { + plog(XLOG_ERROR, "could not register amd AUTOFS service"); + goto out; + } + + err = 0; /* finally, assume OK */ + return err; + +out: + if (autofsncp) + freenetconfigent(autofsncp); + if (fd > 0) + t_close(fd); + if (tbp) + t_free((char *) tbp, T_BIND); + + return err; +} +#endif /* HAVE_FS_AUTOFS */ diff --git a/conf/trap/trap_aix3.h b/conf/trap/trap_aix3.h new file mode 100644 index 0000000..756c574 --- /dev/null +++ b/conf/trap/trap_aix3.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_aix3.h */ +extern int mount_aix3(char *fsname, char *dir, int flags, int type, void *data, char *mnt_opts); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_aix3(mnt->mnt_fsname, mnt->mnt_dir, flags, type, mnt_data, mnt->mnt_opts) diff --git a/conf/trap/trap_aux.h b/conf/trap/trap_aux.h new file mode 100644 index 0000000..7aa84cd --- /dev/null +++ b/conf/trap/trap_aux.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/trap/trap_aux.h */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) fsmount(type, mnt->mnt_dir, flags, mnt_data) diff --git a/conf/trap/trap_default.h b/conf/trap/trap_default.h new file mode 100644 index 0000000..a132b0e --- /dev/null +++ b/conf/trap/trap_default.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/trap/trap_default.h */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount(type, mnt->mnt_dir, flags, mnt_data) diff --git a/conf/trap/trap_dgux.h b/conf/trap/trap_dgux.h new file mode 100644 index 0000000..e924dcb --- /dev/null +++ b/conf/trap/trap_dgux.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/trap/trap_dgux.h */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_dgux(type, mnt->mnt_dir, flags, mnt_data) diff --git a/conf/trap/trap_freebsd3.h b/conf/trap/trap_freebsd3.h new file mode 100644 index 0000000..95c6642 --- /dev/null +++ b/conf/trap/trap_freebsd3.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_freebsd3.h */ +extern int mount_freebsd3(MTYPE_TYPE type, const char *dir, int flags, voidp data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_freebsd3(type, mnt->mnt_dir, flags, mnt_data) diff --git a/conf/trap/trap_hcx.h b/conf/trap/trap_hcx.h new file mode 100644 index 0000000..0a51462 --- /dev/null +++ b/conf/trap/trap_hcx.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/trap/trap_hcx.h */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mountsyscall(type, mnt->mnt_dir, flags, mnt_data) diff --git a/conf/trap/trap_hpux.h b/conf/trap/trap_hpux.h new file mode 100644 index 0000000..ba6352a --- /dev/null +++ b/conf/trap/trap_hpux.h @@ -0,0 +1,15 @@ +/* $srcdir/conf/trap/trap_hpux.h */ +extern int mount_hpux(MTYPE_TYPE type, const char *dir, int flags, caddr_t data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_hpux(type, mnt->mnt_dir, flags, mnt_data) + +/* + * HPUX 9.x does is not even consistently inconsistent with itself. + * It defines an integer mount type for PCFS, but not a string type as + * with all other mount types. + * + * XXX: remove this ugly hack when HPUX 9.0 is defunct. + */ +#if MOUNT_TYPE_PCFS == MOUNT_PC +# undef MOUNT_TYPE_PCFS +# define MOUNT_TYPE_PCFS "pcfs" +#endif /* MOUNT_TYPE_PCFS == MOUNT_PC */ diff --git a/conf/trap/trap_hpux11.h b/conf/trap/trap_hpux11.h new file mode 100644 index 0000000..e919d95 --- /dev/null +++ b/conf/trap/trap_hpux11.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_hpux11.h */ +extern int mount_hpux11(const char *fsname, const char *dir, int flags, MTYPE_TYPE type, caddr_t data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_hpux11(mnt->mnt_fsname, mnt->mnt_dir, flags, type, mnt_data) diff --git a/conf/trap/trap_irix.h b/conf/trap/trap_irix.h new file mode 100644 index 0000000..e2a7fb6 --- /dev/null +++ b/conf/trap/trap_irix.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_irix.h */ +extern int mount_irix(char *fsname, char *dir, int flags, MTYPE_TYPE type, voidp data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_irix(mnt->mnt_fsname, mnt->mnt_dir, flags, type, mnt_data) diff --git a/conf/trap/trap_isc3.h b/conf/trap/trap_isc3.h new file mode 100644 index 0000000..8618a86 --- /dev/null +++ b/conf/trap/trap_isc3.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_isc3.h */ +extern int mount_isc3(char *fsname, char *dir, int flags, int type, void *data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_isc3(mnt->mnt_fsname, mnt->mnt_dir, flags, type, mnt_data) diff --git a/conf/trap/trap_linux.h b/conf/trap/trap_linux.h new file mode 100644 index 0000000..accec3f --- /dev/null +++ b/conf/trap/trap_linux.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_linux.h */ +extern int mount_linux(MTYPE_TYPE type, mntent_t *mnt, int flags, caddr_t data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_linux(type, mnt, flags, mnt_data) diff --git a/conf/trap/trap_mach3.h b/conf/trap/trap_mach3.h new file mode 100644 index 0000000..65af3a7 --- /dev/null +++ b/conf/trap/trap_mach3.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_mach3.h */ +extern int mount_mach3(char *type, char *mnt, int flags, caddr_t mnt_data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_mach(type, mnt, flags, mnt_data) diff --git a/conf/trap/trap_news4.h b/conf/trap/trap_news4.h new file mode 100644 index 0000000..76cd429 --- /dev/null +++ b/conf/trap/trap_news4.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/trap/trap_news4.h */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount(type, mnt->mnt_dir, M_NEWTYPE | flags, mnt_data) diff --git a/conf/trap/trap_rtu6.h b/conf/trap/trap_rtu6.h new file mode 100644 index 0000000..1f9c6e5 --- /dev/null +++ b/conf/trap/trap_rtu6.h @@ -0,0 +1,2 @@ +/* $srcdir/conf/trap/trap_rtu6.h */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) vmount(type, mnt->mnt_dir, flags, mnt_data) diff --git a/conf/trap/trap_stellix.h b/conf/trap/trap_stellix.h new file mode 100644 index 0000000..5a0848e --- /dev/null +++ b/conf/trap/trap_stellix.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_stellix.h */ +extern int mount_stellix(char *fsname, char *dir, int flags, int type, void *data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_stellix(mnt->mnt_fsname, mnt->mnt_dir, flags, type, mnt_data) diff --git a/conf/trap/trap_svr4.h b/conf/trap/trap_svr4.h new file mode 100644 index 0000000..387bc30 --- /dev/null +++ b/conf/trap/trap_svr4.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_svr4.h */ +extern int mount_svr4(char *fsname, char *dir, int flags, MTYPE_TYPE type, caddr_t data); +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount_svr4(mnt->mnt_fsname, mnt->mnt_dir, flags, type, mnt_data) diff --git a/conf/trap/trap_ultrix.h b/conf/trap/trap_ultrix.h new file mode 100644 index 0000000..d5cbbdb --- /dev/null +++ b/conf/trap/trap_ultrix.h @@ -0,0 +1,3 @@ +/* $srcdir/conf/trap/trap_ultrix.h */ +/* arg 3 to mount(2) is rwflag */ +#define MOUNT_TRAP(type, mnt, flags, mnt_data) mount(mnt->mnt_fsname, mnt->mnt_dir, flags & MNT2_GEN_OPT_RONLY, type, mnt_data) diff --git a/conf/umount/umount_bsd44.c b/conf/umount/umount_bsd44.c new file mode 100644 index 0000000..d5bae42 --- /dev/null +++ b/conf/umount/umount_bsd44.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: umount_bsd44.c,v 1.1 1998/11/05 02:04:43 ezk Exp $ + * + */ + +/* + * Unmounting filesystems under BSD 4.4. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +int +umount_fs(char *fs_name, const char *mnttabname) +{ + int error; + +eintr: + error = unmount(fs_name, 0); + if (error < 0) + error = errno; + + switch (error) { + case EINVAL: + case ENOTBLK: + case ENOENT: + plog(XLOG_WARNING, "unmount: %s is not mounted", fs_name); + error = 0; /* Not really an error */ + break; + + case EINTR: +#ifdef DEBUG + /* not sure why this happens, but it does. ask kirk one day... */ + dlog("%s: unmount: %m", fs_name); +#endif /* DEBUG */ + goto eintr; + +#ifdef DEBUG + default: + dlog("%s: unmount: %m", fs_name); + break; +#endif /* DEBUG */ + } + + return error; +} diff --git a/conf/umount/umount_default.c b/conf/umount/umount_default.c new file mode 100644 index 0000000..ca4e434 --- /dev/null +++ b/conf/umount/umount_default.c @@ -0,0 +1,150 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: umount_default.c,v 1.1 1998/11/05 02:04:43 ezk Exp $ + * + */ + +/* + * Default method of unmounting filesystems. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +int +umount_fs(char *fs_name, const char *mnttabname) +{ + mntlist *mlist, *mp, *mp_save = 0; + int error = 0; + + mp = mlist = read_mtab(fs_name, mnttabname); + + /* + * Search the mount table looking for + * the correct (ie last) matching entry + */ + while (mp) { + if (STREQ(mp->mnt->mnt_fsname, fs_name) || + STREQ(mp->mnt->mnt_dir, fs_name)) + mp_save = mp; + mp = mp->mnext; + } + + if (mp_save) { +#ifdef DEBUG + dlog("Trying unmount(%s)", mp_save->mnt->mnt_dir); +#endif /* DEBUG */ + +#ifdef MOUNT_TABLE_ON_FILE + /* + * This unmount may hang leaving this process with an exclusive lock on + * /etc/mtab. Therefore it is necessary to unlock mtab, do the unmount, + * then lock mtab (again) and reread it and finally update it. + */ + unlock_mntlist(); +#endif /* MOUNT_TABLE_ON_FILE */ + + if (UNMOUNT_TRAP(mp_save->mnt) < 0) { + switch (error = errno) { + case EINVAL: + case ENOTBLK: + plog(XLOG_WARNING, "unmount: %s is not mounted", mp_save->mnt->mnt_dir); + error = 0; /* Not really an error */ + break; + + case ENOENT: + plog(XLOG_ERROR, "mount point %s: %m", mp_save->mnt->mnt_dir); + error = 0; /* Not really an error (?) */ + break; + + default: +#ifdef DEBUG + dlog("%s: unmount: %m", mp_save->mnt->mnt_dir); +#endif /* DEBUG */ + break; + } + } +#ifdef DEBUG + dlog("Finished unmount(%s)", mp_save->mnt->mnt_dir); +#endif /* DEBUG */ + +#ifdef MOUNT_TABLE_ON_FILE + if (!error) { + free_mntlist(mlist); + mp = mlist = read_mtab(fs_name, mnttabname); + + /* + * Search the mount table looking for + * the correct (ie last) matching entry + */ + mp_save = 0; + while (mp) { + if (STREQ(mp->mnt->mnt_fsname, fs_name) || + STREQ(mp->mnt->mnt_dir, fs_name)) + mp_save = mp; + mp = mp->mnext; + } + + if (mp_save) { + mnt_free(mp_save->mnt); + mp_save->mnt = 0; + rewrite_mtab(mlist, mnttabname); + } + } +#endif /* MOUNT_TABLE_ON_FILE */ + + } else { + + plog(XLOG_ERROR, "Couldn't find how to unmount %s", fs_name); + /* + * Assume it is already unmounted + */ + error = 0; + } /* end of "if (mp_save)" statement */ + + free_mntlist(mlist); + + return error; +} diff --git a/conf/umount/umount_osf.c b/conf/umount/umount_osf.c new file mode 100644 index 0000000..164a513 --- /dev/null +++ b/conf/umount/umount_osf.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: umount_osf.c,v 1.1 1998/11/05 02:04:43 ezk Exp $ + * + */ + +/* + * Unmounting filesystems under OSF. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +int +umount_fs(char *fs_name, const char *mnttabname) +{ + int error; + +eintr: + error = umount(fs_name, MNT_NOFORCE); + if (error < 0) + error = errno; + + switch (error) { + case EINVAL: + case ENOTBLK: + plog(XLOG_WARNING, "unmount: %s is not mounted", fs_name); + error = 0; /* Not really an error */ + break; + + case ENOENT: + plog(XLOG_ERROR, "mount point %s: %m", fs_name); + break; + + case EINTR: +#ifdef DEBUG + /* not sure why this happens, but it does. ask kirk one day... */ + dlog("%s: unmount: %m", fs_name); +#endif /* DEBUG */ + goto eintr; + +#ifdef DEBUG + default: + dlog("%s: unmount: %m", fs_name); + break; +#endif /* DEBUG */ + } + + return error; +} diff --git a/configure b/configure new file mode 100755 index 0000000..dc3bdb4 --- /dev/null +++ b/configure @@ -0,0 +1,145292 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.12 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-debug[=ARG] enable debugging (yes/mem/no)" +ac_help="$ac_help + --enable-amq-mount enable amq -M remote mount code" +ac_help="$ac_help + --enable-cppflags[=ARG] configure/compile with ARG (-I) preprocessor flags" +ac_help="$ac_help + --enable-libs[=ARG] configure/compile with ARG (-l) library flags" +ac_help="$ac_help + --enable-ldflags[=ARG] configure/compile with ARG (-L) library flags" +ac_help="$ac_help + --enable-am-cflags[=ARG] + compile package with ARG additional C flags" +ac_help="$ac_help + --enable-shared build shared libraries [default=no] + --enable-shared=PKGS only build shared libraries if the current package + appears as an element in the PKGS list" +ac_help="$ac_help + --enable-static build static libraries [default=yes] + --enable-static=PKGS only build shared libraries if the current package + appears as an element in the PKGS list" +ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.12" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=amd/amd.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +echo "*** INITIALIZATION:" 1>&6 + + + +ac_aux_dir= +for ac_dir in aux $srcdir/aux; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in aux $srcdir/aux" 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + + +# From configure.in Revision: 1.0 +echo "*** SYSTEM TYPES:" 1>&6 + +# Make sure we can run config.sub. +if $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:578: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`$ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`$ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + + +# these are defined already by the macro 'CANONICAL_HOST' + echo $ac_n "checking "host cpu"""... $ac_c" 1>&6 +echo "configure:601: checking "host cpu"" >&5 + cat >> confdefs.h <&6 + + echo $ac_n "checking "vendor"""... $ac_c" 1>&6 +echo "configure:609: checking "vendor"" >&5 + cat >> confdefs.h <&6 + + echo $ac_n "checking "host full OS name and version"""... $ac_c" 1>&6 +echo "configure:617: checking "host full OS name and version"" >&5 + # normalize some host OS names + case ${host_os} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os=linux ;; + esac + cat >> confdefs.h <&6 + +# break host_os into host_os_name and host_os_version + echo $ac_n "checking "host OS name"""... $ac_c" 1>&6 +echo "configure:631: checking "host OS name"" >&5 + host_os_name=`echo $host_os | sed 's/\..*//g'` + # normalize some OS names + case ${host_os_name} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os_name=linux ;; + esac + cat >> confdefs.h <&6 + +# parse out the OS version of the host + echo $ac_n "checking "host OS version"""... $ac_c" 1>&6 +echo "configure:646: checking "host OS version"" >&5 + host_os_version=`echo $host_os | sed 's/^[^0-9]*//g'` + if test -z "$host_os_version" + then + host_os_version=`(uname -r) 2>/dev/null` || host_os_version=unknown + fi + case ${host_os_version} in + # fixes for some OS versions (solaris used to be here) + * ) # do nothing for now + ;; + esac + cat >> confdefs.h <&6 + +# figure out host architecture (different than CPU) + echo $ac_n "checking "host OS architecture"""... $ac_c" 1>&6 +echo "configure:665: checking "host OS architecture"" >&5 + host_arch=`(uname -m) 2>/dev/null` || host_arch=unknown + # normalize some names + case ${host_arch} in + sun4* ) host_arch=sun4 ;; + sun3x ) host_arch=sun3 ;; + sun ) host_arch=`(arch) 2>/dev/null` || host_arch=unknown ;; + i?86 ) host_arch=i386 ;; # all x86 should show up as i386 + esac + cat >> confdefs.h <&6 + +# figure out host name + echo $ac_n "checking "host name"""... $ac_c" 1>&6 +echo "configure:682: checking "host name"" >&5 + host_name=`(hostname || uname -n) 2>/dev/null` || host_name=unknown + cat >> confdefs.h <&6 + +# figure out user name + echo $ac_n "checking "user name"""... $ac_c" 1>&6 +echo "configure:692: checking "user name"" >&5 + if test -n "$USER" + then + user_name="$USER" + else + if test -n "$LOGNAME" + then + user_name="$LOGNAME" + else + user_name=`(whoami) 2>/dev/null` || user_name=unknown + fi + fi + cat >> confdefs.h <&6 + +# figure out configuration date + echo $ac_n "checking "configuration date"""... $ac_c" 1>&6 +echo "configure:712: checking "configuration date"" >&5 + config_date=`(date) 2>/dev/null` || config_date=unknown_date + cat >> confdefs.h <&6 + + + +echo "*** PACKAGE NAME AND VERSION:" 1>&6 +PACKAGE=am-utils +VERSION=6.0b2s2 + +echo $ac_n "checking package name""... $ac_c" 1>&6 +echo "configure:727: checking package name" >&5 +cat >> confdefs.h <&6 + + +echo $ac_n "checking version of package""... $ac_c" 1>&6 +echo "configure:736: checking version of package" >&5 +cat >> confdefs.h <&6 + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:754: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:807: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:864: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=$PACKAGE + +VERSION=$VERSION + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:910: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:923: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:936: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:949: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:962: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + +LIBTOOL_LDFLAGS="-version-info 1:1" + + +echo "*** OPTION PROCESSING:" 1>&6 +echo $ac_n "checking for debugging options""... $ac_c" 1>&6 +echo "configure:980: checking for debugging options" >&5 +# Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + +if test "$enableval" = yes; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define DEBUG 1 +EOF + +elif test "$enableval" = mem; then + echo "$ac_t""mem" 1>&6 + cat >> confdefs.h <<\EOF +#define DEBUG 1 +EOF + + cat >> confdefs.h <<\EOF +#define DEBUG_MEM 1 +EOF + + echo $ac_n "checking for malloc_verify in -lmapmalloc""... $ac_c" 1>&6 +echo "configure:1002: checking for malloc_verify in -lmapmalloc" >&5 +ac_lib_var=`echo mapmalloc'_'malloc_verify | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lmapmalloc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo mapmalloc | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for mallinfo in -lmalloc""... $ac_c" 1>&6 +echo "configure:1049: checking for mallinfo in -lmalloc" >&5 +ac_lib_var=`echo malloc'_'mallinfo | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lmalloc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo malloc | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +else + echo "$ac_t""no" 1>&6 +fi + +else + + # default is no debugging + echo "$ac_t""no" 1>&6 + +fi + + +echo $ac_n "checking for amq -M remote mount code""... $ac_c" 1>&6 +echo "configure:1108: checking for amq -M remote mount code" >&5 +# Check whether --enable-amq-mount or --disable-amq-mount was given. +if test "${enable_amq_mount+set}" = set; then + enableval="$enable_amq_mount" + if test "$enableval" = yes; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define ENABLE_AMQ_MOUNT 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +else + + # default is to not include this code because it is insecure + echo "$ac_t""no" 1>&6 + +fi + +echo $ac_n "checking for configuration/compilation (-I) preprocessor flags""... $ac_c" 1>&6 +echo "configure:1129: checking for configuration/compilation (-I) preprocessor flags" >&5 +# Check whether --enable-cppflags or --disable-cppflags was given. +if test "${enable_cppflags+set}" = set; then + enableval="$enable_cppflags" + if test "$enableval" = ""; then + # ignore if empty + echo "$ac_t""none" 1>&6 +else + # use supplied options + CPPFLAGS="$CPPFLAGS $enableval" + export CPPFLAGS + echo "$ac_t""$enableval" 1>&6 +fi +else + + # default is to have no additional flags + echo "$ac_t""none" 1>&6 + +fi + + +echo $ac_n "checking for configuration/compilation (-l) library flags""... $ac_c" 1>&6 +echo "configure:1151: checking for configuration/compilation (-l) library flags" >&5 +# Check whether --enable-libs or --disable-libs was given. +if test "${enable_libs+set}" = set; then + enableval="$enable_libs" + if test "$enableval" = ""; then + # ignore if empty + echo "$ac_t""none" 1>&6 +else + # use supplied options + LIBS="$LIBS $enableval" + export LIBS + echo "$ac_t""$enableval" 1>&6 +fi +else + + # default is to have no additional flags + echo "$ac_t""none" 1>&6 + +fi + + +echo $ac_n "checking for configuration/compilation (-L) library flags""... $ac_c" 1>&6 +echo "configure:1173: checking for configuration/compilation (-L) library flags" >&5 +# Check whether --enable-ldflags or --disable-ldflags was given. +if test "${enable_ldflags+set}" = set; then + enableval="$enable_ldflags" + if test "$enableval" = ""; then + # ignore if empty + echo "$ac_t""none" 1>&6 +else + # use supplied options + LDFLAGS="$LDFLAGS $enableval" + export LDFLAGS + echo "$ac_t""$enableval" 1>&6 +fi +else + + # default is to have no additional flags + echo "$ac_t""none" 1>&6 + +fi + + +echo $ac_n "checking for additional C option compilation flags""... $ac_c" 1>&6 +echo "configure:1195: checking for additional C option compilation flags" >&5 +# Check whether --enable-am-cflags or --disable-am-cflags was given. +if test "${enable_am_cflags+set}" = set; then + enableval="$enable_am_cflags" + if test "$enableval" = ""; then + AMU_CFLAGS="" + + echo "$ac_t""none" 1>&6 +else + # check if user supplied configure option without argument + if test "$enableval" = "yes"; then + AMU_CFLAGS="" + + echo "$ac_t""none" 1>&6 + else + # user supplied a cflags option to configure + AMU_CFLAGS="$enableval" + + echo "$ac_t""$enableval" 1>&6 + fi +fi +else + + # default is to have no additional C flags + AMU_CFLAGS="" + + echo "$ac_t""none" 1>&6 + +fi + + +echo $ac_n "checking a local configuration file""... $ac_c" 1>&6 +echo "configure:1227: checking a local configuration file" >&5 +if test -f localconfig.h +then + cat >> confdefs.h <<\EOF +#define HAVE_LOCALCONFIG_H 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +echo "*** PARTICULAR PROGRAMS (part 1):" 1>&6 +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_shared=no +fi + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_static=yes +fi + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1290: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1319: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1348: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1396: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1430: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1435: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1459: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + + +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 +echo "configure:1499: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | A-Za-z:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 +echo "configure:1517: checking for GNU ld" >&5 +else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 +echo "configure:1520: checking for non-GNU ld" >&5 +fi +if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$ac_cv_path_LD" +if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } + +echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 +echo "configure:1556: checking if the linker ($LD) is GNU ld" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 + + +echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 +echo "configure:1572: checking for BSD-compatible nm" >&5 +if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$NM" in +/* | A-Za-z:\\*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; +*) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + else + ac_cv_path_NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + ;; +esac +fi + +NM="$ac_cv_path_NM" +echo "$ac_t""$NM" 1>&6 + + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1609: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Check for any special flags to pass to ltconfig. +libtool_flags= +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$silent" = yes && libtool_flags="$libtool_flags --silent" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$host" in +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 1645 "configure"' > conftest.$ac_ext + if { (eval echo configure:1646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } + +if test "x$CC" != xcc; then + echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 +echo "configure:1677: checking whether $CC and cc understand -c and -o together" >&5 +else + echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 +echo "configure:1680: checking whether cc understands -c and -o together" >&5 +fi +set dummy $CC; ac_cc="`echo $2 | + sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" +if eval "test \"`echo '$''{'ac_cv_prog_cc_${ac_cc}_c_o'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'foo(){}' > conftest.c +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' +if { (eval echo configure:1692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1698: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + ac_try='cc -c conftest.c -o conftest.o 1>&5' + if { (eval echo configure:1700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f conftest* + +fi +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 + cat >> confdefs.h <<\EOF +#define NO_MINUS_C_MINUS_O 1 +EOF + +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1728: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1766: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 +echo "configure:1790: checking whether ${CC-cc} needs -traditional" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_pattern="Autoconf.*'x'" + cat > conftest.$ac_ext < +Autoconf TIOCGETP +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "$ac_pattern" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_prog_gcc_traditional=yes +else + rm -rf conftest* + ac_cv_prog_gcc_traditional=no +fi +rm -f conftest* + + + if test $ac_cv_prog_gcc_traditional = no; then + cat > conftest.$ac_ext < +Autoconf TCGETA +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "$ac_pattern" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_prog_gcc_traditional=yes +fi +rm -f conftest* + + fi +fi + +echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6 + if test $ac_cv_prog_gcc_traditional = yes; then + CC="$CC -traditional" + fi +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1836: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1857: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + + +echo "*** EXTRA OPTION PROCESSING:" 1>&6 + +echo $ac_n "checking additional preprocessor flags""... $ac_c" 1>&6 +echo "configure:1900: checking additional preprocessor flags" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cppflags'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +case "${host_os}" in +# off for now, posix may be a broken thing for nextstep3... +# nextstep* ) +# ac_cv_os_cppflags="-D_POSIX_SOURCE" +# ;; + * ) ac_cv_os_cppflags="" ;; +esac + +fi + +echo "$ac_t""$ac_cv_os_cppflags" 1>&6 +CPPFLAGS="$CPPFLAGS $ac_cv_os_cppflags" + + +echo $ac_n "checking additional compiler flags""... $ac_c" 1>&6 +echo "configure:1920: checking additional compiler flags" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cflags'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +case "${host_os}" in + irix6* ) + case "${CC}" in + cc ) + # do not use 64-bit compiler + ac_cv_os_cflags="-32 -Wl,-woff,84" + ;; + esac + ;; + osf4* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN" + ;; + esac + ;; + osf* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN -D_NO_PROTO" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN -D_NO_PROTO" + ;; + esac + ;; + solaris2.6* | sunos5.6* | solaris2.7* | sunos5.7* ) + # turn on 64-bit file offset interface + case "${CC}" in + * ) + ac_cv_os_cflags="-D_LARGEFILE64_SOURCE" + ;; + esac + ;; + OFF-sunos4* ) + # make sure passing whole structures is handled in gcc + case "${CC}" in + gcc ) + ac_cv_os_cflags="-fpcc-struct-return" + ;; + esac + ;; + * ) ac_cv_os_cflags="" ;; +esac + +fi + +echo "$ac_t""$ac_cv_os_cflags" 1>&6 +CFLAGS="$CFLAGS $ac_cv_os_cflags" + + +echo $ac_n "checking additional linker flags""... $ac_c" 1>&6 +echo "configure:1982: checking additional linker flags" >&5 +if eval "test \"`echo '$''{'ac_cv_os_ldflags'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +case "${host_os}" in + solaris2.7* | sunos5.7* ) + # find LDAP: off until Sun includes ldap headers. + case "${CC}" in + * ) + #ac_cv_os_ldflags="-L/usr/lib/fn" + ;; + esac + ;; + * ) ac_cv_os_ldflags="" ;; +esac + +fi + +echo "$ac_t""$ac_cv_os_ldflags" 1>&6 +LDFLAGS="$LDFLAGS $ac_cv_os_ldflags" + + +echo "*** UNIX VARIANTS:" 1>&6 +echo $ac_n "checking for AIX""... $ac_c" 1>&6 +echo "configure:2007: checking for AIX" >&5 +cat > conftest.$ac_ext <&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF +#define _ALL_SOURCE 1 +EOF + +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + +echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 +echo "configure:2031: checking for POSIXized ISC" >&5 +if test -d /etc/conf/kconfig.d && + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 +then + echo "$ac_t""yes" 1>&6 + ISC=yes # If later tests want to check for ISC. + cat >> confdefs.h <<\EOF +#define _POSIX_SOURCE 1 +EOF + + if test "$GCC" = yes; then + CC="$CC -posix" + else + CC="$CC -Xp" + fi +else + echo "$ac_t""no" 1>&6 + ISC= +fi + + +echo "*** PARTICULAR PROGRAMS (part 2):" 1>&6 + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +for ac_prog in 'bison -y' byacc yacc +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2061: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$YACC" in + /*) + ac_cv_path_YACC="$YACC" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_YACC="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi +YACC="$ac_cv_path_YACC" +if test -n "$YACC"; then + echo "$ac_t""$YACC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + +if test -n "$YACC" +then + case "$YACC" in + *bison*) YACC="$YACC -y" ;; + esac +fi + + +missing_dir=`cd $ac_aux_dir && pwd` +for ac_prog in flex lex +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2107: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_LEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$LEX" in + /*) + ac_cv_path_LEX="$LEX" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_LEX="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi +LEX="$ac_cv_path_LEX" +if test -n "$LEX"; then + echo "$ac_t""$LEX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$LEX" && break +done +test -n "$LEX" || LEX=""$missing_dir/missing flex"" + +# Extract the first word of "flex", so it can be a program name with args. +set dummy flex; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2142: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$LEX"; then + ac_cv_prog_LEX="$LEX" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_LEX="flex" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex" +fi +fi +LEX="$ac_cv_prog_LEX" +if test -n "$LEX"; then + echo "$ac_t""$LEX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$LEXLIB" +then + case "$LEX" in + flex*) ac_lib=fl ;; + *) ac_lib=l ;; + esac + echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 +echo "configure:2175: checking for yywrap in -l$ac_lib" >&5 +ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-l$ac_lib $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LEXLIB="-l$ac_lib" +else + echo "$ac_t""no" 1>&6 +fi + +fi + +echo $ac_n "checking lex output file root""... $ac_c" 1>&6 +echo "configure:2217: checking lex output file root" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # The minimal lex program is just a single line: %%. But some broken lexes +# (Solaris, I think it was) want two %% lines, so accommodate them. +echo '%% +%%' | $LEX +if test -f lex.yy.c; then + ac_cv_prog_lex_root=lex.yy +elif test -f lexyy.c; then + ac_cv_prog_lex_root=lexyy +else + { echo "configure: error: cannot find output from $LEX; giving up" 1>&2; exit 1; } +fi +fi + +echo "$ac_t""$ac_cv_prog_lex_root" 1>&6 +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6 +echo "configure:2238: checking whether yytext is a pointer" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # POSIX says lex can declare yytext either as a pointer or an array; the +# default is implementation-dependent. Figure out which it is, since +# not all implementations provide the %pointer and %array declarations. +ac_cv_prog_lex_yytext_pointer=no +echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c +ac_save_LIBS="$LIBS" +LIBS="$LIBS $LEXLIB" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + ac_cv_prog_lex_yytext_pointer=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +LIBS="$ac_save_LIBS" +rm -f "${LEX_OUTPUT_ROOT}.c" + +fi + +echo "$ac_t""$ac_cv_prog_lex_yytext_pointer" 1>&6 +if test $ac_cv_prog_lex_yytext_pointer = yes; then + cat >> confdefs.h <<\EOF +#define YYTEXT_POINTER 1 +EOF + +fi + + +echo "*** GENERIC PROGRAMS:" 1>&6 +for ac_prog in ar +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2285: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$AR" in + /*) + ac_cv_path_AR="$AR" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_AR="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi +AR="$ac_cv_path_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$AR" && break +done +test -n "$AR" || AR=":" + +for ac_prog in perl5 perl4 perl +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2322: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$PERL" in + /*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_PERL="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi +PERL="$ac_cv_path_PERL" +if test -n "$PERL"; then + echo "$ac_t""$PERL" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$PERL" && break +done +test -n "$PERL" || PERL="/usr/bin/perl" + + +echo "*** LIBRARY FILES:" 1>&6 + + +echo $ac_n "checking for additional OS libraries""... $ac_c" 1>&6 +echo "configure:2359: checking for additional OS libraries" >&5 +if eval "test \"`echo '$''{'ac_cv_os_libs'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct set of libraries to link with +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_os_libs="-lsocket -lnsl" ;; + * ) + ac_cv_os_libs=none ;; +esac + +fi + +echo "$ac_t""$ac_cv_os_libs" 1>&6 +# set list of libraries to link with +if test "$ac_cv_os_libs" != none +then + LIBS="$ac_cv_os_libs $LIBS" +fi + + + +echo $ac_n "checking for clnt_sperrno in -lrpc""... $ac_c" 1>&6 +echo "configure:2384: checking for clnt_sperrno in -lrpc" >&5 +ac_lib_var=`echo rpc'_'clnt_sperrno | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lrpc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo rpc | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +echo $ac_n "checking for xdr_fhandle in -lrpcsvc""... $ac_c" 1>&6 +echo "configure:2431: checking for xdr_fhandle in -lrpcsvc" >&5 +ac_lib_var=`echo rpcsvc'_'xdr_fhandle | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lrpcsvc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo rpcsvc | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +echo $ac_n "checking for yp_all""... $ac_c" 1>&6 +echo "configure:2478: checking for yp_all" >&5 +if eval "test \"`echo '$''{'ac_cv_func_yp_all'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char yp_all(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_yp_all) || defined (__stub___yp_all) +choke me +#else +yp_all(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_yp_all=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_yp_all=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'yp_all`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for yp_all in -lnsl""... $ac_c" 1>&6 +echo "configure:2524: checking for yp_all in -lnsl" >&5 +ac_lib_var=`echo nsl'_'yp_all | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + +echo $ac_n "checking for hes_init in -lhesiod""... $ac_c" 1>&6 +echo "configure:2574: checking for hes_init in -lhesiod" >&5 +ac_lib_var=`echo hesiod'_'hes_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" + +# first try with base library, without auxiliary library +LIBS="-lhesiod $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=\"hesiod\"" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* + +# if OK, set to no auxiliary library, else try auxiliary library +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = no"; then + LIBS="-lhesiod -lresolv $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=\"hesiod -lresolv\"" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +fi + +LIBS="$ac_save_LIBS" + +fi +ac_tmp="`eval echo '$''{ac_cv_lib_'$ac_lib_var'}'`" +if test "${ac_tmp}" != no; then + echo "$ac_t""-l$ac_tmp" 1>&6 + ac_tr_lib=HAVE_LIB`echo hesiod | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + +echo $ac_n "checking for ldap_open in -lldap""... $ac_c" 1>&6 +echo "configure:2653: checking for ldap_open in -lldap" >&5 +ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" + +# first try with base library, without auxiliary library +LIBS="-lldap $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=\"ldap\"" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* + +# if OK, set to no auxiliary library, else try auxiliary library +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = no"; then + LIBS="-lldap -llber $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=\"ldap -llber\"" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +fi + +LIBS="$ac_save_LIBS" + +fi +ac_tmp="`eval echo '$''{ac_cv_lib_'$ac_lib_var'}'`" +if test "${ac_tmp}" != no; then + echo "$ac_t""-l$ac_tmp" 1>&6 + ac_tr_lib=HAVE_LIB`echo ldap | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + + +echo $ac_n "checking for GNU ndbm.h""... $ac_c" 1>&6 +echo "configure:2733: checking for GNU ndbm.h" >&5 +cat > conftest.$ac_ext < +int main() { + +DBM *db; +dbm_pagfno(db); + +; return 0; } +EOF +if { (eval echo configure:2745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + echo "$ac_t""no" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo $ac_n "checking for dbm_pagfno in -lgdbm""... $ac_c" 1>&6 +echo "configure:2753: checking for dbm_pagfno in -lgdbm" >&5 +ac_lib_var=`echo gdbm'_'dbm_pagfno | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lgdbm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo gdbm | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi +rm -f conftest* + +echo "*** PARTICULAR LIBRARY FUNCTIONS:" 1>&6 +echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 +echo "configure:2804: checking for 8-bit clean memcmp" >&5 +if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_memcmp_clean=no +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_func_memcmp_clean=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_memcmp_clean=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 +if test $ac_cv_func_memcmp_clean = no +then + LIBOBJS="$LIBOBJS memcmp.o" + cat >> confdefs.h <<\EOF +#define HAVE_BAD_MEMCMP 1 +EOF + +fi + + +echo $ac_n "checking for a file-descriptor leakage clean yp_all""... $ac_c" 1>&6 +echo "configure:2848: checking for a file-descriptor leakage clean yp_all" >&5 +if eval "test \"`echo '$''{'ac_cv_func_yp_all_clean'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# clean by default +ac_cv_func_yp_all_clean=yes +# select the correct type +case "${host_os_name}" in + irix* ) + ac_cv_func_yp_all_clean=no ;; + linux* ) + # RedHat 5.1 systems with glibc glibc-2.0.7-19 or below + # leak a UDP socket from yp_all() + case "`cat /etc/redhat-release /dev/null 2>/dev/null`" in + *5.1* ) + ac_cv_func_yp_all_clean=no ;; + esac +esac + +fi + +echo "$ac_t""$ac_cv_func_yp_all_clean" 1>&6 +if test $ac_cv_func_yp_all_clean = no +then + cat >> confdefs.h <<\EOF +#define HAVE_BAD_YP_ALL 1 +EOF + +fi + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:2880: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:2960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking for pid_t""... $ac_c" 1>&6 +echo "configure:2984: checking for pid_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_pid_t=yes +else + rm -rf conftest* + ac_cv_type_pid_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_pid_t" 1>&6 +if test $ac_cv_type_pid_t = no; then + cat >> confdefs.h <<\EOF +#define pid_t int +EOF + +fi + +ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 +echo "configure:3018: checking for vfork.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_VFORK_H 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +echo $ac_n "checking for working vfork""... $ac_c" 1>&6 +echo "configure:3053: checking for working vfork" >&5 +if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + echo $ac_n "checking for vfork""... $ac_c" 1>&6 +echo "configure:3059: checking for vfork" >&5 +if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char vfork(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_vfork) || defined (__stub___vfork) +choke me +#else +vfork(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_vfork=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_vfork=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'vfork`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + +else + cat > conftest.$ac_ext < +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_VFORK_H +#include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. + The compiler is told about this with #include , + but some compilers (e.g. gcc -O) don't grok . + Test for this by using a static variable whose address + is put into a register that is clobbered by the vfork. */ +static +#ifdef __cplusplus +sparc_address_test (int arg) +#else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} +main() { + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. + This test uses lots of local variables, at least + as many local variables as main has allocated so far + including compiler temporaries. 4 locals are enough for + gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. + A buggy compiler should reuse the register of parent + for one of the local variables, since it will think that + parent can't possibly be used any more in this routine. + Assigning to the local variable will thus munge parent + in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), + vfork doesn't separate parent from child file descriptors. + If the child closes a descriptor before it execs or exits, + this munges the parent's descriptor as well. + Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + exit( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +EOF +if { (eval echo configure:3203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_func_vfork_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_vfork_works=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_vfork_works" 1>&6 +if test $ac_cv_func_vfork_works = no; then + cat >> confdefs.h <<\EOF +#define vfork fork +EOF + +fi + +echo $ac_n "checking for wait3 that fills in rusage""... $ac_c" 1>&6 +echo "configure:3226: checking for wait3 that fills in rusage" >&5 +if eval "test \"`echo '$''{'ac_cv_func_wait3_rusage'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_wait3_rusage=no +else + cat > conftest.$ac_ext < +#include +#include +#include +/* HP-UX has wait3 but does not fill in rusage at all. */ +main() { + struct rusage r; + int i; + /* Use a field that we can force nonzero -- + voluntary context switches. + For systems like NeXT and OSF/1 that don't set it, + also use the system CPU time. And page faults (I/O) for Linux. */ + r.ru_nvcsw = 0; + r.ru_stime.tv_sec = 0; + r.ru_stime.tv_usec = 0; + r.ru_majflt = r.ru_minflt = 0; + switch (fork()) { + case 0: /* Child. */ + sleep(1); /* Give up the CPU. */ + _exit(0); + case -1: _exit(0); /* What can we do? */ + default: /* Parent. */ + wait3(&i, 0, &r); + sleep(2); /* Avoid "text file busy" from rm on fast HP-UX machines. */ + exit(r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0 + && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 0); + } +} +EOF +if { (eval echo configure:3265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_func_wait3_rusage=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_wait3_rusage=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_wait3_rusage" 1>&6 +if test $ac_cv_func_wait3_rusage = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_WAIT3 1 +EOF + +fi + +echo "*** GENERIC LIBRARY FUNCTIONS:" 1>&6 +for ac_func in \ + __seterr_reply \ + _seterr_reply \ + bcmp \ + bcopy \ + bzero \ + clnt_create \ + clnt_create_timed \ + clnt_spcreateerror \ + cnodeid \ + dg_mount \ + flock \ + fsmount \ + get_myaddress \ + getccent \ + getcwd \ + getdomainname \ + getdtablesize \ + gethostname \ + getmntinfo \ + getmountent \ + getpagesize \ + gettimeofday \ + hasmntopt \ + hes_init \ + hesiod_init \ + hesiod_reload \ + hesiod_to_bind \ + ldap_open \ + memcmp \ + memcpy \ + memmove \ + memset \ + mkdir \ + mkstemp \ + mntctl \ + mount \ + mountsyscall \ + plock \ + regcomp \ + regexec \ + rmdir \ + select \ + seteuid \ + setresuid \ + setsid \ + sigaction \ + signal \ + socket \ + strchr \ + strcspn \ + strcasecmp \ + strdup \ + strerror \ + strspn \ + strstr \ + svc_getreq \ + svc_getreqset \ + sysfs \ + syslog \ + uname \ + umount \ + unmount \ + uvmount \ + vfork \ + vfsmount \ + vmount \ + wait3 \ + waitpid \ + +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3360: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in \ + clnt_sperrno \ + hasmntopt \ + strcasecmp \ + strdup \ + strstr \ + ualarm \ + +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3422: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +LIBOBJS="$LIBOBJS ${ac_func}.o" +fi +done + + +for ac_func in \ + xdr_attrstat \ + xdr_createargs \ + xdr_dirlist \ + xdr_diropargs \ + xdr_diropokres \ + xdr_diropres \ + xdr_dirpath \ + xdr_entry \ + xdr_exportnode \ + xdr_exports \ + xdr_fattr \ + xdr_fhandle \ + xdr_fhstatus \ + xdr_filename \ + xdr_ftype \ + xdr_groupnode \ + xdr_groups \ + xdr_linkargs \ + xdr_mntrequest \ + xdr_mntres \ + xdr_mountbody \ + xdr_mountlist \ + xdr_mountres3 \ + xdr_name \ + xdr_nfs_fh \ + xdr_nfscookie \ + xdr_nfspath \ + xdr_nfsstat \ + xdr_nfstime \ + xdr_pointer \ + xdr_readargs \ + xdr_readdirargs \ + xdr_readdirres \ + xdr_readlinkres \ + xdr_readokres \ + xdr_readres \ + xdr_renameargs \ + xdr_sattr \ + xdr_sattrargs \ + xdr_statfsokres \ + xdr_statfsres \ + xdr_symlinkargs \ + xdr_umntrequest \ + xdr_umntres \ + xdr_writeargs \ + +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3525: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + +echo "*** SAVING CONFIGURE STATE:" 1>&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** PARTICULAR HEADER FILES:" 1>&6 +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 +echo "configure:3638: checking for $ac_hdr that defines DIR" >&5 +if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include <$ac_hdr> +int main() { +DIR *dirp = 0; +; return 0; } +EOF +if { (eval echo configure:3651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then +echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 +echo "configure:3676: checking for opendir in -ldir" >&5 +ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldir $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -ldir" +else + echo "$ac_t""no" 1>&6 +fi + +else +echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 +echo "configure:3717: checking for opendir in -lx" >&5 +ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lx $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lx" +else + echo "$ac_t""no" 1>&6 +fi + +fi + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:3759: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3772: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:3839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 +echo "configure:3863: checking for sys/wait.h that is POSIX.1 compatible" >&5 +if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifndef WEXITSTATUS +#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif +#ifndef WIFEXITED +#define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif +int main() { +int s; +wait (&s); +s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; +; return 0; } +EOF +if { (eval echo configure:3884: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_sys_wait_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_sys_wait_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6 +if test $ac_cv_header_sys_wait_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SYS_WAIT_H 1 +EOF + +fi + +echo "*** GENERIC HEADER FILES:" 1>&6 +for ac_hdr in \ + arpa/nameser.h \ + arpa/inet.h \ + bsd/rpc/rpc.h \ + cdfs/cdfsmount.h \ + cdfs/cdfs_mount.h \ + hsfs/hsfs.h \ + isofs/cd9660/cd9660_mount.h \ + linux/auto_fs.h \ + linux/fs.h \ + linux/nfs.h \ + linux/nfs_mount.h \ + linux/posix_types.h \ + machine/endian.h \ + msdosfs/msdosfsmount.h \ + net/errno.h \ + net/if.h \ + net/if_var.h \ + net/route.h \ + netinet/if_ether.h \ + netinet/in.h \ + nfs/export.h \ + nfs/mount.h \ + nfs/nfs.h \ + nfs/nfs_clnt.h \ + nfs/nfs_gfs.h \ + nfs/nfs_mount.h \ + nfs/nfsmount.h \ + nfs/nfsproto.h \ + nfs/nfsv2.h \ + nfs/pathconf.h \ + nfs/rpcv2.h \ + nfs/rpcv2.h \ + rpc/auth_des.h \ + rpc/pmap_clnt.h \ + rpc/pmap_prot.h \ + rpc/rpc.h \ + rpc/types.h \ + rpc/xdr.h \ + rpcsvc/mount.h \ + rpcsvc/mountv3.h \ + rpcsvc/nfs_prot.h \ + rpcsvc/nis.h \ + rpcsvc/yp_prot.h \ + rpcsvc/ypclnt.h \ + sys/config.h \ + sys/dg_mount.h \ + sys/dir.h \ + sys/errno.h \ + sys/file.h \ + sys/fs/autofs.h \ + sys/fs/autofs_prot.h \ + sys/fs/cachefs_fs.h \ + sys/fs/efs_clnt.h \ + sys/fs/nfs.h \ + sys/fs/nfs/mount.h \ + sys/fs/nfs/nfs_clnt.h \ + sys/fs/nfs_clnt.h \ + sys/fs/pc_fs.h \ + sys/fs/tmp.h \ + sys/fs/ufs_mount.h \ + sys/fs/xfs_clnt.h \ + sys/fs_types.h \ + sys/fsid.h \ + sys/fstyp.h \ + sys/ioctl.h \ + sys/lock.h \ + sys/machine.h \ + sys/mbuf.h \ + sys/mntctl.h \ + sys/mntent.h \ + sys/mnttab.h \ + sys/mount.h \ + sys/ndir.h \ + sys/netconfig.h \ + sys/param.h \ + sys/pathconf.h \ + sys/proc.h \ + sys/resource.h \ + sys/sema.h \ + sys/signal.h \ + sys/socket.h \ + sys/sockio.h \ + sys/stat.h \ + sys/statfs.h \ + sys/syscall.h \ + sys/syslimits.h \ + sys/syslog.h \ + sys/time.h \ + sys/tiuser.h \ + sys/types.h \ + sys/ucred.h \ + sys/uio.h \ + sys/utsname.h \ + sys/vfs.h \ + sys/vmount.h \ + sys/vnode.h \ + ufs/ufs_mount.h \ + \ + assert.h \ + cluster.h \ + ctype.h \ + errno.h \ + fcntl.h \ + grp.h \ + hesiod.h \ + lber.h \ + ldap.h \ + libgen.h \ + malloc.h \ + memory.h \ + mntent.h \ + mnttab.h \ + mount.h \ + ndbm.h \ + ndir.h \ + netconfig.h \ + netdb.h \ + netdir.h \ + nsswitch.h \ + pwd.h \ + regex.h \ + resolv.h \ + setjmp.h \ + signal.h \ + socketbits.h \ + statbuf.h \ + stdarg.h \ + stdlib.h \ + stdio.h \ + string.h \ + strings.h \ + syslog.h \ + time.h \ + tiuser.h \ + varargs.h \ + unistd.h \ + +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:4046: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:4056: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + +echo "*** SAVING CONFIGURE STATE:" 1>&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** PARTICULAR STRUCTURES:" 1>&6 +echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 +echo "configure:4139: checking whether stat file-mode macros are broken" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include + +#if defined(S_ISBLK) && defined(S_IFDIR) +# if S_ISBLK (S_IFDIR) +You lose. +# endif +#endif + +#if defined(S_ISBLK) && defined(S_IFCHR) +# if S_ISBLK (S_IFCHR) +You lose. +# endif +#endif + +#if defined(S_ISLNK) && defined(S_IFREG) +# if S_ISLNK (S_IFREG) +You lose. +# endif +#endif + +#if defined(S_ISSOCK) && defined(S_IFREG) +# if S_ISSOCK (S_IFREG) +You lose. +# endif +#endif + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "You lose" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_header_stat_broken=yes +else + rm -rf conftest* + ac_cv_header_stat_broken=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_header_stat_broken" 1>&6 +if test $ac_cv_header_stat_broken = yes; then + cat >> confdefs.h <<\EOF +#define STAT_MACROS_BROKEN 1 +EOF + +fi + +echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 +echo "configure:4195: checking whether time.h and sys/time.h may both be included" >&5 +if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +int main() { +struct tm *tp; +; return 0; } +EOF +if { (eval echo configure:4209: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_time=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_time=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_time" 1>&6 +if test $ac_cv_header_time = yes; then + cat >> confdefs.h <<\EOF +#define TIME_WITH_SYS_TIME 1 +EOF + +fi + +echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 +echo "configure:4230: checking for st_rdev in struct stat" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +int main() { +struct stat s; s.st_rdev; +; return 0; } +EOF +if { (eval echo configure:4243: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_st_rdev=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_st_rdev=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_st_rdev" 1>&6 +if test $ac_cv_struct_st_rdev = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ST_RDEV 1 +EOF + +fi + +echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 +echo "configure:4264: checking whether struct tm is in sys/time.h or time.h" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +int main() { +struct tm *tp; tp->tm_sec; +; return 0; } +EOF +if { (eval echo configure:4277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_tm=time.h +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_tm=sys/time.h +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_tm" 1>&6 +if test $ac_cv_struct_tm = sys/time.h; then + cat >> confdefs.h <<\EOF +#define TM_IN_SYS_TIME 1 +EOF + +fi + +echo "*** GENERIC STRUCTURES:" 1>&6 + +echo $ac_n "checking location of NFS protocol header files""... $ac_c" 1>&6 +echo "configure:4300: checking location of NFS protocol header files" >&5 +if eval "test \"`echo '$''{'ac_cv_nfs_prot_headers'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style for mounting filesystems +case "${host_os}" in + irix5* ) + ac_cv_nfs_prot_headers=irix5 ;; + irix6* ) + ac_cv_nfs_prot_headers=irix6 ;; + sunos3* ) + ac_cv_nfs_prot_headers=sunos3 ;; + sunos4* ) + ac_cv_nfs_prot_headers=sunos4 ;; + sunos5.3* | solaris2.3* ) + ac_cv_nfs_prot_headers=sunos5_3 ;; + sunos5.4* | solaris2.4* ) + ac_cv_nfs_prot_headers=sunos5_4 ;; + sunos5.5* | solaris2.5* ) + ac_cv_nfs_prot_headers=sunos5_5 ;; + sunos5.6 | solaris* ) + ac_cv_nfs_prot_headers=sunos5_6 ;; + bsdi2* ) + ac_cv_nfs_prot_headers=bsdi2 ;; + bsdi3* | bsdi4* ) + ac_cv_nfs_prot_headers=bsdi3 ;; + freebsd2* ) + ac_cv_nfs_prot_headers=freebsd2 ;; + freebsd3* ) + ac_cv_nfs_prot_headers=freebsd3 ;; + netbsd1.3* ) + ac_cv_nfs_prot_headers=netbsd1_3 ;; + netbsd* ) + ac_cv_nfs_prot_headers=netbsd ;; + openbsd* ) + ac_cv_nfs_prot_headers=openbsd ;; + hpux11* ) + ac_cv_nfs_prot_headers=hpux11 ;; + hpux* ) + ac_cv_nfs_prot_headers=hpux ;; + aix4.2* ) + ac_cv_nfs_prot_headers=aix4_2 ;; + aix4* ) + ac_cv_nfs_prot_headers=aix4 ;; + aix* ) + ac_cv_nfs_prot_headers=aix3 ;; + osf4* ) + ac_cv_nfs_prot_headers=osf4 ;; + osf* ) + ac_cv_nfs_prot_headers=osf2 ;; + svr4* ) + ac_cv_nfs_prot_headers=svr4 ;; + sysv4* ) # this is for NCR2 machines + ac_cv_nfs_prot_headers=ncr2 ;; + linux* ) + ac_cv_nfs_prot_headers=linux ;; + nextstep* ) + ac_cv_nfs_prot_headers=nextstep ;; + ultrix* ) + ac_cv_nfs_prot_headers=ultrix ;; + * ) + ac_cv_nfs_prot_headers=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_nfs_prot_headers" 1>&6 + +# make sure correct header is linked in top build directory +am_utils_nfs_prot_file="amu_nfs_prot.h" +am_utils_link_files_src=${am_utils_link_files_src}conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h" " +am_utils_link_files_dst=${am_utils_link_files_dst}${am_utils_nfs_prot_file}" " + +# define the name of the header to be included for other M4 macros +cat >> confdefs.h <&6 +echo "configure:4386: checking for struct mntent" >&5 +if eval "test \"`echo '$''{'ac_cv_have_struct_mntent'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +int main() { + +struct mntent mt; + +; return 0; } +EOF +if { (eval echo configure:4557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_mntent=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_mntent=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_have_struct_mntent" 1>&6 +if test "$ac_cv_have_struct_mntent" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_STRUCT_MNTENT 1 +EOF + +fi + + +echo $ac_n "checking for struct mnttab""... $ac_c" 1>&6 +echo "configure:4581: checking for struct mnttab" >&5 +if eval "test \"`echo '$''{'ac_cv_have_struct_mnttab'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +int main() { + +struct mnttab mt; + +; return 0; } +EOF +if { (eval echo configure:4752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_mnttab=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_mnttab=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_have_struct_mnttab" 1>&6 +if test "$ac_cv_have_struct_mnttab" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_STRUCT_MNTTAB 1 +EOF + +fi + + + + +echo $ac_n "checking for struct nfs_args""... $ac_c" 1>&6 +echo "configure:4778: checking for struct nfs_args" >&5 +if eval "test \"`echo '$''{'ac_cv_have_struct_nfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the structure +# assume not found +ac_cv_have_struct_nfs_args=notfound + +# look for "struct irix5_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct irix5_nfs_args na; + +; return 0; } +EOF +if { (eval echo configure:4938: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_nfs_args="struct irix5_nfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_nfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct aix42_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct aix42_nfs_args na; + +; return 0; } +EOF +if { (eval echo configure:5102: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_nfs_args="struct aix42_nfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_nfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct nfs_args" +if test "$ac_cv_have_struct_nfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct nfs_args na; + +; return 0; } +EOF +if { (eval echo configure:5266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_nfs_args="struct nfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_nfs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_have_struct_nfs_args" 1>&6 + +if test "$ac_cv_have_struct_nfs_args" != notfound +then + cat >> confdefs.h <<\EOF +#define HAVE_STRUCT_NFS_ARGS 1 +EOF + + cat >> confdefs.h <&6 +echo "configure:5300: checking for struct nfs_mount_data" >&5 +if eval "test \"`echo '$''{'ac_cv_have_struct_nfs_mount_data'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the structure +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct nfs_mount_data nmd; + +; return 0; } +EOF +if { (eval echo configure:5454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_nfs_mount_data=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_nfs_mount_data=no +fi +rm -f conftest* + + +fi + +echo "$ac_t""$ac_cv_have_struct_nfs_mount_data" 1>&6 +if test "$ac_cv_have_struct_nfs_mount_data" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_STRUCT_NFS_MOUNT_DATA 1 +EOF + + cat >> confdefs.h <<\EOF +#define nfs_args_t struct nfs_mount_data +EOF + +fi + + + + +echo $ac_n "checking for struct nfs_gfs_mount""... $ac_c" 1>&6 +echo "configure:5485: checking for struct nfs_gfs_mount" >&5 +if eval "test \"`echo '$''{'ac_cv_have_struct_nfs_gfs_mount'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the structure +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct nfs_gfs_mount ngm; + +; return 0; } +EOF +if { (eval echo configure:5639: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_struct_nfs_gfs_mount=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_struct_nfs_gfs_mount=no +fi +rm -f conftest* + + +fi + +echo "$ac_t""$ac_cv_have_struct_nfs_gfs_mount" 1>&6 +if test "$ac_cv_have_struct_nfs_gfs_mount" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_STRUCT_NFS_GFS_MOUNT 1 +EOF + + cat >> confdefs.h <<\EOF +#define nfs_args_t struct nfs_gfs_mount +EOF + +fi + + + +echo $ac_n "checking for the name of the nfs filehandle field in nfs_args_t""... $ac_c" 1>&6 +echo "configure:5669: checking for the name of the nfs filehandle field in nfs_args_t" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_field_nfs_fh'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_struct_field_nfs_fh=notfound +# look for name "fh" (most systems) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + nfs_args_t nat; + char *cp = (char *) &(nat.fh); + +; return 0; } +EOF +if { (eval echo configure:5828: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_field_nfs_fh=fh +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_field_nfs_fh=notfound +fi +rm -f conftest* + +fi +# look for name "root" (for example Linux) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + nfs_args_t nat; + char *cp = (char *) &(nat.root); + +; return 0; } +EOF +if { (eval echo configure:5992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_field_nfs_fh=root +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_field_nfs_fh=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_struct_field_nfs_fh" 1>&6 +if test "$ac_cv_struct_field_nfs_fh" != notfound +then + cat >> confdefs.h <&6 +echo "configure:6018: checking for type/structure of NFS V2 filehandle" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_nfs_fh'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_struct_nfs_fh=notfound + +# look for "nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + nfs_fh nh; + +; return 0; } +EOF +if { (eval echo configure:6178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh="nfs_fh" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh=notfound +fi +rm -f conftest* + +fi + +# look for "struct nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct nfs_fh nh; + +; return 0; } +EOF +if { (eval echo configure:6342: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh="struct nfs_fh" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh=notfound +fi +rm -f conftest* + +fi + +# look for "struct nfssvcfh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct nfssvcfh nh; + +; return 0; } +EOF +if { (eval echo configure:6506: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh="struct nfssvcfh" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh=notfound +fi +rm -f conftest* + +fi + +# look for "nfsv2fh_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + nfsv2fh_t nh; + +; return 0; } +EOF +if { (eval echo configure:6670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh="nfsv2fh_t" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh=notfound +fi +rm -f conftest* + +fi + +# look for "fhandle_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + fhandle_t nh; + +; return 0; } +EOF +if { (eval echo configure:6834: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh="fhandle_t" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_struct_nfs_fh" 1>&6 + +if test "$ac_cv_struct_nfs_fh" != notfound +then + cat >> confdefs.h <&6 +echo "configure:6862: checking for type/structure of NFS V3 filehandle" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_nfs_fh3'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_struct_nfs_fh3=notfound + +# look for "nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + nfs_fh3 nh; + +; return 0; } +EOF +if { (eval echo configure:7022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh3="nfs_fh3" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh3=notfound +fi +rm -f conftest* + +fi + +# look for "struct nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + struct nfs_fh3 nh; + +; return 0; } +EOF +if { (eval echo configure:7186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh3="struct nfs_fh3" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh3=notfound +fi +rm -f conftest* + +fi + +# look for "nfsv3fh_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + nfsv3fh_t nh; + +; return 0; } +EOF +if { (eval echo configure:7350: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh3="nfsv3fh_t" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh3=notfound +fi +rm -f conftest* + +fi + +# look for "fhandle3_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + fhandle3_t nh; + +; return 0; } +EOF +if { (eval echo configure:7514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_nfs_fh3="fhandle3_t" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_nfs_fh3=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_struct_nfs_fh3" 1>&6 + +if test "$ac_cv_struct_nfs_fh3" != notfound +then + cat >> confdefs.h <&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** PARTICULAR TYPEDEFS:" 1>&6 +echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 +echo "configure:7597: checking for uid_t in sys/types.h" >&5 +if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "uid_t" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_uid_t=yes +else + rm -rf conftest* + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_type_uid_t" 1>&6 +if test $ac_cv_type_uid_t = no; then + cat >> confdefs.h <<\EOF +#define uid_t int +EOF + + cat >> confdefs.h <<\EOF +#define gid_t int +EOF + +fi + +echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 +echo "configure:7631: checking type of array argument to getgroups" >&5 +if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_type_getgroups=cross +else + cat > conftest.$ac_ext < +#define NGID 256 +#undef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) +main() +{ + gid_t gidset[NGID]; + int i, n; + union { gid_t gval; long lval; } val; + + val.lval = -1; + for (i = 0; i < NGID; i++) + gidset[i] = val.gval; + n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, + gidset); + /* Exit non-zero if getgroups seems to require an array of ints. This + happens when gid_t is short but getgroups modifies an array of ints. */ + exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0); +} + +EOF +if { (eval echo configure:7664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_type_getgroups=gid_t +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_type_getgroups=int +fi +rm -fr conftest* +fi + +if test $ac_cv_type_getgroups = cross; then + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "getgroups.*int.*gid_t" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_getgroups=gid_t +else + rm -rf conftest* + ac_cv_type_getgroups=int +fi +rm -f conftest* + +fi +fi + +echo "$ac_t""$ac_cv_type_getgroups" 1>&6 +cat >> confdefs.h <&6 +echo "configure:7702: checking for mode_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_mode_t=yes +else + rm -rf conftest* + ac_cv_type_mode_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_mode_t" 1>&6 +if test $ac_cv_type_mode_t = no; then + cat >> confdefs.h <<\EOF +#define mode_t int +EOF + +fi + +echo $ac_n "checking for pid_t""... $ac_c" 1>&6 +echo "configure:7735: checking for pid_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_pid_t=yes +else + rm -rf conftest* + ac_cv_type_pid_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_pid_t" 1>&6 +if test $ac_cv_type_pid_t = no; then + cat >> confdefs.h <<\EOF +#define pid_t int +EOF + +fi + +echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 +echo "configure:7768: checking return type of signal handlers" >&5 +if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef signal +#undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int main() { +int i; +; return 0; } +EOF +if { (eval echo configure:7790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_signal=void +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_signal=int +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_type_signal" 1>&6 +cat >> confdefs.h <&6 +echo "configure:7809: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 +echo "configure:7842: checking for uid_t in sys/types.h" >&5 +if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "uid_t" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_uid_t=yes +else + rm -rf conftest* + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_type_uid_t" 1>&6 +if test $ac_cv_type_uid_t = no; then + cat >> confdefs.h <<\EOF +#define uid_t int +EOF + + cat >> confdefs.h <<\EOF +#define gid_t int +EOF + +fi + +echo "*** GENERIC TYPEDEFS:" 1>&6 +echo $ac_n "checking for time_t""... $ac_c" 1>&6 +echo "configure:7877: checking for time_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_time_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "time_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_time_t=yes +else + rm -rf conftest* + ac_cv_type_time_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_time_t" 1>&6 +if test $ac_cv_type_time_t = no; then + cat >> confdefs.h <<\EOF +#define time_t long +EOF + +fi + + +echo $ac_n "checking if plain fhandle type exists""... $ac_c" 1>&6 +echo "configure:7911: checking if plain fhandle type exists" >&5 +if eval "test \"`echo '$''{'ac_cv_have_fhandle'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_have_fhandle=no +# look for "struct nfs_fh" +if test "$ac_cv_have_fhandle" = no +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ + +int main() { + fhandle a; + +; return 0; } +EOF +if { (eval echo configure:8070: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_have_fhandle=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_have_fhandle=no +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_have_fhandle" 1>&6 +if test "$ac_cv_have_fhandle" != no +then + cat >> confdefs.h <<\EOF +#define HAVE_FHANDLE 1 +EOF + +fi + + +echo $ac_n "checking type of mount type field in mount() call""... $ac_c" 1>&6 +echo "configure:8097: checking type of mount type field in mount() call" >&5 +if eval "test \"`echo '$''{'ac_cv_mtype_type'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_type=int ;; + * ) + ac_cv_mtype_type="char *" ;; +esac + +fi + +echo "$ac_t""$ac_cv_mtype_type" 1>&6 +cat >> confdefs.h <&6 +echo "configure:8120: checking printf string to print type field of mount() call" >&5 +if eval "test \"`echo '$''{'ac_cv_mtype_printf_type'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct printf type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_printf_type="%d" ;; + irix3 | isc3 ) + ac_cv_mtype_printf_type="0x%x" ;; + * ) + ac_cv_mtype_printf_type="%s" ;; +esac + +fi + +echo "$ac_t""$ac_cv_mtype_printf_type" 1>&6 +cat >> confdefs.h <&6 +echo "configure:8145: checking pointer type of 3rd argument to yp_order()" >&5 +if eval "test \"`echo '$''{'ac_cv_yp_order_outorder'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct type +case "${host_os_name}" in + solaris2* | svr4* | sysv4* | sunos5* | hpux* ) + ac_cv_yp_order_outorder="unsigned long" ;; + osf* ) + # DU4 man page is wrong, headers are right + ac_cv_yp_order_outorder="unsigned int" ;; + * ) + ac_cv_yp_order_outorder=int ;; +esac + +fi + +echo "$ac_t""$ac_cv_yp_order_outorder" 1>&6 +cat >> confdefs.h <&6 +echo "configure:8171: checking non-pointer type of 6th (fromlen) argument to recvfrom()" >&5 +if eval "test \"`echo '$''{'ac_cv_recvfrom_fromlen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct type +case "${host}" in + *-aix4.2* ) + ac_cv_recvfrom_fromlen="size_t" ;; + * ) + ac_cv_recvfrom_fromlen="int" ;; +esac + +fi + +echo "$ac_t""$ac_cv_recvfrom_fromlen" 1>&6 +cat >> confdefs.h <&6 +echo "configure:8194: checking argument type of 5rd argument to authunix_create()" >&5 +if eval "test \"`echo '$''{'ac_cv_auth_create_gidlist'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct type +case "${host_os_name}" in + sunos4* | bsdi2* | sysv4* | hpux10.10 | ultrix* ) + ac_cv_auth_create_gidlist="int" ;; + * ) + ac_cv_auth_create_gidlist="gid_t" ;; +esac + +fi + +echo "$ac_t""$ac_cv_auth_create_gidlist" 1>&6 +cat >> confdefs.h <&6 +echo "configure:8217: checking for type of 3rd arg ('in') arg to svc_sendreply()" >&5 +if eval "test \"`echo '$''{'ac_cv_type_svc_in_arg'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_type_svc_in_arg=notfound +# look for "caddr_t" +if test "$ac_cv_type_svc_in_arg" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +int main() { + SVCXPRT *SX; + xdrproc_t xp; + caddr_t p; + svc_sendreply(SX, xp, p); + +; return 0; } +EOF +if { (eval echo configure:8252: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_svc_in_arg="caddr_t" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_svc_in_arg=notfound +fi +rm -f conftest* + +fi +# look for "char *" +if test "$ac_cv_type_svc_in_arg" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +int main() { + SVCXPRT *SX; + xdrproc_t xp; + char *p; + svc_sendreply(SX, xp, p); + +; return 0; } +EOF +if { (eval echo configure:8291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_svc_in_arg="char *" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_svc_in_arg=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_type_svc_in_arg" 1>&6 +if test "$ac_cv_type_svc_in_arg" != notfound +then + cat >> confdefs.h <&6 +echo "configure:8317: checking for structure type of autofs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_autofs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_autofs_args=notfound + +# look for "struct auto_args" +if test "$ac_cv_type_autofs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct auto_args a; + +; return 0; } +EOF +if { (eval echo configure:8470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_autofs_args="struct auto_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_autofs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct autofs_args" +if test "$ac_cv_type_autofs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct autofs_args a; + +; return 0; } +EOF +if { (eval echo configure:8628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_autofs_args="struct autofs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_autofs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_type_autofs_args" 1>&6 +if test "$ac_cv_type_autofs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:8655: checking for structure type of cachefs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_cachefs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_cachefs_args=notfound +# look for "struct cachefs_mountargs" +if test "$ac_cv_type_cachefs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct cachefs_mountargs a; + +; return 0; } +EOF +if { (eval echo configure:8807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_cachefs_args="struct cachefs_mountargs" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_cachefs_args=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_type_cachefs_args" 1>&6 +if test "$ac_cv_type_cachefs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:8833: checking for structure type of cdfs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_cdfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_cdfs_args=notfound + +# look for "struct iso_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct iso_args a; + +; return 0; } +EOF +if { (eval echo configure:8986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_cdfs_args="struct iso_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_cdfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct iso9660_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct iso9660_args a; + +; return 0; } +EOF +if { (eval echo configure:9144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_cdfs_args="struct iso9660_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_cdfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct cdfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct cdfs_args a; + +; return 0; } +EOF +if { (eval echo configure:9302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_cdfs_args="struct cdfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_cdfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct hsfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct hsfs_args a; + +; return 0; } +EOF +if { (eval echo configure:9460: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_cdfs_args="struct hsfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_cdfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct iso_specific" (ultrix) +if test "$ac_cv_type_cdfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct iso_specific a; + +; return 0; } +EOF +if { (eval echo configure:9618: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_cdfs_args="struct iso_specific" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_cdfs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_type_cdfs_args" 1>&6 +if test "$ac_cv_type_cdfs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:9645: checking for structure type of lofs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_lofs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_lofs_args=notfound +# look for "struct lofs_args" +if test "$ac_cv_type_lofs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct lofs_args a; + +; return 0; } +EOF +if { (eval echo configure:9797: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_lofs_args="struct lofs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_lofs_args=notfound +fi +rm -f conftest* + +fi +# look for "struct lo_args" +if test "$ac_cv_type_lofs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct lo_args a; + +; return 0; } +EOF +if { (eval echo configure:9954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_lofs_args="struct lo_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_lofs_args=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_type_lofs_args" 1>&6 +if test "$ac_cv_type_lofs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:9980: checking for structure type of mfs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_mfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_mfs_args=notfound +# look for "struct mfs_args" +if test "$ac_cv_type_mfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct mfs_args a; + +; return 0; } +EOF +if { (eval echo configure:10132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_mfs_args="struct mfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_mfs_args=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_type_mfs_args" 1>&6 +if test "$ac_cv_type_mfs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:10158: checking for structure type of pcfs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_pcfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_pcfs_args=notfound + +# look for "struct msdos_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct msdos_args a; + +; return 0; } +EOF +if { (eval echo configure:10311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_pcfs_args="struct msdos_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_pcfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct pc_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct pc_args a; + +; return 0; } +EOF +if { (eval echo configure:10469: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_pcfs_args="struct pc_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_pcfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct pcfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct pcfs_args a; + +; return 0; } +EOF +if { (eval echo configure:10627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_pcfs_args="struct pcfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_pcfs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct msdosfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct msdosfs_args a; + +; return 0; } +EOF +if { (eval echo configure:10785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_pcfs_args="struct msdosfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_pcfs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_type_pcfs_args" 1>&6 + +if test "$ac_cv_type_pcfs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:10813: checking for structure type of rfs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_rfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_rfs_args=notfound +# look for "struct rfs_args" +if test "$ac_cv_type_rfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct rfs_args a; + +; return 0; } +EOF +if { (eval echo configure:10965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_rfs_args="struct rfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_rfs_args=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_type_rfs_args" 1>&6 +if test "$ac_cv_type_rfs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:10991: checking for structure type of tmpfs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_tmpfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_tmpfs_args=notfound +# look for "struct tmpfs_args" +if test "$ac_cv_type_tmpfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct tmpfs_args a; + +; return 0; } +EOF +if { (eval echo configure:11143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_tmpfs_args="struct tmpfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_tmpfs_args=notfound +fi +rm -f conftest* + +fi + +fi + +echo "$ac_t""$ac_cv_type_tmpfs_args" 1>&6 +if test "$ac_cv_type_tmpfs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:11169: checking for structure type of ufs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_ufs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_ufs_args=notfound + +# look for "struct ufs_args" +if test "$ac_cv_type_ufs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct ufs_args a; + +; return 0; } +EOF +if { (eval echo configure:11322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_ufs_args="struct ufs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_ufs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct efs_args" (irix) +if test "$ac_cv_type_ufs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct efs_args a; + +; return 0; } +EOF +if { (eval echo configure:11480: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_ufs_args="struct efs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_ufs_args=notfound +fi +rm -f conftest* + +fi + +# look for "struct ufs_specific" (ultrix) +if test "$ac_cv_type_ufs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct ufs_specific a; + +; return 0; } +EOF +if { (eval echo configure:11638: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_ufs_args="struct ufs_specific" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_ufs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_type_ufs_args" 1>&6 +if test "$ac_cv_type_ufs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:11665: checking for structure type of xfs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_xfs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_xfs_args=notfound + +# look for "struct xfs_args" +if test "$ac_cv_type_xfs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct xfs_args a; + +; return 0; } +EOF +if { (eval echo configure:11818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_xfs_args="struct xfs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_xfs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_type_xfs_args" 1>&6 +if test "$ac_cv_type_xfs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:11845: checking for structure type of efs mount(2) arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_type_efs_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set to a default value +ac_cv_type_efs_args=notfound + +# look for "struct efs_args" +if test "$ac_cv_type_efs_args" = notfound +then +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + +int main() { + struct efs_args a; + +; return 0; } +EOF +if { (eval echo configure:11998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_efs_args="struct efs_args" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_efs_args=notfound +fi +rm -f conftest* + +fi + + +fi + +echo "$ac_t""$ac_cv_type_efs_args" 1>&6 +if test "$ac_cv_type_efs_args" != notfound +then + cat >> confdefs.h <&6 +echo "configure:12025: checking for xdrproc_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_xdrproc_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which may have a definition for the type +# look for "xdrproc_t" +# try to compile a program which may have a definition for a structure +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +int main() { + xdrproc_t xdr_int; + +; return 0; } +EOF +if { (eval echo configure:12053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_xdrproc_t=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_xdrproc_t=no +fi +rm -f conftest* + + +fi + +echo "$ac_t""$ac_cv_type_xdrproc_t" 1>&6 +if test "$ac_cv_type_xdrproc_t" = yes +then + cat >> confdefs.h <&6 +echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +echo "configure:12079: checking whether byte ordering is bigendian" >&5 +if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_bigendian=unknown +# See if sys/param.h defines the BYTE_ORDER macro. +cat > conftest.$ac_ext < +#include +int main() { + +#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN + bogus endian macros +#endif +; return 0; } +EOF +if { (eval echo configure:12097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. +cat > conftest.$ac_ext < +#include +int main() { + +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif +; return 0; } +EOF +if { (eval echo configure:12112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_bigendian=no +fi +rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +if test $ac_cv_c_bigendian = unknown; then +if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_c_bigendian=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_bigendian=yes +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_c_bigendian" 1>&6 +if test $ac_cv_c_bigendian = yes; then + cat >> confdefs.h <<\EOF +#define WORDS_BIGENDIAN 1 +EOF + +fi + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:12169: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:12223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:12244: checking for inline" >&5 +if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done + +fi + +echo "$ac_t""$ac_cv_c_inline" 1>&6 +case "$ac_cv_c_inline" in + inline | yes) ;; + no) cat >> confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >> confdefs.h <&6 + +echo $ac_n "checking if compiler can handle void *""... $ac_c" 1>&6 +echo "configure:12286: checking if compiler can handle void *" >&5 +if eval "test \"`echo '$''{'ac_cv_c_void_p'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program which uses void * +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_void_p=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_void_p=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_c_void_p" 1>&6 +if test "$ac_cv_c_void_p" = yes +then + cat >> confdefs.h <<\EOF +#define voidp void * +EOF + +else + cat >> confdefs.h <<\EOF +#define voidp char * +EOF + +fi + + +echo "*** EXTERNAL DEFINITIONS:" 1>&6 + +echo $ac_n "checking if external definition for sys_errlist exists""... $ac_c" 1>&6 +echo "configure:12333: checking if external definition for sys_errlist exists" >&5 +if eval "test \"`echo '$''{'ac_cv_extern_sys_errlist'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to locate pattern in header files +pattern="(extern)?.*char.*sys_errlist.*\[\]" +cat > conftest.$ac_ext < +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_extern_sys_errlist=yes +else + rm -rf conftest* + ac_cv_extern_sys_errlist=no +fi +rm -f conftest* + + +fi + +echo "$ac_t""$ac_cv_extern_sys_errlist" 1>&6 +# check if need to define variable +if test "$ac_cv_extern_sys_errlist" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_EXTERN_SYS_ERRLIST 1 +EOF + +fi + + +echo $ac_n "checking if external definition for optarg exists""... $ac_c" 1>&6 +echo "configure:12380: checking if external definition for optarg exists" >&5 +if eval "test \"`echo '$''{'ac_cv_extern_optarg'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile program that uses the variable +cat > conftest.$ac_ext < +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ + +int main() { + +char *cp = optarg; + +; return 0; } +EOF +if { (eval echo configure:12412: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_extern_optarg=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_extern_optarg=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_extern_optarg" 1>&6 +if test "$ac_cv_extern_optarg" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_EXTERN_OPTARG 1 +EOF + +fi + + +# store variable name for external definition +ac_upcase_extern_name=`echo clnt_sperrno | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_EXTERN_$ac_upcase_extern_name +# check for cached value and set it if needed + +ac_tmp=`echo ac_cv_extern_clnt_sperrno` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking external function definition for clnt_sperrno""... $ac_c" 1>&6 +echo "configure:12443: checking external function definition for clnt_sperrno" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]clnt_sperrno[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]clnt_sperrno[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_clnt_sperrno=yes" +else + rm -rf conftest* + eval "ac_cv_extern_clnt_sperrno=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for clnt_sperrno""... $ac_c" 1>&6 +echo "configure:12511: checking external function definition for clnt_sperrno" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'clnt_sperrno'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:12534: checking external function definition for free" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]free[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]free[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_free=yes" +else + rm -rf conftest* + eval "ac_cv_extern_free=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for free""... $ac_c" 1>&6 +echo "configure:12602: checking external function definition for free" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'free'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:12625: checking external function definition for get_myaddress" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]get_myaddress[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]get_myaddress[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_get_myaddress=yes" +else + rm -rf conftest* + eval "ac_cv_extern_get_myaddress=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for get_myaddress""... $ac_c" 1>&6 +echo "configure:12693: checking external function definition for get_myaddress" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'get_myaddress'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:12716: checking external function definition for getccent" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]getccent[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]getccent[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_getccent=yes" +else + rm -rf conftest* + eval "ac_cv_extern_getccent=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for getccent""... $ac_c" 1>&6 +echo "configure:12784: checking external function definition for getccent" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'getccent'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:12807: checking external function definition for getdomainname" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]getdomainname[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]getdomainname[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_getdomainname=yes" +else + rm -rf conftest* + eval "ac_cv_extern_getdomainname=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for getdomainname""... $ac_c" 1>&6 +echo "configure:12875: checking external function definition for getdomainname" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'getdomainname'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:12898: checking external function definition for getdtablesize" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]getdtablesize[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]getdtablesize[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_getdtablesize=yes" +else + rm -rf conftest* + eval "ac_cv_extern_getdtablesize=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for getdtablesize""... $ac_c" 1>&6 +echo "configure:12966: checking external function definition for getdtablesize" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'getdtablesize'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:12989: checking external function definition for gethostname" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]gethostname[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]gethostname[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_gethostname=yes" +else + rm -rf conftest* + eval "ac_cv_extern_gethostname=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for gethostname""... $ac_c" 1>&6 +echo "configure:13057: checking external function definition for gethostname" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'gethostname'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13080: checking external function definition for getlogin" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]getlogin[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]getlogin[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_getlogin=yes" +else + rm -rf conftest* + eval "ac_cv_extern_getlogin=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for getlogin""... $ac_c" 1>&6 +echo "configure:13148: checking external function definition for getlogin" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'getlogin'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13171: checking external function definition for getpagesize" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]getpagesize[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]getpagesize[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_getpagesize=yes" +else + rm -rf conftest* + eval "ac_cv_extern_getpagesize=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for getpagesize""... $ac_c" 1>&6 +echo "configure:13239: checking external function definition for getpagesize" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'getpagesize'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13262: checking external function definition for getwd" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]getwd[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]getwd[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_getwd=yes" +else + rm -rf conftest* + eval "ac_cv_extern_getwd=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for getwd""... $ac_c" 1>&6 +echo "configure:13330: checking external function definition for getwd" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'getwd'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13353: checking external function definition for innetgr" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]innetgr[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]innetgr[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_innetgr=yes" +else + rm -rf conftest* + eval "ac_cv_extern_innetgr=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for innetgr""... $ac_c" 1>&6 +echo "configure:13421: checking external function definition for innetgr" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'innetgr'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13444: checking external function definition for mkstemp" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]mkstemp[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]mkstemp[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_mkstemp=yes" +else + rm -rf conftest* + eval "ac_cv_extern_mkstemp=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for mkstemp""... $ac_c" 1>&6 +echo "configure:13512: checking external function definition for mkstemp" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'mkstemp'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13535: checking external function definition for sbrk" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]sbrk[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]sbrk[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_sbrk=yes" +else + rm -rf conftest* + eval "ac_cv_extern_sbrk=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for sbrk""... $ac_c" 1>&6 +echo "configure:13603: checking external function definition for sbrk" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'sbrk'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13626: checking external function definition for strcasecmp" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]strcasecmp[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]strcasecmp[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_strcasecmp=yes" +else + rm -rf conftest* + eval "ac_cv_extern_strcasecmp=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for strcasecmp""... $ac_c" 1>&6 +echo "configure:13694: checking external function definition for strcasecmp" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'strcasecmp'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13717: checking external function definition for strdup" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]strdup[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]strdup[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_strdup=yes" +else + rm -rf conftest* + eval "ac_cv_extern_strdup=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for strdup""... $ac_c" 1>&6 +echo "configure:13785: checking external function definition for strdup" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'strdup'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13808: checking external function definition for strstr" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]strstr[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]strstr[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_strstr=yes" +else + rm -rf conftest* + eval "ac_cv_extern_strstr=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for strstr""... $ac_c" 1>&6 +echo "configure:13876: checking external function definition for strstr" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'strstr'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13899: checking external function definition for ualarm" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]ualarm[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]ualarm[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_ualarm=yes" +else + rm -rf conftest* + eval "ac_cv_extern_ualarm=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for ualarm""... $ac_c" 1>&6 +echo "configure:13967: checking external function definition for ualarm" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'ualarm'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:13990: checking external function definition for usleep" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]usleep[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]usleep[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_usleep=yes" +else + rm -rf conftest* + eval "ac_cv_extern_usleep=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for usleep""... $ac_c" 1>&6 +echo "configure:14058: checking external function definition for usleep" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'usleep'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:14081: checking external function definition for wait3" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]wait3[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]wait3[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_wait3=yes" +else + rm -rf conftest* + eval "ac_cv_extern_wait3=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for wait3""... $ac_c" 1>&6 +echo "configure:14149: checking external function definition for wait3" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'wait3'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:14172: checking external function definition for xdr_opaque_auth" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]xdr_opaque_auth[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]xdr_opaque_auth[^a-zA-Z0-9_]?.*\(" +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "${pattern}" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_extern_xdr_opaque_auth=yes" +else + rm -rf conftest* + eval "ac_cv_extern_xdr_opaque_auth=no" +fi +rm -f conftest* + + + echo $ac_n "checking external function definition for xdr_opaque_auth""... $ac_c" 1>&6 +echo "configure:14240: checking external function definition for xdr_opaque_auth" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'xdr_opaque_auth'}'`" = yes +then + cat >> confdefs.h <&6 + +echo "*** SYSTEM SERVICES:" 1>&6 +echo $ac_n "checking for long file names""... $ac_c" 1>&6 +echo "configure:14259: checking for long file names" >&5 +if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_sys_long_file_names=yes +# Test for long file names in all the places we know might matter: +# . the current directory, where building will happen +# $prefix/lib where we will be installing things +# $exec_prefix/lib likewise +# eval it to expand exec_prefix. +# $TMPDIR if set, where it might want to write temporary files +# if $TMPDIR is not set: +# /tmp where it might want to write temporary files +# /var/tmp likewise +# /usr/tmp likewise +if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then + ac_tmpdirs="$TMPDIR" +else + ac_tmpdirs='/tmp /var/tmp /usr/tmp' +fi +for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do + test -d $ac_dir || continue + test -w $ac_dir || continue # It is less confusing to not echo anything here. + (echo 1 > $ac_dir/conftest9012345) 2>/dev/null + (echo 2 > $ac_dir/conftest9012346) 2>/dev/null + val=`cat $ac_dir/conftest9012345 2>/dev/null` + if test ! -f $ac_dir/conftest9012345 || test "$val" != 1; then + ac_cv_sys_long_file_names=no + rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null + break + fi + rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null +done +fi + +echo "$ac_t""$ac_cv_sys_long_file_names" 1>&6 +if test $ac_cv_sys_long_file_names = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LONG_FILE_NAMES 1 +EOF + +fi + +echo $ac_n "checking for restartable system calls""... $ac_c" 1>&6 +echo "configure:14303: checking for restartable system calls" >&5 +if eval "test \"`echo '$''{'ac_cv_sys_restartable_syscalls'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +ucatch (isig) { } +main () { + int i = fork (), status; + if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); } + signal (SIGINT, ucatch); + status = wait(&i); + if (status == -1) wait(&i); + exit (status == -1); +} + +EOF +if { (eval echo configure:14329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_sys_restartable_syscalls=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sys_restartable_syscalls=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_sys_restartable_syscalls" 1>&6 +if test $ac_cv_sys_restartable_syscalls = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_RESTARTABLE_SYSCALLS 1 +EOF + +fi + + +echo $ac_n "checking network transport type""... $ac_c" 1>&6 +echo "configure:14353: checking network transport type" >&5 +if eval "test \"`echo '$''{'ac_cv_transport_type'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct type +case "${host_os_name}" in + solaris2* | sunos5* | hpux11* ) + ac_cv_transport_type=tli ;; + * ) + ac_cv_transport_type=sockets ;; +esac + +fi + +echo "$ac_t""$ac_cv_transport_type" 1>&6 +am_utils_link_files_src=${am_utils_link_files_src}conf/transp/transp_${ac_cv_transport_type}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/transputil.c" " +# append transport utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS transputil.o" +if test $ac_cv_transport_type = tli +then + cat >> confdefs.h <<\EOF +#define HAVE_TRANSPORT_TYPE_TLI 1 +EOF + +fi + + +echo "*** FIELDS WITHIN STRUCTURES:" 1>&6 + +# make variable name a concatenation of the structure name and the field +ac_safe=`echo ac_cv_field_mntent_t_mnt_cnode | tr '. ' '__'` +ac_upcase_var_name=`echo HAVE_FIELD_mntent_t_mnt_cnode | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr '. ' '__'` + +ac_tmp=`echo $ac_safe` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking if mntent_t field mnt_cnode exist""... $ac_c" 1>&6 +echo "configure:14391: checking if mntent_t field mnt_cnode exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +mntent_t a; +char *cp = (char *) &(a.mnt_cnode); + +; return 0; } +EOF +if { (eval echo configure:14605: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if mntent_t field mnt_cnode exist""... $ac_c" 1>&6 +echo "configure:14617: checking if mntent_t field mnt_cnode exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:14638: checking if mntent_t field mnt_ro exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +mntent_t a; +char *cp = (char *) &(a.mnt_ro); + +; return 0; } +EOF +if { (eval echo configure:14852: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if mntent_t field mnt_ro exist""... $ac_c" 1>&6 +echo "configure:14864: checking if mntent_t field mnt_ro exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:14885: checking if mntent_t field mnt_time exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +mntent_t a; +char *cp = (char *) &(a.mnt_time); + +; return 0; } +EOF +if { (eval echo configure:15099: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if mntent_t field mnt_time exist""... $ac_c" 1>&6 +echo "configure:15111: checking if mntent_t field mnt_time exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:15126: checking if mntent_t field mnt_time exist as type string" >&5 +if eval "test \"`echo '$''{'ac_cv_field_mntent_t_mnt_time_string'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# else /* not HAVE_STRUCT_MNTTAB */ +# error XXX: could not find definition for struct mntent or struct mnttab! +# endif /* not HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + + + +int main() { + +mntent_t mtt; +char *cp = "test"; +int i; +mtt.mnt_time = cp; +i = mtt.mnt_time[0]; + +; return 0; } +EOF +if { (eval echo configure:15311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_field_mntent_t_mnt_time_string=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_field_mntent_t_mnt_time_string=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_field_mntent_t_mnt_time_string" 1>&6 +if test "$ac_cv_field_mntent_t_mnt_time_string" = yes +then + cat >> confdefs.h <<\EOF +#define HAVE_FIELD_MNTENT_T_MNT_TIME_STRING 1 +EOF + +fi + + +# make variable name a concatenation of the structure name and the field +ac_safe=`echo ac_cv_field_cdfs_args_t_flags | tr '. ' '__'` +ac_upcase_var_name=`echo HAVE_FIELD_cdfs_args_t_flags | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr '. ' '__'` + +ac_tmp=`echo $ac_safe` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking if cdfs_args_t field flags exist""... $ac_c" 1>&6 +echo "configure:15341: checking if cdfs_args_t field flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +cdfs_args_t a; +char *cp = (char *) &(a.flags); + +; return 0; } +EOF +if { (eval echo configure:15555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if cdfs_args_t field flags exist""... $ac_c" 1>&6 +echo "configure:15567: checking if cdfs_args_t field flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:15588: checking if cdfs_args_t field fspec exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +cdfs_args_t a; +char *cp = (char *) &(a.fspec); + +; return 0; } +EOF +if { (eval echo configure:15802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if cdfs_args_t field fspec exist""... $ac_c" 1>&6 +echo "configure:15814: checking if cdfs_args_t field fspec exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:15835: checking if cdfs_args_t field iso_flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +cdfs_args_t a; +char *cp = (char *) &(a.iso_flags); + +; return 0; } +EOF +if { (eval echo configure:16049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if cdfs_args_t field iso_flags exist""... $ac_c" 1>&6 +echo "configure:16061: checking if cdfs_args_t field iso_flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:16082: checking if cdfs_args_t field iso_pgthresh exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +cdfs_args_t a; +char *cp = (char *) &(a.iso_pgthresh); + +; return 0; } +EOF +if { (eval echo configure:16296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if cdfs_args_t field iso_pgthresh exist""... $ac_c" 1>&6 +echo "configure:16308: checking if cdfs_args_t field iso_pgthresh exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:16329: checking if cdfs_args_t field norrip exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +cdfs_args_t a; +char *cp = (char *) &(a.norrip); + +; return 0; } +EOF +if { (eval echo configure:16543: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if cdfs_args_t field norrip exist""... $ac_c" 1>&6 +echo "configure:16555: checking if cdfs_args_t field norrip exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:16576: checking if cdfs_args_t field ssector exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +cdfs_args_t a; +char *cp = (char *) &(a.ssector); + +; return 0; } +EOF +if { (eval echo configure:16790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if cdfs_args_t field ssector exist""... $ac_c" 1>&6 +echo "configure:16802: checking if cdfs_args_t field ssector exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:16823: checking if pcfs_args_t field dsttime exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +pcfs_args_t a; +char *cp = (char *) &(a.dsttime); + +; return 0; } +EOF +if { (eval echo configure:17037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if pcfs_args_t field dsttime exist""... $ac_c" 1>&6 +echo "configure:17049: checking if pcfs_args_t field dsttime exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:17070: checking if pcfs_args_t field fspec exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +pcfs_args_t a; +char *cp = (char *) &(a.fspec); + +; return 0; } +EOF +if { (eval echo configure:17284: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if pcfs_args_t field fspec exist""... $ac_c" 1>&6 +echo "configure:17296: checking if pcfs_args_t field fspec exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:17317: checking if pcfs_args_t field gid exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +pcfs_args_t a; +char *cp = (char *) &(a.gid); + +; return 0; } +EOF +if { (eval echo configure:17531: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if pcfs_args_t field gid exist""... $ac_c" 1>&6 +echo "configure:17543: checking if pcfs_args_t field gid exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:17564: checking if pcfs_args_t field mask exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +pcfs_args_t a; +char *cp = (char *) &(a.mask); + +; return 0; } +EOF +if { (eval echo configure:17778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if pcfs_args_t field mask exist""... $ac_c" 1>&6 +echo "configure:17790: checking if pcfs_args_t field mask exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:17811: checking if pcfs_args_t field secondswest exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +pcfs_args_t a; +char *cp = (char *) &(a.secondswest); + +; return 0; } +EOF +if { (eval echo configure:18025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if pcfs_args_t field secondswest exist""... $ac_c" 1>&6 +echo "configure:18037: checking if pcfs_args_t field secondswest exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:18058: checking if pcfs_args_t field uid exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +pcfs_args_t a; +char *cp = (char *) &(a.uid); + +; return 0; } +EOF +if { (eval echo configure:18272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if pcfs_args_t field uid exist""... $ac_c" 1>&6 +echo "configure:18284: checking if pcfs_args_t field uid exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:18305: checking if ufs_args_t field flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +ufs_args_t a; +char *cp = (char *) &(a.flags); + +; return 0; } +EOF +if { (eval echo configure:18519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if ufs_args_t field flags exist""... $ac_c" 1>&6 +echo "configure:18531: checking if ufs_args_t field flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:18552: checking if ufs_args_t field fspec exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +ufs_args_t a; +char *cp = (char *) &(a.fspec); + +; return 0; } +EOF +if { (eval echo configure:18766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if ufs_args_t field fspec exist""... $ac_c" 1>&6 +echo "configure:18778: checking if ufs_args_t field fspec exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:18799: checking if ufs_args_t field ufs_flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +ufs_args_t a; +char *cp = (char *) &(a.ufs_flags); + +; return 0; } +EOF +if { (eval echo configure:19013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if ufs_args_t field ufs_flags exist""... $ac_c" 1>&6 +echo "configure:19025: checking if ufs_args_t field ufs_flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:19046: checking if ufs_args_t field ufs_pgthresh exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +ufs_args_t a; +char *cp = (char *) &(a.ufs_pgthresh); + +; return 0; } +EOF +if { (eval echo configure:19260: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if ufs_args_t field ufs_pgthresh exist""... $ac_c" 1>&6 +echo "configure:19272: checking if ufs_args_t field ufs_pgthresh exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:19293: checking if efs_args_t field flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +efs_args_t a; +char *cp = (char *) &(a.flags); + +; return 0; } +EOF +if { (eval echo configure:19507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if efs_args_t field flags exist""... $ac_c" 1>&6 +echo "configure:19519: checking if efs_args_t field flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:19540: checking if efs_args_t field fspec exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +efs_args_t a; +char *cp = (char *) &(a.fspec); + +; return 0; } +EOF +if { (eval echo configure:19754: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if efs_args_t field fspec exist""... $ac_c" 1>&6 +echo "configure:19766: checking if efs_args_t field fspec exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:19787: checking if xfs_args_t field flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +xfs_args_t a; +char *cp = (char *) &(a.flags); + +; return 0; } +EOF +if { (eval echo configure:20001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if xfs_args_t field flags exist""... $ac_c" 1>&6 +echo "configure:20013: checking if xfs_args_t field flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:20034: checking if xfs_args_t field fspec exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +xfs_args_t a; +char *cp = (char *) &(a.fspec); + +; return 0; } +EOF +if { (eval echo configure:20248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if xfs_args_t field fspec exist""... $ac_c" 1>&6 +echo "configure:20260: checking if xfs_args_t field fspec exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:20281: checking if struct fhstatus field fhs_fh exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +struct fhstatus a; +char *cp = (char *) &(a.fhs_fh); + +; return 0; } +EOF +if { (eval echo configure:20495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if struct fhstatus field fhs_fh exist""... $ac_c" 1>&6 +echo "configure:20507: checking if struct fhstatus field fhs_fh exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:20528: checking if struct statfs field f_fstypename exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +struct statfs a; +char *cp = (char *) &(a.f_fstypename); + +; return 0; } +EOF +if { (eval echo configure:20742: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if struct statfs field f_fstypename exist""... $ac_c" 1>&6 +echo "configure:20754: checking if struct statfs field f_fstypename exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:20775: checking if nfs_args_t field acdirmin exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.acdirmin); + +; return 0; } +EOF +if { (eval echo configure:20989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field acdirmin exist""... $ac_c" 1>&6 +echo "configure:21001: checking if nfs_args_t field acdirmin exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:21022: checking if nfs_args_t field acregmin exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.acregmin); + +; return 0; } +EOF +if { (eval echo configure:21236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field acregmin exist""... $ac_c" 1>&6 +echo "configure:21248: checking if nfs_args_t field acregmin exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:21269: checking if nfs_args_t field fh_len exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.fh_len); + +; return 0; } +EOF +if { (eval echo configure:21483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field fh_len exist""... $ac_c" 1>&6 +echo "configure:21495: checking if nfs_args_t field fh_len exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:21516: checking if nfs_args_t field fhsize exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.fhsize); + +; return 0; } +EOF +if { (eval echo configure:21730: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field fhsize exist""... $ac_c" 1>&6 +echo "configure:21742: checking if nfs_args_t field fhsize exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:21763: checking if nfs_args_t field gfs_flags exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.gfs_flags); + +; return 0; } +EOF +if { (eval echo configure:21977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field gfs_flags exist""... $ac_c" 1>&6 +echo "configure:21989: checking if nfs_args_t field gfs_flags exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:22010: checking if nfs_args_t field optstr exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.optstr); + +; return 0; } +EOF +if { (eval echo configure:22224: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field optstr exist""... $ac_c" 1>&6 +echo "configure:22236: checking if nfs_args_t field optstr exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:22257: checking if nfs_args_t field proto exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.proto); + +; return 0; } +EOF +if { (eval echo configure:22471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field proto exist""... $ac_c" 1>&6 +echo "configure:22483: checking if nfs_args_t field proto exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:22504: checking if nfs_args_t field sotype exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.sotype); + +; return 0; } +EOF +if { (eval echo configure:22718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field sotype exist""... $ac_c" 1>&6 +echo "configure:22730: checking if nfs_args_t field sotype exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:22751: checking if nfs_args_t field version exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +nfs_args_t a; +char *cp = (char *) &(a.version); + +; return 0; } +EOF +if { (eval echo configure:22965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if nfs_args_t field version exist""... $ac_c" 1>&6 +echo "configure:22977: checking if nfs_args_t field version exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:22998: checking if struct ifreq field ifr_addr exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +struct ifreq a; +char *cp = (char *) &(a.ifr_addr); + +; return 0; } +EOF +if { (eval echo configure:23212: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if struct ifreq field ifr_addr exist""... $ac_c" 1>&6 +echo "configure:23224: checking if struct ifreq field ifr_addr exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:23245: checking if struct sockaddr field sa_len exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +struct sockaddr a; +char *cp = (char *) &(a.sa_len); + +; return 0; } +EOF +if { (eval echo configure:23459: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if struct sockaddr field sa_len exist""... $ac_c" 1>&6 +echo "configure:23471: checking if struct sockaddr field sa_len exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:23492: checking if autofs_args_t field addr exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +autofs_args_t a; +char *cp = (char *) &(a.addr); + +; return 0; } +EOF +if { (eval echo configure:23706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if autofs_args_t field addr exist""... $ac_c" 1>&6 +echo "configure:23718: checking if autofs_args_t field addr exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:23739: checking if umntrequest field rdevid exist" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# try to compile a program +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + + + + +int main() { + +umntrequest a; +char *cp = (char *) &(a.rdevid); + +; return 0; } +EOF +if { (eval echo configure:23953: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "$ac_safe=no" +fi +rm -f conftest* + + echo $ac_n "checking if umntrequest field rdevid exist""... $ac_c" 1>&6 +echo "configure:23965: checking if umntrequest field rdevid exist" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + cat >> confdefs.h <&6 + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=file +fi +# store variable name of map +ac_upcase_map_name=`echo file | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:23996: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in fgets +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24006: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24062: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=hesiod +fi +# store variable name of map +ac_upcase_map_name=`echo hesiod | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24102: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in hes_init hesiod_init +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24112: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24168: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=ldap +fi +# store variable name of map +ac_upcase_map_name=`echo ldap | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24208: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in ldap_open +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24218: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24274: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=ndbm +fi +# store variable name of map +ac_upcase_map_name=`echo ndbm | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24314: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in dbm_open +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24324: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24380: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=nis +fi +# store variable name of map +ac_upcase_map_name=`echo nis | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24420: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in yp_get_default_domain yp_all +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24430: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24486: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "nisplus" +then + ac_map_name=nisplus +else + ac_map_name=nisplus +fi +# store variable name of map +ac_upcase_map_name=`echo nisplus | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24526: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in nis_domain_of +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24536: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24592: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=passwd +fi +# store variable name of map +ac_upcase_map_name=`echo passwd | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24632: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in getpwnam +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24642: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24698: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +# find what name to give to the map +if test -n "" +then + ac_map_name= +else + ac_map_name=union +fi +# store variable name of map +ac_upcase_map_name=`echo union | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_map_$ac_map_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24738: checking for $ac_map_name maps" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +for ac_func in opendir +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:24748: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:24776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_map_name maps""... $ac_c" 1>&6 +echo "configure:24804: checking for $ac_map_name maps" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi + + +echo "*** FILESYSTEM TYPES:" 1>&6 + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: autofs)" +else + ac_fs_name=autofs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:24848: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in autofs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:25621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:25638: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "cdfs" +then + ac_fs_name=cdfs + ac_fs_as_name=" (from: cdfs hsfs cd9660 iso9660 isofs cdrom)" +else + ac_fs_name=cdfs hsfs cd9660 iso9660 isofs cdrom + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:25680: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in cdfs hsfs cd9660 iso9660 isofs cdrom +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:26453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:26470: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: cache)" +else + ac_fs_name=cache + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:26512: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in cache +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:27285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:27302: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "lofs" +then + ac_fs_name=lofs + ac_fs_as_name=" (from: lofs lo)" +else + ac_fs_name=lofs lo + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:27344: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in lofs lo +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:28117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:28134: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: mfs)" +else + ac_fs_name=mfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:28176: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in mfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:28949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:28966: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: nfs)" +else + ac_fs_name=nfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:29008: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in nfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:29781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:29798: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: nfs3)" +else + ac_fs_name=nfs3 + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:29840: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in nfs3 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:30613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:30630: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "pcfs" +then + ac_fs_name=pcfs + ac_fs_as_name=" (from: vfat pcfs pc msdos msdosfs fat)" +else + ac_fs_name=vfat pcfs pc msdos msdosfs fat + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:30672: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in vfat pcfs pc msdos msdosfs fat +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:31445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:31462: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: tfs)" +else + ac_fs_name=tfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:31504: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in tfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:32277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:32294: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: tmpfs)" +else + ac_fs_name=tmpfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:32336: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in tmpfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:33109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:33126: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "ufs" +then + ac_fs_name=ufs + ac_fs_as_name=" (from: ext2 ufs 42 efs xfs jfs ultrix)" +else + ac_fs_name=ext2 ufs 42 efs xfs jfs ultrix + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:33168: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in ext2 ufs 42 efs xfs jfs ultrix +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:33941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:33958: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: xfs)" +else + ac_fs_name=xfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:34000: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in xfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:34773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:34790: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= + ac_fs_as_name=" (from: efs)" +else + ac_fs_name=efs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:34832: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in efs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:35605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:35622: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "nullfs" +then + ac_fs_name=nullfs + ac_fs_as_name=" (from: null nullfs)" +else + ac_fs_name=null nullfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:35664: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in null nullfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:36437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:36454: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "unionfs" +then + ac_fs_name=unionfs + ac_fs_as_name=" (from: union unionfs)" +else + ac_fs_name=union unionfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:36496: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in union unionfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:37269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:37286: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + +# find what name to give to the fs +if test -n "umapfs" +then + ac_fs_name=umapfs + ac_fs_as_name=" (from: umap umapfs)" +else + ac_fs_name=umap umapfs + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:37328: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in umap umapfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=yes" +else + rm -rf conftest* + eval "ac_cv_fs_$ac_fs_name=no" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:38101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_fs_$ac_fs_name=yes" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + + echo $ac_n "checking for $ac_fs_name$ac_fs_as_name mntent definition""... $ac_c" 1>&6 +echo "configure:38118: checking for $ac_fs_name$ac_fs_as_name mntent definition" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi + + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= +else + ac_fs_name=cdfs +fi +# store variable name of fs +ac_upcase_fs_name=`echo cdfs | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_header_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38159: checking for $ac_fs_name filesystem in " >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +for ac_hdr in hsfs/hsfs.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:38170: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:38180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38209: checking for $ac_fs_name filesystem in " >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= +else + ac_fs_name=tmpfs +fi +# store variable name of fs +ac_upcase_fs_name=`echo tmpfs | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_header_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38256: checking for $ac_fs_name filesystem in " >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +for ac_hdr in tmpfs/tmp.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:38267: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:38277: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38306: checking for $ac_fs_name filesystem in " >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= +else + ac_fs_name=autofs +fi +# store variable name of fs +ac_upcase_fs_name=`echo autofs | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_header_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38353: checking for $ac_fs_name filesystem in " >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +for ac_hdr in sys/fs/autofs.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:38364: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:38374: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38403: checking for $ac_fs_name filesystem in " >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi + + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= +else + ac_fs_name=cachefs +fi +# store variable name of fs +ac_upcase_fs_name=`echo cachefs | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_fs_header_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38450: checking for $ac_fs_name filesystem in " >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +for ac_hdr in sys/fs/cachefs_fs.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:38461: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:38471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for $ac_fs_name filesystem in ""... $ac_c" 1>&6 +echo "configure:38500: checking for $ac_fs_name filesystem in " >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + cat >> confdefs.h <.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi + +echo "*** AUTOMOUNTER FILESYSTEM TYPES:" 1>&6 + +# store variable name of fs +ac_upcase_am_fs_name=`echo auto | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_AM_FS_$ac_upcase_am_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_am_fs_auto` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for automounter filesystem (auto)""... $ac_c" 1>&6 +echo "configure:38541: checking for automounter filesystem (auto)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_auto=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_auto=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_auto=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_auto=yes" + fi +fi + + echo $ac_n "checking for automounter filesystem (auto)""... $ac_c" 1>&6 +echo "configure:38564: checking for automounter filesystem (auto)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'auto'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38587: checking for direct automount filesystem (direct)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_direct=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_direct=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_direct=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_direct=yes" + fi +fi + + echo $ac_n "checking for direct automount filesystem (direct)""... $ac_c" 1>&6 +echo "configure:38610: checking for direct automount filesystem (direct)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'direct'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38633: checking for top-level filesystem (toplvl)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_toplvl=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_toplvl=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_toplvl=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_toplvl=yes" + fi +fi + + echo $ac_n "checking for top-level filesystem (toplvl)""... $ac_c" 1>&6 +echo "configure:38656: checking for top-level filesystem (toplvl)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'toplvl'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38679: checking for error filesystem (error)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_error=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_error=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_error=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_error=yes" + fi +fi + + echo $ac_n "checking for error filesystem (error)""... $ac_c" 1>&6 +echo "configure:38702: checking for error filesystem (error)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'error'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38725: checking for inheritance filesystem (inherit)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_inherit=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_inherit=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_inherit=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_inherit=yes" + fi +fi + + echo $ac_n "checking for inheritance filesystem (inherit)""... $ac_c" 1>&6 +echo "configure:38748: checking for inheritance filesystem (inherit)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'inherit'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38771: checking for program filesystem (program)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_program=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_program=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_program=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_program=yes" + fi +fi + + echo $ac_n "checking for program filesystem (program)""... $ac_c" 1>&6 +echo "configure:38794: checking for program filesystem (program)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'program'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38817: checking for symlink filesystem (link)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_link=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_link=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_link=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_link=yes" + fi +fi + + echo $ac_n "checking for symlink filesystem (link)""... $ac_c" 1>&6 +echo "configure:38840: checking for symlink filesystem (link)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'link'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38863: checking for symlink with existence check filesystem (linkx)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_linkx=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_linkx=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_linkx=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_linkx=yes" + fi +fi + + echo $ac_n "checking for symlink with existence check filesystem (linkx)""... $ac_c" 1>&6 +echo "configure:38886: checking for symlink with existence check filesystem (linkx)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'linkx'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38909: checking for host (nfs) filesystem (host)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_host=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "nfs" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_host=no" + if test "`eval echo '$''{ac_cv_fs_'nfs'}'`" = yes + then + eval "ac_cv_am_fs_host=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_'nfs'}'`" = yes + then + eval "ac_cv_am_fs_host=yes" + fi +fi + + echo $ac_n "checking for host (nfs) filesystem (host)""... $ac_c" 1>&6 +echo "configure:38932: checking for host (nfs) filesystem (host)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'host'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:38955: checking for multi-nfs mount filesystem (nfsx)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_nfsx=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "nfs" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_nfsx=no" + if test "`eval echo '$''{ac_cv_fs_'nfs'}'`" = yes + then + eval "ac_cv_am_fs_nfsx=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_'nfs'}'`" = yes + then + eval "ac_cv_am_fs_nfsx=yes" + fi +fi + + echo $ac_n "checking for multi-nfs mount filesystem (nfsx)""... $ac_c" 1>&6 +echo "configure:38978: checking for multi-nfs mount filesystem (nfsx)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'nfsx'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:39001: checking for NFS with local existence check filesystem (nfsl)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_nfsl=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_nfsl=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_nfsl=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_nfsl=yes" + fi +fi + + echo $ac_n "checking for NFS with local existence check filesystem (nfsl)""... $ac_c" 1>&6 +echo "configure:39024: checking for NFS with local existence check filesystem (nfsl)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'nfsl'}'`" = yes +then + cat >> confdefs.h <&6 +echo "configure:39047: checking for union filesystem (union)" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# true by default +eval "ac_cv_am_fs_union=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_union=no" + if test "`eval echo '$''{ac_cv_fs_''}'`" = yes + then + eval "ac_cv_am_fs_union=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_''}'`" = yes + then + eval "ac_cv_am_fs_union=yes" + fi +fi + + echo $ac_n "checking for union filesystem (union)""... $ac_c" 1>&6 +echo "configure:39070: checking for union filesystem (union)" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'union'}'`" = yes +then + cat >> confdefs.h <&6 + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= +else + ac_fs_name=nfs +fi +# prepare upper-case name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_mount_type_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:39101: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in nfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:39876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:39903: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:39935: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in nfs3 +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:40710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:40737: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:40769: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in 4.2 4.3 4.4 ext2 ufs efs xfs ffs jfs ultrix +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:41544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:41571: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:41603: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in xfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:42378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:42405: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:42437: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in efs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:43212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:43239: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:43271: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in cdfs hsfs cd9660 iso9660 isofs cdrom +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:44046: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:44073: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:44105: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in vfat pcfs pc msdos msdosfs fat +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:44880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:44907: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:44939: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in mfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:45714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:45741: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:45773: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in tmpfs tmp +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:46548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:46575: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:46607: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in lofs lo +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:47382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:47409: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:47441: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in lfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:48216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:48243: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:48275: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in afs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:49050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:49077: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:49109: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in autofs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:49884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:49911: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:49943: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in tfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:50718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:50745: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:50777: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in cachefs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:51552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:51579: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:51611: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in ignore +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:52386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:52413: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:52445: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in null nullfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:53220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:53247: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:53279: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in union unionfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:54054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:54081: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 +echo "configure:54113: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in umap umapfs +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol" +else + rm -rf conftest* + eval "ac_cv_mount_type_$ac_fs_name=notfound" +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:54888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi + + echo $ac_n "checking for mount(2) type/name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:54915: checking for mount(2) type/name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + cat >> confdefs.h <&6 + +# find what name to give to the fs +if test -n "" +then + ac_fs_name= +else + ac_fs_name=nfs +fi +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_TYPE_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_mnttab_type_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:54949: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in nfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:55339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:55389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:55417: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:55448: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in nfs3 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:55838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:55888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:55916: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:55947: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in ext2 ufs jfs 4.2 4.3 4.4 efs xfs ffs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:56337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:56387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:56415: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:56446: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in xfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:56836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:56886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:56914: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:56945: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in efs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:57335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:57385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:57413: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:57444: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in cdfs hsfs cd9660 iso9660 isofs cdrom +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:57834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:57884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:57912: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:57943: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in vfat pcfs pc msdos msdosfs fat +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:58333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:58383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:58411: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:58442: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in mfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:58832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:58882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:58910: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:58941: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in tmpfs tmp +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:59331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:59381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:59409: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:59440: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in lofs lo +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:59830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:59880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:59908: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:59939: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in lfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:60329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:60379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:60407: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:60438: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in afs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:60828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:60878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:60906: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:60937: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in autofs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:61327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:61377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:61405: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:61436: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in tfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:61826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:61876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:61904: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:61935: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in cachefs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:62325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:62375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:62403: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:62434: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in null nullfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:62824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:62874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:62902: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:62933: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in union unionfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:63323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:63373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:63401: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +echo "configure:63432: checking for mnttab name for $ac_fs_name filesystem" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in umap umapfs +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + + + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + +fi +rm -f conftest* + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + +value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + + + +main(argc) +int argc; +{ + + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + +exit(0); +} +EOF +if { (eval echo configure:63822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + +if test "$value" = notfound +then + : + +else + : + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + +fi + + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + +EOF +if { (eval echo configure:63872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -fr conftest* +fi + + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi + + echo $ac_n "checking for mnttab name for $ac_fs_name filesystem""... $ac_c" 1>&6 +echo "configure:63900: checking for mnttab name for $ac_fs_name filesystem" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + cat >> confdefs.h <&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** MOUNT TABLE OPTION NAME STRINGS:" 1>&6 + +# what name to give to the fs +ac_fs_name=acdirmax +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_OPT_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_mnttab_opt_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:63982: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:64332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:64370: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:64396: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:64746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:64784: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:64810: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:65160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:65198: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:65224: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:65574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:65612: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:65638: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:65988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:66026: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:66052: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:66402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:66440: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:66466: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:66816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:66854: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:66880: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:67230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:67268: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:67294: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:67644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:67682: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:67708: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:68058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:68096: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:68122: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:68472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:68510: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:68536: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:68886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:68924: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:68950: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:69300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:69338: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:69364: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:69714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:69752: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:69778: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:70128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:70166: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:70192: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:70542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:70580: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:70606: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:70956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:70994: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:71020: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:71370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:71408: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:71434: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:71784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:71822: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:71848: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:72198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:72236: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:72262: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:72612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:72650: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:72676: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:73026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:73064: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:73090: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:73440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:73478: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:73504: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:73854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:73892: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:73918: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:74268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:74306: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:74332: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:74682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:74720: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:74746: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:75096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:75134: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:75160: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:75510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:75548: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:75574: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:75924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:75962: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:75988: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:76338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:76376: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:76402: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:76752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:76790: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:76816: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:77166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:77204: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:77230: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:77580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:77618: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:77644: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:77994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:78032: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:78058: checking for mount table option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNTOPT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNTOPT_$ac_upcase_fs_name +if (argc > 1) + printf("%s", MNTOPT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNTOPT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:78408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi + + echo $ac_n "checking for mount table option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:78446: checking for mount table option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** GENERIC MOUNT(2) OPTIONS:" 1>&6 + +# what name to give to the fs +ac_fs_name=async +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_GEN_OPT_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_mnt2_gen_opt_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:78528: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:78882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:79259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:79637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:80029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:80064: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:80090: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:80444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:80821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:81199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:81591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:81626: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:81652: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:82006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:82383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:82761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:83153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:83188: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:83214: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:83568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:83945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:84323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:84715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:84750: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:84776: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:85130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:85507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:85885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:86277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:86312: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:86338: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:86692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:87069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:87447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:87839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:87874: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:87900: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:88254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:88631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:89009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:89401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:89436: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:89462: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:89816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:90193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:90571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:90963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:90998: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:91024: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:91378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:91755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:92133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:92525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:92560: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:92586: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:92940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:93317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:93695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:94087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:94122: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:94148: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:94502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:94879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:95257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:95649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:95684: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:95710: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:96064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:96441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:96819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:97211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:97246: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:97272: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:97626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:98003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:98381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:98773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:98808: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:98834: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:99188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:99565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:99943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:100335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:100370: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:100396: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:100750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:101127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:101505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:101897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:101932: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:101958: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:102312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:102689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:103067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:103459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:103494: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:103520: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:103874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:104251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:104629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:105021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:105056: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:105082: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:105436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:105813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:106191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:106583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:106618: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:106644: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:106998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:107375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:107753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:108145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:108180: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:108206: checking for generic mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:108560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:108937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:109315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:109707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" + + echo $ac_n "checking for generic mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:109742: checking for generic mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** NFS-SPECIFIC MOUNT(2) OPTIONS:" 1>&6 + +# what name to give to the fs +ac_fs_name=acdirmax +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_NFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_mnt2_nfs_opt_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:109824: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:110178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:110555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:110590: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:110616: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:110970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:111347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:111382: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:111408: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:111762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:112139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:112174: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:112200: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:112554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:112931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:112966: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:112992: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:113346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:113723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:113758: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:113784: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:114138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:114515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:114550: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:114576: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:114930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:115307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:115342: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:115368: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:115722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:116099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:116134: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:116160: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:116514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:116891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:116926: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:116952: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:117306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:117683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:117718: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:117744: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:118098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:118475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:118510: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:118536: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:118890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:119267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:119302: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:119328: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:119682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:120059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:120094: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:120120: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:120474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:120851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:120886: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:120912: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:121266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:121643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:121678: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:121704: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:122058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:122435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:122470: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:122496: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:122850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:123227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:123262: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:123288: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:123642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:124019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:124054: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:124080: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:124434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:124811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:124846: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:124872: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:125226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:125603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:125638: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:125664: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:126018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:126395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:126430: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:126456: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:126810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:127187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:127222: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:127248: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:127602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:127979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:128014: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:128040: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:128394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:128771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:128806: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:128832: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:129186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:129563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:129598: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:129624: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:129978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:130355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:130390: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:130416: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:130770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:131147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:131182: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:131208: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:131562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:131939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:131974: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:132000: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:132354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:132731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:132766: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:132792: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:133146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:133523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:133558: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:133584: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:133938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:134315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:134350: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:134376: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:134730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:135107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:135142: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:135168: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:135522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:135899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:135934: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:135960: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:136314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:136691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:136726: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:136752: checking for NFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFSMNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFSMNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFSMNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFSMNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:137106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +NFS_MOUNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef NFS_MOUNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", NFS_MOUNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option NFS_MOUNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:137483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for NFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:137518: checking for NFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 + +# what name to give to the fs +ac_fs_name=defperm +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_CDFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed + +ac_tmp=`echo ac_cv_mnt2_cdfs_opt_$ac_fs_name` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + echo $ac_n "checking for CDFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:137546: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:137900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:138277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:138655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:139047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for CDFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:139082: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:139108: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:139462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:139839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:140217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:140609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for CDFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:140644: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:140670: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:141024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:141401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:141779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:142171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for CDFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:142206: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 +echo "configure:142232: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:142586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MNT_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MNT_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", MNT_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MNT_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:142963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then + +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +MS_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "[1-9][0-9]*" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef MS_$ac_upcase_fs_name +if (argc > 1) + printf("%d", MS_$ac_upcase_fs_name); +exit(0); +#else +# error no such option MS_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:143341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +M_$ac_upcase_fs_name +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "0x" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + + + + +main(argc) +int argc; +{ +#ifdef M_$ac_upcase_fs_name +if (argc > 1) + printf("0x%x", M_$ac_upcase_fs_name); +exit(0); +#else +# error no such option M_$ac_upcase_fs_name +#endif +exit(1); +} +EOF +if { (eval echo configure:143733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +else + : + +fi + +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" + + echo $ac_n "checking for CDFS-specific mount(2) option $ac_fs_name""... $ac_c" 1>&6 +echo "configure:143768: checking for CDFS-specific mount(2) option $ac_fs_name" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + cat >> confdefs.h <&6 + +echo $ac_n "checking mount table style""... $ac_c" 1>&6 +echo "configure:143787: checking mount table style" >&5 +if eval "test \"`echo '$''{'ac_cv_style_mnttab'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style for mount table manipulation functions +case "${host_os_name}" in + aix* ) + ac_cv_style_mnttab=aix ;; + bsd* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_mnttab=bsd ;; + isc3* ) + ac_cv_style_mnttab=isc3 ;; + mach3* ) + ac_cv_style_mnttab=mach3 ;; + osf* ) + ac_cv_style_mnttab=osf ;; + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_style_mnttab=svr4 ;; + ultrix* ) + ac_cv_style_mnttab=ultrix ;; + * ) + ac_cv_style_mnttab=file ;; +esac + +fi + +echo "$ac_t""$ac_cv_style_mnttab" 1>&6 +am_utils_link_files_src=${am_utils_link_files_src}conf/mtab/mtab_${ac_cv_style_mnttab}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/mtabutil.c" " +# append mtab utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS mtabutil.o" + + +echo $ac_n "checking for mount type to hide from df""... $ac_c" 1>&6 +echo "configure:143822: checking for mount type to hide from df" >&5 +if eval "test \"`echo '$''{'ac_cv_hide_mount_type'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +case "${host_os}" in + irix* | hpux* ) + ac_cv_hide_mount_type="ignore" + ;; + sunos4* ) + ac_cv_hide_mount_type="auto" + ;; + * ) + ac_cv_hide_mount_type="nfs" + ;; +esac + +fi + +echo "$ac_t""$ac_cv_hide_mount_type" 1>&6 +cat >> confdefs.h <&6 +echo "configure:143852: checking where mount table is kept" >&5 + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# assume location is on file +ac_cv_mnttab_location=file +for ac_func in mntctl getmntinfo getmountent +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:143861: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:143889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + echo $ac_n "checking where mount table is kept""... $ac_c" 1>&6 +echo "configure:143915: checking where mount table is kept" >&5 +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +echo "$ac_t""$ac_tmp_val" 1>&6 + +if test "$ac_cv_mnttab_location" = file +then + cat >> confdefs.h <<\EOF +#define MOUNT_TABLE_ON_FILE 1 +EOF + +fi + + +echo $ac_n "checking for name of mount table file name""... $ac_c" 1>&6 +echo "configure:143930: checking for name of mount table file name" >&5 +if eval "test \"`echo '$''{'ac_cv_mnttab_file_name'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# expand cpp value for MNTTAB + +# we are looking for a regexp of a string +cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* see M4 comment at the top of the definition of this macro */ +#ifdef MOUNTED +# define _MNTTAB_FILE_NAME MOUNTED +# else /* not MOUNTED */ +# ifdef MNTTAB +# define _MNTTAB_FILE_NAME MNTTAB +# endif /* MNTTAB */ +#endif /* not MOUNTED */ + + + +_MNTTAB_FILE_NAME +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "\".*\"" >/dev/null 2>&1; then + rm -rf conftest* + value="notfound" +if test "$cross_compiling" = yes; then + value="notfound" +else + cat > conftest.$ac_ext < +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + + +/* see M4 comment at the top of the definition of this macro */ +#ifdef MOUNTED +# define _MNTTAB_FILE_NAME MOUNTED +# else /* not MOUNTED */ +# ifdef MNTTAB +# define _MNTTAB_FILE_NAME MNTTAB +# endif /* MNTTAB */ +#endif /* not MOUNTED */ + + + +main(argc) +int argc; +{ +#ifdef _MNTTAB_FILE_NAME +if (argc > 1) + printf("%s", _MNTTAB_FILE_NAME); +exit(0); +#else +# error no such option _MNTTAB_FILE_NAME +#endif +exit(1); +} +EOF +if { (eval echo configure:144295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + value=`./conftest dummy 2>>config.log` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + value="notfound" +fi +rm -fr conftest* +fi + + +else + rm -rf conftest* + value="notfound" + +fi +rm -f conftest* + +if test "$value" = notfound +then + : + +ac_cv_mnttab_file_name=notfound +# check explicitly for /etc/mnttab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mnttab + then + ac_cv_mnttab_file_name="/etc/mnttab" + fi +fi +# check explicitly for /etc/mtab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mtab + then + ac_cv_mnttab_file_name="/etc/mtab" + fi +fi + +else + : + ac_cv_mnttab_file_name=$value + +fi + + +fi + +echo "$ac_t""$ac_cv_mnttab_file_name" 1>&6 +# test value and create macro as needed +if test "$ac_cv_mnttab_file_name" != notfound +then + cat >> confdefs.h <&6 +echo "configure:144358: checking mount trap system-call style" >&5 +if eval "test \"`echo '$''{'ac_cv_mount_trap'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_mount_trap=svr4 ;; + news4* | riscix* ) + ac_cv_mount_trap=news4 ;; + freebsd3* ) + ac_cv_mount_trap=freebsd3 ;; + linux* ) + ac_cv_mount_trap=linux ;; + irix* ) + ac_cv_mount_trap=irix ;; + aux* ) + ac_cv_mount_trap=aux ;; + hcx* ) + ac_cv_mount_trap=hcx ;; + hpux11* ) + ac_cv_mount_trap=hpux11 ;; + hpux* ) + ac_cv_mount_trap=hpux ;; + rtu6* ) + ac_cv_mount_trap=rtu6 ;; + dgux* ) + ac_cv_mount_trap=dgux ;; + aix* ) + ac_cv_mount_trap=aix3 ;; + mach2* | mach3* ) + ac_cv_mount_trap=mach3 ;; + ultrix* ) + ac_cv_mount_trap=ultrix ;; + isc3* ) + ac_cv_mount_trap=isc3 ;; + stellix* ) + ac_cv_mount_trap=stellix ;; + * ) + ac_cv_mount_trap=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_mount_trap" 1>&6 +am_utils_mount_trap=$srcdir"/conf/trap/trap_"$ac_cv_mount_trap".h" + + + +echo $ac_n "checking style of mounting filesystems""... $ac_c" 1>&6 +echo "configure:144409: checking style of mounting filesystems" >&5 +if eval "test \"`echo '$''{'ac_cv_style_mount'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style for mounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_style_mount=svr4 ;; + bsdi3* | bsdi4* ) + ac_cv_style_mount=bsdi3 ;; + freebsd3* ) + ac_cv_style_mount=freebsd3 ;; + aix* ) + ac_cv_style_mount=aix ;; + hpux* ) + ac_cv_style_mount=hpux ;; + irix6* ) + ac_cv_style_mount=irix6 ;; + irix5* ) + ac_cv_style_mount=irix5 ;; + isc3* ) + ac_cv_style_mount=isc3 ;; + linux* ) + ac_cv_style_mount=linux ;; + mach3* ) + ac_cv_style_mount=mach3 ;; + stellix* ) + ac_cv_style_mount=stellix ;; + * ) # no style needed. Use default filesystem calls ala BSD + ac_cv_style_mount=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_style_mount" 1>&6 +# only make a link and include the file name if needed. +if test "$ac_cv_style_mount" = default +then + am_utils_mount_style_file="" +else + am_utils_mount_style_file="mountutil.c" + am_utils_link_files_src=${am_utils_link_files_src}conf/mount/mount_${ac_cv_style_mount}.c" " + am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_mount_style_file}" " +# append mount utilities object to LIBOBJS for automatic compilation + LIBOBJS="$LIBOBJS mountutil.o" +fi + + +echo $ac_n "checking style of unmounting filesystems""... $ac_c" 1>&6 +echo "configure:144459: checking style of unmounting filesystems" >&5 +if eval "test \"`echo '$''{'ac_cv_style_umount'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style for unmounting filesystems +case "${host_os_name}" in + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_umount=bsd44 ;; + osf* ) + ac_cv_style_umount=osf ;; + * ) + ac_cv_style_umount=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_style_umount" 1>&6 +am_utils_umount_style_file="umount_fs.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/umount/umount_${ac_cv_style_umount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_umount_style_file}" " +# append un-mount utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS umount_fs.o" + + + +echo $ac_n "checking the system call to unmount a filesystem""... $ac_c" 1>&6 +echo "configure:144486: checking the system call to unmount a filesystem" >&5 +if eval "test \"`echo '$''{'ac_cv_unmount_call'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# check for various unmount a filesystem calls +if test "$ac_cv_func_uvmount" = yes ; then + ac_cv_unmount_call=uvmount +elif test "$ac_cv_func_unmount" = yes ; then + ac_cv_unmount_call=unmount +elif test "$ac_cv_func_umount" = yes ; then + ac_cv_unmount_call=umount +else + ac_cv_unmount_call=no +fi + +fi + +echo "$ac_t""$ac_cv_unmount_call" 1>&6 +if test "$ac_cv_unmount_call" != no +then + am_utils_unmount_call=$ac_cv_unmount_call + +fi + + +echo $ac_n "checking unmount system-call arguments""... $ac_c" 1>&6 +echo "configure:144513: checking unmount system-call arguments" >&5 +if eval "test \"`echo '$''{'ac_cv_unmount_args'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + aix* ) + ac_cv_unmount_args="mnt->mnt_passno, 0" ;; + ultrix* ) + ac_cv_unmount_args="mnt->mnt_passno" ;; + * ) + ac_cv_unmount_args="mnt->mnt_dir" ;; +esac + +fi + +echo "$ac_t""$ac_cv_unmount_args" 1>&6 +am_utils_unmount_args=$ac_cv_unmount_args + + + +echo $ac_n "checking nfs address dereferencing style""... $ac_c" 1>&6 +echo "configure:144536: checking nfs address dereferencing style" >&5 +if eval "test \"`echo '$''{'ac_cv_nfs_sa_dref_style'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* | solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_sa_dref_style=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_nfs_sa_dref_style=bsd44 ;; + 386bsd* | bsdi1* ) + ac_cv_nfs_sa_dref_style=386bsd ;; + linux* ) + ac_cv_nfs_sa_dref_style=linux ;; + aix* ) + ac_cv_nfs_sa_dref_style=aix3 ;; + aoi* ) + ac_cv_nfs_sa_dref_style=aoi ;; + isc3 ) + ac_cv_nfs_sa_dref_style=isc3 ;; + * ) + ac_cv_nfs_sa_dref_style=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_nfs_sa_dref_style" 1>&6 +am_utils_nfs_sa_dref=$srcdir"/conf/sa_dref/sa_dref_"$ac_cv_nfs_sa_dref_style".h" + + + +echo $ac_n "checking nfs hostname dereferencing style""... $ac_c" 1>&6 +echo "configure:144569: checking nfs hostname dereferencing style" >&5 +if eval "test \"`echo '$''{'ac_cv_nfs_hn_dref_style'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct nfs address dereferencing style +case "${host_os_name}" in + linux* ) + ac_cv_nfs_hn_dref_style=linux ;; + isc3 ) + ac_cv_nfs_hn_dref_style=isc3 ;; + * ) + ac_cv_nfs_hn_dref_style=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_nfs_hn_dref_style" 1>&6 +am_utils_nfs_hn_dref=$srcdir"/conf/hn_dref/hn_dref_"$ac_cv_nfs_hn_dref_style".h" + + + +echo $ac_n "checking nfs file-handle address dereferencing style""... $ac_c" 1>&6 +echo "configure:144592: checking nfs file-handle address dereferencing style" >&5 +if eval "test \"`echo '$''{'ac_cv_nfs_fh_dref_style'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* |solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_fh_dref_style=svr4 ;; + sunos4* ) + ac_cv_nfs_fh_dref_style=sunos4 ;; + sunos3* ) + ac_cv_nfs_fh_dref_style=sunos3 ;; + freebsd2.[2-9]* | freebsd3* | bsdi[3-4]* | netbsd* | openbsd* ) + # bsdi3, freebsd-2.2, netbsd, etc. + # changed the type of the + # filehandle in nfs_args from nfsv2fh_t to u_char. + ac_cv_nfs_fh_dref_style=freebsd22 ;; + bsd44* | bsdi2* | freebsd* ) + ac_cv_nfs_fh_dref_style=bsd44 ;; + hpux* ) + ac_cv_nfs_fh_dref_style=hpux ;; + irix* ) + ac_cv_nfs_fh_dref_style=irix ;; + linux* ) + ac_cv_nfs_fh_dref_style=linux ;; + aix4.2* ) + ac_cv_nfs_fh_dref_style=aix42 ;; + aix* ) + ac_cv_nfs_fh_dref_style=aix3 ;; + isc3 ) + ac_cv_nfs_fh_dref_style=isc3 ;; + osf4* ) + ac_cv_nfs_fh_dref_style=osf4 ;; + osf* ) + ac_cv_nfs_fh_dref_style=osf2 ;; + nextstep* ) + ac_cv_nfs_fh_dref_style=nextstep ;; + * ) + ac_cv_nfs_fh_dref_style=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_nfs_fh_dref_style" 1>&6 +am_utils_nfs_fh_dref=$srcdir"/conf/fh_dref/fh_dref_"$ac_cv_nfs_fh_dref_style".h" + + + +echo $ac_n "checking if to turn on/off noconn option""... $ac_c" 1>&6 +echo "configure:144642: checking if to turn on/off noconn option" >&5 +if eval "test \"`echo '$''{'ac_cv_nfs_socket_connection'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# set default to no-change +ac_cv_nfs_socket_connection=none +# select the correct style +case "${host_os}" in + openbsd2.[2-9]* ) + ac_cv_nfs_socket_connection=conn ;; + openbsd* ) + ac_cv_nfs_socket_connection=noconn ;; + freebsd3* ) + ac_cv_nfs_socket_connection=conn ;; +esac + +fi + +echo "$ac_t""$ac_cv_nfs_socket_connection" 1>&6 +# set correct value +case "$ac_cv_nfs_socket_connection" in + noconn ) cat >> confdefs.h <<\EOF +#define USE_UNCONNECTED_NFS_SOCKETS 1 +EOF + ;; + conn ) cat >> confdefs.h <<\EOF +#define USE_CONNECTED_NFS_SOCKETS 1 +EOF + ;; +esac + + +echo $ac_n "checking style of fixmount check_mount()""... $ac_c" 1>&6 +echo "configure:144676: checking style of fixmount check_mount()" >&5 +if eval "test \"`echo '$''{'ac_cv_style_checkmount'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct style for unmounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* ) + ac_cv_style_checkmount=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_checkmount=bsd44 ;; + aix* ) + ac_cv_style_checkmount=aix ;; + osf* ) + ac_cv_style_checkmount=osf ;; + ultrix* ) + ac_cv_style_checkmount=ultrix ;; + * ) + ac_cv_style_checkmount=default ;; +esac + +fi + +echo "$ac_t""$ac_cv_style_checkmount" 1>&6 +am_utils_checkmount_style_file="check_mount.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/checkmount/checkmount_${ac_cv_style_checkmount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}fixmount/${am_utils_checkmount_style_file}" " + + +echo $ac_n "checking if system needs to restart signal handlers""... $ac_c" 1>&6 +echo "configure:144706: checking if system needs to restart signal handlers" >&5 +if eval "test \"`echo '$''{'ac_cv_restartable_signal_handler'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# select the correct systems to restart signal handlers +case "${host_os_name}" in + svr3* | svr4* | sysv4* | solaris2* | sunos5* | aoi* | irix* ) + ac_cv_restartable_signal_handler=yes ;; + * ) + ac_cv_restartable_signal_handler=no ;; +esac + +fi + +echo "$ac_t""$ac_cv_restartable_signal_handler" 1>&6 +# define REINSTALL_SIGNAL_HANDLER if need to +if test "$ac_cv_restartable_signal_handler" = yes +then + cat >> confdefs.h <<\EOF +#define REINSTALL_SIGNAL_HANDLER 1 +EOF + +fi + + +echo "*** SAVING CONFIGURE STATE:" 1>&6 +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + + +echo "*** OUTPUT FILES:" 1>&6 + +LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/.lo/g'` + +LTALLOCA=`echo "$ALLOCA" | sed 's/\.o/.lo/g'` + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.12" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "\ + aux_conf.h:aux/aux_conf.h.in \ + \ + Makefile \ + amd/Makefile \ + amq/Makefile \ + \ + fixmount/Makefile \ + fsinfo/Makefile \ + hlfsd/Makefile \ + libamu/Makefile \ + mk-amd-map/Makefile \ + wire-test/Makefile \ + \ + scripts/Makefile \ + doc/Makefile \ + \ + scripts/am-eject \ + scripts/amd2ldif \ + scripts/amd2sun \ + scripts/ctl-amd \ + scripts/ctl-hlfsd \ + scripts/expn \ + scripts/fixrmtab \ + scripts/fix-amd-map \ + scripts/lostaltmail \ + scripts/wait4amd \ + scripts/wait4amd2die \ + config.h:aux/config.h.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@LIBTOOL_LDFLAGS@%$LIBTOOL_LDFLAGS%g +s%@AMU_CFLAGS@%$AMU_CFLAGS%g +s%@RANLIB@%$RANLIB%g +s%@CC@%$CC%g +s%@LD@%$LD%g +s%@NM@%$NM%g +s%@LN_S@%$LN_S%g +s%@LIBTOOL@%$LIBTOOL%g +s%@CPP@%$CPP%g +s%@YACC@%$YACC%g +s%@LEX@%$LEX%g +s%@LEXLIB@%$LEXLIB%g +s%@LEX_OUTPUT_ROOT@%$LEX_OUTPUT_ROOT%g +s%@AR@%$AR%g +s%@PERL@%$PERL%g +s%@LIBOBJS@%$LIBOBJS%g +s%@AMU_NFS_PROT_HEADERS@%$AMU_NFS_PROT_HEADERS%g +s%@AMD_INFO_OBJS@%$AMD_INFO_OBJS%g +s%@AMD_FS_OBJS@%$AMD_FS_OBJS%g +/@am_utils_mount_trap@/r $am_utils_mount_trap +s%@am_utils_mount_trap@%%g +s%@am_utils_unmount_call@%$am_utils_unmount_call%g +s%@am_utils_unmount_args@%$am_utils_unmount_args%g +/@am_utils_nfs_sa_dref@/r $am_utils_nfs_sa_dref +s%@am_utils_nfs_sa_dref@%%g +/@am_utils_nfs_hn_dref@/r $am_utils_nfs_hn_dref +s%@am_utils_nfs_hn_dref@%%g +/@am_utils_nfs_fh_dref@/r $am_utils_nfs_fh_dref +s%@am_utils_nfs_fh_dref@%%g +s%@LTLIBOBJS@%$LTLIBOBJS%g +s%@LTALLOCA@%$LTALLOCA%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +srcdir=$ac_given_srcdir +while test -n "$ac_sources"; do + set $ac_dests; ac_dest=$1; shift; ac_dests=$* + set $ac_sources; ac_source=$1; shift; ac_sources=$* + + echo "linking $srcdir/$ac_source to $ac_dest" + + if test ! -r $srcdir/$ac_source; then + { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; } + fi + rm -f $ac_dest + + # Make relative symlinks. + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'` + if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then + # The dest file is in a subdirectory. + test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir" + ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dest_dir_suffix. + ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dest_dir_suffix= ac_dots= + fi + + case "$srcdir" in + [/$]*) ac_rel_source="$srcdir/$ac_source" ;; + *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;; + esac + + # Make a symlink if possible; otherwise try a hard link. + if ln -s $ac_rel_source $ac_dest 2>/dev/null || + ln $srcdir/$ac_source $ac_dest; then : + else + { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; } + fi +done +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + + +echo "*** END OF CONFIGURATION:" 1>&6 diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..f8c7336 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,63 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for doc/ directory +# Author: Erez Zadok + +info_TEXINFOS = am-utils.texi + +EXTRA_DIST = \ + hlfsd.ps \ + texinfo.tex + +# include dvi/ps in distribution +dist-hook: am-utils.dvi am-utils.ps + cp -p $^ $(distdir) + +# a special target for making Postscript files +ps: am-utils.dvi am-utils.ps + +# personal rule for Erez Zadok to generate and install html docs +alldocs: ps install-ps install-html install-NEWS install-INSTALL install-ChangeLog install-AUTHORS install-tasks install-autofs install-y2k install-BUGS + +install-html: $(HOME)/html/am-utils/am-utils_1.html +$(HOME)/html/am-utils/am-utils_1.html: am-utils.texi + texi2html -verbose -expandinfo -number -split_chapter $< + mv *.html $(HOME)/html/am-utils + chmod -R a+r $(HOME)/html/am-utils + +install-ps: $(HOME)/html/am-utils/am-utils.ps +$(HOME)/html/am-utils/am-utils.ps: am-utils.ps + install -c -m 644 $< $@ + +install-NEWS: $(HOME)/html/am-utils/NEWS.txt +$(HOME)/html/am-utils/NEWS.txt: $(top_srcdir)/NEWS + install -c -m 644 $< $@ + +install-INSTALL: $(HOME)/html/am-utils/INSTALL.txt +$(HOME)/html/am-utils/INSTALL.txt: $(top_srcdir)/INSTALL + install -c -m 644 $< $@ + +install-ChangeLog: $(HOME)/html/am-utils/ChangeLog.txt +$(HOME)/html/am-utils/ChangeLog.txt: $(top_srcdir)/ChangeLog + install -c -m 644 $< $@ + +install-AUTHORS: $(HOME)/html/am-utils/AUTHORS.txt +$(HOME)/html/am-utils/AUTHORS.txt: $(top_srcdir)/AUTHORS + install -c -m 644 $< $@ + +install-tasks: $(HOME)/html/am-utils/tasks.txt +$(HOME)/html/am-utils/tasks.txt: $(top_srcdir)/tasks + install -c -m 644 $< $@ + +install-autofs: $(HOME)/html/am-utils/autofs.txt +$(HOME)/html/am-utils/autofs.txt: $(top_srcdir)/README.autofs + install -c -m 644 $< $@ + +install-y2k: $(HOME)/html/am-utils/y2k.txt +$(HOME)/html/am-utils/y2k.txt: $(top_srcdir)/README.y2k + install -c -m 644 $< $@ + +install-BUGS: $(HOME)/html/am-utils/BUGS.txt +$(HOME)/html/am-utils/BUGS.txt: $(top_srcdir)/BUGS + install -c -m 644 $< $@ diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..a3aaa57 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,376 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for doc/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +info_TEXINFOS = am-utils.texi + +EXTRA_DIST = \ + hlfsd.ps \ + texinfo.tex +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +MAKEINFO = @MAKEINFO@ +TEXI2DVI = texi2dvi +TEXINFO_TEX = $(top_srcdir)/aux/texinfo.tex +INFO_DEPS = am-utils.info +DVIS = am-utils.dvi +TEXINFOS = am-utils.texi +DIST_COMMON = Makefile.am Makefile.in stamp-vti texinfo.tex \ +version.texi + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +all: Makefile $(INFO_DEPS) + +.SUFFIXES: +.SUFFIXES: .dvi .info .ps .texi .texinfo .txi +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps doc/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +version.texi: stamp-vti + touch $(srcdir)/stamp-vti + cp $(srcdir)/stamp-vti $(srcdir)/version.texi + +stamp-vti: am-utils.texi $(top_srcdir)/./aux/configure.in + @echo "@set UPDATED `$(SHELL) $(top_srcdir)/aux/mdate-sh $(srcdir)/am-utils.texi`" > vti.tmp + @echo "@set EDITION $(VERSION)" >> vti.tmp + @echo "@set VERSION $(VERSION)" >> vti.tmp + @cmp -s vti.tmp $(srcdir)/stamp-vti \ + || (echo "Updating $(srcdir)/stamp-vti"; \ + cp vti.tmp $(srcdir)/stamp-vti) + -@rm -f vti.tmp + +mostlyclean-vti: + -rm -f vti.tmp + +clean-vti: + +distclean-vti: + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi + +am-utils.info: am-utils.texi version.texi +am-utils.dvi: am-utils.texi version.texi + + +DVIPS = dvips + +.texi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texi.dvi: + TEXINPUTS=$(top_srcdir)/aux:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.texi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo.dvi: + TEXINPUTS=$(top_srcdir)/aux:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.txi.dvi: + TEXINPUTS=$(top_srcdir)/aux:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` +.dvi.ps: + $(DVIPS) `echo $< | sed 's,.*/,,'` -o `echo $@ | sed 's,.*/,,'` + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @for file in $(INFO_DEPS); do \ + d=$(srcdir); \ + for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ + if test -f $$d/$$ifile; then \ + echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ + $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + for file in $(INFO_DEPS); do \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ + install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ + done; \ + else : ; fi + +uninstall-info: + $(PRE_UNINSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + ii=yes; \ + else ii=; fi; \ + for file in $(INFO_DEPS); do \ + test -z "$ii" \ + || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ + done + @$(NORMAL_UNINSTALL) + for file in $(INFO_DEPS); do \ + (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ + done + +dist-info: $(INFO_DEPS) + for base in $(INFO_DEPS); do \ + d=$(srcdir); \ + for file in `cd $$d && eval echo $$base*`; do \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done; \ + done + +mostlyclean-aminfo: + -rm -f am-utils.aux am-utils.cp am-utils.cps am-utils.dvi am-utils.fn \ + am-utils.fns am-utils.ky am-utils.kys am-utils.ps \ + am-utils.log am-utils.pg am-utils.toc am-utils.tp \ + am-utils.tps am-utils.vr am-utils.vrs am-utils.op am-utils.tr \ + am-utils.cv am-utils.cn + +clean-aminfo: + +distclean-aminfo: + +maintainer-clean-aminfo: + for i in $(INFO_DEPS); do \ + rm -f $$i; \ + if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ + rm -f $$i-[0-9]*; \ + fi; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = doc + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done + $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info + $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook +info: $(INFO_DEPS) +dvi: $(DVIS) +check: all + $(MAKE) +installcheck: +install-exec: + @$(NORMAL_INSTALL) + +install-data: install-info-am + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-info + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(infodir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic + +clean: clean-vti clean-aminfo clean-generic mostlyclean + +distclean: distclean-vti distclean-aminfo distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-vti maintainer-clean-aminfo \ + maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \ +install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \ +clean-aminfo maintainer-clean-aminfo tags distdir info dvi installcheck \ +install-exec install-data install uninstall all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# include dvi/ps in distribution +dist-hook: am-utils.dvi am-utils.ps + cp -p $^ $(distdir) + +# a special target for making Postscript files +ps: am-utils.dvi am-utils.ps + +# personal rule for Erez Zadok to generate and install html docs +alldocs: ps install-ps install-html install-NEWS install-INSTALL install-ChangeLog install-AUTHORS install-tasks install-autofs install-y2k install-BUGS + +install-html: $(HOME)/html/am-utils/am-utils_1.html +$(HOME)/html/am-utils/am-utils_1.html: am-utils.texi + texi2html -verbose -expandinfo -number -split_chapter $< + mv *.html $(HOME)/html/am-utils + chmod -R a+r $(HOME)/html/am-utils + +install-ps: $(HOME)/html/am-utils/am-utils.ps +$(HOME)/html/am-utils/am-utils.ps: am-utils.ps + install -c -m 644 $< $@ + +install-NEWS: $(HOME)/html/am-utils/NEWS.txt +$(HOME)/html/am-utils/NEWS.txt: $(top_srcdir)/NEWS + install -c -m 644 $< $@ + +install-INSTALL: $(HOME)/html/am-utils/INSTALL.txt +$(HOME)/html/am-utils/INSTALL.txt: $(top_srcdir)/INSTALL + install -c -m 644 $< $@ + +install-ChangeLog: $(HOME)/html/am-utils/ChangeLog.txt +$(HOME)/html/am-utils/ChangeLog.txt: $(top_srcdir)/ChangeLog + install -c -m 644 $< $@ + +install-AUTHORS: $(HOME)/html/am-utils/AUTHORS.txt +$(HOME)/html/am-utils/AUTHORS.txt: $(top_srcdir)/AUTHORS + install -c -m 644 $< $@ + +install-tasks: $(HOME)/html/am-utils/tasks.txt +$(HOME)/html/am-utils/tasks.txt: $(top_srcdir)/tasks + install -c -m 644 $< $@ + +install-autofs: $(HOME)/html/am-utils/autofs.txt +$(HOME)/html/am-utils/autofs.txt: $(top_srcdir)/README.autofs + install -c -m 644 $< $@ + +install-y2k: $(HOME)/html/am-utils/y2k.txt +$(HOME)/html/am-utils/y2k.txt: $(top_srcdir)/README.y2k + install -c -m 644 $< $@ + +install-BUGS: $(HOME)/html/am-utils/BUGS.txt +$(HOME)/html/am-utils/BUGS.txt: $(top_srcdir)/BUGS + install -c -m 644 $< $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/am-utils.dvi b/doc/am-utils.dvi new file mode 100644 index 0000000000000000000000000000000000000000..3ffeca858857ee8d6f5686664e0fd47fdd7e3f2b GIT binary patch literal 518804 zcmeFa37A|}ng1WUs#&9mBDml}WG0DpchX4+5Qy4I8q$)DbcY>Db$4}lnd+*hsya!7 zIPQv?48(QS-^uVICezSRM*5MB< zo^?1Av=5D!x)(Ois6Kj3wpgmAt{>TY)lJ7|OXXa#5H0OmIJl_1s3Yn=HCjJZDGpw> zb`KM2*E`>PP<8Xfjt9=RpulWnMH3&W+UC{q}Y*5!ukTcUGw`Ft)j&VF_u`q?|K zoYm&`vh(eNGavTr--}z|{D)gkNEw_PD~l7?umF}c7FBleuX^y`J^ej5zHVse&Yk+i z3LiM__&FWd#-QRX%2VA7?|TYQ0O6M%)Bq4CcM2NXkG34S{a*JJ_Nz14k4ajFJLOc3 zlz@rOLQvWHz5^JqZ+yZIE|j@#nGwg zFQc{D;oMNJkUgM@2gb6|MrJE;)RnU4tnkgILT+na7*?rI>ARJgd~T#zD&#UR$?e=ZRLBlx%jFD6$asxcf{ADlLGK5_9N>nITazj}|>~bYj$=ZT6vpW{Q z{)oY&Twy3b$sk=j9hUDGH-Rj!HY^8iLAu61Vtt zAP7=kND3-DL0-ekUK%41-dzBhEz*L{T%_aqB==qCfoZ~TUYtI-mn zbg|Hxhp0W`O_n*%ZMg~zP;ad}19DnlO+^bl7^84VkP=`h z^A*6vD*SX4nIQ(+VxSq#)>3W%J}(nFigyIp95z!=LeQwrhHU#x?|5dYJilwl?*Bgc z^ADuH9ldwstV7`U`fnPMb@E5McUBL3(Or!d9K3@Qln|n$=+Y z!aHEdWC4cdXed*NO!~6dNdzRjd|>hSe|GxzB%xF)-3#}OR3?@!Sit{wjTR=milxy7 z;LQU5UeE|kWj{q{dV7+otbv6U$}p8Hd+uB`6H~c=wSOeRJ`&J4`^JXwaL;_Wp<#Hy z=pi`DILCHcHTCcjIeufeN!gqo)?3mFI6_Z^rL53#NE{roQh*YM(zpD~P8j0R|D*Rs<6>sRx!FS*&EJs_ z3W1+jz$QDzQV~iBQXx|@IvYU(7wg+{&=43qjK-!-2ouM%m1R4x2PvL)P-iztGxrNO zwk{g@U2_?7!>@Lzcr6RzJu$L!1?FbxFJjIN){Ce&TchkQUICtw*L3Pm7=hCD?@3VA zVJVe*aiq>#I)%eb>er+lc(8+YEShO-*}!oqpUI79OI=~PiymXScm5pUCLo$vD@;bq zpM=JyulUZN&$!}m-I-jmUu+YGwe;!tw5%7{Pg`$5yrc}XQxrE?AOpEc|KatOveq)LVhh-vrsJyyb0n zx(|%}_f@CYP5GAra9DmQR~pJ^yBFR+azypvS+m{%i^?8!&9Bd?9z1K-p*wd!=SAK2 z-tM;Jk9xzbW43J-3)`{#|GsDmN-`YlA`@fj5ATi-RP=3XOc_iasc3P+?<&s>XFFOoW=a)czrOJX;DR`1b5BZx%29S-uLT)c%zse z1FLNR_m3RD4|ooP*B$lRBOJ*#mbjB&mxWPeOSSZ&$7uF~Bo4FcZ|xIs_?_yB0!JR6 zvc=7?Bd~@eckCa21tT<3%i&`iuww+#wCQ{>%RLXAGQMedOzJ>DkyD z_4P*^HnPq2(K&sqdROW973W6-t9zr3y=V5W8|aUE)~$+Gu3tB>v2Vquf%O~vqlXH}giJo=mN4@85*x1|OAFbaQ^{w5ormuHZcTx4(m@7xk@M zxn|Rjr^w{mM-nd)I28K(>F=ivEGVflULw(V6Slud-w9@7*ZGIj3)BZ~tlaHS1&O zu0NyN_Tg2V`g z(6@fw{Al(1`ndobSoYKzaFt&+NLEWf_dnOKGbn-->o@Aa&(~4~Wjl9tfa9Ka?&@BC z1_#%<yGR%?5KAA{#|>4g5^gh?ee3#USm+$J45y!C#%;;wyT*s|`z%K4dc2nK zM^`0N>KeTab<5V(lb;yNXjRg8OfXb3E!v1vD5smK$mKt78PfA?;*Hs@C^B-kTt9MB z*P>_}n1z&`$doEU#x3buEbrvTELsTqN(`YeMstXVZa%4N@nCtlkgY&uPwC4<0xb3= zo0|qt9_*-ZgQBNR#!S`JL+@h*8O&%2v7Nc7=~76p!fzyAMEbi$yqu9AdOU+VohuAy zO&aq5=xF#21`)qa_g*w_5BT!3X-L$VA2|iz6YR?3I38lD0sT+&p0;RJR)9h)lfJ?* zkAsp7_n4ZBpP}{rBtAFhcU0RxvMf`swH1C9&PIZN!`P~7Tj9MZ9A!S~@C38gfo7r& zbkl66G&HuLGO@tDe97*%&))F{tj|TW+Hqq$*^S~cQN*dxHC7qVH|7VANcE64cU-s{ zR4A6FE=FF{d{=g=Y&c&nU{n&h< z!38Teo!Q@2*FGHLzjZPA|0_;4p$@XN+C zuPm0Ze2dc=K-9Q&5{Dt1(HcEuKn4$EzO1DWds_*0ID_pf1~3IW!D^)l&mNt`mmzbc zdhj7@2RP?!!go*{l!1r>DTFRf7R>n2EOL2hq|I8MpQv+dV=f!I@3_87E%nIdqLAWb zemEK}VXZ(EW7+(KAdJF3$pHF^^EV%;IokN(?7JM!G5cu2IM$P z{F`HJ1gS7qM2VLNP&OTl7x)8;xu?qVB0U*Q>)AB08nxIVTURT#B}rs0RKwmyCTpOt zB!O`DqL076U!DbLgBA4=SBqYWWcQctER5F`@oBPXF(%%_R5BmamU=cjp{FM&IxEG_ zVXCG$T^BclLDLaMPcHUBk z48cR(9cX2C9g)o{5Ko`;G3N@P^Bxp|j`4vnm?Q|B;Uy;*B z*3Rnk!jX*xu!N7ejjkU-nmEClR2e)MF~c*kx#@!?iO>&Zj8o%?=9mGhoBkFucWAOK zRUyn?$Zl&oI&|=lHDONvbx%sh%M9R}&GAv;W3F5VJ$CMX`ge|Wh+v9ZEnU288X~-Z z{&Yl$8E@i9rpfZC5xaQGx!5f>n$PZPZ$E4B8n}5hjN<|?GVZfNw!V2!m^CYH*Ry!B z&qE)6o7s@X`b1R3(Uz%uys1};cs{)U4c>EcO6#l(bv$lY!0XeW`NZ;~0jqz{Pu(n0 z27_&DRLl_*IsKXFO5=Qm| z37^&3iV!?k!Q+8-z5DQg?RrAb_BtrhMjZ2wP{$rJ!^7|!yf(Je=@gnlLC$9i`L5C8 zR)RgSjN$AEe1M5vfQ&TP>SrcAeWjY9@mi{e~MdbA4DA8EwK{Q&DQV4p1 zFnvpqGCE<4Xb$I&fNi6#M)(ISP}ewYv*oD4#oG^pyTnJ0FFTK-@~bKQoW*ERM~;-1 zhH4(B2>qhO46H&vaxLCMGrt;9-htf3BgEql`kX$EXSRr2Sun23h--3#JW>ppJS~`k zIsfxFFmA2w^RwBGM07dZQFkkFW)uO~%s6r?+iAQCF3_6nB=txBno!yF&x(FDoKO@a)WRmC- zzXp08!`E({8=CX7kvJaSOb#rdE4uRj{CmMWljz##CJ#&@=KLcu{!Im%WGJ*5Hj0S^3689p_H zBN@*u%U6yGA+zB+N=$hQ)qwbFHGRuXXAm{@pA`dXKF54=V0#H$gee)LZk=9)HV&``9R&E1uSQX&G>MFsAe(}ye_1cKuP zNYv7whLaN#a?4KW+MrCGL&)QYM_Awl&J8IV>C~saWz=^PYS4qA%cD#E;Uh9y!6CTZ zklERi%)&32ETF@Kd7o%Ix@Zh;V~%Aw;$ER{qhn6Bea#t&)r&CH*!>uh_8~@3GJ(t!{K;Ip~> zl^X*HAed3H3E~{Xpb=JJ`sUZJ#ZbmBBjpCK;F-USCy+;LI2-m3;_i^a0R0Tq)-c)IiNQu8aK^C3*vg*rY#KXn1}s zR#i){KMqe5*g@O^Hv*yCY2i`LVoS%EDM)!K$-04R#c9Y6DitTo(Njo8;Fkow5v$oA z*fx={{rNX%b&_p+j|XWuUpZ;%%)Ht^l4Q@|b1i-O>5kBTy0g)mP2o186J{$RAk8@z zpE{)ME^%<^nMual=noK&@QqsN4;qOM#&Hxl|V@v>L zp=EGzvf$>*JLX$G_%lOmrTV~POj;6olfeo5+&npvpBv5Fb)(|#7 zzm`g!o3ul;^9GpuqW?Q2PXp_aw*rKl*BfWpVN1{Gg2V5{dphve%o0DR{IIpQcc&6b z64Nw)OO`-hlPpn9zj0K|C7&_H&Uk9Pdl20DU&sk7+fKU|E}EMVMFV4?)hK%R9GAOe zAvuwYn4-)kKnl0OW2MEC7Kzs?y&@$d*NA}@^n`iH^qBi&LK+&U?Dr(zK;Wm_k@djq z8{U4`5(CNpCM}dP`|B^#D z?iO5!v&lTDf)R?J37ZVyNb!JoXOTX@vDK*;cvD|BedZ%gLRvl7j!;y}qMVCLYG&Dv zM9kIU592vfzj>-5g`VXUkMOih9%y}142_4NDMMZAvNb{%c;{NKFQ8< z-i9ViAPF(+Mr zVK87sC6Y`+5*r^E+3$X8JDy#UThD|Z51}{m-?G$54g=R4*$F-|3|#t~&-WGT&BS6o zrG3`>s%`&x4|s?S9m+~x29<=Ef`}^h#$$@uJ7znX8xro|Eq0V0A*#c#zG~`?PmwBR zX_;bWW~U%FVQR4#%+x?r|3{(O3BT9kNG*NUyC!57iCMx!-}UMqe&>LMRxXbWYYr^B zeZD)wM}FBb;;Cmn=`{06gA-nm_>A*+CcJt0dxJ@=zcqfu$xj;nx9sCed4VgQ4fKvA8w>sFl6Fp6z4UM3zD z87hRrdM3#~L=o{zHg=kRD~hG(l3oh!gWJDf+?aP#*LDH|hrDg=TFWE_E0g}9F^OM1 z@?Nq*;4IM7N`O$NmVWEoK*n9^w{F-2ZjIz{c4wo8vq3nAe~>O&KS#={GAsblV&Y2w zV2Sc0WIe>HDmhzne|MTS&PcI(C;iZGZr)~@ZJMS!>pO?cozF;f9)_9d0Bh;PkJR#m z=G%eo!%F0UoRDi69P!#}nW+f0h%dQ(6v5SL9AYE0w`ZL%6aBsi397V_)NMb3)09~~ z2W_~fshX!0peq8L9Csiq?cyzxY|uT6D5InsNi{7Q-326p05k6EpouAzhk;v5&AlLa zew8;Yp8^us9|;l!Wm6vX^e5iXho(`IQ`htYyu)5>T=U_E!%&xZ(_A=tmfZ^p5#UQG z$J|?{|0BP!vyPf9KcQ#9gI-7}gGbspDVs^9?i!}xJhE&l;Hiw5kU?c{`X$HK2>P8r z)bf;|R>^FyrshpbE$!Hq>iJ-{GNj%8aCPkc@2FdpqsCK1vR1uJtz_6T{HzGylX7mS zGoIO=L(+~X{c6!*h5`oViw}pXVF`%++#r0XA{=t2t8-#0t93vA&2=>+EC%kl zaO@^WxY1bed?#CT*=<)Jbmr&>Po7!l?5-a6>9f~ksZD+fqk)H|eZHh-@m;3`eDWf5 z1xR|BhMhX&aI#|A5p<56k+F-=7;YL<@&|nG^9g@|nfQC1?cW)mucjDS>V8x41mPj3 zi8syU5vZm=@KjOK6FCKVokdM|3RDj{{Uweo@A)@&13o)^6SjC{AUvA-@f{My!6l#_ zC!7KgEV<{1_xxp?VN0pZVE4lB2ggah(wKM3{6OeL%HDNkUqzlGQ@~|&&uo;y;)Vm0 zVSlys1#dFzM3M&NdSd%TS!CPM1s*;yWL43#2&kpd@>o*G^&-Gh(hO*t6`SR z7?=&O2)u}ZyKd{rE0b2*@%wJFLu!9o8qwKwW+L|)V`3tY0q$Zza03>RFA|^+l55!I zsiM0D>h}jLXANXNwkv(fB4rXpS={uMN*?{AB-fFQdhmdy9J--gP6ZuRWQAmRuz{+TdAM<4yb04;5IOS&*YjQe~IjUe1PGvMjN^nFZ=w%$^96z<9!W>LXbV8=Q>?I-Kwouw@{T-ai)YiX~rtlO^BYHF#oZ(&VN zUz$SG37&K-2M}uzqHo@_ps*l#-4u93JeNf4rg<|1%zexjRyMm^!q#ugxw^Eq_urM5 z&E#+zvx78P<(L@TQ2|AX^kAti-rHzwD+n{ZJ%W#MRwo0^hmmnwgP#f?6tYELsGt(A zzzh1R*N0sQI>PImeEj1O7+bS?6ZpG}UE?9ZVhHXkfQosP!LldU0NHxW%VS!%nglqmrik zxkmh3qT(D8juK%A4K@kJahMI6hJ+ob@WUeo2B&YMMZk74(1RVMc4t*)Xe-tBg%4#V z^kSZ_Ehv2iwaoOrCM-N03=3)nYL;;{2(Oxz-vlDhwvSpRdxX#@xFky>Sp(VmfKQi;yCIq>EWPjRyNf+HH^EQApH z{kJ$0uSk)DnBwx97^oWA!&S6tL)FqpZ^Sslo^x8ZClt|TB!8!4De({p$+_=e0Zmg6 zXD$rR-JTT>Dwn|%qoE`h_XJAu*MmP7N(oh@SK0IuLCN>ffAzbAJ0NYIH@xnii9UfL zUQ7Z7ggt(1@Cm?r%U)qcJP#22{1+G*3opXMPT5ysOEo?8<9)C|WTX}FOlR{G@afSi{6^VRfXKvnJXYcWeu~t{3%`XMX^GF1x$vsv!zVLOntJD z!~YUxhDt?vcPsqjJU(ReVL$JwrZ1^_3UNXz=HR?mOTA}R%yc~*VnhMaP1+LofWAro z0y)f&sQE+*CN;#Q$r!XnLxA6%+wXZd=d2BQpt%*RYWa)zDlQ;?otrHtCLp@k-RVj# zf^($4CN>&=N>*=aR9Fs(70WggGsbBAbiz<`18}NlnoAjCgMleq41qN$ZHxJcFJ;-s^usu3-6x3T%DXo^@Bk9D^jKh;35CE_I`Vo#U~>$geRZ!wDfW_u(M>~li}f?d z=gcsvmses(91QvvDlm8@usdbWS+>f(Z8v4r^#v`b}4Q z6(OQ-IQ{vmQ)TOxm4NV;{HzONE_y_a{PR^o28@1nuP?K&`y$c~sTEs`c@pDTcQjFf#f)N4M9Tw@FBtw<~Vde zj8Gm~^onGd;|cB1Q>NLWLR2S{k3OVqTE$U*@Kg97WFUiM#@b|WgZFML9IG@+ zfFOpAvm}8RhIdVzj*qviX=|=b_<3rnYi}-2ILm?qb7^O20Z4dMT`xd6^rn7d$Q|>r z@)(>=G;BPK_=^!p%+wS3tdsz&a>`heV!Ri;l%p11Z<1vlwoq^Gp-vu;=?1dazVy9> zwf3Ax8lZeF_2CcWkT6CN4;zE1Y1E>k#w2Z#6f@tY%Ya&z5EN^KF7v_Dm}Wq=P^jJJ zkSKAwkz*+4+tRn=rdXhu>9025qf<`=XHf#e8z384oVw zGqyt?BQ)T!7Dj}Q8r%v^35y%z@cy0wJW(>@$$*Jt=Y)nWUo>^b9254=KET|ri>^p_ z0P@-jhj}>WZS|l!<-U8N{UXns>)gcAJjErz7!1V!2HgS}0Nt$M?h^a^i(iJMB6lVIg#xL2B* zT8NLypUcUT(*0W2<+i~Z6S*tZ)VIIx^xNg%Y~VUUyK_h9R~r%Q@%fC7Pk}lXY{xS^ zmeqmy9q?x@edB9mdTcp>OdhxJu)}*hSxneNe$izHwa!Nxr0847Nv{}3-@*PSG;Cz= zC-Tk?4O2_K?eBuWwmF|P6a+*TFQ!J)1LAV(hM>>Q2V*KklM))4fo}e^fRueBwYFRT z8DBoLjd8Ticf*cclLfsle3-6eDNaH06%PZ!Vqy_*^-T0i1qoPr?F_ zpFk)Eyp+={uz5?^@wJ#Y=sj&|B9kk5R3yf5ays9)o?gX}V>D?PjsHjS1F$=dvEbRD3!>0?Q8Lm)+7Y&RzVn8~2wRjR46 zw=`l0n!LfE{0Z;vN}c!?>UK+oY`#u8hH=YswjLa)xZ0ZU5GJV;y{V>7%*6mMJ4J{! z^Li-}1{`G4sa>fvpD(JD>HPWUtj6HfgPBT2$|L@|Tt#tc1w`1CGk2ZGCz_=ZSTlmkYMOgb)}Y`{d4$+z~mfwgh{+9Q6x)J)F7ft02Uw~ zHL-ES%4&M{J%S(z04!Z#6K>k{tD))$Qo_rCSP-X-dxfcjKgY46Yuhv_2 z1T65n_LtVz?#8UiAmjs0sr z!kwrOs0|^r5IjTrz_rEd5knv)2jUhI@K11vH?BAUfDnPOf~31LE-NxqR=={504KMe ziAuwIF2I*kZF2;sq^>82u#IXQ;Gl=XxzG~ilpk5;14b6)rO;<=3uw6};e+Oah>5d{ zi0!0Ty{t(hBow8${QX`@P^V`7aurn)P>8fb(l@OXf>*X|)px)|>_Kt61%4)j!*Q8NygO?FXu#`AAKsmZd zt3ooN<;LKjGhIL|m4H|)3?)PWJ=Np{O}Idl3N{8c(~Rv(<(CH3NpfF8yq5Ai4efkJ zFQJYJQ0pJJ55Px-AiT;~j#nx`NVc#lQ#{tlEAXou%r2R_+>1B-J(8kGhW1-N$S|VH zDKQNpiyfk8s(~4Bw$4B35Yp)1z1bX**QprQ#4d_@*#23sFT3waS+A!~w_Z7DZSkIq zTRa)quPQ$hU-QJo&f>$_xAWHSJeG9{5rd z2Ij?90+kmAzyr|IV(RKoTDdV9ts&mfy^Au;JZ^W>CKm0eKd|hG_YS@!4sX)lZamk$ z@W;z)2Ys`9S+s0t^|_b)S0jF5-Od}1>iv(V6`H#BWh~VC$|1zuu1c9dED~qaxL}xcR0TC zo1e-QmPZd%f|(`aE6jS&O7Cz%bG5Eru;aJx5RjWzfUjv$w!Z|tx(abh;Gf1El-=Ox z9wMuPh3X7smPpHK5Q`IEO3W$|>l;O}FflrfY!->+zOxQmlYQG?@sADEmMlskT|=Y{v>m^L1#K`(*=06AGFyzzADRxolckmPSWOra16iz_tf+UUrK?z+JC-3nJ0x|*AAEKQY}%QcP>}X-d8ZtH2py#F&SKD9@qiR)`3&;P zNo9#-x0bvtR@Hf?Tvmn$nfNdVI=ofJ$a}*W4J+^qFn_^a??ILcg%Mh$)nI=(Wymj9 zyjpvCHuEA9I?)@|3)Ka~ za@a%(;6ggGFcik|;MF=|Axf7(ARXLu$^Zk7=8J4LAy@#ik`uLbrop^(KA$-Tl z0FllyXqNB;Oxl9};Rstd&c01?@7EC#R%k zqNQCYbuA4u`KKY1%8u%+4=teBcKau0rB*+*vzq$N+!jRKl{)!L8}Ko>nOIh8?T@sq z`jS)CkmJ+;-B&SOrGBd}$P~+#1S;nTaSz-bAabl8AH`q4MT5wVx=eJYs%cXD*$Msj-n`ZR==*OMr`Di*?$PCCg+L-6MQv%9-a5z{)0 z%7ISGBeue-%)1sds!i&!_SJtwA}UiXf%I18CNmx46+?`vm^xadv5Q+MxkQbN)qNE< z@65{(hlAc;x&(TQwKS(iqg2;Y7yNdplrg3adIrxZi$ENK!KkCK56dwW&p~fs5oVmj zQNr+!zX-c$pj2Wv;=8RaZ0~s_kp){#y?vcDi8p>7;oCBcvL>zYOsa5vN^WLo%Y_&v zZ8WdnzEI1bPS(2Mv3^<$zY>bXie`8Uvs^o6DEtH*i2P8_RVK||5d$!bdmEubPy~NX zan$D-2|A#WoCoP=tP9h5;Q1NFbkpOP3KWKJW2POb(OnU-W{srv(E<-8NaJf>^oPFSwX!6cT58je+yMa*1(XbrZKI+&#W`U;9H{nU^?5-V z%l^U1?k}Iz2#yE2Xp!A$93D&S9R_fs9yUaa)je`Q{;j`m|LyIbUmnrDaJs>5os!wci#NJV zRIizuujs{#x3HlA6LmX%@x}l$f;D2<;&vQ+-JP>xyM3)wMTIDn|4AHN37u;75Em{x zTkmx^bwZ*9RHx(zfkR>fZ1FB&iw$E_3Gt=XBSEO!q0$bvE4g{)YYlV3HJLT0=F_7( zq~*Fn$Sv7DL*1fFf2+24TnUqitti=?It=)+GFe88^6?E@6x;X&5l}0t5@!OtR7_yC zd9hk2(IXM)&OElwj5mR2LbYT7S+-MX_=t_w-uo*n-ws7BBB~}q7{wH$P>Y4yuU`HD z&71U1j=(g~6vbL1EB9-lR$AAje|4|l5+%}~aW4DzSIi53M2HELl<<~QS5m^9?7w<# z&`g7p?)gD^u453tdhMQd2$>C~;!q?Ppr6tFV_B+`7^#+SKg)X>JRr=zO1PpQe%ra$ zGh9254+0Ml3XQg}Mm6RvFp7^C#BTj;;z8WlW}Y8D;=DLP3TX z#ehm*8uO2B5$Ebx5W&^T(;6BS^PU7v9k>9f!fC6v+JXxiB%a;hZ-|-4bAUkot zQB_^(3GJ_WUdDs{yZ+SJa(&9@@nnK-U~mv>NfBGT&~J$?U`pd0F)|USVoy#QisMK{ z*92z82IsM}cg`!ta>TZgT!-xe8XG%226NN85(+rw!bYXD6JmHOxg=C4KAv~4*;c{~Y3adc~xKp&`*0i0u2 zaDYiw3Mbl3{lDV*1}!C+z)F2|KxM?@B}z<^DOxi0L$|)^_84`HX}Bap(|6<+@$LWY z!D0xfH+d2+%C_sw$Tj2}CUU?$K7&Yyxw5j9nxP08vdWE> zOR175-8$L;9eA_XG&F&Y z-xD-xiXz{G`wAr-lLH0XA#wZcFVVsZWdkT~amCgA1*AdxARk%=b=wZU@WkB8-bFp~ zenP)buj|xOAK5K+2W3L;EY-4`j7@#y-7!^wd=I>3z0N#RT`v6H6+mlfWS!up;suuZ;tWN)#Y~n|vnvg0a56{PI=*M&XkB7Q z80yr7j!)!sgQSzukHrNVV$;M6UR(!~%;|H^vJxkq=T(J`4f2Yuytu50`tT%`mazX{ z>@Zs;j0kF5%nc4-*a~y1B8n}6wtL=NIlICOj=~s)#@8Ve^T?i;ruYgM3CQonaLH^Y_ z8(Ef667{QOe&Xtroi_zk%rbS4Zn*U!aG>%Id^1x#+#N?x~JeQRt4&bNb7wIvk%UW^(Ls zb-HP?+fU%GPF;<&kwkWmgCUF#IeUtuNmyETvDsDS*FjvhbpB``G7o(dT;-vw-|Lj7 z&oPVb59UV0$9PuG{oSvDBgNhS7cb&Dm*TK=iT(^US8{byKL43j9eUUcELP|eBxU0> z*h6_KfVK1||5+=xbynNw^*4;el;pF-?^=k~Q^zHN$1eL#6_AD?!A80&CfZmoc1oeu zP&UlShk)v})C2zoo%-xYL!Hd9t|{`vdy~y@$&gK+lFv<7OvGAy^j|C8A0OhT# z1>pS37KXJE1eTb)S`JAqb<@YZ=7uUmony(IePk`VY$$5{;j_NPziX5TSeYt+E3U_1 z)^>}j61ax&|8NP5OSm$U#N77VZ#LpM_6q@lt+}&K%pWDku;iJh2LeKmp0;Axw&^G> zgIMz*r;k(nfxW7B)7qPuCWqiB4yCAy3GLXi`{2ckA5x5|&KKoB!sZ=e55MnG`;)I`(>Gi{{en2NiBu z(LaVf3ZH8qoMrcA?eq)M+H5r$_1dN%@la>6JhG@u93;%&P$OPBLftp4pydlKAo0cY zfxq7}@{%rjb^f@K*$%sV!l|-bPwJd3ki&+3v(2u#iYB*rjuJdNz?lmRGJXVs_3_p* zMr$7Kg6tfd;6IbwyZQS-x6P$wg4;gObyIc6Q!VT=zuAF6xOJcVKk=di-eU`Z_jBS? zyB7ZO$m&okZ1{e`ZXaY0f_#o$Z4mGb6>mi#Tuse7v)G!d2j%1Nz-v z2M&op$ufeHBpvI?={Sz;4<5WlsUpyz3Pby zULQJ8ArYkCe$f9(v50S3#*^4+t5)wY{>d)je;*D@|F_{_3;17$!}!uuwgeLaE%r~P zsP98tHcy%48~$4?lOlD%d?ujW%u^{1wp0J3X0=a-j2{oX_nj&?Q8v?toXB zJ`;8Q+3e@msdRD&?rPf4ef^oyq)c|rkQi!bY;PVY$v@`CW|-?h2{Fv|#8f!L`~_NsnVn&j619J-dE}#r*G?^@+v&snv|f!V+i5J!LiuY+e&vokY4W1M_kdb1k zssue3@F>{~vqw93?tY4rq^L!(B*Kt5X|)DEEZOBtoS(XXoaoJecnnUo*m4Ngk|Tm= zv=Xh&Oq8!asC#O%TUgw}fV7Lv483UBG-TeudEHFqy zr%St`yhmO4$ZOd~&k)zOD-P4EIwnrzQAWT~clJ`-Q=)eowegm~qE-mxYW(Yu8cLdt zld_dkQ%jw898p}7`xre=t5>oG%V1s62OVmmq;yP+8xSrZH z!FD3oIFRI!>FphqMj%x32_tO6O5&N#68i|o*m6=>vR+gsjR823fEMp0vR37MPqy8=uStN`&lsRy zOa1%DT(cP^&m`WTCyGc`jQMmQGQtCiaOm7+sbo6UF#(1l`b=oA+zB<`?gjIcxnhR$ z3lq!W&FN+Lu7`ykhz4tJr6sk>6)G)`F63T-P{8GguLiil)adhiiQ!5WsiI)`wvLF>I$37{#bO6X6|i$k7qod}w=tb)t* z^e_l1YfzZwr{Dcs&PHVoHN5uK9z!fjw6v2yc`%+fDCQ)CP- zj!qIfvoj%O`@8Qf3=fX`8C64}1SWQR|9cD*6Y+(RaIIlZgn+V$|g~( zaH=cF?>qUqD!o*u&rFG^%B}G?75TkzGy8X6<1-q4o=b9Wy%1Wa0LLp%jGGh~NwPW` zY`7X7Cm~1~Qbq4izUH9WcTe0d01EeW#;NAD)KMQ2;%gX)NPklQYPVylI-yyz26BIR zwI%-RQPxEHKtb~?7$w8G zY?ie2dAD(zN{TYkqCBqZ_pBnjviA3rK#We!l^iQJ+=BscOLJ#ody$@4F`T$ z!Ib4Sk1IWzRKnI?=$>f8*urBr1;XCE(=u&2Sph~#ae?GW9lZPcvcw}YY-CFKwHd)S zG?rbqoOk_#fS8cMwHh&^4;Qxj2f!1zNYpr8GwRpHaDJj9>40Y_>C_0!iAPNeoA}&a zLRWQ~L@QDKmmiaPl%?z>m8xp!Q$WWFRHOK%z3z66YWhcG^l-C+h!|o0#9?pbp4C#{ ze>ETq%*bS&^_dfQGhHT=hjkf@Y+ymdS3Pn+I|SS!p-5vO&sb?`;!^R&V$DL`i;X8c zELjw%9>9136fAlglGC2&w`VH4zn)0ytFF!J85tr?8IGc+#PTalz1d!fAX233dOFYt#u}l2QR#x{BLcdck&kz|dD{ z?V3kBJul;O%FC1<&>%k+m(jexnHxh8wUyxc3Bjsq zpnTe^G?wE8Dl9@WQRAV*<#mU?uCa!DL?$I!wwC06+zV0Fh4&Z%fXn6UtB;)(CWOLq z520FW$(QY6ufEVE=7JBJP7crX&$uaEiCadZ7GgZ>)gr#KyA{NwZ~E{5TSsBAqY@0_ z_G)}UGg99tStm+`=uK(&%e<9(C!IbKP7EsxtndL+skSZc4Tw^0PD>BUP~u5V=PRA!L_XPjKIw8O`lIJw#$UAA0HANnnICiJBr zhHlC3GKRQuk3R^OJJF6ul^e=W8Uap6d*J9a)@}3YY0LzPq<_~pEdAgg$gqb|n6QEn z*nzFUb1hHDhWT)Zd)^OyK6t&Dy;bR(WT9}*cSy=0ao|StF50~3MUA<0f-04yhgv!} z)xrp&NpF3Nq&#QU&M}VWJ`)OXi^8vAhL0XbkY~)PAU}pU5)HG&!eZhNJXai8%t_9W zCg)NywMWKvsModhJ8v=qoen+y;F$(1b9**X-!!r!u8qK_(S9Wj#JDU8ZOocBONgij z=H555z=VyZueBzp6&w3t+0mZyEuBbBnMINMvFn!QAQYV3`Vp9BP!t>Bh_Y5rE+PJ( z|1K${frGT?!cc$PhSOx9bQowePiWOSTV<{gVaIp%aU22_44J2x+AG@D>Ro)xT zCU_S~@M@b0!Fy~VcUoenAMDewCR#&<8%qjZ*@ST;DxmY_pfF^+=F>@Kwg%$e{bn#h zE+@eTiFDTM1T?>H4?DG(JiF{pQADq1ZVO&Q6LYzvbT#jU3}5s^ZO`gPY*oSVMHk#Y zY}&1#CSgpQEcLTV>D`t7*iF;X#aNcZ5>zmLRTCtnpuAO>HS{__#o_`i-`m`ZtXPkF z6Uhbl`!5O^?Lj}0R#!{?;MszQ_vx?+1QAv}!lIgf-m@D zNXl>pCK>4{OV-C9(N6KBt1koSTU>APyy|fM9(|dFzr;3cZc+gHX?~wpKhqWPD2e!fr9ywn*(FlIr&GXUQ2;)Z znFzp9a7Wr%t9mGP;*aH)qf-bRM*z%|I_`Oq!N+@pEf zS$=^w{cRh09eP=C`AXx_dK)shZC4A=O(>tHTRL=lWLKlf*_aZhDee@k95sWIy6dOY zMXIPD#?GWh(R{(HOwJ1c0q~9PT7zY29J!R_G~zwG2PvjIul^cj8o$+f?n>=Rg(Jn= z<@uR-Aay~M!W%zRD>5Bs-S}DE_lK(MEbB2RgA$+UESp{OQ#b#8Qd6a6uh>PbWvR0y zbm;pN8Uu^(6)?+1TdbyTzG?HGwV5s15iF6$Tv+sHZZ}B6w&hq2h)*3RkP-L<95b7` zbTt%KlP~}VHt)5LloTGjb7x$k+XGaJn*FL+Vci%&RV!GbxFJ}!6#e-F=z_I*Ek71|t1(b)*# zZCf#+{MCScIe2poRMwdDa?$dr`?M$*oxYqpTmCrl#QE;csZYHmHxi!FkMpC; zr~jhvc9qh+6Hdr=`1)-94Q+JKkCrcw=3I2q9F67z!cW^j1$S5HlT~mP=}#)SSI@fY z6Zh@mV*5g6WZs;=D9`E8Hj-=YZdq>B$$IBY{dGWR=h=KYE1(HnHe7SGiwbT$ZB*|7 zWL~%;JgpDOxAnRCvKBI@BTBr>SzIw!U;6{~&Fw&$$gRV&uc*Y};A?)e*5t!P0H zKQRwiijzZQdhW3htodkmXsl=pn4Ex)#iBhT&S^g5j{L&tcxGLKVyPs<&`$dC=G5iqx98WVbNgu8mXK4WtuPoC@%|(pluo=GfPHz&ROxD^;bN4hi zsE%`HpVP&`SmAnL3wbW#sl_{UQXYr)ye@t4;mRELkKZ0+@@^pxDaImtPms|SkC|lVB6#** zkNLqHe%?ec#CLw6*$c6jz8s&C1KcHw00F!f_oNyj;-9o9Bzb4>ZR@pY1E|;ZYgf}B zKi`=QYL)&ELsvC==>=q5SKT`};QsJvQe#KGY2zx9FXw5HnYKt(fB zTKhrg><^_?89R87yow|8fj(!@T8+|L&*gEo)`Yp1P;k@{D&Z{#oT%#|I*d6$3m)6L zj@d$eg1qyFN&z`x#CcITndz_-*InHo4V*U+%_)tPmo4Y6*759uAuN;e(@JVmxNN!m z;P2#FwwzJscrOvInZhf#?dO=oQ~69`!SI$vVO;y-w0K-bnzOsD@T)h>I{dJA&T5}E zYajNzRE%fCHMPA8RVu7A6Ym)inHC?ha3%+$fTp0)RFRDZ6s+I7;jVT6Qp=%SaZ)|L z5}tVY$?cyJGqVTvlQ@P)PHw<$`_4L1K+MJ#a3lHxn|T-vcLAK$@3ju$W=)B+aab@Q z{0oc}bai_L1ozQbBOY3vWlHoq8x8X@lkjZXJ*2aQPvXPX1ZGw`EMQ!` z;_ljXhf~hEbi->Jz)^R;*3zeSX&=*umJ3T?I}r)(Ex>ooXj8g`Vb(Y1^Le;9-d&yb z{ZscW=<2dh>#7GW_$WW*i*R}fvwHBmmi7g!aS%t?7Cb2@KSy5A05;b+MvZvgdd-Iq zA;LiSoNzfvc|~M*Tx%(DgH^wpdh1$jc9eH}QOJ9RKPyYK@jCm~UAo^d&(#W>wSKqa zuDxAdU3jmSl91ElVN%mo*hE3RquA!kOuhJ%VKX+ zQWCQ;y3p3t;v4Z&W=T*1`zp2ezL&BLdBJt`)~O@7EMoR%Q!j(FDN%|`DR{waSS~tC zH+IZyECm}DinP9wSL=?2f=cSQ-%5OKjtz5|V|~L92?A8phkZh{ zsNIWeS|?Gtu>8&2@^dK+s&=pnNWoS8bi7eZ_i~-ffR+KwMD7R+SRkgi68)ibfHLEZV_$hVA<@45XNoqtR z$tY`o)KYi6VU-8KRMcY^B1Ri%ASnHbL!2)pZLw7zM}P7VkiDY42Q5kfmx>IY1kX1v zKZ|Y0riuzPcYE3L(zXsf2Bp)KB(iKdL4+;nAaw5&m%EIeR2P5t;ZCm=Vc2fT=AF$SI}Idr zmM>5K^WG+keFf3VO)LAO)8o%NeE>9EFdKfTu$-moP-KytLEd3+_{W9{)tBG; zetUHKbN-3q;47iam4v{{IvR72xkm@Wi2liG-`bO>oVWF5Y=VIJ$jS#(So; zUbrCO0NI7wRdbD}zUsQ<8fSQ8-_;6Q%LEp7-?GAWa4oss!d7hZmM6|47)xN&9*7s! z^29mPIou47iLBt$Oa~D!e!q8lv3J-#egAZtkKg}fb(($dHkKZdIQSM&I`ZNP2ipCI z=Dq+Fy@KISj2R;L{RWpk>?eDyO*kTXvOCavHTu3gaS&?dMriO&{$n3zU^=^>|BDS? zZy|Sfk#c8=xxf96ZM#UH<=V+9cbhK^w7j^;=V7{-;>|j?;~}RfA^~gZWj#%k-vx@y zo#2{U9{6njeguZXZw6n?6R-_uCEYU zz?q=LZD389X=O>8ndGQqzw+cDyWxT19V-tQ%9VyD$JIoQ3jlaM?z86NoVE02N1B7j z9CA(>f>Cnet-l-G%qy-Rp%u0CxfZ{RQlu9}7oH=fmVP((Xm5B_*Ij({_vT>fJ~af| zk(;&DXU{|Xn7y5|Ml*WBO(d8mp#vByk!?o&94U%mlc#F-b{s~x{Y%IRSA(^nw(aHT zk!t&QzUedL>_NtqF&j5(#E3;;^JLTIg@U4)<3uaIFc9DBW0SfIW`oD++XOEFe^xp(LTx}4KBU8lgn-#n(h zqS_Lx6DSlJ-HS*aR=!g;{q$o|IVxWN^<81*{!4$)-9DfPJUq1%Vt-l)9$~j`2CSuD zbe~*rhNN*`h;uBuLW}guGl<~I#aN)o0?YfwfJ{1Yq6@9}l%kcM^NKTa)PRI44PJK2 z(bcEK3D042bEt)DyWCkibAw2`_iS$7!(;(OLHSCL92S(XYWkYr2xcuVsW=HdX&)+i zLpLGII>55STPfdC><5w|A+BJk<#`+j+hiwFMW(*8qx!N_uATO(57Y2NV#pV3li{oI z;l;r$>_HW->`JftHoD_f^8#IW`*=n@yX}0Hz2p$wrT zacMiL?j!W;oo1)MQ^aQZ4n8`-1(_bYPg{281*OGdml?bFNN^-IJN+mGZ4! zw+aFGzcYd7kVo>aOn=0IqKhyYqa>dcD8oa?#%Z{ovy^BU-AnUFbjQgmT6<{Axn z#vS+0UA$BQ^cLB%Sh8b{|WJL z&TvYUUlH(RQcoLfBOd@+Yfby?NRl!6A*8()kQ!a|MT~$f- zZT?OjNNXFLHRMC>aMz)_J<_M9T)Arbtj02rgA*VAddu%FM;f-I^WeuoY0^ zKF?HVz5VXyMgU!BvDAq!9fL^}ZaEe_6W$|Wmp37_;+zNm#4~vs6x#f6HfV_9ELcQX5M`Du`ovrL>CIwXRs#sNnIjx_|A|XyJXZwf&7YLyRmu((R&0Tj@!7w|jLALZ zkSQ{1i|><1>1+aN2Q{m_^SoGUxJe>k}$CY3V4PxHBg`G%cf9j-ctW~ z^_%E-%?Sg(N{+R?@pB3OQ*Haw=X8r(uxZ@k;alUvM1ao!xS)~(g7{8dIZUWDHM4*W zKhyKAzB-nimSqhRkq?x*@i(sNb<1FJX)@6INI$ry%MCcRz?*cYEXM9|(u*zWi?Ioa zhWyJb2Kc$jqnrEeVyi_Ne)Vx#GZ#=;Q6kNFW%pMC?)>1!SBKD~0u52+ETmd%0^#^1PMy;H|A_|Eb z7seCr`j`Ba&cYNkh^x*bT}N$fk72#Au)=I`CZ5rf&Rs;d$;H}!)0fx+xZY{;`0+yJ zG-z4g>0*K%L41|wvPtK~RDe@eB)VLxwD>%nh4*<)T+r^2@GB1ti`ehAXYpW2S|sV- z@`vR_@XIC1`Ia54`~f!^2oSU=E+!n$3Uk?&2+8thDn%R}-&$qN*NQ2`UmzJdw@YaE z9VY2ziMh*2l};TFyIddDJ+WT08*?1V;L0XzL?*~IG_)-CbE=Pg`2*hBB7BVfElGrQ z_vY5pJ>61S0M<6=K*|jvDPy%DV2D!^%0ABUvDb5dn(ml!i0Iuq_#nIo2+_h#IgF{R z+P#GFpaurqg85UceCILqKY3B>d9*_#A?-^?9MT5v4f)1Q)`OQ_Dx~6YR+bjQZm%|$ zyfS|D{wd@C@RKL0j9bU@mPj|7ikx(gbG#&BOehl|cja=b;&fV*uQZPM>M zu{&~~U+}`Xo;zGR-+s_Ld_;Jw3%L_WjC)#;96$-v6}8lFKH6|@LePCsSqGqA`nCKl z*CO#VBKPKJ0FyGF6!_8d3jFuYM;GLa#9bG-p?R2%m?6hTtx&Dj_UQ4=Q;&yX({_)T zk8WxEF~<@SX8gFeJQ)A=&+So90Kl^~S1J}Gp~`Rc#NyF0LG?bQ`o5B zc@RX7o80iUyU%xOksyMzXXh_sZ)kk02xV%HUhD2;7)CPIqIR}7*J>pK<_^zU@V$q7 zhh+R^G8HCH?W?6;{Vc1GVb30Vgic|*f{3eWM1SFSTz?z3r-OKn$X2oT3b&VHY%uTL zh3QD)p+c5w`l^5A0Q9a-nEm2QV&0Kralv4w6sG49QgYlg$?F~6PQ}H89^n5nNR(wrm{+xxbtD6ZTR6>XOZa6bp)vrMYNp z3$%Z)rg~1^x;w$7>C+oed&;GEVoihFGtL0jI%{S`gN6n-mvE zDVz6{w`B@l!^NSl+)!6$sB3adV=fxnKWhzot1J1MyZBEM3xLAMr7sySw7w5gl%L;< z6n;9P;5~bEyh)^R&`e^4(pqf=F$ffCN%O&*-*PLKX$}K1NXIVn3Yt9N636P!dWnEKKMkD>& zzX|tC*%9nL7hnn9Hi9ry>E(~Vw>LXV_R7jY#0^reNc2v9`^0b_Ot$sJ0kIDAzM9!? zcCXIUx%8Os$KP|q;`nfwn|0@rrye^_C6yFzKju;|d2q*Y3r<|(9WqC-xjP?qNRB?^ z>{ax(#PCj^M&DtBX33hG&FT6>N-VUNF1!qAnm#W*sEH^9axI5N-?Vtq-Rk@%0#15S zZ@DlLnh_0K%-e%#*z2>Z8WsZCOCA<5-0S|AvFwvBFZ6!~rB5zMUEvz-4Oi9UC2=`f z>`xZ<^Dmi52i^54iwZcEINB3ORR)>Rv!nO&|OhN-9jkc3Lw7*{^DL5>kA1E~%5B zCwGB~HSVF)HPz;3fEr^bh1)(HKFk`zTqIlQZol-WzcQet!nhR9Vq}6a{-+!!t3M#~ zrqt4Z^&7Ef0y>1LkQ`J*dB#~$A`q^Q#I3>jQp}dtUF9)KXIL>-H>$?X{VY7G>GQpx z%odHh)?y(50lXmL5+;#;0RDj7S|;gPR!oD}j|8Kg7>!H`3XZGn-=@KPY_4S&a; z0m;4QX2jTd+H1e+0J+EklKIIk|5iMl+-!^!k?oIuro4Z}DF*kr~&vdC1R5kw4mJQE!MW+-3*zO zsqu`Iq*vQMvJ8nv0yg_`uP4>271@Va&*{<79~ zM_FeXd^ix8=(|*OxqN&re396U%}q9O&B=W*KVnp|(;3EBCIerw?AWeX$eji_p?KP{ zhb)O>ZFkIK$ym}*1T;XRqH?|vP6Q>1Ycj@^t7DEGe)WWu;@ltnC{&i99?rHN8w>E5 zI+>>NwAt}m+ix4gxg&yX*D}X)!(>f1iJ6V65movF?LF1D-+nx>6z9Zt3FVxkXq#lY z$-?5(ie>wQ9{91|7!+Eam?=)?G*M%NetJ7Eh8eroQ~J2RKU&hYJ+RT{aiqTeK6A_f zZLllrnJ+~@& zQA>TJv1AGT5!+X#CvNfEqJ*B)By2RK3b(@|MJW&#j zl8a&=k#+8~K7XMOX@9Il9Eg%KB3aU|v-^4gY3@8V=_`4pPj!z6l z0z5eP#0sRH`6OMh3n_A;Fdi4+UZ(aOQ5l2TdCWL-@#JvIue@WQhHwDv2hXOTY!s3e zX6Om$=MmVGjklHtVj3{_zo-TDMMZX+Le0!hbz&Pb?kxM=usJE>kwtLe;?mGPV+v+*whFN7Jkpm z0ejtpy}qb^VgKYr5C)Q+b}z1Y--d9PY6u!|jiYIy*ePoCWodB=8EA`FQ8=2TZ_fTg z??t~37#i~7sZFsvh^2UQa2Amjvg2=z*#RQx;B#JObf(UHUVQ-cs;Y_;Kc|8~eriJ zqehI!^i>$F{`NY%p9%on`xHA^+Xzhnr49(#Ts6yXJP3vKj>G@Q-2x|2pjS;%;WG=5 z4HYLSYEh>R`Q=^zxq6Z;+TZ^iw0A!#7Lcbd8-!K)UV`{3{Deg^C9fYz8U~XEYaBz+ z)2V{eKN8{tFepG}K2dFRPv=V2IGY4$A+6~w!ivkC`LX}Rvi(G_h0r@P;nKug&nc^F`-lBcEo|UcI%ll3J7u@U>wY+6< z8^W-gggkI@mhTfK*2sFGF^?8E)%2I&kG7>?V*(H+T7nmW9N}=P1-dG1(($yMOwjDY zz*75kyw+-gtYfmtvZWj|=xuZL3X`3)z~|grKp-}DmC}-o_WXo>tZO}oG>684T`k(D=?^u?5BypEi;Q8I@$lzJ6i3FQ>7#q zL5s&EYv-yryCQY(wMkcvhYSlZOs&b8Pt{-t%rQ978O^}1X_rU=Urf7u-O#`)`Ew;t4A2Dc02LS5RmK+lUdM@vAfX=2OhwiFonT!<*Qw_my`(TKzO#N$`M&YOP(OyjDnDN~?vZqHcabN z-2i&eCof#5uAr&;-#15>Wi#kROujdR7BC2_e-Ph@UG;S5l4>4$P@t1*P!_P_YYY)L ze~XtU)P7RLkZ zJ#aCy7cQ;Z7zt~Wv_{{~KsMr0KA}C!4spI%QZB>CH0T;ESmFR(C68#j;!*3x=ZTy| z4bRiPrnY&H%QL7R+OvmL;MWd@jXx`!McqOGU#^zn=$t{fHf`Hw0T9{ZgxR*b?c=2yW3ey3M7)<1I0v-!w7?rUGB?{2_Y~GVAT*C0%iX{>#Vm}$zS2*8qNA=+J zSIX1;Arw6>Y^oX;<_a_Pn_^7UCm6SuUX$q$o-;#XKe#F+Cx76aDT{I7+;tbx5mWqB zXl1UReG;BYH?L2QJB^`+9#qpXZ!&lN1Zi@Aubt{&338Ip=wv&-2;WD7X$*HkZ7T z+?Bk#>Dn3cDhVp*s|o~&1%*)(th!g!7U{!C)!7?27t5|eg^~`6r`g8;zh;6S5&VA~ z5MCXO_Fi(p{f~R%_cGP8ws9-go zgLUWL8)j3x`C9DHP2@i3sk(-uQpa%cAd4uz!x_1hvl$omI@JQE$oMSX z%gl2m%X)QEulnlu>L`Ci(jR>4Na-(l6c2?8*j1bFgzJ(AXe;^f`?#7#MG` zKYC)J;aHs1&7dT8M2eP&L#$g#ds*z!lI?xQp)6@!ZpzMq9#PlrNb-NPY;BktOR!3L z7nqa~Rqm28W@ZCo)aKw(-Bxn#Z4Mr%UO|pxZ5hxO6uMHKVUymg;)L?;HK>R}G~y2P9(rqX}^$d}KXckPSjl}Fd_t+sBwh=u0V z5f4TViAo~)9^Pc`15H4!>!qi|C2@#A1nJU=(woAq)+5Pi$zF`xD}+1h zrD1yLh~XoWpz!y-VX7@`2=Otu!kTOdF*G@JShGMtb2GGCbA|>1#p+Fr#th6+7aqw= zeZryX^}p}Br+WRe8G5~nWHYjT=TJ_z?;1WR+1eFw@^NK!C`1GJ6Gh{*-)*M&IMw0^ z3h0k0xx|s4s%W;vzZz_+u|ilJD1TY zd6AMG=1=xNQwxqxS{!-TIG+^bb=r2JY(DlF<%Q~N$7^VK9H)=Fm$9lVk6tZ8P#so4 z;4wr2a~x@m#zFXc)#$6Sy#r!3GhuVpRlX$)U@Jv(R9 zd$i&;PQrW6Ku}$IFFM@8{D){BvV*1(<2!YyC%*XQ%?85~^JXzFqFL{5ru`d_|IkO= zKKv`PSl>ZGI7Crw7V0`LKi%N@*_kR6|6MOVeX|hBD+LtBbSW&33=6S{Rw8euD}MT= z!o)1MQ5?sR+I)#%E?~mx%g;G_;{_q}?>krNUc(F4q^0Wj&9q|x{rFm{GcXxJz6@2{ z;1e`(`I;^h@ubi)r)=2JWIFZEs+M#oGwNBb~8CFi_Eb8em=$w?w_yQU?9%0vPZ$b z``l+k9E2ex+A8axy_(#L8yhLoTDO)IECBrX|^8!S$Ch(#aF&< zA$F?a4Kv-`voeKv#O_?Ch1~P1^Fgq-ap^Nso|Xj?Jd2&d&>uOt!H$T}u5`wVNPtoj z!uyx4mky^~a3h{Q;09bZ&1R!(#^wY1gvdh4g3^_oR0?NM@KV3Vn&wztv^t&2B|~}R z&3X@75;0{dh>;^IMUtNtwNlNAH^_p|Up8?j{x+k3JZ^qr+DbSYvqI)rnH7ZY={B^j zVl8u4$_#@!YS1R-8?^!9KJi(cX8!VlO{Qe`k*N@dclayGBwT6%7|v=nDPIuaNU0z z-=&{uldgn@Ce@@+)JF6|=bcFfMdX)4884ROjF*Sj9+%A?Q2KmSrp5zq5e0 z+%Q>MUY;y$D2wEgh5&;lq&Un0d>;lb{g-x_)N0t|C&=|n?9E}SGnbz@PtUNZl<&w5 zO6oUMF{E5pmSFtez^?2rs$~+Twvz%VN){&F8;{SU6yU5ON0a#>lzUlun*-g~PR z06V4R2tb1yp+Ry`R9nL3oW@esT%-g?{!%XG#k!A)1vA^}8*j&Q*;o38&19p?Pa&bw zV4a~)_-?Gh081Jz@g?uuf%r@P zwoH?zY67=~z6tHmdl!(XY_~ERSd-0oGJv~n@A5>xCou%qcw=2|Md*}m$JKOY4qI5% z=vOy4HY3K7zYt1o@=ZwFa({|B`VubzAM2&%-R|oOx0jBPC{>%Y&2qRtoZ6H`D1R$`ViyyA~f== z_;gM?DFCbRD=GckIL=%CV-wys>Q(w|qzMpGR#wwnv8({5+shHc8jTKnmE|nmoyU+y zZpY_1=4ERN7$+S_caiQ54{pnQk7aSY&2&TJk)ePaW;nRece8pu?0U`&tj#OgH>p+~ zhJbkvV~u(=Rs5!yv26?vLB?IZ^w57UjN`;^OwI3r&-?ytDGl-=kpO#{FfBf-eAe*V{cGg54NsCQ_)0|X z+tokSwsb*_+192&rb;aVtztc_fc}x$BuciayPHW^xrsi*-x``zk6wG>ooJV`9)h1| zrVT47eJ>in;L-HTT%RLDLSOmc`nsWlu(~+QRg>tax)?r|zLHqOXuah_hq2A1rFb&7 ztKe-cqt`BbYX+2dhedXW6 zQj2P7$P!{@H2F{Fhu3?~plPibF4b3>dVN_X4motGkoDQg%WicTfAbFo zIM%WP0Ue9A)kjAK^fA}gaRw8?3u`iqg_@e?w8uD}-&*Is`7gSeoYYeZPAzRs`AL$6 zpme&6Sa4!^?77y-s*RCf%J)X;0#HS!ryQ&jQ$3l=C<;2AJJ%oObm(4ZxOgu-<4oWQBMJ99N<=sy6j(Pj)_iPQa^|ue~CzC=ahf5oXNg ztr2K~D>;vq8t!x1nWm>iS%LG6skYM`xs72As^~9ZX%KQ&1x=Bl3Bwjx6JcS^j8z6E z`$yGZ6^+<=j(hY8Wl9rQGFa9^(ZmvWY5pfKFH8)W3_5f0ShA7F501+oRlzp2)hSK=n z{TrG+dD^44EmszK@%ZTD(qP*4(oM*ff=HSxzf~VFWE1xdh(K66AGar>BL<+HI z2u3K|^}W#jlWHbSDO-*y6c9!Fdf%#ay2^*IGOrmjj0@aDi>(NX2#-c_OVPJOsj1_WC=^OlkYAOt>8ju_es`FjJ%h2a^Z5=z za{Sy@?O)TMI>cG^NxJM|dzoRXe0F_O2h|phJ;9mm3^s`B;9PY^Zmqu}{D&XF=M4qs zMsczYc9Lgm*Hggnr^%OyZ%g>SwE1;Gu>iu6(cZpz-@E|iXbE3N?`I;UiOKUO)7|o` z=2c?{&A73iU8h19ESKJiB6f_>`!T2ZH72)Ak_PQtiSyr1_$)($aU5&S=*X!i%7%Mw z{stDK{u(YC03`RPwdKXE8gVDxcoRDCIk7!E=X%?-1(-V~qa%?In5+ za`jyF5oXy$Zn^*7grABOq>m&l$WBVlK?i@AH%b58#yzyQxHkzk*(3aOXI;77;Iovq9guvA8mpoL>kJ}^0E#4q%DJK)&1 ziS0hio;k5K z&}IxfOuKekEo@ps-#9h_!K9$xaO|7cCb8wADu1ns502E%->|9s8Qd7o(LNOWiS5w( zR>NGuQ0%lQI!v2bHJu17c(QXAw-a6Apaf#5HjPz#;*Y1K!DxeRshsb?DHDBTr=Y2i z*AARA**|v5luZhcLt3yaj<|M2=7%obeyv&4f`Pu;4z9@fIPyt3R%xpR6dI>n7oMpm zZEifVxpm3ZP3V-#Z;-Xu-b^SHy8;__3jDD#JNT1MlqWQKO8c`LXsdV<6MF;Q6+B#E z01eF!SX4`^?s61W+Q=;@uEP-&Mq84l*!kocW8FPdt_tj=Kh@ z@nZW+j1_1X2gbhg7yf+&2CA|eYc3#vufSaX!pq`?VH8*zob?Z=l?@n4W~aJcjHABN z-bqC}?%hE1g!K|2Y4iq&QpCDmI{9{;T3iQ+W*EcOJaMzsV$9F zlq-ZVkFm>GM|d18MdGKfr_VlPB$f zfvv?2?+U=To8)pxifYc{6!+ooKl+%Hn#wIgFHM^_G zbltNN-=SI<^faEBFw@w8I5@G}@bp%E`gn$hI;Rvt`PN4&G$C#Jey&I8q~a{vCh#>4 z0?r`)F+Zu(egROGJ;M_dL$Sdo`Qm{y{?12DMZ%+`_ANV#ZWU>oLuwA%^vRK=xHp?9 z4BWy;N6+)o$x0y#l>4DjRb{9MGs5;Md=|kI+cXY7^~s*q=P&F&e_v_p1BD)bpbkF@ z>(C(FS1KfvaSUcPimoWcCd{^9)B=BmR1-C4CFTO9uab$WBJeY}Nl0f8YOqZ5iLeEv zoIAd@lS+wvCUc^R+r*_iTeTa8-NB>^2bWHls}3QzwMxN1V6%$Cta6*p66o-E)uuAx zy+j)2(xSljoRTKGZu$1De7oB6?bmq@Y=N-(QxNubcm4lP*je`8b0681WtkkX=AI2l zBWir^WY(M?(lJnvAX^jb#_gpk$|KK{h(_TDwt!8?OUfo_IwE>WcrmqlbmYiw^eBeY zP8_B;l1x#yiA5!lRCf0nS$IOs2$dBqPVzKyYxv?9j+GqOotx8}PX+3Qdq#LCvNw$( zlU6nBmLdVYH@AR$2b>C5oH>khOB$jn50I<6pV zK~B5wO9x2Fs+P7r2zR~h*rW|3I4J~^@Yh!q&Wk(1FJE4^$#pox4MP{{H3&HD82hu@ z4$Obq^=D?2QgEC-{fqh6Wn{8~bZ}$wD3egtLYPUcBIxL^$sT#=q1hvked9f~M`li2 z&Xi&_jwZB``jRv;VaK>d-Zgbw?Zr$DDc-BQaD~5q=~B1Qzz=h_>(idoCEtRu zvV7$=v#_%Ku{SkgCAX-oQ7_vI0&7g1I+LilUQ=15fSNcK$+8aRfUWoau~V%OLVk5i zOH=Bzqb9v-4&TyEvl$Za?B?C*55yDVWM9seLNFv&$iH1Lf0f=QX$9vZihYk_t)sOt z+6crXn7Zv796s~A#yV6K^6ug#i$D?+3i0{2s8%?m+hMwRTBS)oeZ89CA1j$%T`DMw~s=|i6-g%4V?(krZ*!|#m9 zQX?-=x#?orGN}0g(aeF;hdxO}Wwb&We#7)YbiX}~LE|cDYCMbI48J)^bf9aj%jWB) zo$p9CT?TyfRofX&u`&f#oWLcXWSnffFZ{;1v`pXBgIYorjRDKaTgtgBYOD15SQ0?g zTi0x}CG!LTcs(^paS5a%-1no?Vyv8@2pUfk5mH%44(rYSuK%>F2&>e#W-=v~%N&}J zp?O%GS#fanFFhu1*kY}vhrWqWKDsM|5)ol7?_Cdw`M9)b%T8h8bV)JFNB2Pt3dA@+pWKJq|*DxcNKli~Y zA)sZK%9>S*Gt_0NGvcaBF6I9dAut_DZlNAmyrRMml=QKQg=`xW&T&j@2TIUiaqvFH zIKAe9CX3|hu#(@17+a@!H3Sl2X!xTg+u5XPsIlFkl1eL6*=Afalma~M?nFjGQeFrg zNrFaD3P;W&Su1Ie`3_A9x)07t7KVDuF+2mS&V!T6z5vs-Y|>3QQ9*-XcwNq2v&5d1 zJ{PjuLsbr0NyE3Tnw|Vg_%@q5$pih9k*$`kYbfs{3&1lhYpP5LP^g)9+OOOazT3bY zaUAJBNjNs`T?(G#wdNZX5;3gOc|ys|V`_$SHvqd}Q2`Y46qtM4y!z2@6RCdS4AnkF zsmsjC$o5iWK^yb++Ths%ubp@M|J<ba%7#) zBB+=9j^V)C(rZRGP9eQXI^bquJ>)mSO`S){2atK730v8=CCi8{9QPm4v|^#zk4Th! zT&%QafmP_B+bh(T6jOnnAdNz{RZ2J)EKF01TD-PJ!|FtNB`#| zBjbOVSu&q^=d-3=SXN$Nx$?lXYtOo@Hl46~Pj&wLKE+ZU%6+TOzxe$Jp4Bm}|Bg2r zJb!tuv$ONr!g|TyJk9u;geBR>OhZjyOG%0{4a^Q;m?sbjinj(bltGSc#kUWlqw{|M zyN(!Ze>6qaVegg>aWqJWY!&LN>!s6LxQ+xe)0lD=P%VE9Glh;#g}qlx?|Si6p`Ws4 zPGw$M#@ir{FE1L`D7(hJ92zW{38~QGr79$Fi+joCq~DHb`G6kvA>n8IB8g5R%QL@ z%lP4PjgdP1Ey2uF{5(@7OuL^Dzok-il=j#TU`u=gk>4_ZjaOdP%dcfE&xdkup%=u{ zO#6rgf^@4y!Lx#s#Ls!0M#`vTR=eeHV6Kw2>!sJMkGKulYOzHU647D4{zB6;(zeqM zv@WFr+&ChZFHoz%FL|R0Co8+%cqQGTaZE$Idg+;`q`ieP)1fn2SK~X6gDM_cKBu;F&GcPVH@sYw6wTi*(sPM4ggVYmL?mz%HX$UFqX8&ibDthzfc?;n zbM|<>eBnRq4Kjl8U|O28!91$CdWVDpXf29>VMku^M!*_kS_0HBsG!YA#ZZ$u_&4w| zgPP$bFl4kpQyM`^NfxkohvYVDwsscFQ!EUSb|^t$#1%6*+j`P95l`QJz*=*l62E`@ z3vtFdPkPW-T+x%Q2^Mad9309@;yTu>S$pP%XT!&=+X%kuk*$Mry;yhp4%*TZ@L+<= zmdR~Xs@H$}zfgVelqWdV%bTBQzV;g1;tFD0I+~8DQ_O%u`cpw5alo19hoJBGoG3{^ z_F&)mnzoT`YDfN1ymvBwGGoNWlg_A_w#w)vQBFbV{$6g8v23!Fgla`$$L+oEyXRP3 znWh{yjhZT*)~bJvR9Qk=UaXATUoX%9y&?ag(tI9qlF%@)lyjyjUyidTG%RJr2~rCK zqDBD7-WPQIh9uw6^#F|2YdU^Shya22pF>5x$F#6Lgp3)P$@g<7Tp>UaO76+%poEKF=0?6P1K+)e5Hf|u7U4Uq+_5N{&sX?)(*(oct{ z)T8|QCu!HAaU^IahSyf<#o`2jdhS5SS&?|y(L)NisU&9ExjA zNlBbzB1O$-QB+H7PBx~tYz3G4p*wI|8Ei|}ea|}0$l*d8T{*?{LEWq}6=SGVoFd>Z z-N=+l7b7^AquwrYcL>sBD2`9LVJ2+=)LTfN{=(kj{?HLD#4cOb8~dOcJ@T+GhiZL+ zDw+>J@w(si-2T!J_sqNh)~)l7L@}J-N3>w^k~?}jdaJElpYoecrZ(!Y&1&POOn*T? zd~oPnQ=2lKg|OvAKC4}(ttX_-Yy*$`SMR&>k7k7XJ=P+I<%X5Z;26hS$XE|>O{E-r zgBgoi-=VZ3pGev4T+CF`!GJ}toXG9&d#%s~LhYF~`%M4@c%oSQw~bVsr5KX+uBW8m zA;etA2AE3(Ou*JBu-&l+kIPB}}cbiE8Q1UvMUI|2rj7n5Nf{B;jQ?ixX^!0C?0ZQ}>Y)_@pGs zM_N$AO)8gn+^F|#NNlz-T~Ke~T@%wGEF=M)o~cPGzu}L*m2dseR5<*A8=r(6%z-cI z9cN^jdg-F4Wjo^TKXYYxl5^jl`3fD$?#4Yx>ZokKalScTfQ`P7xt~-yxJj&S`Sn6Z zofSbqIdl`(59L|tmAa*FK9KyWJnQ;JJe62rkNZ9n9WmO>6D@Mgq9OKBwfw-F;5S-) z>7vZ(SZh1dR6tr4;cAnsF&U)~KQyECjK}_sM(NT;a~h=(%+es3ekYh{vA=i!31<$u z(Ntt6<+c5Ssk~TNoBk}ge)HFjcVK9yyA&o6`FbqK79s07~G%6rA-%5EFjmLP5nsQwW6}50HWn+gQ&~CU(=+s zu@<~C5`Gf7vvij%BNMp2Fg8mcPRNiODd-36KRYAufmtJ@>hIFXTnz$NIs(cJN?T@) zR+lDbxUY2W7AunnxV8H(bo!^%C6Fn&KBWe|YnF!-9Ccyi3h* zj=B2uCi9vp9mVe%H{E~o+wPw;)MbGmI~+fDz)mfC*Fl%_e4ZT~bxwpSz2goYCLcW6 z)Eiws0R1_#j;rM#?l43$a8s?1(xN{XTen)*dSOOK-h`-)htPO`qptTTWH{yyq3gXm zXngNQ!IAE^?R|}CgGKkE-F=1|rXn~Y>yA2sD#w+swz_4as1<(0z& zhDp?VS5UPNzu&nait=a1b@`0Bbc_{iNd3K(s^lL~$cxSj6L?+CbM0nF;uY~n2$Jbq za;q7SIB&z*&t22CcHM^c;tw|-bMu${fJ-`Uw5)s!_14pW;993I!#vr)`xML~ngQZ0 z$LBekG&eg@td%-^@jPmQBs;8kko_7{Aci9wD4$YtD zJq?sqXN4eSG^P$TJ7DtOSY~K!-2XvT(0+=>GDd()9X~~Y8-@zkJ(~b=m+f4LSSOc| z&+RMkd5`OoAOFXk3h|td^rPTnh?8*GZmKqfV#T|1MF+-kY4uWjDwnMx>L`r1^Aynp z=JMf-!iSKukz}re?K0p?Yaj3TxNjk)sfwA%M`NT=;KUY=2BPNf+qrNnR*8g9|F~zW zjd$+d|G--hH*xNa#FeoLm4O9Gv2g5-vTY$hd z^;(*fVC`N{s|H~JxH=Vyb&s^ynv#4P17fk`0|*2B4SYg}!oO}e7erf7-BQykOC8%+ z{{C(9t<}pnTmUE8){zFzy4R+Hs>!<0Nvg8YF;dKjWfc1s0Cl`}qSSI|_{O<%jzk=L zP}$Mt)2@UNE~d_lTRtT*JOhgKQ0#v%lVmk)3_j>#b@BlR6}arJ4C3jVf6XF+%(oWH zDA5ulsQb%&-UZu4B*cfY7HxdZ31e-1jq~al-bIJY8h@wukN{ZR9BY2=q)>@sK?TJn zcbw@R=pDYK*3l#|Re;|-N%0AEUnB(3<&QdhPovb9KOw23Vu*jT*2IY;%L31o>!M<< z)C3`*OF=Y90(FWNTT!kWl_W{X4S}F~R7jt2io@5-4_N{G(>o5eggd+uC<!dV~L zG@=cK$qOthnQ@OeG&8RImcP}ETRg*zlO3^1h4nNvdZnN3ol{d}X^?*lMkY`gkyywL z)HXeAa73D!d-U79FA$A%!!hUK6? zyG_9onuP?tYYpGPtM4hY*+}Vd$2tz#myCRoh^G0c%M-`(k$@~9O6UJ+_Oe2qR31ZR zJ4D8Y^xaamaDAFHKfCF?%NMa{?k_bgY%+`<@YBni4Wpsj!kxY23t2I9Gu?RVD^AZ1 zqZOeIkD&cNu*H57Uc&BM6N` z@{2muprbf~23#_;quz4hS8iH(;{_>9(de%&*9;Uf-&4B;$SRPzfXndCS+*ro&g@n* z+X59V4X~&(;Qh5w=(Ub}#!ctt4#&;a=aA9X8)P#`GOvGX;uON&>r!53#%GSR3Pj0A0K zvR1!*HcAw=8m(d$uUTIhoT}L6CV+TC&z6t9$>2(eEY?#^sCeyV%P+Jl-2j$Jv(gh^ zsP!z=VvC`8#ByA%xE?Z$6jhg%78szI1I0&zh=sSven1CASXamfWtE#>GgHB?mM(bj zU}{OkYW32#(m@v7d|(Ofcj@a3nN|MY>HwsB7P=rpdR)ck1Ir7~iLj-kxJ=|4q#Z$B z%ps&Hpi5aLa=~rHSu?bYK9Rr}cNZb5ltsebofdaTf_Y9et9w}mWO~izBH5J5z@$D( zCs6rmYNfp?9SN*8$Bn5eIV*Pm06_Zs)g~(~&cNfq7Z_{Cj4_SaG8KVV-={rG3`<+l zF>U`;unplRnZ*spYEN>0fPP}0eYz03g`5b&ll#i&s^zBA-OZ+#kO9!<=8`1T0r!<} zUL->(X*$5kH46NWXe_dd=YMfcw?Ev_lfknR$RTg-T?j^y3v7zlQHTlC)sE`jCbN_G za^W2b`b~FndfWv>b3?|zOkW-t8X|4&BR3caEj{{onm~o+AkK+-H%Pz_!pLJtO`UI; z2T#Y^?h#zIfLXd^(}?z#AHB|_G|O>;77&BUaqhRDaH@{v*3PWpV`8t4uOyD5KeF_Z zTLgxU=dWgt*+-}2t$n56++yy<>HKv7X~DWIQ#*RbB?oZiqzh4`0npURCi)fxpC!Tw zB(7lfs9(M*2q2Fq$Ap)Lln15eqCJU%=t<(`Sm9VUS?D)Ij!ec+9o7RkOpRk|Lk%sz z-xvZi_nqmOEx&(Eeki#ql;4MwLL0~6*hX+P`LFdHpMox~zk=Q7Ns@s`#PZ7Z(+yLy zyrEjSJ!EDJvie5KCk&B8Z1z1Dx?Lp&8<`9?NZMP{VLapsG#<&I=5D;oO8x-pz$#;j zJ*Z|&Ge*dGXHGRp&BG0Z$@m1rKgd-l_TXU~IoFA^h*OZgD!yR(^XZIHZ2HJU)5D&A z<=?7@Et#Q*W$~xQ7R@67wG$Ti;L|1@XU~Um=_op)!psspoGw$rRE(1}OSr45?Z6#n zfsb%nQxUA&A|5DBu~N(_y0z&Onr-lsGhKaIJvz1rG}vyf&D;7G)E1w9`V%_%pVMk< z#|JL0T}0*Pj=eV=`NDbj{9KPOsy(%Lq+`>dMlPI>CP~2@q(^7exgYKxrb~tz-L58y zVSp+)gy^O|=0Gr8qSiCew|xX35lv?vTU!S|Mvbw%Kj`O#sT=vs2>z)M#}|$aTDkRv zb>v))4#TNO274_u!-sl@JBZ%Ev&a{-2if?F&PBb8m)F`P5<^)OExUai-EA^yC&2 zK`!0#6uL>^#G=au-y7(kl#WlX@<8qB5cLL9*Ox4*EndEI$>NoZme$s;=`nbwZ}p8$ zuBt#gefnNoKGS^xm1Ve5S5+oQmbKT+BW(YkOfO0ud+umuRb`Y^*ujcPXU4^T;+^(e zWjTR{3MW}*;<&xGlUo=a*C)~k$mr4Iaz4u30v;=C-G=+r+>>ZQA~6o`U4Bi()YU7owaGDzDPHTb}K&P;jNY3_P;~zrknZi{1lpew#J}y zd+Tv_!LG(6pU|gnE9K3z|HS-cYYK0dJOl;OUijv?~%$g%F6arLLv+W2(@Q~>ge zmz>tQ{PfPnUd1KsFMMrD`r6`Uhy0;s83qo!vufx+^^92#~0nwUjP$DJeqqj3K8|_63sZ?g@q96-dv-P5% zXCbPjB)5L<{)jJhRyj$aA;~|pFoKZdkEG@Q&$z3zQA#O=f|cA44^?H!yQy!Ug>;!b z+PdrIqvN<}cme0F60P%y%~V=SB1z6L z$ti?&*3kTj@`D8H)@Oflgvu4s2u^d9AqTT4y6LPLOg`_SdW#@=4uw~FsKx^Tg&<@f zM)I^RlyWD?>0F-91@RMZ6(kYn_hM47#~ax_L4^9|#d~DlgBu)`wtz(3{k3D3m;RzXIB+i3@|(w6F0lfY>HhdwqStA92->fn_ZT82iG-f;UDZ!ZVOhS(Vg7azS5H8SfXBf z;9vZAXCXY_q#4id3CS=e#3ijDm5HE5n`eRsEYt7|p+z?MYxb9!3|jl^`e@w@$xIO;LEpM#03uA1+1)qEG0cJJUsM=0AxHOD`VJM`3l*KuZO-268# z0b=j?rp!^0T0*DPxm4qY&19wD{tW_YC>L5SEA|Y?U|m%?kXL(}q3OA-9tDlK4CFal zEC8#e(l5P=f$F7SvksloB6j*QflecIq^Q*(r4MZY<1Ps9;%B zFZ7guh0^4`NPbWze&*WhcMA3E&wQuKn@rYU=D-sB43h#~ z@VGOMPd!Z-kE3iSYdd7ut^YQdN%-T|I}S18S4|xvKgF}_sUx#@3(scV5YWMAJ*O?{ zch@T9gO9K7>K(^HW*gYZ-J=9c{}o})^=UoLVd8}@+S3DGFVQ{VUwYLmQSnbcG&R5X zh`&|MUpiCGH$DG=gl+7xJ6Ga$pme=^Z#eeKA0`;UVdLp_q>PG(>QLgllL~0&z`_I& zni;gZvY{pVuKps!yRQIRSY&$Edj^J-Eq10ArC>C7j~ErHa_uj5p_p<06uAU1%_ofK zKpCMVzv_O-w{HE>kU3O@o%}_kb31lxJ1pHkLORPB|7)A3*=FV<-md85wJk>CDlD^v z088KgrqwwZnnNQdLHV@2?+6i*P1*^+7BZtHVQ_|t$XGvhuQV+WUfd(s*OQ*?dJf(H z)ipW}m_C;dR#Dw(EF~wAg&!pA5oTMwy25(DDrZ>`2p27a?GjQp0HrP0#9q=;L4E=s zbbvNsex-20N@JF5XVQDZ^8gy$(a$>4?ne7>`M^uX`?tzzkWeV8akvU&u+LUc>}83R z#TjQw3^e{zF31qI7XN0~ROeRqm6xBI)sKsx_RE~a+w_W)NmazQnxxMhP?=B}^7h^u zglcujfhJZLi`AL-$5=hfp|xky?gL2anR@Ac|HQQsx<(pnHjM(Ynm@-*6E3N7m<|p{ zyz>r#kpm#6rReU-qJp~s9aKnZmhg1rS0V@9${-QM!wf?bXr$LDPy2-DTF-!jvqqO= zAW~RVPnj1-tt~)nL;GJ)Dlf+%+Nli>teL|wmNK0$v0zjqadjM%qxid2XU9IX2q=e6 z14z@UGR+n%rN|?SoZ8a}R&VU?u^zT_@MnKw?M8~e*i}3r2n9p%zdyZeG*o~c zlkVZ9&K0tn9Gl1kZs2z|_Z=94!@B4UO@RtLP#MFDm{x1)+R^)w%kta7S+4fhi@qz* z)E1=-nrf;DXu|n)wQdObelzTLPU#pP2$bSc!l681B6p~uE2VinKp- z?7NFPkIe<2cE;$=-{|ZsHe@9=NDXh~9M8rU@(C^4M97UMz8qkOPd#+ks~o`;d|_s} zD}#HgmS4TTdsBxeD54!59~_Ow!Kz3@bbsP$@_rAQ%>dQ%bhY$}^Zf{q#DEP_7NQ92Qz^8sZK>WIN*OTn7;rD_-A(ID2@Sq6;YI*oIQ-d_s z>Q_yU3=QvGU}_>YP97?Nt9#Rb94m%C0k_zBljk~R#jSRTV0zO8a@>j%n_yDZ7!NxO zuGnNQ#%r=`QaZieYow;;nT>X}pj?_$3)_6#SH!OJB*NG%a;p6NkASxaOCO9iFUO&M zpUt=F8`H(zS6ff~xD-<>h>ECe&;TsXZN3O%#EQKLR2={Ha@#8sGU+hJ2DxGBxatEy zI)!m?I7FNg;Ru?Vm&yDEauqAgo1kK*Z!Ch1l{Q{4{pa|U7z3-OYFFdG3cGM@uZxth zQ21h;v0+)*!c^v_;UC%=i1g-pgkFS2v78e^y>#mz0fiKXRL(~%?W>O{Y^G)@1?;3| z{T#9YZFF^T)Df&(&utjm$Izji1@L4nnrZgR*}ebUzttR?UR~Q95D;8EQ`4J4pK@r5 z@zAgSR>gSPOvPA2*ce0#i?4BV0DLl>P8{3np77OK!5i+{b)ONq6p0lOWGf-+jp{u# zDT_3iQ_dCW-PFf?hWRItyZO}m$+KpfPaQdLSCRng=*|C?+#UIc5{s+0o;1o-)HhCUq#TPsL{;4`DoAXV4SAe99U$TI*^Q)5`C*)()-gf?e7a zgg#0HCf~K?bSAaVRE~Q2w(V`35AfvFsf-f91#uwB3TI84x@cp zXh`?YzJwq8jgn9sDAJbmOR^X|Zwu!Um=#-g*`mD~6w?|?0H2!blEy|_1a4?gLq-qw z0In$Ps#CClW3jFvP&yh538rT9gA01x9+T-*+qjly0`uOnkjdD)KRB;+&L8$x zOTRkRs0?*4b4(WY<6xKF7N-XN;?QKTfl43kIz0!&a}PP18cx7C0K5bh{Sk#Qy}R+{y0edKew1(Y<57!Ya- zcVJJfCv8xa>6@7IQkpD+l;w0z5zCbVAf(fWdTU$A%n%bCqBR9zHa{SFK8kB~MlQpn z4o#Qa{Wm)~mmgG@ODRGdoOmPkO-kq9y*Fkpk~X+>u|&Jl1)nf3A5lZ)zL`QFT3p_N z6jVDtfS(9@bzF#k2_U~D$n|(iY^BGxnc$;_N(i$h{ z>au@_h{oXWmRd(CMV4B3pXWR(xJTX=t^EFuL7Rpb7+_fh_0oZ#r1P*IS<;huKbKop z-OrCG)O5_ss}o3+6>eMQz5Fe|eEX{scW_3-sm4L?y$_rDk0XI`Kbk zjG$t@{IXw8$VrpJiME&9$3%vZ%MKfMCl?03VgJP*aAx(pGp7<+hYpbTmO7IskL|wl zlB1%nq+ka)Nug2a$_7P@+LJ-Fh@K7KAmFBxbj9ksCrO*AmwSFMu*h|4{ev47bJ2|H z194j0TZMc9$0(KK(>&oHe4)vYEK%EF$9-Glgj3Jg7g8c5){zM?16=7T zx0pjqdFp7*Tn(13l(MG2c;yFtJro-gMm}#$Na$d@qD?!K%?$u*Z4AYbu23<#W|AZ^Lq> zFq9)h-V|{|kd{vW6hT^iJYgk-Uf!EET!49e>}_4(j64jkHG6CJUh?C@{F>$i)$)RG zdu4%VmnI33eEsXlvMGJ?yU`&?-d#gg2|;-R_<}yC|4f}bBxVAz=1E?3F5h4av^Z&c zJzlk)r{<0PW>QA@sfAF4Y>)L9_#U;S7fY~6$g(6X9(`!S;)<^y#PDBk&CT*u%~}sP z83S-%d)P_m{bA{fIi$5}x;eakrh|aaY;g4&h@F;tt zAUPl~Ka<&$H8d`Bjv@74;Tbs_dYn5|S0?|64N<%oAqR{#1 zkeDm~R#QcIerkm&u~IMfy_L4)cu^Qa1R(z9ja@SfFt*YZN!c+FX2xu#_1omN=opx9 zL(rD>tNhV_d81|zYR?>}lGt4KEPlqruM!m~x}*7X$P}f8AS`wK%w)<^a?p6J<1*@P zlt<`W02N-Rn9a$@ApVBH0A3HCYFx;)usIjP8K75%$@my(Fmt+EdjE0AWxLdds|Ivswhj0=1n(NEy0Z98a>rPdt+Z_#Zw#9C z4m1NASZ~>U0D4t-c>Y^jJE?6`r&@j|#r%UxP{(g$i_1vMI;VrI01-S?;}Sbt)?cJr z`ufsB?vPzdy>wisK;!n0@d;CXy;nV#`0mg5NbniEQsxEz)ePH<^px(M>kFug#+)>- zc%e0WX(UG%3)V}QtQKeTlgOcNJyiuAy(a{KHpgqgB=Q6^AC5)vI6IrW?Nl~5=!y8? zXB`1hv?FRE6viMC@7h=0 zX5De?Sf@D`W3zYkkYISn1*a~6fjv0rniPNY0Zj8JYmvs8CiaXCtX#zp^1WpgQJa7S z9Iedo*hvuzE@^{|wzWwES=Ff8qCQxp@n!S-^6D;;ezFpS85--$8Ykfwe(?F3%gIWA zl5a!t13AXyh(piIKHn4*iUIY=Cz=#S`MhG6DF_+z4e#kJdf^Lk* zlOtDtwq=LF%Pp1(b!Ar({1?N#;F>V5J84udnGG4OL@itt9;b@c`~@N% z+e70#^S4u0#xO9(dB1u+fgK+h%C4cAIEQ;EW}N^5#CL>K@lvKuIo-#a3}weVH@I~` znGF(Evh!++$jWDOXq$_Q;7`d*0ncwARHAh3qoK$=w`e6dp`Rc&H!(oKUJ~f zN`D{kUE(sa?|>q|#=acT^_IW;J4@q#$uIpwNB**3(i*P7g4LGq{GCU7QNksXZDx{Y z308=7wEXT>{LEuX|5PinxbMtc;kJcloA}h5l+B7CabNlHWq4U6PdL~l1r$;{5kO`I zt0xWIh6#ow2KTuG6#c$*_S3v*G-tYhPh)%J>=1w{q3O?cCEse=ZtauUy49k}rT$ z)yuE^bYernEu6;XlrT4B$}7r)TJi)4e$_Hk3vw&Y zMXY`o83T8&O$IZrpWp~L9`mQWOx9{EEw8 z0+XD+k&+fGW3J>FpBVj>-Giu4;ET8d_@clw0{rmyY%rzYJ zVZH``=QELGuO&@ykwNzS7j(&)Y=v3eh^N9~gt zaa&S9K6+BtuTXf>oEhcqCSpOZrrvtks@V%sZSwSABZdn-x!Jqqw3YW~K+^Yx?)1^I z`)(b*daAg`uvKgTMyzQXY#I=qv=m9-ddugR!e!EI6~0{PoM`j&W}>zB4NwF@?C6%? zAK}Wz=`W$I)c*#5Q-I0$TeMrrk$AN>4t%$x4qg5OQmZ(XTfWn3_-41$;v56D}D{x+?r1_^jz}I=< ztxiedT1)ir2h8|&mM@lFk$Dlaqe`Ml=VK(~xR`xG{YZCV)>^%M&Cd*R0tX>|x#7aH z%j^)843ZPXZ{X(gKcYk2I2v%0(mNwM z{nJKO)&MO?b*oqnEYujr)L?Rr2)YqHROGWVo3f^UZ#Nv%eVZ#2kE^z=dYh{c+G^4t zsD&EXb9uC6*I_a0FJJiR%e=G1LKPT>;v(-uNcNE$%mzM}ZQQgV@#idyNzz?J9}1$> z8JxAM%UehpjS74^IY9a};T{aj@}GZ!O!U71$$}`5@a6I3B#(Q3=iHvpRCLV8NpKVq76-i!M5@;$-AdJ6U`&2VNLruB%6*m9=f zbpKeXYD^+>cAAa*(pLnCjGdV7kf~Ru4F?m*uv1V??VQqkO=cRxFiAe-Pr^}k;5y-? z{=xeJJLi#3@0l0D@Z7==#&P3Gn1$i05E4$4JA^VLD@%ikjq;2Vs;pGo&PEY{eKC4i zqOv9|)0dYB(@+CYNf{2Nna+d#?G=rDbPaeabt%**^?OKhsK{RD>X8%u9a1MesI&i( zf4Dq_xt4qT(i!?;K{Y&EZe85 z1ocoCXT9S+(%`T=z|MTmT*bqPC^`xk@_~k!kJ9~X0aec%VH>)KqhH_snD&dVyDcR5 zqZoixG)$6{PT(3$6BSkkW8*fhHRr6tGa)VRJx@n)zX=!>LGmj25u`5jG|~FlOfHIu-J$@QARp(3*X@gsS_*3@m$tNhK(!8NA>=R?*bzFyKdsT7 z7q`nkEcjn~#l9(dC2cpe<tjiDa!BBcb~8G5ZF`$cCNS ze%upiY+Tsq(>(MqLrMk`5QECtBFKbms)F7gQp-3Vv2_6wcWBt!F3Uj08;^M)$jNP- z16ORX&;Q^WV7PDogHM>&yn3bpedrNWITa|}vd}TjV=wU^3lq|1ahUW6M?xNs9TugN zn@YYFd7GVO0-_(i%p!02N9&~@y)KcRA6(`NQJ~*l?>fg+J7a$2Lamk`^|~n=#J!Jq zD#VCw)(f=ycVpaJ8qA4XPCgk^^8~{Nvu`|)$P*LLT+>eZGyJ{YGV+Uj;#yF8DnnCW zH12ih{kp0xBX6oqVxAE}@ynETL4@4^IWW&0K!j3Pu*a*X zdz&0le_iA?xzCHSoCkdaoyOCL>62OvTu>wA*v0+sz|3e^n?81EiMZUFe2NL@EC}*| z-yLlv(xtNy&pfDa@#x->+_!k_ll~%wYgLnP5qQ)4cPH*d>)zVGsQ-+)oQVpWwm#+q zcm`S@`yjzQMSp|~)}pUNp(OW*`h8$ezjR(^gmpy+7skdiBL&WacJI?l_*!BX*dy?t zV!mL#bjnx9NLLh6f1t%;)Zrt+f^};^kEHZPHRVE~;SYNNBkXzAV=S_-XJE|T8@r!D z8xc7h%*mYy3uk$~^rGjjJ!{jx(u;cA*6xN^i5ATTS=(ez8S?J2WS_y{YyZ0jrb-P> ze`bSUS=NoE28=xkS~-@l7>ukjc@<(g3|9o>AarGG;t8K@KL~M`x1X;83Q(4wsFuI;m7K=owPrf!#|EhfCgD6}rK>Ci61Z9`8G<2V zJ|^~!q$LnREib9XcRUMwofVOlvPZW|?CGaG-z$D_oIA%fVvI1#O5eQv=Iv_pnSjf$9iq@7N{g#Wdp4^Tte#M1v!TlFYrjJVW z|jLM%BvznHF>Ph{rC+h@jkGIGWHHIZx59847AbMv?^II;b7 zhHKHj&_Z4@y?NnCEWJ=)2?b@U%OY#_mVf+KKub4fq4sR6_B{KwQoqbpLjeOw=1~%e zlr63Zk51UMkXqJfev}?z#f`gD6G+#Nb$n?;g`4v*r(K*No!>Hi@tsd}E*wN}A?kdu z9F47JktY6NAki*dCA)ofF#leha4Y$-I4eMI99?$4pfKINf7&8cZ=s9a8i$o@vzxqE zS8Yk>?vo?_a_XTOB5(QSy*5N<&k{Z1u#P32HWc7Y8~s&p{nWdSvIIrb$hBD^qN)Ch zhPPMecYj>J04HO)k*uS_vd~6b?|S!?(Kp-Jaf`YFoT+fdSP-v#N`t7cm;R^44vi!W@^yHSD$4csQHugI{FuL^&oy;VN z%^nWvY*e8Z^El%zyivQjdn6KNhluiajc;QL6Y}R2VW1(~GT*y;YJcDk;{v6VS50}$ zPm>~gw~Xk>1iOuKR9n9PMu7|!m0gFqm!JzE5%cMGGIOaxG6=7^n^>1$sKxaY)k{zO zRJdJDukYJo7k8HMKwQNx5LrbF?7{`!{I(5(h5)dS4?qs|g-{YS5HQz~fuM2m`q9Rw zF-r0Rg69ovoiON)Flth|DZtqO&?`UVV&jermUmiZ=;}2c8&MfHtgFv95&G!y7B0Hu zK?0e1W(t%p>6zBws-+)%y`U%XOS6)YxQuLUt<%`Bu3Ea}Y>)VeoqIDN&6MZ!Ck z14&lUI5^ZU5`tp)q-ltc;PDXVfe#r!6p&#)GMI|^R@CE<`|ux6FX=L>obM3mmO1izEU4p{UP|FRJ2wPhOerJD-xhv3%|~ z`YSsY_AQ!N(Z8s&WX8Q(iPw3fuc<5@9YgeUyF2E%T($0->vGHeZ)R?Ul)!I3D!*L) z(tNovX{%vV77_$6YBBZ6)`Y8B7jW193AvoG7j4eD1MkHhCv~e{`sq({)kk5x&>E|y zKizj?J0F`w5A@)U?%cm)4Xqj#j(WH?peG>KR) z^zQM_Rm-d1s_&H_F>qGT`Hbv5D|5PwS(+mhVbKIL*!a#tR8QmQ2#r;5mE@vr8Rn>} z)3dUn`R9Dw?76H_Kt98(W4F+^UOIXeNNXb5q09CaE_4wDP9*5=G50wa+N-D4>QBi# z`Ssah8ixHd^RD7%*`qi7VZus}o}Mr9EBGoJB`mAajt zbGkRx&gwpI?WSjL>RG!Ec~o1!p{Lfp?)>xCu3NjlXYHEWGuQT67|e^-!L5!tzTvp}H$q%YXQBj>Ps;^C>G@EAi2p$q;;o zh>olrub50eYjBn#Ku%s`Pfh^n$Mp5+_Ri=g>miEQk`8zMW>V_b;PpG zPgECqm+iMjCE2YsiaEXci$*2nHAASZ)1ItM#Y#^_9XTP7CpX}D}Ry09^ zg&LEhab1v2wm`FaovtH0!7kN?320tGZLCM{sc2yTafnD40nF#Uw_i(lsqclX>%rb= z`Rb1}w1FrR&SmudRAQq7Xl{r^K0OlqwT`Q)fej*GLf$}cu`_o!_0d&FF|NkpT{0-t zuBh7bm)o>R+B zxPU>0>cyu$%K=3hm{NU`ygghWLkLUX?{^(rf~|LaT&9U7ZK{{5y{XEbYreh-a~V!? z$)pvqY(8)*c#$QQW#*Cnxv-AUjq6S4bDwRZ7gOZ5sQKMcbCqCi12PC=Kv$G>(YziN z3euzb}6|;8-=mQ ziHj6(#^@&zR8*KKQtL4nQCP+X3~_Rx(7KN{1w#et>Inyjf8$MA!U5iWuB|aM>>mYe zXV|(cSDmtuR!$3{WBczqJUsooX6>b{x0EzaORPLaWPamukE@#Y*8@egKHwJfMiV)Y z@?c$|PASCUqPVntN~WDY#VA5UN_eUpb@WZUXQsFO*Ob+^m7@g`g$mVt1jSBfPWuHKuk zyQ*kv=Mx3&Zaqz5`+zkJ(nw7yQpl*+UkRTq__tMzL2VlR29_cDhpR1{U+RkBELo?h ztFUR*Mxjr&Hz+tD>v^1{8S&H}U3vHAFTJyH{U)g= zscvXJ@sC*!$>0cccuc-!KRK^f&SVri%UqKg&9@Spwj^^gta|D8W3rs&@Dk;v>-$HF@jlBf64~0t>TCxX8cKgH%gJtP10}f+ z|BM;9BcLrTCY#BNqJrI*Xb#9A8MyNK6LsA+OT@@0TQ#XlXJUT!>wq43mMI9gZmHy*D z#mJyK)2W0!h^i|#13);T_DNz`wx34SZxr%o@xO8_UP5V%r%}PN*D#}noQbxsR0Jr8(BiQsVRL5WHVjxKa+ZM3?7|JqfGt1fk-9&mGbo<<1pt)xUyupl z4OWnReVC+@umgHD|jX~ z{B6n|>kxoZ7nwCV+nEWc{QRf08l4FuvazO@^$SsH$~K(F40|mHnS&Y})~-f1&~jFJ zu??53<|(4iA}cIDIf(v&#>&&RqfnA!nxZ7^Uspeq_9?xQuae-|zmjHGZ+l8o7qd(S zu%%x5&4V*4*7DOblDA%$+K6U-61ibf9bEvZ!Sw{n5Nx_F`1btO(A_Y4p5}96Pl%`U zhTuXf?sQ~b)k|j|6W<1gFL_?~)_pB+JTm=N1q}_#Z9BxV@%*7Ae&ykKt@$;Z`%dK{ zjMDw)3mYoqFtk>l3@t#srAU_htBU}AxNy@+bpju@o%p_i;9b*+W(ruBYj|FXC7x&Z zgT70B1x1w*V&Dw;X^DM>*HtqnUImpUbY!%T;-%V?a7!OF>5y8bkb{s^4lk<>hx|c3 zP7m1ioWGL(rn_;UxVg&bsHP1+kf;jw65YC_bJ0^qy)2dRvuC&_y-TdIp)ck+oa|q> z5#;IBx(g}NmHsq?&sy*_`0VQs&S$$D-B#_ObyB%Q#%%4j#$GdRf2@`l|01_~?Wcp< zyx>6drDYeM$rH`w^U$c&p1n6(mW>Pr5eda2N|?&no>ud=GpIgMwTJ$`R`q+D8z)%@ zr(w7up|t4NB;>oDo-n-=idcouA1;Q5BMd=w+word5Z@cs8wGSK*zbHguZ46)L@8ck zZy1dIeG+xJI=~w5*#w>a`-$C12o<;~fwn!O!&vqgElgd7v+8El7C);VrYAKlC^d{W zZNYN^K6izuBymU?ZpsPN`AkPvVw>;@?rNaH*P_)2V%ZeLlp_W40i{cTB;)0Ahi1Hd zcKy9JUY5)-UUE0N#evCq>o||=tm?8TmJjKs=yhlmip%97^z?G z4k0beqd_<}=ccAZn>en}&gvzHWmxKN2)-!7%3O^qnR+;Fma;rTZ$R#%n9HU=M9!j` zxIFCBOXAeN>4`4@b!ZE%4+WZ!CF4ctkrg1S;_(%iJL|1Y`Q5hfD}VY*E9T*_o_=M% zq%3`vH{fG^N=rgOBqx;!h$M9-5#mJJiaZXBB{smL$v*@80Y|blx0bJ0^)gu9s9Og& zou0v(GtMp};?T}tns>^q^N$wC61Uv8*yz1j1#5?I-`Dc{uQ@%eWYB@UHRSsv%MtK} zv)Z-!QSBKqe@>)K9?!ajo;{x}Bn6}_;!qyPjYkKf^}vQ&e(?1S(wTBs?9_7*)*xVF zOUW=1yu~SW*Ot1}H<|kItD#jARn$hd-1!S-4~geN&mrrr)3vEgV^)dnhu_{cRbVzZ zY>q-3sJ~bJw6KyMI-JdHCi;d2uoY}jGnN9MinYak#c(|uw*y_-TJ9(zxQ(EYN-r-( z>{O5c%R4%(PsGSV%)}i7LklMt+8-<}#OH%v{JWpY(QxuAe`0pOiTK@e5zX@Vq!QS1 zyh;{|eLP+j9z;-7v()aB4SlT2A6P2(k88 zR#XoSP!UK8Dl*N)i1)o3hU@eqIo$=3Gd!v*RoQyOH|cb&=c)LVyIMy?IGZ*F8&R4p z`S-@o&}r~i?&B36!>5NS-3C6Jb)9&T(Wj*|^NP1g%L!4am>zVdwSaP8b$aO~j?QYf z4{LDA_wkw_o15xaEz)2YDrFDS3z~QH0$XeU!|vQzutzODp$h}V*u>mXJlQ9638M1K zrPKNw4ev_1Akr@f6-0TKfrbg`QQuf@7#ALitjNk|?}xl>22S@rGAu(?x3- zfq?3&ZgknlRZ5OBJGrGJ3#DlWG0&yjX{3V`zm$9FWDE~poEyW|0WgI)kU!XL%*RrL zLeRnkDpqR@x=&Wcbdx^MpNGjo=nF1v9S;y3;<6b7HZ5SLisaeB5(Qx899exBV3ui# zpFvJLRoY;T!8#w*{?cUqS?Xj29tzf7z1;V&&=M5j!a?2B+{KAdF;oQ79pcySbgD@) z z@SD_}$Ht`!q)HsM7K?>67rPx+IwwjN)YTG|X6ZxCQB0_Od|&zaKcEa}EohCZ<+)AeA6`u(2IF{-$r50{+^+4qv3%0P4f7+aa;+LY6wLo+kt-mg6W&?+z@ldl{D6Y&v*}39E+Nc#>zNHl&k@j zK4WE%&`}eJBU<$MLo>L(a=&|Ra4nr-aOpPWrT@hp8U14mS*e6uu3TSbz{VbPvOn|!i1&p(a_r5;c0CK-A@C%){r7| z!oht)QAyay7zh3aOi5OH$A24!;R=RrY~NRY?ejt$u`>NBJfKaOPVy(sBILX^w2kyv z+H!wkM^td)PH~bn{wNY~1|@|jmQN!oh05+~ORQz<9GY1pQW3HSBwT&HeC$(M z+PP9fYssdpSE8UL>aZFT2TEEk?0Bvr_qrzrya~h2^Z|BcRzaB#Fqv~D-jEXi+fTl_ zy8YIxv;HaO*98;+v%k~-qk|o8rzt5=2;w#4s$N>r<_)0=?qG>p6L(2=iywkEUQ{U3 zoIb~=x>QRyTsq}mYNQB{$q9^yF3iV(ENdFalVTx9yI4g?0VxY=rCw+&gp*87jcbSu zeHm@enN63n9oOBGAPp9qIJE{8+eQ&fg**$dv1Qi(X2UhJM)MC=!>vPKRS7 zN`IC68Pn1_Xu40HHR27mcD?mFSaxaXx`2l*Eol+;`r5nWgxHMejb^-@K2~t{jgi9} zM@?cbSwa*m_>f;*C{6cfqdW8w0OMCHq{{>nKHipJ-;^N41&5MAA`jzT5XlQT6>m^E z)2z>FN02ODMmN8EkI*0)<2?g?H45l|eNzUKxJjpU&2TB5)@so4%K(3%f}HzGEMeAg zKBIiG5+MPQ``80!TlMQtgij=bF|z?)xFfMhv@dN?Ffw+K`8J}&Pe=_wIk>=Vmv4hsF)`rR zxqXvpoiMr==w9+>^Rb3N$vt3~ygAWFrjt9CX$x}2Sudx!ehVB3QOGPv?0&?wTQQ@` z1fAS>c>hxZBmI+z5N6$Ci!r_xCs>1!n>^jb1B)=Af%m}HQ2K3}B@lS`M>7Z*HFN3V za}id+LD55tYNu!nMEK>G@w%~TebHvezxP~yheR}bf)KmT$j;(8e2O?uy}az%JOr{B z?eM4(*NBSDgS_k}GNmoU2=txt5e&y^!$+=Tpj!U7e%Ma}4V%(svUyV(jG`g2{SUlm zXXaCFgiv>m2Os?CtBE#1m;;%ySsH_i^chJLH2s^Au!_S_i0n zXh~%ePf7zW{J2~{(o|yP7cZW7#C@-`rV>~`o*{=JqO{LSX34FP#AU3h%?-965o?A?FzdH-B+t5_Annn5+I zujAS83je`taInk_^SgT>{3|EGNAfzp*S1glU&%CV&pj;uTeFYFF2VezqDKM07%)ti z0z=6>xkb-Dvz%!fhK~FanVDnOx29Lal|(Nxy~(7o!>9z7N0NnJvy=j;U_xc&hkZew zXmat9D43V!AtYD3zM`F~KiZvlN+%2g;uI4w}> zkd*SB9UIrP#&5R#up<*>o6()4Lxe?nlca$w%-ViF%pkuLJVDU~KVn!;03n^^pW)C0 zE5nv*KQvqF_UGSgTWZ-%TT1@$XhqoB*;!kt+9&Fkjp{ocMQR;RR{mc!QM_xHqcl2z z#vjPRDX7KcFrCyiNG=zexgiGlV(12_zXbMr>BdNv#u}&mSk!#-nO`|-w9?-S)tV#A ze`?XEm6&ED9b(M`3^x<`c}9z(BDmR|02jA zGE_`d64cWsih4#u&_+rO2#rEStILS20V6GP>nwu|_HH5dNB-qqIZyKeS!CIcj)9y$#-ZZ3I{*NCQEfV+j!242{ODK?|Tz^#_ zoC?M=+*_Tu@0RDuPxtYM4B=+=W`wp~9l)}Z6QjeE2sZaJ>vK3Eh1tF7#H`|V_-S{| z=aX_T9+0@Nl>7aOyh2~DmwrB+p={}{h4Ox(&oe6+X3o8Obw?-_JA23D2UVC@M-ylF z0l^6H05xf(X;Z25j&ccPv7LDf-yOCOBLoJ&WLB=Yc@2Q`r+gKnEZPR5xsSPCs1tbE zKkyx}#8q+jV1qn@-EsL!#&s5G3YqX#27;uLdq2=0YQ|HXRyEE<4J<5fSL9RL9;F1} z?n<3_W!h9?R`w@YOv2pNS>j>pI8fU0Htw@ty7>3@ESpI1&?R}6s&|XK?)T9eA}2kw zX+GQ6BO>-3W9(yT{A!&=x6U}E=PJMeh&RvwbwwCiFF*a~u#%{2GX!%QPyKg=sw8BP z6BjrK56DDmE>Cph!bdW}s6rl&1?AckP~Gu@aftpW_!^~bowVozW;-dj7L%0$nB~+N z1E{xrc4rcEyrdNjJQ;BC;+i@dPOcfx(gW7>vU6xAf_&}wb^O?;;IQ%CrUiKVu6;+i z)GH5zXQ70|2yUAhPG-hyW6|a<-2eLeg&eI`~+d3@Ls9|ocs3-P>#nP(Iu zMr%-tZuuGA6|gh2EG-fZzLKDqXg(p%9+?5L-WXR*#WW<~01y&Kj!yZ^KN&S;dpJ0p z#XzW3Ap5MKE4hE{{p&Scg+S-HZ}WL4gA%bgS40W$`ATB2==Yc+njIu1-kpbH5_@WV z$ozllKu`is-)rBn$xB`n>6AZrt~o10VT(l-n8fWRZo5M{EUI(>dXab zxs1ZuFzAPr)-Nl~{cCW;W{G7}i`I^h!<}bKEK5J0OJbETykOe?SZ#gyrMcE^KOIzP z0bAotUi0IlwM+vh`52zx0YZqX3=g5EfPt$-Enj=T9R1Qc^>@$A&uAF^0j%I#xr?pk zu2Fzx0YQJ*_J**cbk_KSTquq6&O?6T->OtuAir!$54jty$1SrdAfY{Uy`}}a+xco# zg4V?VH?}}}dEWcw6u!y?aGa91Y9k;2NT^KNU*z2qw{e%Hgj0^g@EG4?b}Z>CLO91A zMSBW85@y_^)n!`2>8QnaU-PQl2Ii{orpv+5&XhCNq=mHn_ULKIRern9^_GX^7q`e(ZfeM2hZ#P zGR4#YDwEusc#pSMY7;jc^fjz=b0-N$;bcpNQ*e?>}i{I$}FSOQ_s$sj9zHM#)xRj1n*NHB;6zs zHnUk%?rLL0)E92|LTT^m7XnahKQ}R^xO}Ef|JNATO@fIL3aFekQ}OM#of~KxZuwV% zoPPaWX@-vSi`T4P6JCwPGrSV-;-Qf3fh?x{B&3y&5e+I$0@=t#D?m$y6AX8@ULBI@ z&HX0>PB05aZAEPe9;KN}`CYm+6O$|vEm{f$%Hs!TGKE>HT%{Gpc0p>iBAG2MbevQZ z>}<`7*;{^ai>1Jj#$I~Hs{9`P@#dREK2&0ooh2>F(-?g|4Or&wz!@l&9aUdFH?onH z8OsqQB`I~gG4VFtVeTsyQ<<7N$5VsN2by~CWEUw}Lr<7Ul*vA?_+kO3ty^3CB!>i2 zuii0rqxGvjQ@G*q3blUiC-O0yos-H=0!3h`*$7&li(S;(q$ec@&WcV-pKH%b66@8~ zdGA>G@_F-ie{f#uoImWXmVR|=3TVn%eLftIs2E8Y&u+KT^NnRs$T|nfh_08{<2*(+ z>axo$09t58ei1U-H3`badeLn{LHyb)A+1!XdjziuMkU7599S8JQ%Q@7n{&*( z_4eubvtF*2wiVjQ#2=dR^KNLRTE6D*yWL4h2FdUKIn}tqfa1Uj3G3z8ot#A5Z1!1)M?ZQXh zWgb(ZSGs%{(|>hooqRuR{7dJ{x(YKT*&w9Wyx=HV`X0MbzJadL7AybkxeEKa=AaFu zivUKRki%4!LjiD0xb?BJJ0K|Wb1klM?)|-}{FcgtQ(w|tL~oJjp0yj-g+I;YLwZY_ zLAvCcq>|zWo|i$kknf|*6|2viT_k&nZeKAFR`d+~jDk~es4-fJ>8GMl+v?;5MpRsd zX;yI~(E0?rEZIbBaw{SovtkCppUaK?qde)nJ>E!h1tK0$GBPHpY zzb{G%JgR5K)Zg)j>x#`X8p# z?tE+E=&KjcIyxJvAb!FTY7q`8gZ(_`f4GeX`>Rht12-9E^h%L3=mxzR?BpCy z$VPTT-^X-_^gP;Og)$CYHe0Cj$4q3H-UKw)_p!|fp7rb?QFbB&l4r?z+sEIO42${5 zhZ-YLTO+>avz4^E%t-x}QJ{sTJt(g0<61#w&o2>QRa4YBA&YrTAU~$d6}$9dB(QnA zSJig*4o#BmDGeq-*#i>&U*6sX&d##D`;R$i0tkq>A)po`N>Vdf$wF8(Bmtr!1QJ|W z43k-sF|&j@GbAJ6)+)7P%6Q~-G_R&ss>Y?QTCH_M1uAaTE-F=KF!gn7)V}UoxA*(I zuIs*^=bV|uk$>NRKmB|RbDrmZ?)$p0eVsk>%J_gHC!ucL1Rx;xUeuG>?|o@Xc7xg2 zGjIz+lZ1tuuE|6Q35dDC{NO$Z(Bq69!g zVGFg70>qBJ1hmH)@?IJhnwVceM2M>OYYJP%#am*5BLmx`q%>#3@<#=tPZ%k9ruG@J~ubIaM2)VjIz!< zNS#l@n#CKH-+ag$8mLAnt*`2QQ1((aGl_ssa9eItLc`2(dZq*z)g#&Yqg z((dPc4=TWC%$eNZ;=$}R)cPxaR3G~X}Ai* zjO!+!0xJ+$chHvC8WY@mmrPSGUkhLh4jPWYO0|S3{|1oc>8`0aO2WdeAV~EGpUVeQ z-WuRQS+;P1pwNPs84&(WfLBnaG<3c>kNj@$p%S+x(^cV$v%iWnG9D^tdy?MJH-d#} zTdU1CEJmOX61%27g&ezkIfC&hYAYa@}kOg_>d zjl5)V7^#C-ZnRk@GZ>B*iWAO4pO7#A@W3~jV}4}M*CwN+MZmbL41gkEF76xLj)x!^ zN2`pfzWCic{DDM7DtuFYO=|*}o$YFW7#V=8py$1tc{Z^h!!S^sEr-}~HW?5=;ZYg# z7j8p;bYXeHe@qBl9Ji6!Up)<$!LPbUcW9<;Vr!_obIBG7{)O|)XJE?r4hNZSUPem z(2U*j1!3=$FO0Qy%-N8%{a(Ja`X?*}9{?Deshh(nI3ff9JbeT_geE1{{NZ9D_!rVa z3#5vYd?ql!kdci|+K79vJaJnHb1BdcY^jyeWiwFEm))qI@kGv*_6MB}v^#vMGEP$4 z?%b{vj$r{;-K0lo8tN-BHs{&1FM`IHgZ;!5uZ-&>-L&#&&lKEBw-0q)?M)e^g#awS zL*P|EWbhL1l-NQO2T4$Jiq+mUTdK7oC!tD92xfg#B`H4{V6HqtWH_IZY>p`jMWT=w zAH~?Qr@nqIs4+Mot!^{k=?ttg6t~JMY*eoP!_qd9rBlc)bd12AKwZgH!J|EL`Z^P= zQ7rEM^m^mAsy7Q57Ns_DyuFWRt?A#+0dB@P!i4ueT3}DpXfhUw7m88}y3u34v-Cl~ zd3JOE2bJ{N_!;cWP}K^L)pjEvTi2KJVbs0B$h7&mfk<5M8&2f*c)@P1Q)Ya8QJ!{< ze(cMrSV9+>321m33zFfpXhw$5?8@wiYWS?2*6_JXo~$Kf$8^m*eC_t3!96vdV;i9l zx?gmkYomJmu`uWd z(b8!$G&C`9*?h!OU!VNO2R~_stv7Ls5daptml0)VQVQ$QkAP7IKKsYxq1=%YS`yl# zKr||QPM;Dh;L{>P($@@4cq@e*Q@HrP(>A#ll-+g}y0f*P%HX8+`^~#OHc6n1peog!3)DWAJsZAWnT@daM zkmCzC1Di-8LiZWv$^31us8RXA3MWz>CF?l0P-&L(gLr1VmxR7d zww_{2G!(%7gwI6B8BF#-{_90nnzwd|DFv1B4@B9;9};yo|Cb<;dG8^MI*g80PrJ#> zzsVbybOjfndrtXxw-_42Dts57o&w*y#!)8$o7Clg&02Wk!h^xXjXIY)b+Xnr2l%w4 z8Lt1JOC`!Dx*V(QJ{WqIO>KX=otf9#mQcQ&rQ{6!Qyk>^Q4r z0Xa;6rx=HTRLTo;O&j`o->1?|qw>VOsi>E-cVd^JK3HW}5y7%3y^vEIijPhR={YdP zRC69lk`hf286-&K!yzl*L`ajhRVPznT(PHGFD8#Quxj@PRuL|z;3^*roo9U0hAm^& zwx26QX<)p!hfYJusi-}G6%!NEq6cf{f7A_Ufosf*tnx1{jj95e0#2ievplJum|yRJ z2n*K+X@rk?)-CxluWU*WS}hXN!v+wWS3*8PhK+crh90Ltz^MSL?CPLs(7&(|l^1}Z zU1C`6z;UGQt>fTo|2JA+;}Z`y4-F10jNLh?FhE*opldrmQeS7@rtUrS^)7$I=;FAl z6(sFtr@5ocZ}q}<{UwbjwnBQwGxF+&V%!bdscpYjpXY%Z^HDFI-@MLl>gax-wKns7 z(}K&&3o1;$rz@=&K?BR0vR`zAw7{{OC}3a-Lg^j*4_y~%UYo*r&JLnPz721CC}jD{ zb%F5G2ds}a+V#(#wx+LdfA#qI)O%f{;OqnALJ^AQc^Sp;0@$4)wl*T3@*? zzlF0SyGhmI>@)Ka8JhHhk~(X-LcTpK`IAIcbQ}#gqI%iu?cY_ipeg&B%Kw-9H5gmlxotNs zQjW?Vu?Je%V`WEzXruDn{|*1QrLf?&mW04v?=`kn?!`6_%E5fJtQNbmOYw2v0e-1u&0b6wjjw%E-t7~$#`E5q!BM-HSAdPv?P^# z@yt~2lYaS7Rqoc|!`U#i0P4l&%-MDsb7Uh z1Yo$kUDC^f#`_MQ{>_&b>IIbuj$Yi>w0ISH=kp42m&I;n%jH?GxZu^uee{6c2m{N~ z%o0Ng_Tgth^OicDk`9Y&H4@EFCl5MC2d<@JFajbG=j#V2{J|lb7Wl*(2Pt|Ic@l9D zh)o8}bVQO5BX%!dP$)@lZ@}AYJsV(Fi#iBEFWi6JYks)}hjycF1q{{pIoaNkGmw&^ zBmN}2k#K}PL&Bu*Qu7H?_q1#kNN!kiU3i=ltMD8Zbf%&$hfD==ie47RyrD}FjI!C> zw?f+z3__1GWosLGEk;O3g#_{}AVJWC>}p1N(;oHY1dC;h7Xyf6pS#xpQN8cKG9Wsq z0mPOBgY;?Wv48=%NWnTW8--WUj*avOE#t&$1jGT7_RfJdP1`kT#R=qSESwv5;US+? zoQ@0WsHdEI-<1_T8F^3Zfhoo^oVNNm%XC^X42h4)_O;U;)zHUVSm-IMCRA*uIPWE! z+pm0{P8&;$KvA$-P7&Vo?@i!GMabxt(r`lZb$T6dHa zsU?+cw$Vbq+Il-+?2YPu8+#MV4tD=ggK_KtfmBYF59G3dUVhGe6#iVqy7eegG%FHKj~N2_Q}&bg$=_r{NIQ}3;95v& z3;iVPq%A@)I`5a<1W2~cPzbQm!r2L$YWuR0nt_Id2}QaE#sW38RmI= z(flhS?v$*Oj$->yuW;mK`4q?Ybkrp?(|1lEc&Pf$)ETEJh=+|=uW;dvz9u0yysdWt z+#uLD9oN3&lue8?SGC(bAMtI1x)4v*$DWlH6IYCz?3Is(9?#&{V0@DcKbYd>b=ygOAn)>OAvTsDni!SsGL zC&x|+dt7Z)71om%p?AnzDCxggTlJc!uh`?)=ipiC;E{iAbekg4y*&g1w#gis*4uMr zVbG|Y`;r8m!VCMJE98Ye{8ODncq7`o$TnB=&GlC#Rmhm+oDaP@HDwr$1A>IO+YnEK)3mJ*n@0$I?6&Zfw>(c1=Trpb<5D^haku=T~h{@0*BTDsU#`Sz%(ZDou#QV- z33KfCK1}6h^h$C|8R5$~#NGKEmA!wUb0`UKgkI@z@dkgAp6aHbWU--1cgfPTV960o zyd`1K+P1}_ccbjiKq5BBKmKiB;#ZZ=ZZSkRylC5aN7{M9f+C1rQiq9Sm?O(<7{&Ue zBg!>3w4fJADX0cth7UhLRF!Dzd~pQ{Q~jFO`!rF82}Vh5@p?T9WD)S2&WU zL6>zNv^_?viKR1BYR`PZLsV*)Pd`o68CKZteStkE*&CGG+$nyS&-%pSiBI7D`hv$y?~D}Uzt-rXA}x^I9u z1z_p1T=ZQh5)c!h9oaO(Ky7}~UX=COBo-n~;sNVgo{CXS97?SyqK{j4bB>u9chtN>qshuS=T~HSdO#` zR-hwWC)uCF7GIw8Ds47M!8v039T6`jvWOF0H@We$i?^*?v;NY{HYot=(ah)adZRl2 zQ`4>E6G+}KzFxs_c+TJmQF9_vTsRUn4?K%ajGIT-p2rI;jsa5=3`8G#N1$|+iDMfj z?yuhd?d-K^RC^xgjT3VN3iJFEDt*G=B&9kj7Q_l!U#wu7OImFVZY6gmpu`95nyUZ) zO}nN>b=T_zLoA>g=}W3z@2JO3Sl)(%L2Em>HeR-N%|@*l2L>XMRdG!F4&zUR3;jX> zxDJ<)E(|@hO}6b~!{S}S64HcUWND%OZ*nyL{6`&yf(!+=mb)SuJE>A@<6elgq~Fk}%e} ztD`w2e+Os#_Sdt_`s$w}vqXQe`;u3(?dILhf@|;Z;BfAhbd^1pqr9pSt|)UW>Qd#| z`uv5L9o1F$;#(!b3zy*$J#+zLH>H`%xQ5%9-c>heMgLYqUGvs}waq6M*_dl|N)8cJ zRrpHj&K;l3{!%84ooU>x@MQWYuyOw6algww=nM>ev3JT>fZZxDufsFEgTkU_2O-Z4 zdLlq6BUs5pauIgT%Ko{jF2Y3T_z1UrI6oKAaR-jSAIihoVjN zJ^W0NsY>K6XC`eFa?Vb{rjzN1`jidt=@0=s#H{7QketKilj{loG~GkZCQUe+h{kVY zu95om6W-lMQk?v8)9EjFl=K%fZ6s&TFHD=+AOG{D!7N!~_P~puXsXNXTh0vC<&c(F z+=?$$HeWh{amE&lhTbZbwYMjjJT__cYBHoa` zN=MYJ&dc+6h`zI^DA*CFetV*@PFfZB@Y^I81&PS@_< zcwz!kDx8mfj#ZD}He)zddsc*ISQv)C3r;QHI|@`5xO+=IA=SW@B#TA(2p3(sZZond zOilMMFPoVvzG&G)RmGPaDTS3NcKEaCV09E5>)@#;{Gdr0Z?Y3--*aOUS+igBO!zz@ zYtgXMrDosyi;}e?4gIB0YZhLkM-^U$LauHH=YBYa3wy1i)jm-@_xAXNSx?IR!lA}C zdXUok7vy4@Tj$ouIfoZ^vN|+qnW2^(fTsbdkhC`}`CQGhS>6s5`Ju;@& zvob7i*4#Y~9mmi_CaM!s<8#4ZPgxIZ^C4Mq5B`ozX}nvy4eVR#bNA99E2*NEh^Gr+ zWj<&uS0xWbnR@X>o6||GHZ!O<-S#cn33;jYTtG*38iJwP}hDQ(U-Y7n{0uuP4+~M6d?4a zE4PGElf9*5mHQWv1IhQy$*b>~gCRbuy6z9(fpI=EFj%7zEz0`Ge^k={OTKATcwoSz z#e-5ZK?)U_BiKc@mc|SnddDhP{}Aq&5Hh9aYI4Ir|4Z`+ubW&- zBGMAWk_X;xxlS@MrooZrrRSzW67$M8p-3E7c7X6gyKyX$=sp69g!6QFZ`TpsQ_WaX zjyjFCz5kwq6DOw-WquZSI_{tTEXAD~Z5ubb^NIVe;nJ}r2KDm;>C^zXzG2;1+q1vs zR~zR@=0^3uejO2i*GO>c=INh6y!eErj!KQn`|no_AoYW=4^+?m!wIVrmajv->)GqVad`k(le8s) zeltg^y#L=g60_?fQ8d5ImB$Cw(@MAH0YX=o%zv6E0n@qRTN@{uddsY&B4=g&>NWk> z*V|LheQE`~9QASEfk%ZFBT?R{KE0n9w4^nRCY3BXx?V@Sa{}$#Kmg3qLgwRtX!@dM z&#kCmt*51@Pt(qZCF+~Uad(Hc2rGs|U28e7)}(kjF^#EADtzC&@eS?z-At-g7ic?_ z)#i}vC|(ag$CZJ$!8c`PV9PXYsjLjJkSA&&YIo@Z(=q(&8r4(Y*u9t5VBUJFJqWDERiCyimok}~BK_4KvW-=`4o~RAMqm>(fYPuiL4ifp&L|FvM_wrT-On<4}_ibF7(7>VxKd zXP-Zyoh9<;no{DeA6>iJU-|K`3~<;>)FIT$C1F!wckEx1Si$}X5#atOGT>e?#Do3S zuSEmmnOKFm*OS^voKky1(HERVjPv@v*(=mdG!sa>&DGndgfr77%%3I(X0TP^NCX?s zo|%QS`eP5(!kK<1s|6dDMzBEU5lT$FPG5fA%NUda|!0iAMU#09+9b$&+$`P6U$zQ|{>X!J>U#iP)FbLambJ%a>{mvOV^+xS zMrH2)-Sm*)?A@*piMrxp_L0@XQ&ohkz5-H z9`jbJpOJ-)@omSUZB|olxKVvLu6(>R(g?IB-klxYb-&?u{m;^KxRbfxwt_#K=R`Ti zv472Bt{su2VU?XkCr$0}&Z?0SU5z1=eCl!swXXRq}%>0zRV_Boq9Rmc+vEa|l zm&A-_TGdrI+Ps$NZPUr1MAcbn?;wGJPkamz{p)FD585Uy8W`WlKg!y}LxVP*h*d|& z<(9G$-PA|HCG38cH4aScB7fLSAe3@6#3pJ8G7BmqyiR+=wkESS+~8S;PDg6f=uc&1 z_OACOLMx2fGZ(ut`_V6F`L+9Z$gj#>@AI=Pm|y5V5M?Uc>QyJ4xAt(%;B%;4G|J_W zC}cj5YMS$fFVN426(ME(_detP>K#+gICji4m)IGr*B58JVagd7U~sw6D{0Z%4gGB5 zj#1zCSC>BMhkx@D`g_`)gW$BKP?`+a2@?O&#RM_4>0iC_SNR1CQEE*h%0OuxQDf(% zATB#*BlHPvT=^?`UFtS!4-p-eu?Aa9T??1IxpTo|HzN=n*3l@t7-hV-;!^k$kz2Zt zZI%Q%14F)5BdRXEdkR9$d8&D$8r4U?I3v{16ksnLFBGESpfCG^BU7zVSRsi<71d^SS4}l`b|3uy^RA`1;u~ya)mg(EvIs{b0axE1D?ZT%eY!jz-R?<}VOb}Z1IfM<^W9fILLiWII(@3NIp;0;OLo!5!Q`Yk@ zpFnCz5H;F8ekSubk@ICjDfZ`eB1B-KNs0B!9<^#HlN<={Bq77_nf;N^ntV-BW{rP^ z7F8Rj687WOGLS#GEQsaJXzoMrw~9J>z+`TCQfE<>ls=S2@%JB}MDbX4Ry96oeQMzG z@m13p+9X^ZL{d@rFu|RA0)nE)!n(t z0z*0uob-Y-y!(DGruR|PK7eQa&)4ng9qMMxwN_=lb2)lVqxXh~7QiuH)P4Sv#Y@j# zuqXdB52}t=8LoZAS63}LXKB2ue@?;MW#K_3%WKazMV1K9bn|7>41QmPo8E-+Ez|N>M#yNr?%o;679d@jh8Cy88*(3_io<{Z0Lf_UgQ0p3 zO?IoG1075hi_{6gCrH%|3BNmsS zY4Gqvf%PAMa|*1FyK237#8a0w!`ft0Tm2QrbW=9DWSH+l?80i+y?j6>V(`~S^`B3a zTmtGl<&)S&!{I$ZORN$VmCL>MUpAT38s^LIIMM}eo`50DBfZ+6xM<6KIxc)XacApV zm`qX+;4Gh+d2{h!JXG^$SxW#%hjh!89@4aJTYRzHERD8PNXSRwb%?#T;Bg^hj1q8|#Kk+ZdqIK2-o~s^dCn_@!u0ZQlFLob67#A|b(gHFUmY(^<1I<@ zvnHQOw8FbKrNGH}R!BKKCM!Eb>AZZ!!WC-Rb47F8qn55ccRcR@Y<1git2bZBOio5h z!G=vJmx@Cz^#J~!x+5VHl$9yX1%2h+t*K^vGMJHG^;weY2R4e z6<5g%FG6YV41@XATCfrE2PONF4UOGyqo|AK3o<$+hg$3BloVI5$xE5na zkTEV6eLSXi$ud*KO)cJ~5mR|$87+qHyWUrow;<(+HBa$QnkH4Ar-E_F8}Bb=}HLu;!VCqPljlZ=|2Q+1}eBqP=pU z*G-7wx~HO{Se*Z4S1g{=V7AxA8!x+X&Bpp=o40PbY}1zdmi24(k7CT<)p{seXI(4k zF}N&897};yo;qK1#0G4L6b}_r(_R*`pKpUAz&8?iu@WMYG!lNV9p;~ z_L2XlJ77HUlvasokIXy&t;Hi!%&orKetOR8pDr?QH#=0mn5DtyUo>EeziJop0X-8+ zrGI|iFMp1hN}soUpymhIU-5uDl5PDRqd(37$l7vQ-?yhuzTh{-*6o6@;d**^EZl(s zNi*Kw&Rr4>^|>D3n`;{Q1~m$zgZrM20n>@QyP&sz3>(GoM!U`G=Db8=?HhYP_(O&K z(iwEY(AOx*n@y&*w;q*(ZK}III#`=qOpcNAXI70PMbo?fp>uA!BOjT)cux-70@onO z#}>-1BJ5{?yoe+M-Gk1sdXa|F_4RJoAL2ihoxW(zrR((PSf-^Pn61==E#{4xQm$st zF~p9o9yoQ@EW>bv{JQlQZP>KFzGhRM@6<27?8;4B>zgmzuxV?2&q!m@NIj8-j%d;* z9Z|?U60X=4Gt*VJzT~0mDrc8;mG|%df|Iy!5tHnN>@tt;oOYvnXy3sE0DrMI)OqyN z@qki;K`wuxpEk5de?w0+y@FF6U+vLf@@JY}8}1q2y`32!ixvXq{I+DPL4W8Mm!v1+ zwx&IFe#RBbl{34fYoC6EOIm5&yssD;Xt$2nYq|(@_M%sq!{xQJesb~?moG0})7$^g z7eYI@WTpCfrx(X)>fQV&4^x+TVnW$fSp5RnaaF0@o=X^{i<3%9HrtKL!#MH?RzUGs;E`Uo_%p+QI; z<)$b=wN*8l2b+L#LWmvDmX~8UKB9h33oWWgJ)7G)&q@9m#OXUw*R zkHoZ{Evn(CUer0<$Iu$?`dkUkfk0=hS?3PM5Xui~A=}xx7!{p62kY$vb*2FKcQK&* zg1QBW;jN5;Pi&~Cml>OaA6mXmeyH4k9;O{ei64hh(*J%Boxyw`fD7?$+P2&fx{C#P z<_32!pn?;%)&Am230hEX+XhpC2)}xcj)5v>5cL{G$bhmU10Mg+zgnY8>fin*IW(sA zd%%I2>t~^7b4bAOHP|IQ(y{5W>f^fPw*(1MRpn*1N$(;ivu1Q%QbJnWq?@*@aUE-E zv@f-TfGapQwNHJD^`5=LTq&s4YFqh^L$T#9@{fs)r@8=BXp%?$R82r??iq^$_pVu% ziC`|50*WL*E@Ki3<~!mw1u712QlKKvlH4{r5#@*`wRAEl9|hUmTQc;O#ZT&(Tr3Ie zKnh_?`%t~TuWq_XXaV)>Mt7sg*V}jbVAlQ)^$56*R>5z(v!F(66}*M3XC@H*=Sb9u zH&FOt?pZDg6p^A23VQJaN*g{QDQ#*EjSmAY{n3B^?>Sp|%Z7`6x`QXy+IRxiy86>P zV|1lNv1I6WD!IiWW?wK5HIKNRNfa^L)S)TIeN;Ykx*{BMEm*||Q{mUhe?7Xtt@G_^ z(K=?0s>p*wxVh8aGi>ub^dns_9{ZPD@uHB7NFk~`EyO=N@qpmV_K2r0jKzaU!c*cb z%lgYigMG%7)YFJ8T1dzrYq1^}#-nezv^x6aM}C`Td;EHqjjcIBSb$wkRn({ zA%ry?GmeyVozR{vwuI)GAZ6v%Y*|?}t8YvB(}Jm>j{+~dR5AF{6b>lp9}b(Z$S+j< z0@g`Ht{2CLaSr)VO^37+b=FtDdm^JXzN!&uhgp~21k{6pfh1-(7lWLffyKPT%1b&) zBm?JlQaX+k%j2J6xi$Ee?F%Eb>2%9t%?FdYfe`nyuE4m>}St&OY{Z?0rlxV+0p**6~tCfLv2N1oKIq1Uht2 zf~Q=(aT<#xl!y*)_CUpnj1TA$3O8=h4AK%Xae2)LjOKBKyPz}3bwGn3nyREO zSkA2#oM=?;d=oV`@tkg`z%Dt%Ig~)4`5pIs*N`*NSQrl*Prj)`aOJVeuii9~mLdR4 zgF<=L`HIm$^5F`T8al=)>aP9IR~am8k%*c&iFN^37XAxQ%I%(6&uJ*U`zmMd9N)Er z@jc*;)&)Gl!1duqdWh2*$f_?{C5GJ9i=V2%aL>%~<~Y>78(I$nmRdp$ z%S)5;;NLn5TX9u>)y!1+7kuHNtMV&aRC$|~Tw-Mb_I(FWKH)!0F3_vab57`f)-DAcWJ6F+d^Z*&u7_Ics@S9HHp-!UoBw8|v%@ztWH^qKB46#}^_Y)+2{;C!RJJ2lkkN z&Bkg}FL?v7)^wyfcfV+>^};GwDHxmbCN14Q_hzhm{aFsG4}5n5OP8V2a_7S11}t-_ zddc-t;D{~K5h{hVb3;$55rU#u28cLV%d<2=CS_ciBEKe_p@h1up9iol5(=c4Aby&P zCJ;Di5x&;*|8OD~dNwMLUuSN5F<~X&DCF-3F80yc@5#N2^PJ;2n*UeKY9470GVPArETIX$b|A-)UihOjZZ`YDv!Fw`2Wgh z3_8 zsk*db7l!7U<0;P!;=x(>`YO9^>JW4k2?i>}nMDM?U}W-A%J- z3>U3N?2h5Eo~wV%9mC~T+cmm+9`5^<%jXx~MxO;ThEpEZo~hE(@)wyy*IYK?=Ur$M zL&osK`t!O!+=})eW9`4*{5#*(PVDLOo3%wRtnJn>6h$gJ(Ydo@sDHIRw#fdiaKfSv z|99!ndaZe#-8)~nOS_AOh6hK72loubQt@A7Px#msEEfOe%ccM5=v|~G4$L0-uRosk z@Z(-Tt8Lb-z{d&sOF$jiOEG9#Tq(u2P>aiqP2$%KmK&I;L=RN2RWiZqK|aT9})KE;f&je`Rmiejs!)6IO?ZneTq*J2nn#+IjtoF8Y*@U(vO3VAuE-OY*2+3I<}E zJhKTl`?=c1I{T6(=d5S|<>gD3)|W0Fn|t%G7LSuE!Y}76UbOg}MN7`s-7i_XdfC#| z%aALf!*{h2iT7JJ4t1nryYO$_y@i+@E;s2M#g3DK|UcRas zwuZ^hFLhFPnj|unqFKNWN6TYQ_)ho}CV@vhoZ4t|T3=`~fK*=Wi~pj+T`?H(bV~*L z;y)h3|0HORRp0c>2}yelZW0H^N&+|(6mv^Q zpXjk;F7GsW!3$96RZS2Vhcy-Aw^9Ak6)3ouV8Iys(ECzcr4pI>(AIH>=TFGpZh8o+ zuoB8>H8aS+WIK3)v7C1JAn?bIu_(Bb``?U6@3!~=(&MA+w@Rs5_rIiWuv2&(Cy@t5 z33g~^%BUT%G%wn-s85YK_UycRrABu{zA6o_+$l%z;H(7$IGh7k;;$)XiK0Xjmez#l z%9!g##EV^R$pHtIaOM0Osl;ADSh~KxBVONrQuPV#PL}l=le8pPdCa#mdvGyFTi@wk1tZ(2anVUHL~DdF4DyPbbfVMZ2k}sH(D1S447 z{l7PWm=K7%m{SA0BX=|*v;KKn+eIloUbSd{n4Zti(WnEr_VD8Lz?02ry1N1KmNvb6AjvVCXfB%u%Z zqPqAN_<3nn34T#lH5GnawfL8gpKR~Xi@S9t49#{gCj@C)?N>MExX^5)sN3kFpF|`P zsBxZ=RAT9|k}0lDS?_A%K+>GqTeviVBZ`aV%$a!w*Pt-2w1w4}OYqqvnLx%4N{=7O z=*i|%4uT!&$$Y@yVT8$PEAOqUc4Wm{)lQZtR^TB*FT!I-`e1>HLIkmpBR(k-lV&Ll z6ouwjr@Y~@2;q`-z;Amrr{yFE1O}r zV)4@X(&v-uw?yWG#pp9N?k+4pY9@LIyUenaF<=JK7>QtR%jwl6uu*8a^fH_fvoGGf zVX#kj<0AbpDMK@U&uvLrWB#vaefTeb_q!eaqhZeRFPSlza{SB9IQ~(`^s6t|uJs?{ zAiE>CXZ6ff+#Ak(=qhgOXcqG|*GTw^E$g2R8P6Sy^iSWk{-s@;$)t_jA8hCKd7BkM zs#!yWuI>T4ch7IJpH6tG=R$Swjc;`CZRi#|7Ip9S^}F{rtHV%J zdB|$fPlUdiQt+*YCxaJEPYvu2zXX4k5|bHFs=M+(6#fcHo|20j_AVVV8c`G+jpc9& z;-@mAH9r-;LK}t-cPsg*4*bFXXO-1Kuc#~W*-KmWiBr=tVQ`Jg;$Ka+Uz+)>hFV#q zigDb?DMU9`Ik0I$veUfk9>qesBCS1}qdVoVO31=_FWEzd95=STFI5^yT~{psiXl@9M9i7uEp-hmG^RMC~gdw5EH(-$bIGOW_+6VN)*ShHry7L6BKevL@MTT z-DL4&-m5+?z6?CQ3lYK-amRA~1H;K9Vw3bv{`_A#f1yTFI0?kgDnC@$27{@cxj=n zsbHMIB%w`lcGIEIovB<9tW13?ip>Wp;yZ5pi@9|5xzuY(mdnm>RA2gQbOcb^%Y%@3 z42fcua0G}-%QaovXLBdCx>C@80TGKuTwbHA=l^P&5n!ZF5a4W|IjFox5vRivhv z4~7~56=5>G(7Kwc{i+s=&%zQKmBBZsUbyIzZf{Kd$Y`JcAX@Xcx2Tg-ngerugxAA! zj|TPG{h?0k5#7lkbJQy@y4@0`QtE&p6zNpyif#eC~b7*skjIS*r?OdeYU zEn4y7url_S(54HIgXuzhWH%NR(M3##gabkT(_|-jvmg;i9M*A3*yyf#(u&~M@wUc*VXrS}w0K5wBGGo#!!^WDhqse%a`cW@5k{};zOxCDA zqR$+!+&B1|_TxLh>0`1e4S4K`T_{+|*>kW1L(X~)CwF|IhBob5F%eu9Ewah0p-Zv} zcV3gLBFm;Lj2kp6pW4JOm3JZoO4;NJGJk4)=$2}5ElqQ%VBlfS*hL62o_YI~rH)r| zvvHk)0Llw!RG;upb>~$Qo32S;jWBm#Tg|IV`zyT-$^3Ee4jCKbL?DZ=N2wYjZn* zM)g&zWfAp>gGgyFgKw<*vs>|1kpyHNdSciR$k01XF+h*lJw|h`V^znB>Z@iQ;%v#j zQYd#CuS7COxKs7jde`mZDviq5`y}#gHc%ur6%kXhPTC2IX>86JPutKF9|Q>+)ek(ZsVb@Zi*Fg%tp4;{&KlU2Az2Cz12sXb+_OWAAk!U{ z+0rk*<$Wed@HyeHld=@*0H;q1R`l88g-dbaz@VP~USn*z#FQT zh^8%ie+#32|G4fU`dq|ujmgpKf-NBF4XSdCq@K zw%4+*UG`~2v6B4MFitW7;0AYHLlT!|dwPbSFG?_*w7!}Jaj- zNdmu2bt^8Dde+2WQm{zwj)YJ} zTR`$gkNfAKu3ZX>N}ucQl6mL<5*A@SFIl|&Y#H236y7^~)k;OsmY%b?zH;%BmAJ64 z{C9J`PFy#+E|!)oOdG>B>yaH`)2KZ2ET70O+Q~jiP_DNhIH(E$okM&EgDz#FivlF? zsCyXcbU)>X?`?rdN~aYJ1=h^_m9nP=_yQMJ&J_$v?v8wIwwGjLB6p7!THr}0|4iW2 zQB+zKfXb&y7AK$k;5#Id%9$Awff{sWTqMTz)U*9&*CgLdI7gv8(Y7SwW8S`zn62gZ z5sXN@ICua%p%tR$QJK_5dG0TT>#m!;RCm3HY_`7OIl3XIZ&bRBR|@4AO3 zE(r*8P6k40eMgSzKrz#g_zK0+S2~g!unh;NS-d*$tp%J-JeeEI;B5W(!q_jN4qCjU zzX>3`x^ueT_#CBB$%ooE4Ww<^8Y39rBvl=G7T`ANrmtH#h)6{qi?*L<{Tp;x!NBP5 zr*FczJ6t_kJ%7N(^}0$gzy-AJU}9wHSC6N6;dHR zCv5R3S&mwJg*>bQo_$t*{7iL~XkvK_j(LurS&gU%e(MW7QBhN5uu;b?;9P=*wx4JqVl%)O}1Z|`F1NTD&Kznbg-yCuB`+MwQ@cpAX0|50HV%u|9^mBO4M-Vs37S0 z=4AWGbRZD2w$nzYFS;yy+Fy8qk`LG=kQ)evC(Lv@H#NHV?iOoI1L1~uqF0Z=_CE1f z;VzQO;3PouP>=w;Y|$G+*E23?YK|%f#Bh;_U}*6U%4(@LLIeZeW$T3|88;6p`SO() zA|a*58^)UF%KQhu5ZmJOMQ|Z8H2JITBnSaNCKA_-S4bwlrS4R|3hh0`g--0SvWYU0 zP6-CyaMW8-1g7ZuR8}ZNsW>OR`D?aIt+x;RkJP~eOp*;AVk0`7S6moM)_F5ivR-rF zLsqg@EN;n5E(66PZ6raNJ^Q(O-5yAvdjRRc|2~*vU zr8EO~Kw{S-!|)-2asw7P4o^Iy-XDoW4jvyyJLeQB<_qOM1<^!i#u;{68_Zr!WAY@U z^Jhj?e?DC+f3c5MR=9i77DW|b`>@Mi{H+z!_wK)BmFjf;IY{M6U)tcL^1SCgZ?*Pq zHi363wVKJMK&~o(x>46WBcR)pm)1k^xO|lt{T|-p zUmu(E)E$Q}AH4n6&#A0V3$vfcKW4S<=TJOTx$h@`UY5s5;fQd z^gr^f4RTMweQk1ra^-huE;V?mas%2`IU5$)j8*=|@+BybCE%B)#=Az>sIGfPM^XAr zTeCbw53!BoIEgavvlfb$@G*-JZz{iA!FScRnIFA3IgvwC!kdOy?BqBy`~Vw&(e9BU z^Pt0p#Hj-gZ5RI5{Hud?&tr!l;j1$_2Mg0cYMUT#1mzyNVkcz7IPd~dWxqEnzo_N; zQ!2XRTfGCy6xY-6r!Ti*jKH}#lU-nayJzP^W(*r7tUB#!;X7T5|=>qM@ z?N$6m?Xs`1Zv76qyRSa=GHX|7XDW-^$a1#tdPK|;-r10ETbCK1qq^3MQxpI3L=WlM z;w5mL{z1mLfHLsjcwIpuVtzIr4Ya|ZCBs;nc!q{Vwn_;SPX6kiT;(7Y0Q4OE3BIrH zPMExh0Z{b^0L~8O)qM8vjj^S_C>W8MlP5Q2Je7^w)t&rh^6ODHzN0bwjb|3ODeb9d zcqO^9Te{I`%_iSi!a2~AyWkZ=pp)iq;@8g`gOzo4pTNjfxKYwe0&;o%M&*l7FdvS| zkX{3gCR`al!#ltB8NF$mk6n^9Jo~eDlTb3!dijq2Xm*`xP!{dU$FoLAW5=|;Apy2} z_za{_M;Feg7i>00RLYUCwQMM?mgRc12P;^y(4-7tPOQ2UbVpou8lNJ9&kYdmq5;i| zF2Ay7P`&Y!_6=}m!PxA-zZs??SeAU4O(%*MM$It^8n2_hPaCIQSD*FbV5 zHb|k2zoO47q{83DVU78yN2&m63`|&S$BXCH6~g*T@k%QTwMuO}z?hY3J5H83r!rL< zl^4F&@7`KBbnl=!uB4Y+V+q`qpKVV(#VhO6^)*3V;tHg)yG5rYW;Qqw$K&}%_3;-H z+5>Pl%a?0WQH=XUjj5E754@bSY--8C(nDn^Y7eqx2Go<=OwB8!h6!@m1Z5 z;0PThC(4vshD#u75ejKIZ~1%VPpQmdBTPrHgD^U8Mtr*gN(-z$n_qm?pOC6o^^&bP z?|zW-!ka{xv2sq`RNS6qHf!7H{^I;WH$zK1BlB9XgDnC%=5hHR#2Qj%O_0}=1?=YE z+LH>Bq_#r-`Ga-}A)M5}$NcffjH&6J>cgIAQ05jbR$TsWkt`|I+2~6(@Nv<)AX81@ z=9*1xnzenA5F4-~D=iO_61H$WBPt^%ThOXuck8T%HI}aCp^Oq_N_Pff6Z^8(lTv%c zti7&G4*sT#-mqDpqtIPReUfhpd~TGg7OnM_OBhrkUDX_it?%NgI`W(AM*4RnQ1nG9 z8z___i3kxCH(*$<>f9;2g;VNf73RLC{*Bd*hyCl4)%DfTb-JhtkDoRwPg%)%@63f6K(3IcAbZt&hQevYbOt(Ed`Ua}ahWnnv}X z-ezJhT!Uba1<0_%WTZX+z!o%54B8?&S_SzKvy2NrS=z1jvK?zX^{1RU_+ET%LeU(f zSELCv*Vo%=rViQxxRP%$i?Sv~xV(JQ;4he&2LFavO=A~NufezWrk4_uI2$tZ8?TfF zn|PpEQ=Wo8MAXsBREehMqH#6cHe~|9tdi_$VqQS7b`0s^`nCN8upcIAyM1 zJsHIACIXKxYi+3NX+*HAx{5rE3^e}@J@Up$6IRkVdiN?sF6i3jOFrAR#f2aR)YO37 zAQ1vYOE^yZhqd$|xX4%`DQo0p<61%h^LIBY7rZ#*jZZz0w(m$Vl=I~6J|SQMOh^)l zAJA#i1npG>QS2(j5$%EpO%D!8;ySOs@6}sD;sXBW!W1~!0BnaNca8L`js9rTH4Cz_ z1QCHjT1kA$SitKZY_9AngdAVIzimr0MV-kePGGZ10juVfmK+XRyp=TKV^W6&XV21M zV!bwF9*3goU^EBfM1mRGD9F%($#US#JKk9sb=KUX*{D9)r_K7s7Fa>5tm`|@Lqm5NJc0&#auZ{ zqxzDba(yN>!@_ZNU+_;d2nFN)e-(ZJp6B~i*1 zROzgg%E4nd+s#}3R?@yu`uDjzE)j%?K!`EQ*9a7}Ka9sX?XAxZCfV-I`e zt0(vF-Fs;M1nue~CQ!qTsbAH+Qz?h+j+Qm_?$nbLXQ5uT9ryujj^_pOne1*}EVi4M zY_zTFu=GW!S6Z7bMQT``o)rXpM1Ng_Bg&e(euU(T8oiGH*Mo<;cZ|)MH##|2_%)Xu z5dLS!*r;9w3Zv}qV9D*+(g^ci_3mL7uHLdq3%5OM*W`JJ zw6a9NSy=ad{c=HsrZn+Ub$iO-wG8n_^{n5r25PsOV+NNY zE#j<+YbLLmn9B^7&JIILek02sCzCgpv77L1fo7|rghyB)k@N4W^>x&C(k^?C+4 zd&_?|2_d@xE-HtCp$@vYx&KH;5r-ftXp~Z+h2v6m;#2+Pl9@8WHi;$6{kvOkoNnB{ zhVSfwd{X8DddvCF(M}W&-*6UFm>{g5Qe;V=IC%0WCOzox{xpTeL5DlvQQ{K*%Qm7Q zLx<*%wSDvTljjy)AWJ_gabmT9@TRO84%d0OiJMz%ie_#usE%Q57SgN4*eA$-`_XZF zgz_#r|A!9*23o!*a-PsXC7Eig$Bxq=kYw5E6OP%-1yb+;-6$b904&a#o}P z_4mJ0@_isacwM$6cLpU3S(0f9qo4INb3_ys|6TMKg|tMKW+chpJEBVj4u%7Wtb|E} z1X&BK1x)9D2GMP1)cB<|#JUx~cUR(}`5@Zsjj7isWkwDknm^7JWmRTky_?UCw$lz6 z{<@a#8jQo!%q`9YHF_v3MF!M(1ZKVZmMxaX$`fLX_&;@i#90@Q59Lfsw}c?%m&@FT zA8zXya?5>~@T*iaL8-_Q#u$$Pw}hvV*}W86JXI2jM`xO89g`!4N$tiwMsGab?v`E( z?onGKlkh#4Ye9D{=wBt2kSn+5mBsu*Gc5DJO!d_nQ)Q5x5g?0U>xK z?R4>Eh^KujGQdQ#$t}lZojpn}J0#^_Cj^6fRHtdXTx1HC&?oIJ%pAipSO=L5<7uEt zWXzLJ)~LJzhblr(BR16l*IgybnKQ*vQ;uYHprvXreqOWE%yTLG-@IQOz^*qjH}zFX zObFvIfp)8I__nh$WRkOqoTSRZi6R?~D`m?%TLC-%lhX&_tw^$&NW@RUNmm{7w~PF4 zk7zt&X7c+X0f@XbEUo|;V3qdjW=DGEz z*HP4X7v_|j=oYUi+soKq{!@MK`Fh>epUDe^2l}wY6Hc05)5UEyXP)`Jyz{w82r{|n zmfxHUOWN7|7g{zqJrS%Y{qbCUd`;JihgIKlx?S6kixcApZDW+y)8g|s;>xbA#f(jF zCG8^#5K~|=z1K%ibhV%;--k}zHHuliuxqe$VQ=Tcj?RT6yFzAYQ9W>D+zs7c2TAv# z4|sj&?vcGZ8Gq8L(;rD`)L)S|H`~fYDlxj6mOjvW;uMlK!fnDJ8CReqL1i{l$XHi3 zAo1}%(PPjJlLJraUlyj_RnV2U=&|cm>cM5^97Xz{Qb3&OT-$CA_2|c&usN2s2 zC_%|l$4o(U7Sc&GW`Y6fy1c;1vca`*E=noW(}gdppyWo|z&)MHL|1ZNR2n1$v+bAU z55s1~(WvQY8@MbyfGCk)d!RP5oqZuaRrly|6Iot@}(hM5??Ndl5+DEOK96MR0Lxmik-zW@iZYEy~LR6fOL zqmzn`R_nm`#(L6rh(!{!Vq&~BbABrgg`#R8OAf`%O*^P}_tj7=@5l)3cT0Mu>ooSC zWwNf%ZDu0&z!WZWZeV-qSE2K2#bJ7T?C}rDbXWf?l zd*>eiGdgP~fPyHUW+rVteZ04OalJ%!zNWr$zQ}6H(sLFrTe5J~l7-7w1`)=moDLW7 z?a}{rJ266{{_*_&+{LR_FJ8QQ>EhLkm#pqsvAScqF(grK`CwYCyOWL7Z;n9!GiN3i z-*@$l#p2o1ibW$|%j+_7E0gcRQ(pO&BnKhi>c73)`G-^io9sZ(eM;)2NS9QipjvnF zJ7&^F8`nVUUKvIos*P79Fp-EkFY1(#V*v4kr?jmRiig+7rAX2_a&9hKd5%mNNrUa9 zW`YZc;}n4cu;r8fmH8=B)LpXZp63!(*|uf<70+3J#rdT3cF)~+AeDud9=dA%=1ZQR z9srTx_Ff$$51CJAMEQ2&lJ>*Cn5C4frIccM;PkhCt;{(sc?-UNTjP-R21vZqHQ&5? ziE*}SYjjf!XR;Pyxnve3 zBsifnY$T5|RG*0Z3@@(ny9LE1!+OoL_|V{H`CSZpD2baRgUowBDC|@+R%B|^TrY`n zv1VhcIr8Xoyo@icA~^%D^8Q)nXc#~=o@&st7I8@(ziu*Ozoti{_I>be#^wE6fWB^~ zmf{$LHNE7zegQR}rhS1KOWwpouS<#*E0T-v!)w-TCTV78x8GHD>8h23htu(kG6Dr3KW(<(=SOm_cmK zVqb5(liC)~?;@ashbAZYl<8LymnkIt2VZ!7;n%j&P|Zd~VIu7llh6Bq^CzTb3*nCB zlPKPFhNf|1P2eoF8^HO%5 zb9MA7Gu_=enAtpzQA~kpN2#*}ktTP^+wZbZ>&ap3EEk_Jmn1b!B+yBT0UjhmxlKh1 zYG@%u)#A9q<@rUgWX4+xjWDG&C=+LNojs}JSRpA2PfekI^wgvQ`GF@dXw`t26ex?Z zWJ8q4jnDG4?MgUKv% z15h2u4JV=E+euj%P%msg zIBpsZkxyF2;24)9smW=B{Thj8)nzNDOqVd*VREXuSr`1og=7)QZA8eNj|$ay?J0Z* zW>HSHRkOk0W439A?c!RYLtpdL?>gE!Bc~I`Zk@ZN@lN|PkF>nGv&X#V{8hN?s}1d0 zFfgbPQ^$fGLoq&!2OOvUk;Uigb6N|e_CGC2e=_3H-xissebj9&u`|tVTTzdh_FLXg z{`OI~LzhsDkT<{PwX^>8$LCq67~O#X<%2)C)ic8!ZgUB=Vd>XlV1%i3M>H1M&VMOT z*4r^4%6{!EUZR-WoEthWO(quY+>OhCsb6?E(wA-yP}%<;`Gz1J+uclV=>IDy;{5^| zO=pjG7~6=7Fosnr@Jv#-X~KSNpjSS&n&K=n7%l4BwRC2OUH1R-u znFEi1_Dc(sE@pJX12O5)Tza2mQ#q4eci?dwUyxKn8P&&rvg~A+pz-#|ZkS~43C~cs zblDu~k-lTeOme(i7LStcWORC1E2}ewh-0xvrTt!6_4{o7B;)^hw^Ca(6@Hw_WQx`ZOmVJ#X^tg-a(Ej8DR$ z=o>dQJ}H4A|G4*3y8&mz2#&s*vK7V&XwhE=#SPJmdvJ(alwtCe(bNu}6kz2{RFKTR z{S7(^nF)>cA)0u@#eK5GM#1!K`5%<-7|x8TvJtBE|*im13&LP6K~ z4RuSCtBtdTcrMO|zAObB_(zF?{NW1Q3fXLEK(0T?5xeYbIrxazKi$=eDM~>r*_abb zqP}d1wvbEP)@O$&B(ks_S%r- zNIRUl&4@@+%S#sP@=Me#6pF)`o~J838k-O`NDB-y$`=>_Xi{mYziH-p=8TbobF?E5 z{IGQ7>FRw!l!4sU%mvU%;y zodJYr8&S&)D1%)Km|)Wnyg+(&&5CPE4BSjE?XG~D2Z36$5mM}EYuW!99IPoO#})yq z<3}I(~(A^y@p&Qh5o<*zwYIz2bT6~KxT}+P~ zqEx*$oF4&D32i1ar)&Xpv*OL?2@a(l+IHP`3u~^YkK{3xkA^KbR~zPy*s82Sb>~`y zCN@L`BtM$D2GHeQ+(7os!3%_Y9m;)?9|8B8{uY7^tUdUnX51`$Ij3lsrhp{XP3u@t z(gc3=3NE#ybY4E#nEkGrK9O`Ls**$s7A;E618u~A4%ltlq_!@xVp#*?ilQ-?XRA9jFLEd4cvp~Lo4B;x**;(FgR{u zaRQgPg1Z^a#g3#hTYl}3m}W{h$RF|T%lGC+-gSxja!PB>Pnp?I{yGks4;O}-pDkL> ziOq2D1qP~-VQApZ=x8#61A@U6HD45qb97G>;}TP8Ra0V^j6wxx6*fqrS^I)h7Vl@- z6c^-qcb;x!`U3gqV3N8C@N`-DmH{AnQyl)Hi(3!Rt6A3!y)5UF8bW$0BiSY7FbPN&M!q6qx z%}kg4r|-{Lmt582>oMAMUD8@5;q$nXQyC!AAQ zz63j%^W|S}kR}cL@h|FC%9pxyH_81{dPOb^i+Unby6D%csj5`NQoGN$#q4`gqBHE3 zdxY`sA^pVFm6qV&k{+>MnNXJYET&-+T3oxykCCk_tqg>o_aS2!Wo1~JY@VKxHkg8K z@j0u{#g?{KmI#(|L9Y=&U|T2mRD#F#oZNl zR*fnGQv(nVqUJERN{PczK(O?<0W)Moot|!N`3g0z&IGkEE(NU3e{>cYmI^veLZN%w zW-+UB7#E*>Qa?SRJ7?wyjcVOg%25{8DZAvoY!rE=Mm*DCI(`u+!Vae=@cb*QMU>hC@Ti!tx=Sz_up+Y;H*D98xUW(|eG z4FIX>K`RQ|(z8H0M2*S=-x)mKZ=5_)sa?hZOUxC~7-R_Z6DgJwQaYyLbxHq;kC~hS zbXlKN25yU@jN9A&RqJP_V|-=xjCG9Z+n16;ze*B%oon(9gfd+I@D{bnnREO<9lrch zZsayZbp2AMB5~%F7PAi(?(PSZGYf40N9sOzhv0I3(`}No?<`F-*F{8YO&4f6;JxMi z327V2qDYx8$+trr?81|U>7!`J#6*6Za5& z5h-IfQWcu4D-~hI3AaMdv)}xkv>DT+%)Mfg+D2d7&Or}~^psI^%W-SQX21DuH84x| za_%@MCwtK@!H_FvXNS&dt&bbCKRtj{FbiED>qY2$IWj6Le!Z^2eti9W=5@=}I%hJi zKis5xh+I4?rgX@1&z$s{Y}x&@|7dRZJhJjlpGv^3ob*E!novV(1QINf$ZWB+0PQIA zyE45F`M|cZ*&m-fq1jmDTRhugoV4umup4oc^gmaUa+LGcqDGZ0^>)f9ClY_?1kHiCZw31rpH6=~XJ738heB}q*FEBUW zXg`IpyNdD?iJtOfWUm(=HfqJ^7$3J3baS&IdcJln2}wyEDM3PcHA(PSzQ3DmM*mk{ zp-G7_kfpqtiz!>j_N(ziX>85}H(fQsf0S65>jx(5Q#Z|&3bbad@}2jg+|U#M0@_Vs z*nQ{jauo{}ww(qQC`)V=wEg#feJ=zv;z*ei$jE`{plTKD3K7agj|Bopi)Ey=luNq7 z<0xE8%2uwuCQ|8rmP-5n(mJ-y%&yC2DukqV=m1AZ3jm@6Fv4A4lk^=_M;RlsEz|`mh?FlpyNR3 z=rLbfsCl-+6l1Zv>_ypYD1qXdorBOlXS8>+OK(z(C0j5Z)mqv?VDEM@A8abAo7RNi z(NdUDkA<1f%_Wq6JpY7`rmzBi<2`1RdE05~ja3Jtz5oadh1jO+<_!dKGZzx0_;gXG zGM^CsIbsFOG;VPvj_36qIx zrjZszqv~Q}0SFbX z+plmuj)dPutr&_AL86x)kfElQVc|K8kIQA}Q!aR;QMvbPdOx6KMR|B>)^Ftd_kOuJ zi(RU?nVcVbp>*GQ;)?b^E%M<{GSC)H>!_4HAPSMR~P>yC-I|-`=tFC zicSu^a1VKv^4ci+VRM`m{NVl;khQ~KX_^t;Y|x&_*NE?O;ofY&;7;-Cm&Gd>2&;6hcMDU_{cXs&e;%5_rOX2 z`St0zMq1YyL@av#5!Vd9CWq8rR|u{r43RmX@1ydW*O;#&L3LJ~AtQ^^czP#Icg@$gS7{&z@93^9t+WJI03vXYQ?wsnu z!9EjjVh+X#k*K0tW5HWFDtMDB0LwB#g(wNO>_=`TpCBeevjJhP7gPYTdRQ7s+ED`I zSlfB;(Vxr2;wm$x7XoJLVPS;hMp0H_9NzD=lu6277x|__)~l*adE-Uz@9`!UoRzJh|5+8#TYe1+VYq+ z{{wZN0v}tIDS>()IMjb zQ+w?o_Ai~>FrYVzV_oLX8_eWWf|SaVL|Prmb3P0=m27D8ge@XIOSl36m!}WMkE?@7 zaWu;pDnhC9p; z4X-ZH+q{X-q5PpkdGyv~abeHK-Cp_`#@=KLy`QIZ8SUt`+K)-xNZ|7J0qL~F;RmEO z{PpP|hI8Ef0@kudP-rBPVz*4D7w66Dn7D1D^1LSqqx@vvo))^h>+Y@mF)yTKCzg=? zNa)Bd_R=_}`dU2R$AZZ1$SMRVx?v5`ji-oDB$;B!4V1>XI&Tt_pi7r1E=$EPjoH6C zBQC><0LZfJ342YfXrHG0O5me!*i>07k?eZVTaD@kKa&?venml)HJAsM zq`X}UNZL)9NC9S+LxW7_KQ01!CB$OI5R)O3xM6=sR}&5ir$qmG$ks(h%CMP(r+@KN zMOgG4FTy{3ZF`5pe}}J;J$u`(SMjwHUzsQe0jnQAMmsO|W9SCV@*Q$lW~$l=lYy)V zF2Pb6!KM5$0DJ7|cWzbS3K@^#75QN>uV2k)9e~xL9Er9EpK5&>YwAT+3KsAXd(k%_ zDYj(Hh4+*vp?Be|_-(5vzuu)Vm}|Yd&1B*cYZ11yS7l`hHH;^grDnkd+dJx7vF<$2 zwyOy0ISYNl#kK9*9fsR)-}Nf_e4*fu{#qH1I%s3|cV1l3oLlI`IU}Iy~tj;E*|+DHoZT!Mo9Ao-~up3OZdL^PF{C0o~MZHT$%)E7i@6CaDk4 zmV}14#NGORnj&|)AOizGxdV*Lati<)x%v^>EH8(a zd-2S)-0zRfSj%ngXfI^U;A&K_`4&qzU zs;8KMR!xzpLb8?gDv5yt$k6ViPCdhP<~1ZeZoW|_g$GF%?62N93-~5mqZPQu7actc zy1j1F&euy3{Q~(~ksoA%aHFaoiyKYUB3@#=##lV$adP+fTwyPf$94}_^mZ;X5;^ds z&wjPcX?)_ywe4L_C6S6D`ZzU?6@}}MJ+a6dot{3@yD(CYh75Z53!5k-+oq7l(m$9& z8j^c)K%)!#-ab3uHLLyYO9I;pT7aP%J1gCebe6z>Q*|Bf;VK#F`86TEa6UeH-DI(S z_V-lvH#}jlI%c*#wUkDaaKHNYCu%q4w~UG)4{b_;BGC((DKg8a%}q&Xwf*iI*)6>C z?psN{Nakzh@BS^LRON$%%_voD+c)sL5Q-_XPz=2u!XRO*u@i1YdnhB^5pb&O=s0CL zEy_|U*-NLAK)USPO~_QR*|x{3TDh6c znhs^85oaqS(%-!<1NIO96ju@8*eSH}w&cwwOjFoKJCP$(Ss&5`#7yLYUAq~gFKs!# z$>WXcvcsSRtAIE*Sr+T74G`-{H;>jUi&Nq zO~H)a=oJSRH6-q49y7nFbROrwM@SPy%ZssK#7EtxTkouO_1K)fPj}6)QLViuIIIBG zat7Z(x@4W&N?!8kO~BzBHXoAQb>z6k0a;B9Hf?^iyz~+1Lj82D@&EL^*6IVGiyr5- zvIDo5DZ&(y>M`fpHBHZB?Hy;Z5XGEXF97~VAEpCfyyHT>sk~ z8)Pf|C_BG@Pig>tMrTQTF6~RYe)_m@vkcC+?41tZAwWFz;byT*KO}N(97ovoGb$h{=eD z%6XxC!ktnY=Poh$pbYp(;hC7Xbbbp^j{u>aUK8Ea2+edD_o-eoGi~!1Gj6N2a_N!M zG0$1(ldG?7?|0I*`049z7;cvvWZ%Anr#$}U?lxT)LhY`X=~4`*jRoqzlF=mv1QS+x zgIrs_Xe+;IoiYiVGe6t&O3>5=75b>H+^7!Rles#^!-`+nQXn$d;gbQdS0g7+j99zK z@w+4qT(6fCs>o0XTGAF9mG9C<`AD{dA-_?nZXUw#=+or09Cn+Ir~`e1q~lYtXsK?&-CAs4?^K}QU7c*e5k=y|KBb>*Y?xkJk$Kk!w}d1LQwXFm41u3~|1{J;9LdjTI8jSRT!?ZPb3RqdM{jS;nI z++3-;>?$%DyG$&Fqcy58`nW%40w5*tlv7XnxpPqc*OkI$VFF8hw(NeF74lq09wN}8 zPjij^?Zz7e=XU4CdiN(t8mLi?q$8*_9vf2Hiu;Tt1js5IrZR;AjcQb==IaC9;ZQl^KVRClmGi;UTr1Fkmx#!cIe7NPz-|AMDqlI=~I9JoDrrY-6zt|w( zr;8tHskqnD8E~^9$R&uvttEaTS#$za63tm%5twq2D;cCFoS;mQrnj3VmZ``iQtJ^mW)P-3fRXoNhKq}zPHxF2!l$i!u zcc2Dock4yGlp*VTjNTjs;1w%>N^=SEAJb`i$d>WXMnmVxJ4cUgQ@^$W^b60nUc zh)+N+w4zb+uQLW}jx+lqq-`3vzKw&9!B+BO{Q95Gc{Vv$;VAT29GmWcBWZWyvQCN# z9QfwK9>H{rR`y+p6zff|`}fEa7u4b715&g6g<_C6ZzenXxA*QC8DzLCUy&FcUQO3! zuF`7O$L3t~o=Gtn(s0GrJPF;9|1ihcNDMAvr5}3z6DeN>Yr@Yh~hzWp$g}lx1OKHX+|i@ z3R}mG1#%2><{x-tcB;Tn(2$&Y+B5?&TMknpt9a~xKAk_*yjDS+o(nCiG7#Ro(X)6$ z%|^NXIE3jb?8?+uH39`m0Iy+*e+n5y#3o-4;p?*~K)&-GgS%0k6;aan?OH^)do&Tm z{ZP|jg|YF3f$)5yeq6A8%!zw@t8q(7Z;pe62XVuUbh=9A(=+xUE^E>03<)_UdajO{ z&2H*vxE&o<5i#t+DA$|@Ii(_x4D>RDfRLgy(iD3Rl7)ZmpyNp>f0nbx>MKRuI*g zvP?jqf4DJ||AjA7X08ChLOksX8!snpNneY6NGX%vn9X?%rUiT%$1qLh4PfQaHUk&O zgTi4dC%^S}BYVozF}1P9yQ-(Zwa^49=#6Q3CDX;iO2&*x-1s584qm%iWy*(Od}XZ0;V zU>l?2RU`TOM3ks`;x5Vcpv}cMbRtPC0!yV)Bav-v=|g(a?>%RqW`79;ZTZN-I_2pT z~L{A1|NkPik=TU6q#2ic#Mq}4Z*2BnS64BfhrET4QI7Fx9O&~ z3x)p+1W4kFP@vYt^B^gdFv`_*^Hz)E*J#l~b(iD?Cynuu#pK42HVg+fKT`@Y>XYHq zn5qoL4l)bYIV^Y9X&3B=L5nAcDp)#V^~v{nOs9xw@2tWQ^xj`+6I?TBSYl`#%*$!e1( z?$=sEj#5Py=;GLWmifEDzI=kbKM}z1xkIOmOhyGE$^%Daj0rZRnQsVxO5;`(*>dPrwi z0apNG>bdNP0)uOqBE3DmhWRDed6Uo5S^gvcd) z*#icFA2IbtIz?tWV1_Ek-1JCdFl~CWzoU;`p`vTQ8#Ys-gI?FANr_z;HtJrF<0I`7 zGHcuZd@-vHhQtgrMt6vZBnsd`3PJb`0qp`+)O(|$YL-xB;n>4Z{=k|6meIp35?_d= z8kLRT%Y>+9)b@>e?NTxy#O}`pDL0MJs$BB(ePfj$oTXPM<}KSaf2^|cOQzM3wPT45 z;*8iAl3=*pKmPCyRxJ+ieZjwQlyn6$EOhtbS8?mYbq9Cya37;&bfikRXU$C2KkLxq%3+(YjmuNfM9WHNJ;88Vyq&X7bwZAGjL zk>SeiZAXoYt)il>OGR-P_oZ6bqB9u9x*%?KsjcAe{du0}d(OEt6B_LA_y6~0HFM87 z-{tu}`}V~-$vXqgSFBV|ww?ghDBtm3Grw9vWYV-1L=y)b`RO&_>>ckl&#Py7rM5`e zguOkc@p`6Uh9ZFj=0^?JRC1SSTWQY|<@HxjWvZAg|Mr)=Z9aqU9+qsAd__Ru%Q8dP zc%kuW)3P!SoMC0A{F-KNOeX1E*)pu21Hyl}a`xRv*;;JVxp*$GJ4P9gS^>vclss5_ zedCtZu1~ThLXe59gxDFQl-4+-Wmm=yz?}hz93|bBUErDWY&?W+U;-i{^T{-X3T?Gv zF2-GHv)DxIR*Fm6P6q=mMmarF?}Dk*7=$(<^(w!b0&gr8^`j?aR7qpG?laC#^8k-4 z&1R=MhqRJ}2(zLGm{L!XkF~u=m~#P~dC?`{WYtWaTG;9>dP|s%RTWJ?@rft8!e=f-%WC1{(XA8wezmN(b!LW-KaVofe z{J;8HrONi0K}xU)1tQB593-&?e26Emma}>$H_A0fA?+}oatMu7dYYLS)3QG}F3x#m zJL@{Ji!uSRoIIwZCCu1w`ND6+esh0?^wkzEJbAY3gm1!|$}WnhhCP#`ukUolf10Ak z3L-7q;KhDrv{PAg2bC==zH3aZ=2zMou13!g>Gv8(Nv8zAaOe3=m>K;_S<-fg$A>mU zRhnzo*(QJK{|~l)vD0Ov^r*|U+@j=@+JOxOAl`BP1}x&eoAq^iW;VB-h?c2WX?~q* zd(~5MNgQXom%Nn`6GF#Y^h*VCj0TKrP@CW(`P|5b9!cCpF3+xH~X9?n=zi1a~zmX%M(f61c*H?-vIpC(sZ}rgmY< ziT2xmJ>{lUOp-|!v;tRL*)ZzoR@HBYofWytih7v)P)t)RvSlZSf+1mIbF<*EmyL5| zLP^ZpAa|>qm3CBM05l%%;>Di&HrOe5^T653lI!R)l|+hT=8}~DSkT4Y7pYf+9OT~i z7;L!40|=Qe!4ezHQkFfylA+u9@V4QR?ZZN}E5Lofr8Z$t5~)WX8vl%gmEdvf;%+rRxtN5t&6Btl$!Xq2kUq_LYTA>qYvA6J8_*rEF5 z*^{~O_VERzYj35yGyDj!MP!H5&O!=Ao)n~S(K6?PKt^|RmAdMZKp}6#3pcSwg8^I< z7-ZKx z3Yd^buL^+hiWw1BLJQOX3?zg+N45@A*4WodVJ29O$V{FYEX?QM0tRI_q0=9+Y?N!Wtr$_J3&sbD@Bk+1_Vtzw~E`685rXy^-j^kpVrgCPh{Ro07d<6${+blsa}# z7*xQq0Dz<{}OAnV- zVdvt?NQxPUJ)e{V0z0Io7(dbKQ}ZT21sYpF5U08)tg* zgL~mjr=704|J8$AYJE5FxAEoqLjBNyx~PY4Tnw5KGH9mofn~BZEqN%_Rtg-bAI(VR$VvrOG}S1r z{YU9EMmJE9N|97toGbKpbL&LuDlRQB{}W|=P(RBO3F(WxzR62BL549^bdb11BmMHn zo=rZ9!ZE@LxWQ-@2TgTgaA%|KzDych3F{we%^O@wuNIqeqn(v6#%%!FCos-AOgZ&tx zkNv0?Dhp438}xk>We`W6KB0Rdosd)%k7BPcxLXu6hIP=x`Q#sWw`|sw>Ts-s!;vxG zC?B>OZVf^8>Dx+;bd)TlR@pJ2CR_6#d%cE=9u)|o)S)5`sdZ?2X9+q75pgh=*jNUO zU@@<`SDa|Fbkp^FU{^SicwwS^>FrZA=2E;CY#~3;iXOgs^O`Mohe>wn7jS#cz4}fd zwy)9wc~W7gVdy~Bj^~>`PP_qi9XB?e#mWf{CS!3{hDXUorhjyGm87qZ~Yvs!<1oU}*U(sfR>fAF94 zkydY9Pq4<8^@#CWzX8?b6J%P(4tm`;D2`Y@_g{<^J^B7Bmyz{YW`JW2tyB$XIJ_%r z;(kgfww?A4D)1uySFJ>LP@v9MIgM;kmPi^BvNERRY#XKJ|4u$2W-+cdwZ4^uiT4r< zPC0#8ka`h+ByMSf54dHnWPi&)XOP;s;Ucw}vDFj-q6`DkF490;kO)h*T}!;vVZrc( zRrNLJm~}KuKqMs8!XVMHp;6~h8XG*Ivq0@#kxP7`3Vz87Tw@*gQbM472@Ns?*_CrL zS_%XMnmSjVma8Mf1HFyXEBZ`SNp-Z{6XDnWGFfWDP|w7?$vdwG2@ zEcn5_(n$#5BlYG^H8Uzhwv>*35nFZ70(zksm@bCopJ-shRJ)a%brOn@7nxUG{~hZtqyw>1O8BAX zM(L$*RAR!g5`%}4TBz3i*EItG#1s_Un+^xNU!uK-zT%}2Gn!IkFIW%&qj zx>T#)>PvJ!Fvw8f_|OJRr1LF=*E1v0Y%g#~pDVm+abks)CREhi2-!^|H18VrtY7pl zEB8Uy79tSm<+(4W2a z3AVzz@{09CsKlOMSwDOI#tv^!Um;JF`Stwjk)|P|KKWE)Bm+RPK{*ChdB|0`i2xbC|kS@m_Uo$La7=|U68TpFA zAf6(9tvsJJV`q0FR>S4l#sKS&*^=eQJqG7-0KswyWguh-I?TeFN#1j;+5gb%R*`@J z0J+xy&x5ng@~a;NL$ID|bx)2YY^LMzI`zHaQ(PvBX3@l4&q6Wzm671v=os zxNk~VeBC&4^ugc$_rrEgocPhVPq75pE`BqU;#Py8WOsQr>zumU-dKXHWW2?rH4`+( zMf2CaeD0xgzATnq%<0rl3H|g8*N|s*P6`x45UjN-RiuHIuA|EzZRA&AGRKm)AKN!# zm?&LZOi5f!+zVP6GN~cvrmlPP*S@$u&?(;i<;Ux-1UHH28L?6LfS3douyF}FKmw}; zBD&QmQma(pD!i2QOyaaoa=80W*Y2B#;;GGj^-#>bN=s_&#nQ)NiTAW6QX=cZtz-__ znzvMPU&`V}d&eTe1?09En589qi8mrr zFsIDRV2Oae163~2U|~$yqBNEt|EBCidNhYcI9%B=)?w^lzG%A&+3UJ!tBY(iCK-4x zNqYLtXQQ-Xt(uc2wOZ8a1Vl}lLiqL7SoS41B+L9go6L`O?xB{C0+1F{-wWIDs<^?7 zNa!Xf1+b?!0AX@wMA^o`rY=q#uzq;k8lriu(u7?N)QVZnnNZ)UIkDO}p5TvSWyA2i zVPn*?7l+u4Np>&|zBoAGs7CmTiFFw?c_(8EW^Hj+8Nx=X^R;QS>(-4|8|5V@>VXNZ zf}co1xEcvZgQmoJ4!hLi|G^!{N68^4FI?=&Gxx+nOsxR{)$d5WLFhlXXU=qXIVsRe zW_OGF>G#%0A1s>Z~^4rEdsprOh32D@}irjv{A7<3S@^-kwsft)E@3>q^8RB zIdMW1Xz?=$zH~!yGNFpSk9oMTKmR{NSu8+I16P&?r6ONa08*UDy#}ttfL7GEFclo`L0jMkD_G{SA+^w%*LK;bT50yD-APZzuLKP84$^mG%PeP zt08DKJLVGyx_lvEpe!B}n&vt9<+Hn4i?%8EUBm$}ylOpLDkeM{Z4XRsp|AlJLaqZ7 z(AssV6JSAjZT08Wc*da7Nu(Gf1I(*NrsPMqSJ$NVt4qyF{IDfe=TxLW4+8I$b? z9KOCT)`G;w$epK5{#dXAT5H4UU+Gm=r?<&atFKEh7-J};IvSD?9p+* z(LQ)l;s7-1o%)je9VBK5O|?%$tQK~f(0op=*|23D)b*x|G5Z)gllp~LadW`EQTp<< z@gAl%yFGJxGC%JNR^k7J&wcxkDK3#S#W@B|7}YywZ4t%k%?FlvX|^|sR|}5F_LYPN zwR;jxnnjU4Hn4|D0kJgNhJP_f*=kMBVy4MDWeH~HKz6olfQ z=H2?TsS|g%J?W9x&pYtWJLk2}n-|+r=Rzf*ON3WzU5XQQ>N`i{!pE62fV_F(^^G^~ zp1(}hf^Rnh|OeLDk0WtesJukfeP_OFQGYaqK zc+_QpDlD5kciz>Sr#iSSAb)e#0%lDv42kh(ZOm3zSiwWRt7pa4&RU|qAe8eZ&V>LE zx!Sot*xSPW-NMS}LbO@4DT-Hw&rHmm{XyZ4!eqYnna~trq!HX=yI|iewlns2o6M}3 z@~JH14Q(%3cK3~Mc;KzS{EDOJefY1J%71+pp@3I?aog4^T-rL~!kyNFH^da(qS^^{ zJ?2|4G`-f_%C-Hx4JFvp=A_iQeP*m-V7LSMfzL#~k8w;LSUqfFdq3eS`fp9>=6R2x zyGK=A$~~${sELgT!SZYDoH+IzH%2R zY7P8^)r|naWdOi?c5YzO!Ai$!q;G@PowoZ8qqhtkOQQ0i+9;fpIO#4iEHq%?fP?HM zVL<+iRE@HFwwFj5fETAIIFnRCgaquc}EK7XhaX)>iI<9Vu8>6J4PBcolE-=C z+=gYRWkORKn)Vr+$hXNKCcm+T?4O$4BAotC6Q{ED8MA&eJ<^&2%?NWPIDbdU9eRpYtqX`Mo^Moz*?L&#b;-6&ksG zBdFe^k6T6Npijs|_?F&2oJ#do44|JfE1>B)eK7ZjlzN&5?Af7SVUS4F=@{XauVG0MA($V9>TQhf! zcbWe@n+g!^V6j3yfhFc`brkMCJSdkwm!%Iq&POp*9;{UnGh45XjG~h(n-i=7{2#vo zOsn^BPLL0iNPpn`{0`y#lsSQ=v$tJ(9T7FH8sEU%L`7?_8iLtBt? zuE1&{jna|qZfS}-AJe4r}r`sZKff z5pzEn92ieOVCw-rhWju{<<+voz&8tMv8J0wQ=n5*rpc(eGZRE3*uX|#yhfKreD@VC z;WDsFeJp-@g!u@qFkL0RoVko?$}F`t+EU?YbOaFRk#DxfKVWU@W{)o5G?%(jHQK(r z3H%4MyL3W!hI7s5@nNeZd#{}=skTB z`-zG3as`;0B@r+^9A-$DXdb!fR<}AfV0`92Y12j6%z92tTurW44X5;B@#3rcjrVH5 z_K$+OFDt+GzSjbSDh*A>`_dz-J%_5L6*w~zgKr&~EWP$#V-EF7wW)Ae>9ya7`kBe% zPv&wLR1F(>2L!qM-5X_i(K$`K9-RtQm7v zh!^|)+UJ4tb;9bLjyNu_kga0=VA_OLdw4=uRkdWt^}slixWbPZIT{4vsJQ9~$tyT^ zpUYlIvC?MI3|y&Fk%oSp}c^fI{Pj!7+aSz*e-5`Scv)NG#xN z1DFIhE{LN~$i=GiO9xC;v=d(7Gq2wfE%6}U)QzM&>Zx*$H%WR(l0lZQc(pJfWkA!Fh1NlixC}B` zI%?37Cy5465|vNd-8bdi?>TE+AyJq|3TruwA%Fo_r>&=)5nEwC@X}g^4A@(~XJ_HD z$e7FW1sbL2?ow8O9gz9&b7UO+8GxMR1xO1yXM)B=B~?p##!NGWMU4hVjF=#*VKLVw8O*|57 z*sL!{M_I=qJ#&dr@HARmusp^Y%KE11>S%8#4U)DgAS9&oU$7&__+>YPUO(^P&t7kC z7|!>wd9*!ml&gP$w=u8ObXjpx1=1(KX9qE3m~K-s1`y~Uj@c|1tiFL!M=rT^>Fs9B z&yq#8(vI~T?z@7!_}AAE60YXV%Kel{r&q~%67BOwx2-gA?l2nLXbcW z0~jEgT+JBjHJ1B~p@RNzEHzBf997G&pRxe3cvsr7v9Ctk-QU%Ya>b4xG6oP*IvNvX z+MV->#V$^k?wZ*D#bw(3!O%1sM`HaWB_Fdkp%y|2fH2);+m|oTW-RcVg>JsXu*TuT z{bWeh7B|}dFtKSGn`}Ug5Pp!jU>$9>a}kXAZZTOgs?hoRA>6GBUF!y!n3PUn<&JkG z2?W3ZY!>v%peorN=_4O%_U;kWv+|aSzIaBq&+m+e)CcL%1GV5 zn&mb`SypyBfZy5=(;3ml%y0S!Pw8-qr+vL}Q>$grVUV<^2B6F^V}<;lT{6Y-Hp)*v zlzV=b6$tEVfeZ8t>iQwU(!lf1|zpE!z2v zOVbfA7#h<58Y4(Bwfsw_dVlMV*bo5T-m;gJ$|r}fQ~+Z#n&S&{MSy>Uk|r7}Y*=GS z1n0_M*fhOk^T3uZ%pUvX2Lsc{4t|>~bzO+g&?r6fReo>RF#amc@@z?R*Ep9&8o^M^ z^$C;E5R0Y$fkIXmo3Xo4hD;qy!O>NN-XEq>e&2C6KIjSLNomU_vSJ|uiCNQaG#gj< zsr3O*BCm|;(t@n_t(!J}f{fTGUv?a*EYo&I#+IHWrY%(obp$bGXTZKfa-w#y;IhOu^7T&9-EB@*$A-Wty526Wo>*Mv75}9g>clBNB^mlwbCAbhb5X zSFLA{?Wp1F*R3}eUDu{KPJy_V`K3viNnU9kQ{p0tOo?S9-u;M-rv@;FEQ@=9E7}@u zzj`0%r^8^=8p63(t$r<>NdnIfASKoe!sq=PT#hh}H@>M`V> zq8TGGYtNWKFLl-=P=fY`tQl^jeBtZ-sL`DPLu6i?K8Vi-BxFSSI)oGc6_wcf0k9;j z5x+oSBnJRjfnpGta28Qf|$_Z9amME4+DKJ0SMOi%cP;#CY>FwEW>l zdDA}+3_k)c4uX0@KI28+BN-yf%m=1S5EDl3mUgeqN8mO!wL$djxLfz#3TiZRV=J3U z`!@|AJ>BE=;4u*ZM;)g(dErU(pvBfWdb;QwH;i;bG0A(9S}Qt)|7jiaxokvsga4O* z59KPo0@_LQ1p&Qq-md>HeSYZ_TL9t~ssI%fC1AM(eN8LMLcRoa;B9HMOyak9PnJH* ztxMrJEofvA3>6%g+#LCzyxJrRfnpYPwU2=cGg$HVCYJrbfXl;A0JkI8A%&E z&lgK9uRE3+Y^aJvWgwpOV}{rv`$xqOTP-;hfE$1d;5u=Pk2dMAi8dRHUu!QlN_}5+)cM-6Qr^XvO!TKirs41aCndU4 zR*^zn&$|zN#Ltshd69%&mNvIps!_}&R@P|0=1wrvc!EA;9H>TcXN+$k9CF4wkcp$f z-AE0Y0)${2fhicU`}}J7jKV=8bnff&WoA}@7`x~MYPZB!#c8!Hrb#V-scUmDK&W&U z5$y~Q!1{gj09^8tee?jFI`cYcSGcE7Si5S?`7&h>KkFQ4UK=W7!skZ$d~V~00ur{Q zFxO0;hD+QKPSj=;q540ev-4&Njuf=a-2xfUYP26XE^j=_F&LYrTpH|Pi*kHhh#QRw zshR0V;Q%sq*C>}+;?#Xhw1Jub>?f~HX=ukS%0BHIK_^GGIrDEhpWsop(d0msw6b%= z$75R27WCR7kT7+*HIbC^!NU>xw+A>il=fRXK#kG2ei$h18n(<##E1|=;NVAUD&h3- zFn$|S7*m9UE&vOY<2m+1!zWO$LP*Ra0cNSCnl|~9;T;BYg1+*1r8GiJsv|DkXd)`t z*JH>eoW5|E(&-Kc0v3>f##0Uf)-)W*$`cTLc@IymKEVi z`A@f!6lZmZicB5wlX`0{NBc%9QPXp>)~WVPdR>hu8b(W>cPv-IQxo=VX{62I&sl3* zOw%kjj~Myb=OaDa#P6LiQ5lD)tdnafU>S!YKV9f)RzqF4Khk}a{T#E*8NM>nlO$)$ zjneufT;D@6fMCZ*XMGjzJl7vKtQV*KwMvYv3 z#BDJ;41!z&Lk+aDK~v>H;v@cHjVXR&s)}iOa49-VPpzFjGssXuREKN<4-z7&5iF1VOi)E1Sb4pEikeqq+%8_2=uxS!te&nCt_H{cLaes^4N^oPL0yijwEXYG6N9A zy=Kt07*@_=K{1*vMnh&bR>qZv(WH;XRB0Dqe*bZxlP%Tjpp-KY;m2HK#4hPY8{fG@ zO`#~%gn&>v=^2f`&A*f^rz9hB-Fq_c72u8ur&h}ica2z6 z+dZ#?t@+94l8|51X)5QeMjHxt-$S~Ww=+Tu1D%bNWQ##TrK&h_l_BgVx=j4`Uv#>` z>*N79U}vnO)oO#!u#~NM70sHWXBI^?av({W2I3^E#RfQJr?p18jXn$XU+{hazdiyE zWf#pbRg2#*lpmkp&&_6YzoU*uyphhz9A``-JD}~KU(?BJ<%xVv9BPw6m(Mp}hyx_g^fW#?+CD;DemGg55g5CM%l zp<@zyQ>bYfSa|C*yA>Pw-K|NR!MX!mG_&ERGoZXScA>hDj1RF8a?cb#hDjwQGVK6g zfOt}tVm${q1Q(%(P{QnXm2k-w;B5FFIw-2J2p}ksu{+cLj1?P46{41Yy4uzU`*Bv- zO5;LPB?R)*) zXbZ`yh3^x!_}%KPG4s7(Si0+p&ikSw9c!cX%qujbwS++{=Obf1jIS4NLt{VBdLUF|XMA$(tKSbh zQ#yo3um%V*g-W{S(_>-A8I<38)5X?W4^|2u6;({2EXSCX1e-moS>&@QtT2@qcnmZq zGe9=Vm2bNX(Lg;%nUMl3gpJ41qRO{;J8Uy6e2%oAYz zk32sdF)Wo8~0Vs zT2>zS3$Z;@Kb@Imu?#4G@07bZEX@n|&C=|D>AqT;OJFF)6mYr3;_O#{-E?Tw_Fgrm z&&oM7{4-&Ii_h{e?37o3oh^`0<w;LV1}IVFZq9NCFo! z1NO^tatv~P$g&)ZH1o{^Y7ThYkvIRX>6^+ly9_&Lh`wMEI4li(IFFBLgv2CUG$3(D zhBeQg#F5#3pyQVDVaui=M^nA8aJEZ1O&)4kl<{^sniLg(>1`qZn`=a92S(P9`*SEY+&yNnHX^bC;(0`_k` zoNXmtAu6v*e5i2$%rBWlw1%J6$B2642|(dio67n1*k-V&x|j~;Q5_2+o!X#3Tvo~$ z%u@4jJ5sxv^2cRW7;K{S zl>Ky0;+cx>f%L6QnJA5&K7~&jH9=loP)ZiU;LbB*4ikTtJT5TUiiGPhAzQ9#P3|9X z)hJoXW(z^1>gq+xVvtcZJi%u-l5T08EPZPUTun)w{w)xY*ao+3`+*t#nz-TbuZx>p(TcHqQD z5AGQB-*FCjGp0fzQ@vAfTA3Kd*NG~+A5Zv9^f=G@|rct*CMa1oMar6&c#wd z6}{o4J?R&PLNaKOGqDrVbg>ty%{m3woO9-5x*ay_V&{jTR0!9?iyUft%_bHnnq{q- z`6zlKj(&lpCDScE%0Oe;KC`EUvJHfK$6}{zE|VOZd7w!hm+Vp;Knu&F8nHX&g1zh& zjHj`(Hg)^|<(l}(VVJzo(eBy!6AkIgAN^XWJcT;ZorE%I`o@%sVtCK$n5~Tmp9aV!f$0oR>YYV_MNbC!?_fK<9k2l9v;~X+3rqQy>9Kf#gfK& zJH-Kms@fm*7r5&cVrDhB{+rxOh44HnUo6QZ;Cbuwt&`! z$2=|w$`tr$Na(x4Q`PqA13)J)-GDvvf$@t9>>jJdbtW6tlsJCG1efyzYya0jMtC}~ zNL?Dj_>{d%4yiR*3xFlQsl;A5kU4v`6^PHm$3o^SFvmT#yFiZy$kj6ylluP7(2+0N zHy!z!U+k-nJo6%XQ$;#@4a?}4h~C#<>5!nnv0&!$V6Ns)o$W6mjLDEbuH`N4kJ~>T z6kfW%YB)jagtF?*tr~;TC2!1oiU<>00>r2!%9$ooY_liVQhW$jeX?r+jrhX^Elg>_ zLAc=8=UNOww=WwW<1$M*1#o*ccb0cVc@So%Xk?JkOy)f-u4#MKJymJ1jvsXTuqg-( zf7*~hOv?QBsDhEh1Y(L?WRa7B363TO&t)JZ+QX}&1^7FfrCbM{jok&K_ z9qv#g)X^w^`WgYHa6l-}q3yQ{mV!V*0v!5$IW>gOa(%W5?yk@h7qZzZ@66`QkJ|sZ< zf;P2kbiK}+y{`X9;~jAaDAh89wbX&M{ibduMbx$pjHVB~ItpaK;w4w3*ZO$C53{6s z`u5&=zT47R&{^W2bmJ5(;Zul8K_ixG~h{OmLi3Z zX{ws|y!Tl&|l(w;mi*#))o_;=ri zKA@*HCI1Z!(`0(6)-z@nU8OCPTm=CmMb0$6rd5s7hJ#fHLkIYkwnEl(fEEO%UrnR* zg0F3wmb3CIy2qevv2$r*p;en|rd63UZ{;e(xs}V^#9TnDeH(iwgfjq9Vbnhvq`qWV*to zeEx|v?ja`mFUKW@_Q9P~3TG+AfCZ^{QzPGq+LK!|yZ>!sOfrWWrMtgP2-WV1Rv7jL z%hK3uo;p=C4=7bihEYVq2eXh=xZ(r4&qh3sP&7^t`MC%UYrr8O^SrX1p z%=EM(GhJfbl$XR$t>RYut!mQ5+4ZSM{2a~yh7=NS$E@%7Gra5KYFKc4xynA z%Zl3~sen*<=Sv}uJwEV6>8M^Yc!5$?IGFjHrm>%SnlS>NA@>))L+@zDR3YgBB)2z# zF1TV4w4q$N*V}PffILF?#J~%eErJ!S`l>nM0)l)cirh4P{<>#gb*YU|k)_Fk3lxcRH~>aoPy4D{Gg<2=c;LHk2_Ut<>$eUh=@+J{a7U1a zoKqMh5N2Fp0Lr-Ln_U9xdOBdlJiT=hEVMlOT2pK_>YUPC-YIhShBA zsEyM4PV^K&%ET2DK#iaNj9}3yuer(s80Hv4(<1JhDCzzGG}XhQFn6z|+H6tED3XX6 z6PPZOLMI;fxwT7=nPfbxyZdt?i58n7X?iT#Gq%ir94E{Mb}?%76;hZ0r9!%tHK3X} zaM@jFCE*vR&wEKCIirA8>3e0<4^xj48UXSQ0JXdT^MK)ANCK?pPV@@po9golaEbB5ON-07Ciuj2 zbf~!LJy0|?b&dtvFvfP;y$~wC(KAdVh|vQ|N=?UGY28w=ajGNOjNu;c*pXOwI*Ei2 z8*&C-dSyShsq44!Ny|(MP{O0XJ}qo6g4R-i$Uvy6NwitmcFU2W=tz>QuwkLN^fZpW;ORukBn^=Ks>({9gz@{|Ea^_cP;{YCXxb19Z8rUmpH>;yY8% z&_T)e#{U!USkMh#6kbZPp8CkahJw~idHBxkF0hV3G)~IR!HufPdi0l!SfNCRibnR_ zz%)LO6c53xtejQ2%aXTXjlrXb6!I6tQ|5-;ZkB)vSM^p%8}`k{|EnYR)y7{oM;wfs z;?0xFO31RK0AvT-k+KXuAN;8Nu*GU9m>_G+Zr4nEOR%dK0GB%k<^o-Q&sWDedqqd< zZ_kZu@31tabo&r0tBG8ZUSDPN_)O&d%I@{m${{<%7zr=Oaab7AIEtweadcF`f>e#t zQw}8<0dIniQ0VlU)tV@jiCO&X zM(KCI1$vvfOINr$(f%*5+z^g|9BcG1C7klTUm9N6Aj=~5pHCm7BjFn5IbZV5&OYHxk z|B2G~Ug4~D({%c=sPa`SmV}j>U-bmEXmj1CtBn*mGJVpEGvwj(E?M^sZNqCf%7x=LmvF1Ixk2j*&8`eU2jNiyMl&LX*;ABhrj3|Qau{&J3pkc#M?ToprO(J z^PB9i0m?mCmfmPlW)zai7BipWcqEfrG%m{bwm5#o|kx>CEODn3$ zbvLd9_v$O@G&We0#c2=@@05kIZb5fel2ZydP?!GtM{(m>o)rnlH@I<|m3WeQS~X2E zdgX>Zj7WS}evKTIN&FQ0GrX;19c0!h9ZZ)kKNCNa(o-*?ovj}S4>d-94{Kdlazmi5 zng~bz0A?RJ$_CEC-x)Nu&&(fGCl)^0e(sH{6gKmGx zC|4es8Uh$8l58U=7)r*^XWZDagt`HXdB^~u5gm70?Wh-&i25lg+!S}wr!F$crNyH- z)bFu#@0(h9GS0KzN6(uVF?;&NEhB2bf8W9^AfYzp3P(If7dEDLaFXuC*bN=TfZ2n) zEIDS6yE`(fVX$?*k2tyoH8JTdUXi)P8f|aiMFK(TcTQ`XY$7|U1m%MrZ!5Ce;bju!qEq76ur(FqXeZ_ycU$q7Am|-6SnBA zK~P$e*iZ_c;6RoZkk}}W%`9X>)`zQZ5&d!}QX)*8xfZ`|lwNyAaRGBq?tsYW#OzHo z9&}@2#)yxIKC}Ca@N2r8F`V3CjGFA96D}rUvTnb&3GgHfxc};f(uc?okucJK02#fr zg)xpTrWX0~rYQI-pQ9wW4UrAAcxcG-??3Ng4(ilX~P={Vq`0A726d@_^C2AIwz4PW{Z{84` z;6i~>={tN=xthbEM&~hyzS)<<1y!Fv)~cEtrOz*nu$DLEkmV;|*&{}1_(%kyT0i@o zj*FV>*6I_(A&@N#QF4_`I$S9`|5V&td27Vv; zC9b|WT(xrR_DRxD@#J@jy2QX%nOb1j;Hg6jFMuLhDTj~~0Z8>Gh$UUOTJG_u-qq>uyl}8k{NSnaX@B;>C3P)N3A6?X*K5bgUZi8 z2Y9Yp&l$+#|s7 zJHyqd&ur=yZP?aX+`-9y{C!Jn<9M=KfVa;Z*nsi1s`d7H?QJi+n6U}wRlNOa^}>qn zme@1-g+b>ChWlPx4q~~s5lLWs+lD3l;B=u?_hR8JMw+Jpapa0wOi{Mf0&)={9ns$W zsGmOCjyz?VNjTfhCmQ8T}tC|}q=m^g^;zl^k6D6B26~|@2+Kf2@Sk8C=Dxj@ z5vy<1*Vv;CDqSq!74>9hF zdty}{U`LW9vRl5~)@fO@T=s~3K#cBgj1@?**fvwhJ}hJy>SN13B$()!GynJ98RqCjIOL3pgFi03=1L&UPQDd) zLM@ZpFgNzt799)!2mG<2XcO%2hmHFt1t&-UY$>>Wh7=SmT6dl>H@|#*0|ZI$VFX73 z@dF0G!ZZW5{9dRVng5;( zlTWK(ZtG5Xd&-JA@bXbm)(ovT~oxCBEwC+#R z2mqtp8y>*3bTZ5&IR-5I2X1!z-D?p0^pdWSV}ey@eh6NW4^y2M&@KWqr8S5i1%Gu@ zg5q5XBP!x+Ae9QqB$+O4PJ?(kG4b@wW`Q7&Xui~i(+T3}+Ecv)u{Zn9;9YM{SyXd8 z6kd0nskL44yPxSfI>@%lVCPWpVCRfmfAtb6mk<3?%XsH7aBip!L{`+#hmFX z*TeM^{au3to4bfesr6b1TdivK^=m0IA%l7l5F%WR%nK< zy?qTWoUHy*;`xI=3L4;XSZ0C;p zLP{8V>SzS(=+pU&zgXV6V^QXn1)ykvQ9=W%)kbQ|<^3t|R~s-Jm}!Y2NXB^ny)k^# zBk{{|CLnR{;xRuWd>OTWU~A{raR`F-X!`>wrx8{o;{>#2s_|i)3@kk|h|C=yFa+0g z3R;>iVPsG#7nvNFLZh`uvh zqk$~qn_l%rRPvlHsQP7x9*`E%DE-|5Mv=Z#4%I}OJR0|q)Y;tbCiT?9Qx_r3a0e)G zhmSzF09uS|E6r8>ow~e6mRN;loR`yZ8u#c0NlLs3r!H!gK7L%3I^*)}JS2rjGoIkW zzDZOtV+$4yu67WsOa4`?nk%jzAKtdW#@J{oS8yVbNtyS7j4FRk93|~rVC>*nl;D{k zrF8hj!O%w36h6xn#rsA33ZZEcdb9Yl;3m8oSKdTt%Yk6R8DUn3bRIpMizk93^;P#L z-QvcDAc*ze4eYb{BJ-+wa#wYTZ^6(E*jkhJLBJ2?U4g}$7pTBLQ%wDI%y%3B%4pxi zi|~D`7%~TUQG?acb3@TqA(m($T+*2T`X6WwOY5DTNlSRnzG(?>y5`T;5?0L65^^56 z#LUrx43b59?LTEw@d>+TCTCuDVDI(0q-yFaIv{g5^2- zp6$;zr83O1&qD6Da;b#S!g>KlG{&DEob*Q7+5-B#tI3Hg!`ilsYwcYrNhLmbG!738 z*(ld35!l>nPAvJb&vD;}sxykH#f=Gglc- zvCJ$s5SOoej7g6%nq0}};5%s9v+cl^ZRd&X7F*f-f#gR>E#dF~GQb(mDHUyz-(bOyOCBy#_A$3YiD{WX6KptuByVq>5PUdXEkmk7piCjKVo($h6&lnEj-9!h{AC5HPp z50SX!0ht_)WO~N-FsTpOq5a?q67Wq}WZo-KULZ+cqFMN!uiKbDE713|_GoUP(H;cc z_P&HDd)C8#dg|NzCQ55BQ*uY!JqJLmrovIq>*|J9ly&h|V%|0#Y757Mugw2ZPoJ)! z@QAorBT}bd(VNbR?@60Lg^<9XKTMfB6%1^Z|G_XJJEh< z`b{QqNm9mVR>qj z0Ln@`jO!B9Wd%v4DmeTn_AlRR^^sb%`qah2(n1*`FYHZ@qM5V~AGv5hQ!m@5&+)1rJPpC^8mppvNp+3ShNh6i0dI!I~U<=vOiGjOOyig_JJ(1|(wXbH(}7ly>f%W^f{u zN9RT{bBrV;lh27Dv2s)LppS+j zi6kASj~}<>s#p+QKRe3pfQW*JSlxx}1ZnKAd{4e9(-1;(le{WV(Tv6bzW$_1gcmw_@XKHSJ&0-% z5rx~_@1qTJc;I29e8FD^Ga6GK);BvyX$3&UB2Z+c)W}qEKJlTi<@N3@(GN~-$IFUm zVFJm+_hRW*P!w~5>og}3ToFajuT<4)YHDg780I&vY4VoOQBQ_D^rD6ttNZt2g^|!9 znNYqYMR9eC`99Ny&-7bT-IJPh@n7DYno{!RAsBSI?)7wx-(huMl+g=LJ&+XcVzIhq zC#A)wqCJ+ZMq#vQR{N*4Q`?X4Hr6TawWctcs98B60a#ZF1Fl3vzygq^=rUbm-t+AP zRqnQ8PemMovToc_v)gtX4pRqir!PBAvHVcEt0U*B)(13#zbL+*S$R; z=z+&ra=1}`{9j-o4s7lj8W(RwaYGjdS58~JM*0+P9f!KO1a#b_%E=q00Xj=def%R> zqxsdz=P^E~G6CZQ1>GiKEQB-GgKCf`RD+3`I_Qd&M7c3WDvXq46|7S29&+T!vN*o{ zZ4eo2UkJ6Wqeomg^Twf~v1HA&@G!03l zyu=QCC5_V5f16k_3bNV)#zRL@!+e3tVsJT2M5n#)dkRLFN&$_-zUv#$SwB&lx?iep z_u0{68v-S-UPH%x79a-~#S6{&?p0-{l9e;`(YXmzb?>>1eLT(@K*`9v4~w$zX^U-S zpP+RQ(CZ}+Xk1Vk+s?sDz0i!>{Q@Ev9o(eVfpF-Y5y4oX)!~;Yel|X|89}5Emn=QC zbNOkVOP0;`S{faf@}EEQiZt?Cx@CRzZEM!2*plWyX~!vBPSXD^G1FelJa2`loo{OOP{u;htxs<-xLim*n#`{JW)H}|E@k)o&LuC;y z-P?!DW`BsQs?ztQ|8b(R-am7q?8BJIRk%y`O@;gCwmDQd`MH-Yv81A;rrx~Y8Hb*A z>fD#xuEsG+9#MJ~Mz`qgwaoLg#ItxdqQIyJk7e`uB^2U_ZM-Lcg&R!we8{3I(3=vq zywaTlK=@Uq3U&Sbk)pa}ZJ7cD3BXoNHMhDO({}QUo0Ott+3~rr3wl@3z&$*T_WfRf z*qyCfp&$O@=v5Q#`z?@O!-K&;>2yyASYL@+ElL2Z-YS2@+`Q&l^{#Y?|O~t>ouzn(JYYZV{-Nw2%so zL1#nYO`)Hot72-_QX>&ehnX}(MM362<|k%(l@EKgN9ln*=%cL$E0^;3>RYmuHn8?J zPo8mJSvPoV6p`AT3sg}XK$FWr2m4${9uAa*`#bB=bR=fgCIiK^B44|{F>{&3y4w;` zshiiAZpR)MatS#K7Z@-L zDjBjl0O5YB@{70OugLOK1X`x&t{L|WCg@7-fYne#xc|2M&jRY+FH)L74s$3f18IS> zrC)Hx)A`Bm<~2BWzb24X4wE63#uBptSV#YqLBV!VioKzDcxQB`f|2y(lenCBl=Nfw z)}62uS+%BF88|dgwG|-JK*dj?lSb(kt6Nf}nHMn1|A>N%e+DmSl)K3FYr(qV^b00P zrKc)AN_!7lZsm6Y@ZfrB;tTA`x0~7oKZiE@ij?sdoh2!0EXg>jUJz?U{YlqDXn?Fo zK93h}njRU&$+C!Vtz9nQNY|t|Nb)><>oUce8#;5?5P`Uv^mj;6?|D*%6sRs6RZ3Lw z#Oba`E2vE@T=@@F9@I`>S>3)^E}q3(tD_|C6RjtAKUb@I>2)|X@${!%pz)rx@`M*` ztL(h)jIo`gmD5+kE6=Fv_tVqw)h!I@i|{waORoT$H_v;;Z=R-CSEg5eh;fD>#gvcu z@2(wvCs}R`3eWL60{&Nwc=zM5QuRmrG1CyW3m<5ZOz<-_`w1`5G}jeA_kq&4$4d|D z+c^kxRU;3SMmrrOuLKv?LVwRSKr_C#w@H)A1haMck{aGG0uu_Gx;$jOzpzA`L2&cs z$>$o&10knUFJ= z&l;Bhf3}9@*&0Ij+G9LWWVQCi z)js0<&Ls)wiyL>OeST$gg`0=}x69dA`V%fJ$=i(9>Uuv zU5MN*TPB|Hk&7JQ_Ty|+_n&8>`V7(`1~N4A=X0wVO`Ci3BVYfMLbS2;!y_a};ORAQ z{_2G$#)Q#B#n6-B)kSHjS4t9d4N-Snq#Dl@z|sd23X#YRzc>CPW-n2e)q8Nqc8|n6 zDv3FX5Q}3e(Qs<2=pYA-b~}2gmdd=Lgot~&5z^tl#PM+7KN};RCSW2yXsjAPd|#&o zhqf<`*W_Gz>Ha3X&DktIr>Qkq=F7-52OMnO+^|X|S0S|2H&K4WrBPmFYS)Mbpx7O( zkLo=MbG9wNmlTM$-xE7-yZdOHQ)6YL&r}(-4xo!43FV04}dXvEatl1@q40`m2GB%)4`Ncd1GU;|%leu?a!e zVM~N6jrn?yRUI`-S0Hcek$ zqehz;jGc{xE7Or1$}q;?z)hL)me~%0btn)=Hk$ zkV`#wtu99+{A`rAUZf8}NxL_`R=knHtvY20eD<5v;<>VC2aK^|Z7HRdxtgcM%A^^^ zv{hW8<`9o#k=rIEYG~nzOnvKGelCDp653POTBZMMh9SQT!WGO!5^_ijAA$@{$6%O? z4p?juLM>4O$S+GS8cHxeg~#a~j8iruY{c9KAvHs?N3D6Sbn3yghOge<`a;qomUr=}z}Q@{jP_r>ZKC6W z_4$Ay`MP=ry7Vx#$pUhIf)PSLxyjjZza0$dC!tXq3Ksg0-!|jhQ@g&d@}) z!x_o~KUtzP`>k;2b`$j+W4Q^((BX^efSbTKH+(_U!AALoPmlYWMQ~ZvPk1|Lc_F4y zW$PLl?I3C9a4o<0(XEP?cEh`$pz|{PnpZw5jeB_5-q@B#wI|=$Tg^YdnvPtWSeh4 zB&=hz6v1Z&H?W4V$;{7W;euHpm*Iy)*8~!7fby4*Tord%0x9uSVztDUJn$57`25P0 zB4U;MKtfg_bdcKciOsOTuPqfNN9Rmc_={sRo%1n1aqeKm6ZhG)n4|;A_T}^&ZTD|W zCk415cNY7Gle>-62ggZ5+QJXqEAptTWyH&8w<9QZ*S4Usx@SwlSM4OG=z{^ut!P<`Wh7QI@P^uAtPZ z*GW?NDjJ8Exsy}hNT8{vNs9+Vm2@2bOH`wIN8oglqN-G5;Jte@Puw2p(qy%O%Cs4uB67e|(++U-=Du#Wu)>ebCJg8NHQ z8JR7PCysjXtuAMU)H7+R)iF|>yj3EfcI}(P|6!}0MS~$kC7bhCXBq98q>k5f+sdRg zVm~Gc5nY@n{gmwh@$DvS3?>1d&z+=qaftLAT2Tu%m;Uoc!8P+!NeProix$xCa}4#m z;DcJYXQ0Bp9GQMgAl-T1fPTQX>k(3mU@rM}J&ZZ+=m;Ds4?fyMoB4sOBvW{i?<@fY7537qYRUq-xevi-0J(&S{`T>UMZ zqy2^N@Pt6)f)d#%UK4zKD3j7hcQGZ1L<$n1E(xOiEUX*+3(saoM~_;-B?ZO;4JlMT3Lka<7_= z)s5B`(~iM`cbY3-Yz8RAXG~+4Mxx@WwHwnh5%=x&xxq!wn;fTRgNH$m!S}@dcNGji z%Q;?E?Y-$$U+gE~(kq!F+iwGGO+Y5Bm#Ac&vU3`x@4as?{_R#zK?FTaKE>6HY}EYF zX&%J{UiJA6(fo^Oc*XB36v}d}z(GjFq&hKCN%mOI zh4C{r%7?#MLnoEOP9-c2P<5fS98L)OM0vJMFI0hRM(D#OVt>NlaJq-T+$qtleUFUz z8zM-f0QD&4j5AVB3W*5WS;98gMT!TOS<%vbGf{WK3%V>A5z;YmAe39_#`&EAoVCo@ zeeuP+$NBPo)91f_@x#&QXWgA-9_Pvq$2sjyQu9eGTX$kwx7q2yx=TCBHT#L$Z(pNt zR%YMWi+N?Oklb;Zf2qheceL))EPVU$rU30UMbSL5Q$j0&3H4u>OpG+_KJGSO$LSBX z)!PpH`p2DgWS;k@*iJr8O zlMY@26X!9L6tcD3ah7sxqRe@gu#I>G?}SsNSRxrj+tic~x*0sbs9^2WaBSz_8a zqTB{aeSRgnE#YIL{MHw_+Vg{@Q`+htZ+NE5? z5suYXCidU|#ogEi<>&r7ydmzuM1+{~nmHZVf}3!F6^fB}hEGvhLcKzxx$#I};g`;l zV&=Rp3s{f9oola4ALHz}?o;`?OeORqbfKL}{|32Wv@T_^_B!#z@vT&C$jjx8QQY7& zPbkYUVR*$*587VU^2HnnVzFd-TC*K#=?ulCXC^5UM{O0T)gdv|C+%{(%f!UQ!7u8b z!4d6uG4EV5))eoU<5m0JUIjN{WKW$~aNQp}a+}Ki5%`0M$#+RNNgN=zwidXhvLNFL zB&!vf`H}`JEdGEkC~g-lU|ABA7bq^@UVfjEj&QE0R-*}A6uk*HE!4+J)*yE@O(+(} zm+p(hnIcyO1DQ^*ZYn0}aw=!sMtSLDQE*1A7GxWUTp|2V8&*>_g{7K1P9romauku5 zl_~?uxim5V#sA^7&Y4;GnJ-e8%s^#Fb%qmlr|KRH2x%vdZXV)?*3tdq7dsDr5mKRR z%O#QoIl?;=<4LzbwJ6_ok|9j)3H|(=JT3tINLiAq4lmNC5|W#VWWBM}88Y|)IyJ>% zsB)q+@dTxAWbIc%Ia{KB18v{AH~w6ThoJ4Yv)!Lyl4zOeul(|BQ)7gvBF=a5=cfRqhddjr5P&OvTc$>z*Uw9VOE{#pfRk7#wHK!&svL^!i2FJKwwFM# z;j916(a2oH_>O>SFKxc0#0#0U1gpGsH$qMKVbx`Dj1S2TP0Z=)f0IpDNMzG#@u`C) z&%grwG#UJGp@@_rCB&6+J*R8Y@}#^){=3!#A74ilnZt48hHzh_$qnEGix^85FD)ds zLfx>ENl?w`(O!8M!8JBP6}1GF_8T{?`!G-}1Bh8jGVb z66OrL^=#$X>e$SBSFWU~{@7q8Ts<@1G8Iy30k>CA4W4>U&yH2%^ZB1=CB}U7yhiP& zYp+$rxWoB+>u_~X@yW-+1Uk7eR{toM%fPKoiJ^bnl1?i$0f%KBfWt)v0(3Q_LO{-_ zRY;1~VTte^!WZG@H3VPaQ`xmdNI-cR!jN=!F~ewav5dNt6veZ+Z3Enl^9q9O&)r>FpffW`UiKEy5?dum1&+W;5Osv&q}-F-oKK zz{S?fq*{lkNO7zVgrvd+RiosGWKu-}jrqp?8>w{*CbC@^<-G;G#m7$fl_jk&vNOT3 z2u)nEZ>G%mPJB3~%+i^m3Fu$Vp}u=9(m>}U0ERqp&P#0i#m8-gIz$;Y^EpGN%J?U; zWUmVgo24+Ck5*2;bFgYa`&ux1k7q2-uW4h5WXrfIsh*S&;wu;?tPkQ9_ z^A5c8&VmRM%9W2@ZmoejPR?VS&U$L@Pz_bHxHMH_FsQs4C$s9HiCkDQx0rxodkUJF z(N*fX3-&K96hI|M1LQj^?wC7Q#STFRhV1F`q@WmDHd|Uj#64`?AzqVQ<(MD6?YbPKf9BFJra3OQ#7E&=&Q7Jl~e!!@**|r!&o1$>lje|)3U$? zEo+8Nal#8wiBra-2sV8saWX136~91cm~!BYA)&>%DxLzp0gV9)1T(mdPuG?)<5dSBhrQvg|A#`KNq}`&J~6?*ZR7$ zv1gH8@uS=UsE=~2PG84D3tJdN(@*QSO)1sqp}EDwU%U_eXRX{mEiRjVAplskNyGk8 z6DUw6zdr<{6XRI9(w*mtH9!1)XpTQ?7ks#DcgGh$SWs)NDpqQ3O0!3|ZD607EkJ{H zOCOZG?3mC>RHsX;STs-7@F;W9>{IXbh$ib{m`PpuR$RbYhG9>0>wt0&n=o12 z3)4UF2H8#B5jUVt4|d-tuB>Zy2}6qlmBv9uDIa!VR?rZa_gVdpMU#-sSgXxm)pbN; zoop*i`It|eN273so)U)4*u}oV+oyv@J)~iiEXc|BgICbOA;IFRk>RUiA=2Jf)^}Ev z1Sw05TTMOP4jq0AzoC0{P8@j11vDdSMqskJqLa|%Y0b-RJiDSmR{uz~HlurSqx7p2 zM}}woh!@l#sfpLKQZb9nI8FbLMEIVr_okHvs=`Le-d!iaIbARF~S$R2HdP zz&2%BSDKs04~`dWNm2IeDFk`h!6`L|v@I}AA)-hw;LOdUrU$v#ZdorDMW9vo_4Aj^ z)cK5%y~*k6JASEZ;gu_Eg9D=~)IB5P-lq0Z?E3u5$|WZ)J$do={GTGhk(EnNT8wVV zH77M*Fzzr*XNcjSw3p#YB!0~^3!K4vjEXaiZ5bQgJTfvCoB_=n%l7YxHdE16TQ)M* z0p&o>dF2}1;<0ZeZ94*j&gE4NX)Y3)K|IMo3H zh=cX>y4Nq7DBVOe(TMfS!m~$sMg&n<5{D}*B6}f~AoAVXOFC?{Xg`x73q{(7m>}b1 z`Jgwh$A40XPN~u>AO9{M2A<;5&3;unJ+sv4%EwovR2W&<2f|Bp4m2sq;wDXRaZli2 z{y{f}l?9q7W+TwM72|Gq1O0*U8xCaTi_-c19{qC$ZlTMgP{%Vz0d z8sC!xd}`s+)TtF0$KYTxro>en?MFNZir`pvp(z6q5-H+_iA(5?L(H*=wa|enb{X-sl5|v%l=6I2b0r1LPsa%mut8rCJ1cnCu zG)zKF<^9EFG?v){kOF;VdV5u51ZpHE<)tZ)n4iro7>EJIAW;<=2U^vCFpLz zgutb{=OFF08)D=BrvH}1QS8y;KA^h%jP=b`?vN$#PrW67@g8@_X1#xe4Jjp$V+*rj!F^%oSrvnIVz8rb$>KyI`GKcTL7;wjRX91)DhXn_Ax^GEmondDZgQVe1mfn9uQuI)Is1}0zRMFh3 zwPs+GX>o|rXyYSIsMb{EsTq8c7gIPU`xsaKBUg6Yc=^-9-r=ZBp^Fm{{ZbTb=8f!y zk8=eKt@?~(!X5iO&ZEK=0EMC{s^u(#>$a>ag_kb2P9$OjPV+8-Xe9%9EW3v@)fErB zGZ{`@MGLWab@Gc?1v_amZDSqp}xnu6!)~L$dY+Q69!O&2n-S%h9i|+Ofm`qbjDQy7@-3xxReK(&no1t<7a8HJ2_s zeaVuhNH&nAueyClb$gA^gn3JrY6g9zEGNF>+M2C2uBxAO>gn8+?FbiN4%(M|yhHCU z$vz~owQO1ayvpYK(o<~A(@r~uL=b}Uqt(vdEnC&drqk%VYizWue{}HbuENt<`aAo6 zh?$lyt)ElrRsO;9`jXR5TcK5qRkrOIZJlKY`sPrL>>{5056dShYRMd9hBaWr!VS|k zaI2&440Myuw}ZTpylYj876h^>BhNbKMcrwST;yg&k!r6_cy5MF+v(WdaOBOSTef}R z84M3gcl)4p;>}jBiA*i#3rv)EeN_n-ya;PEX&!O5B-AC?FdkFds`zoJN^0hqt6`1O z?GL6fnkz52KM=|bX2oy*K|J!F;HfC+GxcJGI7S4+DTfKLY$Xoo!klR!xJKy@&vl&+ zE&tFbD8W^GtEpWRUxjjPN*Z~pD1?dSyRstkPK;Y&8J7S+-!PgfLThfcedjA0*Fupq zZ6-IAn$o(;h2F9O;AbtE8W_VLW68DNT=Rg^Tk2I*O>AW8N{=@Cau<=~Xwc9%{` zf{S^vNKn1dhty+D*bzp1ab#1yJ=SEtfkS?iXEww%3%xjvgp^x#e zOlI+5tzw(vI;HaWFV%@jb^99 ztxZk?rxfcQ!*j&`_RC2oW)9Ddv5#s^P*Go5^}_KkAh-f0`n?DYCJKN&HR- zl-~C%peFWTeGq3ya^AR=@=8q#1|nC2W*d$cGH9t39=p}#S@f=Beg89R4Vp4SJPkvH zF-(%p*Lq^Gz=2RXg)@J1!#W_1>>I&0rPjOcfm?E`RCtwWEm3KO!V2_6%hoe%m`Sws z(yzaQLony~tPw24c`>tLytoWNU5$P8>kpsL#cb7%XQ8j2TpNHBq&B_hM ztL$COJPn<}&@AolNnIhnjZ!b&1&Xr*TMhYx<0FxZtO+9(&>+}uLY7@cx;@~`f#G4d zPd)q3^gx{nXD@%7b_Ts;7ovDbkpPglJ$a+5Z?Xo$C*A`!=x!0&f3o|)d76h}ldzc} zE@!l7JR%q^jA{KOPr0@AjD??I+=069c937N42_kcki$p=;+ zOXI`T8|4ptjJwg5-*&|~qTj?prEdYp`QRTWKa6?xw)JJ(=IhA&ZhH?3x znw2zo5AK$>C&G<0KxBm8|8(whWx*^6R^AGB@kh*eqA`x3f#Y>BA*Z>g;-2t8<0*k@|{5h5p-YA{-AI7mE zqmLYNv4L6h#s^0G<}9ESfO*hW*+OB8DHfL;}xc<>_G2C>D8Z^(iw`4<3RB=S)FSkaZ%W= zj6lY)#-r(eD|pNy&m!Y?Po%jkIdb~CspRq)AiYot6KX2g{y2sXiG>a8)Q$@08s+m%SmPpYp$ zr}rhQHg_@jli7+Kf&ilLwG)@Bu>!Gbxd=)>HamY0*H=_J{1_$<8L^(JVsmzjC#Klt zd+6wO)9^*pSIS=6ldxj<6ZZc~ki}(7APWeCE2+<$c<`=UxejA+qI~~aBXt;q*CDy| zzyGyU>HgS8`9;qH)u^oF{vP&09=-8g)p<%DfT+sD?|%iTO%PO(PL(jZI)tB!R}mS2B-w>jBckj!F^;&6WF{ibPbT}e*?5qb?) zl%yy^z0%nfKw`oIveAqe|A(o373ly<2!)F7>jD#87Y;- zUL6=gq$-R8S|R}ob!FnU-g+o#neH8QBh37)TvaSKRUI3rdpt+$teqb1e>lv|npGaJ zV&i6I>n1OVmsN3g9X%Zqy&fOX>QOSVULnLA50>m7$xA^~5va|k_;KcK=_7;#REuSr zv1ly5J_`&a11P4j`&O%|OenF{e5cYOQsd4kv!)$W>sJI|zQ!bUDYUeU6{PHhxAUCyT*78HA;un zlpVpvQ`RR|0=KCX$0P{Ell?#^j`D?fpgdvaB>%8Nwy|3YdvW7f1en;v;#)FJ1DU;! z7AlwfKUq52X4I8k`f#OQXlHB;j3LcOxzKtG7>`m*)0Hlw8%3Z29 z0=FhhpQ{$x0S@zL?gwtsZ>ct>H43|E=3-4oV>H*3z=?wG<|>=WM4Yt=GaWD*rUPj*RYV0xj zc(Q)Q?VIQ6ZCX{qUs3ZVv{1MuwtNd>Hzvt4oKa+JnEOO04xE3zomR3@_{hIuqW5rw z;@J*kkJU*tn(f};MZ6E{2f&E?I*A0#jLNa@6rECqGp)u={A$)bAP3pq5s3)wZO+!R{6Op<=#nw@=%neD4;8% zB(zP_7xE~5&_Lf0KtRhRbCZmnSLe|*yw=4Bpf=25q#F?}DxkoupsOe#zHlw9;H&P6 zx(U`N&=ph!1wr&^Jevs?7 zhf*ovf-570FLY3Bx75BbEyi#m%w9?3@)=nNXc+2=`(5XlnkI)pb!$W=FqnIpL+QtN ziOk)UfBR=~(S?P^dgF=tx=ENgoS6Ki*mN_kKS$u*-wj_zM3n4^=0oUP=c-F$o8RB~Hk8`op-W2mqm3pR)Wv=(Q93Uw|W zS*UYZZeK&4xt>r*nAlYbUR9=q=O;tTvPn=V$J1d?tw6ZLlm)G3Z z4T1!m7tj;y2!jCdsj_h#__7sKY(KH5Y-8_zeD)ELro%&uYG4ShBzfBhiY1YMg|o1u zoG9lVcv0jjz>6UbXg-zfI2Dxm!ptF~qA*)3Jaxv5pAlJ1?z&sFaxHFn!eU~A%qUs6 z(rmoA%)rX!*}%EZg@t@IwFlW#F#s3W%<7vq$Q+dS3_-R53&m}Q$Yt=U2A|XNX~a31 zP1@hWM-NLRvK>MpGZ04|7{YTpsIz&7;y93Q;llx- z_2g_E>_$%cdLQ&G#d^jN3cEHHuYB|rt$1H;+(^qW87-q}8Qa(nc zGrb980z0}HI!XI*flhH*Ml^PZnY{&HY&mfJ9m215xb)o)-G_ha zoF&$GSSJcgr;ZcYT*tGs&JuBOYzm=-ztRfhS$XfF`xI2*ycdd|PaY9~O>R@`Fy_aN zh=bT(W@ODaL0kD-q&_Gt)*}JeEgS%)ufmaMr3L6B5|a*+bdTJ-zv%3QgD3vDjF6ac ziUc_;8Egw$8v$#wLmekLjyPzDZQ)GKrdjH-EXB5)XRX7>KEHUyc}J;dlm#AQE3xw| zzUCw@G_rsm!84$0dJ{hcYC8ArIow$7({rTEt_b!icu642rZwwUpR;b!%2QabP3JFN zx4v!ls#EeXFOKVg-9GiSEPhW@Wr9|Q46ZNbJq4|mpNm~D;y(sUk_>SNO)7)i7#>o` zRtdkdAa`vC)`WFy79-Zd8IfUcAXOen^+ox&0s}_?eq#$Tv*_{h$qFv4C7!|c>|){6 zN4lS#olcQ?%$IvAl;B)=;e`wNp~W_|(r-{mz7~MWN#a2@SpekVQ;sjnX3XYnMjPge zaw0ToF}*Dh(&TjnBdq;$0E>ip&I)im}gp z=u^;YxV-8stTd*o8{}GVB-{>K`q$$00Dn=1>;N77wVd$7U8w=~D#Y~}TLGCDI4JfD ztg|~Wz-x}MlC^_zLxO-cDT+ikCkWbBEnCeA=bh6n1n}HDro8_K`@yY5tpFC*0nvlF zCFN60VT4K?gejbm5;*~h6>74OF67R6yoYgTf02<=5M;0&km`%>m=gRnZle)81GRNM-8U@Woz90m*ntjqv-Ysk}q(g%f z-w95|hqDxR)N{19%PQhN1>U6Sxh-WuRxQkLJs-!c5N zAv4WQw5&GbRA38*6x|-qULq&VZ!CyJnn3tsViiSJlW(Z3k#+W&Vg-3zZi3KWeuTY5 z>yT*fjdM|MJaU=!y&a(rK**2F1p!zbyyP}&gJSpst1Pb#x?kCAxd zSvZAdVR>Cg7VHn7Q$@xPqvrStxKJIB0B4}M+tu<6IEliTuqOdTi}Z&-E(~^mgn~*H z5r(-ofJ!JR-Qq3xsoxEu>Gn=Rw)WGHs*)4Y@GtUp;0R>9&5Ea78$5&LsI$HVtilb? zJthyeu*`13Mt*vuIQ%RV%@3}sU;4#G4&EZ`t!DHPoxNjE@=DO~|!!$mzTXGS=G48w-B9ArTjvIi?Ms;|z9 zLMz80vi~uHFP8I<)OWigrjf~v-H^h0!`frZ&0uoRdg&9mtuYJ{k_cEWsp$6d3s*+? zNTUJ5dL9=TWA!vHXjr9GvckPfU|zAWEJIv+S}bC>9`PzVsCOK+a4YPLrJL>qyfSiD zaz*X2A`P~RsI7=s-dNg1 zN)rHZ3`mZoJDE_#g5EmkhCoNoI%k)4D0~FnQ3Zr5pd&wcSbX;N`)^_|05t|El@ZU= zKgeu7d(bApKcm2%2RY}EpviJQ9<07i=OFAVQrj+82CIx8UJG1^BG*a{gm+eY(8(z< zaAM(ER_WQY+ErF5*hP_nkl08oR;pcyf~~LH*U(7zF1C-%qkYTqZjW}6D44?_&mJV3 zn4&C?&5Zr_mb`5DLLNC5LbJ&Ynz8fw1rPY4C-f*m55rD#7N8YG=?S=8=Vyky$4|$=0!An z=6nvE496n^l~7q<#7P|Q?3nWGBCu8^vR&Qc)8RAnM(T!*x4wf9ZfoW&qL!&&jlr7{ z;U3yP*lr{JZ5b$Wd6Dn@;Hg)cmu)^(A#v)WjT@G) zUbntEvn?|K&a1CI3eKzNX1fSS!0sfQN^lt>+DfwRF)$I~x-5z8LmnU^{7{9?8^jXt znDXnJE!?aIGH^oWSMp67!<5dSgM~_R+f5rv;t)LGx7KVn;pU{dzm(St-vCA`-cRr~ zM9$Ab!nUDK0^E+O)q?Y)GDVk#vf^TqM+)|yde%Q5XFV&bqv59-z~#`?Mo>!gAM;Y#%+YHixKG`2(DApNEvrwl6@UP5g~g#5 zz8KX=VT|M~>OWeHOB-}90g4r&cFQ%7BX9-{ES4ExX$^zLm!8>dZc{2MzFhDSF?K=& zdAAGIL}P|jU~zajI86QXH!U1^XIfQ6qKic+6z@#FeZf9)?ar=f)@;tA4aN*-ovkTK z#jKUWbq34EXrzS6k?{o!k+bg?VsGhVxHsj3V2x4R4Uva3!kH_iI@<25d>Bi)*6t zOEF<0iIro3pnNI$wF0V=FI?1i;f^VvU(4U}@hP8Q|3ur_E5*0q!dRv9P_nPSr9aWx z-zKV3I4j2Dp#$q|KITzB*1uA8^5Z}Ioi7#32FdtuOTK)4Hf~AFj;WLsKU>ZJJ(QsM zoBYZMSLuo~2u7+c-cj=D8&|bm`0;~IIGUO54mx2j4}(%7$|1lg6T82Z@=Z0AN=u$@;7Tw=)2=E9({;2 z>p3m)r4R241n~&`{|9x%QVR+v2!2$|hoAD=4ed8B+J!b$)SQ9~f*sPYFUX+QLsCvq z;Qj3=Qv1)1&z<?| zx2CU&9jskZ-bO4@Cfm`X7^gUO)o*q*kMxsDk_Vrcp z>|UA3xc$e4*>f z_Hnh&6C_41F-_XEXMG^&a5$*nlX3bTg;{gmc%(X-ab2@$7p_% z8Vjvr<_``+*^?m;J4A7>-2h($Wk@%DeF5ABfT8+FTns9teL@=tJjnR|1BC_3z@NGm zCvGB2+VL~S;k%R;O!ikY*8a4xU{>GGH~i>-EStDU*~CTRu;eUYtw3lZY=(P}1oDT} z;L?!(on4OlW0P|mKf)PULCejpYG4L2qESSPCPQMK0wOXd?H5jxbqr&Qajr zn`!`G(x2Q|n7u$579~&okghB`Vqix(5l?}a&#M7hylYkIJsHhY3oV{CT#>-Y1>oNnyrn&jk{= zY(o(=Y46_UW9Z1pU0u3=7=o^7q8)dAuALva2Ze=IZ(B+K)un|w>d162swI(CMNfgh zwbXz(!|5~`CqGku0dd=x#o#AVZ0cUcJD->Uu}S~mn@Y_S>zVs8t)+p@Zn|Xx94diG>-I+0k&Mvz}QP)s1m+W4}Tuz)@hqjN5byHm#^;8G$;JZbPj=B)(^5e*_#w+0i zt%Rh%u-oNVV2Ch~;sb2Gb=#Z=^V7n+EaoTDUOClA>P5lkrwX%G!X3kASa@;qvTQwf zoXM7GG`Y*t&)mCTs3GA=&)rj)t1^NRj`x5l^Wa-0P*~WdL)uY(x>oY;ATpLta~64# z#6e9XTYR(8SQ z#`yM$hyyD<_*nm(^v7>1w9JE55GZg@l{l`D*io%PIKt5H1bdcS;ivm8FOsBRHMKB@ zi^psvuu;6#m!O3dULQcQ{XVVjuajU)k#YGKrC(>`1El~Se)H`dAI>9aaRH6boE^uh z5mGOLA;2IG*h1S9kQP6G66kq}T`+DryfBAL32k-gl(kegGWm>cBT0L^pORc;yz5Sv z@T?U~cp?r-i|2!@AJFrHwnvddg@^H@?;ij)q2QEjWo@giud23#^ zP-eUm?Zs$Jj*2O8z0?q>#`uzgv*#4%@dcrj1EjM^53mGW`6PNLZ8MY3H9uSfD@*#N z?{ikhYJba!OFwy}TUk1E*&nivw9o#m24qs&N5;?cg?XIc5zB>Xj@W}eY3AC36lLNV zSz_i&U;i{%L*hDO8xIxc*a7U>Sxjf-%TkV5xy6?n8Zq&=>TlzfI1}|s!FQZd;Hns@ zJnYZ%xP^*Y`@#472viClex^+5O6jq2Abr`)cHl3yP}?zDEh6JBmogByOEuWLcCq_d zUo4LGZqYu#-P$09qF1j-p_44|_j*#%>3$}osng|~gO>~n)m@}dvizO2H~JYjG+vo5 zXI=-G6yu}`Gj2_LLMBSZT7MXo%Vk{SW2+n^`~xTUWKMf92%GJf1vXt6y- zh|HHNW@(y)iL;PMCT&H?7h+#E!zK3OkhtyTD>SGvH%G_}It6~Y+XvEm7v1}wj3fJs z(8vh0*93MNz7w^sh=p6mhX-jPKb6{&k^dxL!dVW~;w4S%;6trm=}`r3SGNyUfs7a5 zRA{l2Q61sZo$pGJ#_shY1Zp>sv2%+Hip3!RLCOa{64Q^eKP^K4^+}6)h1Fw;8U#w( z_a>r4g^XA3a>e=|GeMSx)*7gWx~9$@ zgSPldhZ*VTUE=n}B{oAOHr9T%hEXEpeJNKW!_tJx^@pT=>nl|#E*Z~lk%fk0`@6+Z zcYNUPl{96!u3Adc4rlsF|JX-e3kc>q9;eLe>h7AyfRI=?*HX>QBp9f%%XLOo6htQ6 zQNLeJGz+MQ?{THl#hv0%o9LWsRzWg)^RCV0?%-#=!WGVGxP$CU=cfCqW|#Cu(+VxE z7@#2;jl(13VVwUCH>0t|!}!72XJ*ZuiBGzv;e9PX$Bgz{UiqBGw^;DP$rB5lYLIkp z=A0_Duftg(^?TAo&+sL-O|J-PML3g)GCMLmmoP-6{p$G|7E%ejudft*&E17o#TikG z%<^bw8raP9Q#sH`F#`P>dfrqU#A1x`V}4;aH{hVhtVtLh^b1d>YBKZ>AMP+QVeonr z8Ub_1)JYijKRg!Uu+8=Nh=pyvB~ZkMBi*syzbkGD6rgrXgEn(AQH6P7@xCXceE|#| zsP|vH0qq2L9D5B?Dxg~1yLO4ZIpsHnB_?Rc`A=-ttJ{y9geRsKJoTRRpFZl)ON1FL zpyRDrQP=@ScUptAYdUHWOET_zgVQA`6htLmLzr9G!x0`PJ~+jU6!@=?kE5KVzkI$! z6C~C^JrAZYM7VnhBgf5jBFdblDD~x$P~cvt2ID8=_*hCsyss2oh|4C`idY1nr6>8V zkq|)KlG6@EHL~~l_VqpKE!P$1s^+{U<{@$0Ut;dcQ}QZKzIpcqpuMls4EOh7!R;%| zRXojZY2!lg?IaJPDM$3r+&B)Rlkwkc3Ud{+pX*V?>|(o77n2RF6$pGpABV>n4l(cV zNq_L$g}I8wC~QVUT(iV|e&vb`e(Ps9lY&Rz?~uNts8&FM?c>}!r~7#ZRezdq-9X=W zNJoD(fpLM7`!w*=vCu0rf~(z6fdqUkqBb#KqZKCxDDcRKsz8mrYE|hy>3?4;tJ&F~ z!AzRsRw!w5a~IWOKu7vV5SYyu0<|nSB|pbD!s1$1#H`%)qIi?-l4le!OhjWrr6uzI z90du1!W`Q|2w{Yfwg9d?6=}PxIfdz!ZMgRooSJuJUxH~wTnmkvG2GwIW`X~c=WF%5 zrT~L!b0Rz$uPk7)glA))jm6K-+St>LiB1>^*@f}-T|9aUZ!z1wiRX&uw(XAyq~F=+ zWV8U=W{z2GeLs@`6|Qh{%40cXv8x&> z@X7a9vFRuMho=?h*bb2xrVWpu8E;wpFhI=g#6UI-Dm%;H-QcN%T>*v{20qbU;GPuXKO4PR3mXVT!Noj z`;Tu|(W5HZC+d}q-(FE@Q63IvUji!L)fK3j24AQ_?9j|{kGw)>Grh!C2UhK55@w77 zpYfBkGg4h5{lD{tS!$cewJ&z#RY?T}o_}2pF1!~AG_zn9mb!$JiXdzP6dvPX5ekC4 zACpW;TT+d);Jo4t_nwTcJ+Af5#*%3>BNo_dYIGbqHT-3D;Q%f(>HpeUn9GfN!hI@z zKGAfUd!wHUq)A_UVqu=Gg4ra-Rfa59COP{_5Q7D7t0orL;S_Cue~)zk#poVKADy@; zS?andS-NaJ1#b4kZropx#_Qjc{{0>&h$+*e!@j=Nr1Qt!2hco>m%zh)E(K5A?f|ls z1G=q|R3a{@8Q6`Kb?=xTjYevm6%DoM6IB9%j5+r>XU5W0Dj~Qj?304DCu)h8qLP@S z{W%4X0Q-%)WilC_AyQ}`@uS@$P1-_!(4QmUCg;ruC>I4!m_xttu528G zpiw4w(aAnAo}_>HH_m9>5l@cR9;>FzI2r$V)e+(mb6XO8;eRoFusox+Yvc9rDEQA0 z73QPp)~b*d)%(EvCPBsFjz!YReq6+1Y({5VR?GHdJitIT_97^($e5lg%$@6E4256_ zBEd0Ybvs&Nma<4zkVV>c)#Tih@xVng3R8bWyHBHMYw^qGp} zVws!dLJW|vXx1t4X+NPt`cFW7Vt0-S*+l_?MU50SL-Bs4&^EnyPOs(|o%97Kx@6)$ zd|pnze^2+undLWx6S{+otNOS0oAG{829SGKRUKLS^#K=q9LvC=2xLG6^2}tcwpaUi zUtcMB{M{ZTxpGa^u;t!;RNV>a+gC)@-{aclF{E)U!UKoyB6pP^JYOZ{fqEtV?q8Qf zlTDWx9FY|4BAW%_QWu=1PmX6b=z){^hZ_rXZPpA&iCAo>jq0>K^OE~SW-qq5aNp=+ zNg5ghP%>**o#_LsMaJDPxrl{5Qsb1CNyyVsrq|KWR6?YE@(VRAHyJ;S$~2?!yFK#S zNms}V@)Xj(d2kKO>eX=do{T?z%f*dS83UQa$-QnO*ih8Nj`b_)ZFk9pPm5iTm8JX}rfg|wMr+s`Dkp48z0KQWh#stK0D)zj|*GPPBa70MN zed`~p4J7@<5u6KvB034Q!Wl|c`LF;Ku#@k)#D_bCjO&kfjVSYA;0hJv{n;pb)G6?@ zT4?!H+CJPX8PiarJ*0`m{TfJolKmZQ8g}~8N+Nt7D2UdqVa^E@<#(k*F$(;m7NZ3+ z4nb7F_1P80lxv+z^n=_{JFDH7`#lBca0CuAE?)g@{gr7T9lpWPYQg2q;PHwjfk~^M zP65)pUNFc;Sc;u~RbE8}a;9QKQbLXE`!^*zDibwi2 zFS!zkk90=1F|Aq?3;}8Xd)g#MrV_FgJoE*w(6by&MvTjQG8DM4nh01cJ$|+QobAlM2PtR^2jbeerQPBgy#YTMMmD!fJ>o+PK8~MDMt4T%IW2TKS3WZYM^H zSyXt8N$&O4m|6kV>2WSWI#cErcU8SD2_~^5xvZ76o2w}p0`FT3*U&3cZgXU$+}C}l z5-Inr@}%5WLB1+nR$v5fd}$n%OPS+peqR5|ij!nP zBe$wagxQ5bs~n#>Xi-aNK-grltkmL!;kl|E(j}amA1%z>m6BOc`}gK5R4p z9Vx6SBiNZ1 z$uI`lvy|jAjz+8YQobH5Ck&;lV5LcasLA{Atde|@9SfyMYn;q38X50^OI5sK*`+FW zrH~x@&h9E$%SyX!Uw=-<3)>xnXGfuh)Gi+@@J&C}hm!thxHF||9ZhtV+r9nO6x@1O znDqZbu*>(B#eR()l{zPm3Q)CgPNYC&{CRdcuK=lpbSe6|!>W<(ne?-c@S0LK7Kyai zlWaKnrW!UE6r8`odua2Kp?HqBM$8`4eso<8i|E}?`}&@OQP`2f7_uHzH*Yk@Fv(P&K~xYDbMbQIOkIOa7>rol;GvH@Z1T(1KrP-VT-cDC z=EwHVk%BYa-;sX$>cT9Q+p)o0_;DmkGuf0HvV%z&>z1zfoG66DX35gCH=aYZC`8H&O zK)LgdGXfWMbGv^YLtZ1GZcXLez}||QT?}Je&fM=y#FR_K6=zc5*$qk;$tkEIpEo6eXq3jFC9g{dC`Qsczkjy2|$416UTjb1BTen$E_pNG~@@di@ z8;dy(WW0KjoCqhrd^s0v^zcaP&3Uso-5*Msm`%?k8Sp;bpH1f0RCD?HNX-oCS07iH zWpg+z7xy}R+zMGS5)ZvfY0MMCP~A`}Z6cNNg<9k=A>-Fa7l{dPwTH!olN##iKwWhn z^9Iy-vHncHXtr1$L!(8TYs1vPD?iKay9VdoD`$0Cn&bNLFpml6X$Gl$Z+{}2%JYBn zfb%@YG>L1oKjNkhF85>2ePiglVRl+b&MGf`BsQ9mFqF5JIEu+k7$_e2+wO6Akdf-) zzWyB@-tmyaUb4ap)`V47nBnM?{9TiNk)| zxbO)s6)N;(8nY5iw7%YU0L7>^&G0@iT5~tKNNJrDx@Z|HLXX*hjCtU$KP$}LCzn1@ zsPx$~p29kIIekZGJfS{h49_aBz+?5E^yE!NXQ0$yapq$Hb3SZ#hO*HNpX{u;P}2;K zX42wcJODzHaZ9w4&%h7I4Yfg%``Iu*N$>?-2` z55>b~I5+KI#!zzax{TF(RPiiiRlMVvyC0CrmAz}*+=JI5%thfY6y@5TxS8PqDW6Df zF3QdojoMuLnktr`^sPT|jUyXQ%HgN4k@nS@2S8pjo_f0IxdjD(#nfPR&xG4oB^EQ} z917AlIe#DoPlQwAwhNnU^JjjIl|h+bth(~iP2M0-iGbmPT84&4GKB_yr51& zLvuDm4buwaprI5zy{jaab&YUn$OrH zQYr9fKlW_HEk4PG!g;2dY{IpG7^jJtrYbqJhO-3|^?NeTol&q)v-3>B+h^tek@vs6 z%Llt=ys;(y-%oTU+&9A#nY}}pq6g88J?2^P@fLEp&nM&Ai(Q*?Gi(x+2^P4lVbbRM z(J*;2BBQ&=P(`9(Lh548K**dI`2D^l*d+)7t8IFe}_1%!(!035(XS^CE7P z0=pjaq2hZNeYEdMfAOlqESo|z8V)f5lQ$JnzDMW1=lB>{(!bc?^7qOB!_B-%AmWy( z+w@?DaxX#=W+3pr7Wy8|#b6eO-AnW*k3y!O|vb%)_!z*^#Va>giP=nL>hs zbN|W`Dyq%Skx^~__MMfeHfNWo+AO0JoVVkGA&X_Uq@SAt{qL?Kq!ePqy@Jo>^^B;f z4&z?l6_E}zF8lV{;>d=?L>WWwEN*z8Xayfmn6dgj>8Uvd#n-bU($x*;Ba`pRoA}SX zD5$h+a`TI11;mJz@;Md92_ZtIr|h z_m9dOH-*HuA)r|A$54Ze51imYutMG)vjfUyVjP1Y6q123;SoY7516i%#JMBgfL1X z$>gS@*v^chS0vXw9whkQrzQQ;w-#DB>n3Hu^BhMY@Uhj98`k5wTE81;LtL;nUL@Qhyn z2s^>+9Ob5rWf)P(VpZGENpCd@txDU=gC)m+l!oBiHUC|O%RgF#$++)&2MO%^F6-2{ z#LsVygpljqLR$3T8Wfw1PkgH|S1t4k*&bp^h{9@l>jC%h_dlya;YPdW-hW5NF?o;w zoJd;y7;G=x6S01JqYr_iU~skLP(2bw1}+rMAeKa$r9KPMH8)LZj+}+4B62ri&B*U| zHl;(cWYo-^b|5D+sAn7PE9tRw3-gssE*%hrdJyZ7u53yK-s}@l;D%}rxk>-d$5@!1 zCrn4hBT{;M*RFK&1g?Z?bCiJ1&GB)KwHA$bg~#gO$<`(-9$gtqiqx1j8PDP)Pv_SA zk+QTBf~0@oPFZ@*y5>M4F1PaO-grlUcPbH&T*gYL{o>ggJVRjeh7d8+-^+J4nEW!^ z5B=Pg)_J&}lOEn!P7jbx>PC9vP&rXDcjU=6r~t#s?)^RKi+}CpBCsde+FC6wDEPW~ zEPF1z-(9Qk$@s{3Wz&tzj+l}(syDBa-A_y=XPtsaxSVrKjqF-C(yo4f66~eX>N6Q% zy4#6tEby$zHkTbulhJ6Oq}Ki&>9@aHn5_mD#-x)|fx=|a55s`f0#Werdt^zVWrEmj zXK;Y21AbCDb_$izz6!^1mP?I9YLzR#foR5|1PVO=Iv<-cGT!oIN2jovAgebwtLS2i zd8|M93m?Kl`d4=pS`~k7c{nO%UjyHMuMZF*{Vxj(bGU4hjZAq2xO-FD9JWACBTdfy zn-37EWKc-|w=WhUBQJZc%a}6cLb=5UvIK|p?1|0@%$4F6{M2=eR`L?L)1;{jYiNzg zxb-L}{TUnTe*Mk6Ye=q2IyT(TNk6~O!Q+wG=B7|A+=N}4n=ujX{lh(Owf!E0sMb1( z)Rj2vxnfK-5IDD~d9ZGSaw(Zg@Tkr_(yRTs3vcz2;(~_l*F2A29v_v&MkSoT$dv_&@{nSu%r2~UF6F2E66v2A zX0cgnUhE4)zS8jz%@|t8Gm)5?AZ^f(C0~d_H?Z_Y1hZu}dKUHI8~n8FBR$MW{~*-E zO*rd5Xr%R*^gOxDZXa!n;qXD;rjK#4nypJ!1}-#4L8g&`K5v1Ka3SN0zYHliGVkJs zCKV&?Xg{3~N+ZZP2j|2PD<3wu=2|B6tpjeSc6ks|o~bk#;cTqG9mfhNs(bxVFHXi? zTRZ|6`^TN>NH}-O(>}5TYB!AZmGpPtIwVA0sbnNP$%d_oVQ52{l1LX=t-()nv>$yh zuj-Jo9OULjhPBvi2ogQ*>wbzby%-Gl9z+Vi8Wtm%)mN5GLR&+@X56I}DNwN)M$9UR ze&LjT>8Tn9h>YKPjcM^tiS>ieGeUu{OeQyk^e4YNRD zG3Dr?K}n#Z?#Rh-zLY?tFY%r?#pWWO2qEq#?Gt`BreIa}8qH!`5|^E@s4Qf{>fJuv zJAh#OFndIh0mS1zFW?mgw?iGEQWua5Yq`pYdf+t>>OJY^{9*LtMlgIL@sT%EvD~SC zs7NL~gvnb&_)p+htQrbDG9KRSQ4z0WmChm|wz3-gdzBDl^-B7`TL7;e;gKtN5$ zYcl?_IqFL9iQ;np6Ayi&z`xhx^sGusLHZNkD64pprR332e=lkC{Omh{^l@lkDcP0j z#=Tf~&hTS8ob-jad3JlT=}U5FR$#|u%wdwg3m0ca_Q8V5J|h5~y^dGeg>olj*izVMoEYzjkPBga;Sz!tuSKmMdA5z?ELf_#i4>hOji8 zNG9#56DOmkF_w7!yW*r{x;NIJ$wVn|{YNJOJfweXXs@5?k#h0Lc_!V03z;EyQKlnF zfuBx>TtQ_+6CC<95?xS}gHcIgB$$<;Hflgi*N6tROr8IoN&{M2$`5EMjY6^l?QBNG zVHSf^O~qldTwuO4iKX;5Y-_(5vc7gQT!Jc%Qm9u$}N1@l;t;X^fRj^8Ef;!`mahX)WUPgZo|Q~bf{8r9xtt6v};*# zO1>-)jS{ajJ-KSry%s>$s=Fy`R8B}C6tij#AH2l}+rCu%XD=#GRHVemD-OG3Cd0K2 z8Ry}e#;prpV~_%|n!w{GKNO^q@jVonxzB(Sc{{Q8^Zc0SLfz$^g_gOeuv^^X4XWJ! zUW(`5g2QOH4|l(^24s9_JHYUSmTnYKjL*YYNn7Zr;s-LKU^8-W0I%^^p`_3KUt1B_ z4;~T_yY^oD&ev*qN09Nt*3xs2jX}!HaLx#qK=n)Kp~muk>n?jTr#pH`n^ChPlSm;@ zPN4;s0{8r+hSfyvi%PGg{|c;Dv&tAw7Y@vYhIU7Uj{X3nRA^;29iiL%dow(X$d80p zN*PFh=r_YHen&K$&X}p()OY!47mz;hb;Aj6jl2%r;D@m@m|BG*$f38nxs3-p=T5x9 zM+@y}`i3J4vlTHqn|l=~I6J;G6iu7C_k7WZ;yWL%=bIx!>%~ZCO@BOREgqzP^I`IZ%v7>3M*=M)-ezIQ=W3BfSE* zPL!e$H!~n=^hW`L!a)=w6di-51_5%%`~FOY1yb;Bi00f2T2?S=#7WD3 zrG~dU8J|rRTlG@qO(6L@-H#1#N|U{>WGq5S?9d93NOK_?X@~5~JP7X>RqJ~)&S)tH zpj0c8p-gvf`k^(f`@^A6`dQ#(9@@{(q_UuQJIdEE7)tr&OZQ$Er8-`xwb}%C*6vcd)4d?oJM|gJ(+Dr~|Zb~a)l4tUA(x&<0`jCv%(K7G8 z8paefQB#-6PwHYruVz$wFNzZFD@LU;qDIAdk5>{pY(g*D%1PukjHmq;LI! zGyHF*bp(K!h_A>)c`@}ErvPfs)0_QSUn}ZjQ7%|^?hgaeu=n&(p37r0WH`c0U>uJgnr#mMm1>Pq=^RebWI%q~xXafFI|H8aN zOGzK2LOY%pmsWUNv}J8`=ImWuaAUh(_GArcm>1hxc~APe4;1F`t%|)fIL>g^3XAUA z?twk0R`Ftxapcpopv)GAy(b96{*wvs32|e;xy|BL!iY^1ZCaZTt7eh(n;-Uw*$39fWuvXfhq_4cPFyFC>Jf9;OHQC`>6btiw zR;HN8yf~CDo0#@96gI=`AYnzfLfepc3>5ymmSxokuP@A+ z*>}gW*Yry}w|DKTzMY2!0`gs972HMPEs}QmWa1}O$}rkjGX8zOsK*obHXd$|3BQ{A z{f>;*u)>TMkA3}jq%S$CFpKj$505{M-fxZ{c9CGekIK$qx%c;>P0O|ky!4;lUk76%GX!1Kwd#fziPKjz*S}j%hr=e zJq$0I?XSovhqR_zA$_P*zPDv%k53l9-mW#LfXOxgU`5xbt!UFPb6%zbAjvt;DQfDu=6K~z;oyNxuU5O3$Mx?2!M~Y`&iG$8(`AEKBK^0j>1R- zS3YvjZ*Iw_vq{Bmtu3zx?{2)2@P0lSmxT(m?6ez3UWz+O#~sPQ2bMRyq{Svj7xd08 z#hb8c1zJCgowPP&U)pjjvp(9BC~G{`b=?9@fN<{H&K*-W^m2C~n9yU9jOUm64(o;( zIU4LO=Oz^N&{HP>CD1W{qtH52ZTZU5a2cCh%6vpzbR*#;YPzFdX@2$01W4oEwUype z@HL++mO5H-JLlfKyNV^LB;mgPob>biinV%MMMO}m<7XywGT!lBcW~AwPQkanbIr+l z*{vont8*uR+6QVu`o)(NTDWLUp7<_V1qqnx=Zd|N?h(@eO>-yxB598;Bv^c_k&$gW zJb_RO32HQSl6Flk=i$8wk#XPkg;v`OTGh7xk+-wqFR-$ZmYa;8p%7mT5KrhvWTiC&AlrM`gPFA3X@*sqiJvQGp+4tVI*VYN2Tv5c7O<8%HHAntE0UV zT(Z+$^#do0%z?Pf4`o0W*Pdmns|Rbk8(e>OOJS~R^|S=FEr+T%AuUx)Jjj(+b)-Kh z<1>#s&Cuxk#(jTjcK`TVXuBAx$ou+tWUSlfwinX9V*k0k)j0QNADun8tv}iyJN@St)-rE_{p8drbJS7EBxRI|%cK%cH2JrxU*RJWigUitQX$otgP$AKh$fgXv z9Wv=J^oa43nv|FA%Ci4I@PVOfF-gA{wU4TOJc-YaCx(nIa{5GuSfnqw(g`Kj;M~I# zbE#&S@jz`vUfv6Q{md~~3#Ad&`U*{bQRekoH<_FC^CMQ^oj_zUp0tR+YtGlZwPbsa_Vr z=_=QLUB3+hT}tq^A9Zp&eBlXe<1O@N+nkJuu6%cqcfk);qm_5a;3bX*4FSwnl!Ni* zda;Ghy?%KWZ;whsdw&jsmIeoeH8ueS%L;wajt}`jNUzZ2^&S@oGaOISVe??WK7umI z&OEbxghL<{i-Yr`mMYaqAH2;G&CwGU4IVQKMq1j>#Ico>hKySucHCYdqs~&h+lsVJ ze(pd}z#xv=j)TSnm8TFxtxet!=OyYraUtF2u7T2$b%uT@x^HB-G-IL|z1 zQIyulQ7E0~+jY`jtc8L!@KOA@(5i?+w`3z`#+}-C-+HNNK2SK2z2T$}JX@GI+r0qm z)B>zCJI$1d!Y-Lo!5Y{pm5P*BoVIu~ooUhZ+ASD;e)=a?}56aztj_x>tgxcyZKGG2eC!*sFEOhzLe+_5Ae zKsw0+L2J9k#~^q?B;)dn-Jqn+j3VUZG5`)yqKPi1^dar7+(`YO8$rOj!y#bxeqgn{ zC*z_y(r2->KAnheRX#v85=x_0&DAM%{=-!)8yVMLE#oaAi`86*2li&v`HqMaIJw-yQj15&@ zvizW&BJj+SzSf#IKI+0^-I~Q5rdXM{JfDs>k7iok?dLA}ToochdSAPXH5rnyU0`~i zi0DwOYkqUZtOPpU?s7G`ugk`pG7&U@0>Drhq<*NWkxl)%vuZo>nCfx+0NJ=|?u{X! zu?WRwIzI1*tTP$k+2z_2sh;ixFR6XYixBpMehy*x_rM|jt7jAz%<9{D!t|M{L43Wt zK|F0@#4&7SH|(J|xZt{AM%%d)&Rud}723_wf&_b;kt2{qys_TwNW{aXbp$W$PjAI& zpKYT59R=TN^@Ip)&@Sh`0PuL{xo|D>q>#R2s+@{usX^2PBf7jiNQ+wNj>sV$A}fNN zSvu6khwg4{gtZBn_&1xPnK0vXVW|q_U_k_-Vn%Hhi?pLq@Pu z_Fa}{mU}QLoB}u2UDVR+eA0KpH7yBIbhE{1ZLixf1`>eFVfL^&X5Ihnq;Y~}}Q1Nv*PF07f;qOzcNH57a1rxGt z5!c%z*74XKsZhF`uP(ROGsa~MkMZ@VFilW#kVi(wLH_c?l{m;-%X5&gcdG3}(5Yw$ z+&{f?f(qZM_h%H3Aq?q<%-~U^zi~KjD zi|fwGz@Ash+K%_n(XIc0!{y*wCe+5Cl+L4GFz@g>QsBC3$ef~6_9sr~xa*n2W_z|P ze`u%+7U|}eDzc&DwTfgs_DrEg@lh8cAvk5Zm9A+0?yd$3Akz0-=`iHEo|>PwBP41| zO!s4J_g2&02N_R(O!oe9bE@a@Wz!$@@1j8;>mRst`^#Dli|W<3_J#wnDrB7exI%<4S%YlZb#w_p*UOK#rp4X#XkvL)}?`mcGd-_c?p3laua0=5* z%owH~)fa257svZ~VzERKav3{y9yoB!DEgCy!x+iHMrDx%)&BnT2`~aBPabRnbH3v3 z_o$ijAKdelDe$%9s^Gbm9Hjr@@gbg{xt0;Y+kRfMKOrq01qM=8B!(@HF&)>YYOp}b za!781z<^eTkFG=*>sK-kd!XV9mz^mQc;+<+03R~m`2C8$i8F5xWY(^sjJeeZ!W|?1 zUk`B@P(4~y?$MkvikKPC?NDP)d_l(PCzefxu)~_pwqu6OX5}4e57q)rm{M~xp81jE zRi(Q_DM_*tjkKpivU#=9&n?Ibhv8nyIPKBGEX9$&Uf{&d$}2$$nd;5+Affd=e7lg$ zJHvh{@bgE;MH>%!zr)wZ&!V_egs%%P819vsl1{L4t8jkzcdOGIiIWeEh9MSA@s|`9 zsN*)>oxm6MKtk^&3FOuusvQ@CavKpJjAhx5Heey;yWPtXJv07s1NVJD1 zVgr)#Qm8O*K8K{7lok`Y`AMyz+{od8tbj*w;#Q5cY%Nac_Sy(CJ}W173yD3nP7PBY zpM*;5g-E@pU~Ar`%s2$WS{IG>vWBP_F74!_(x>E?t&hYz6BMBFye=mFp`C@fw$k!r zVN6X2oPZ<$QeQpWK&w?8?v;!scNbdi)K(^uOu}rjb;4zC?()e{k24%Z>i4Aod(nnS zMFdv7A2@O32Nt+?iUD9jd(j$Y7=x=|I1tdi*Vd#*z;d3*z#WX`eXS zN9GA+%dSX!eKsj3v8F6i(=|~!1O%09j^O4j_xhVLKGhFd=FLNI8B~1dvu51oO z2F1RqA?@B;1_7lDr#rmb>!q;F^Hx^ad|Q7T1%3z)`Z3R2DfGws6@~bS`|NB;Z;Y3Z zmod_rmt5eIxE&tOs%7i*2^jlSPb7_7gZsHWbAQuwWc=S-ov<@4zh0P-Vl}dO^!P52 z0#8?CZG>7FGLHSV1E^P`ZH~`aB+@lkjRBbI5ytA3^!w(Q7bV`Aj+U21>pHOtB~gfw z(LccI*0=qZS3dX0A6iU3y>XuY*qutmBbQnEH}+|);;Q~`DEqfCzO=OAo;r@Z$OT_h4?Hj$m7jz}~j7(Pz}=RX^#jz}ku z9YGe^nK?q*$xFvUdqB1QYRO}9?1C{`i4-b^&2+B4nk}Ul=ka<^dj8i;%yq{xcR!%$ z_cplc_c9?7^A)!gJXuSp_;^95K9`Jt3Kd%Ij-UcYEFG%Pj&O8l6w9<+UjbY&&I zCm#)@ZM|t6v|c^YNMFhL+(vl=DK_th#cNLErxxQY^I{gRD4sj-O;zx$Bb8~mza!&{ z0h!hiGUNV6cvQAe?(#fxZ{F=A!G{G#Kfh02w@GE_Hdz-`J}+-ov2vm>*Z91Ta3TF2 z_sC)nsSvT`5Gq01pO*MZ_TY)Hy4RddS0c&l9yLX^fy7g@p8PTwItl2Uj0b z9TLgtR>>?{&O{)BKf+J?VEi6T<+kwRC`*On>1ejY6s4!^Lb)#fwFfWpf%IU(ING%f zxM!TVfMV^*FXL^Ije~NPZ@bQ|rtXp9jQViD$7y(zs|lP%Kjq_)z1_NuG(+)zbp-UQ zepCunMdME;*+fGS+6C1P28&6rh(Cm6EKNSsuf}P;@h%@Ia3v(v&&gP8y2fp7KvGg7 zBHOGxi~UoC_TVuF?_xLpOa8{NU|#wBGVoWP3{(djYTMIP?ok@2>tT@lX4W$Sb2 zetZ%r|8TgB*Y8Qc0#P*A9SDyxJ7oAUiOi6L2+Yk;pj7vr#Yojg-fh@SCL81M7TJx& z86;+q=34wP?qsBBRQfy8!@CNzxF=F<7J(8670yW===;JXHdds6GwO=KvaCgw6I6}w z_aRhB$eiJV04lQ0qalCtL)2Mmhm7>+WW4EU*Ri8u;k@9UD7>{=FZ1o8j{eR4iD?)Y-S6~kQsBPvELW@~FzI`Dx<;kQK2gN5nbPnz zcT6?jyjBvd($7U(<{bOrlmhb-!M1rjE=p;yFl9gtV01bya{qjF4Om6eFL;NG2y3HI zOz!TsF4T`EZX68IHUYu5#Z(FF1z=z$&wk7$M zAyG!^>a@y*KUc+?fH74at~{!e1l~Uiq(T^06yr+qe3uzFau7ipGk-bZe}W#NWmzcS&K%Ij4hyovCnd$B`hMBj3qcA{hstqDOa@Mf`hl63yyp!lTTSQhjVYMhI}yTmz?i%47r;-5#{jJ ztytEDg}SbrIj4%&6m-4M@K{bo$@-oVQL-NV&J~p?S?Ai6thfB*XjI^C-+4m-5gz(S z3Swas(JTf=2X3zAS*8=cVZ7f@`uC@zO-GaoGtw@gv4Pqn@i4r@+(mv&w0WTz>3h;Y za)wB$l;S0_Paxc{r@BksK{AY8(6pVexAyejwHHWNgJFE6Cltxd3B|(5I(@B*Y}`n7 zVxs>JS+kzPe2(dg(3~BPpxAbMHAl?{8aXn)(NUPMSSc^)=JFUW`B`E{BU|%ks=p2O zF^PV7?ET9VF|*(1A~=(@m;YxBR1-cW73M2;l?x)#a7QQ=7NsbWxV$QR+hii?CjH`< z3bQx?#H!1qH`sNvtIx!N1nwISL2}b0W3T`RTH}WMKGGMxiAQSmNq~#u%Wx-I2^b_srIhD z&>h@gSg(xXzP(aUW$adhG-(mS4^lw}_z& zKbeF(9;9S_Oxh>{>sRrABMYoQ|AZA--=KZ-whaRjCz=-htm1gxyL^~Bn`Nb&Hc{Tg(3^;i~!rQm=tyd-GU#?w~GSS5d|FQAP?WDELes0~eLl^G|9M;(x zXv7m49kKRpnaHe}d)GDh?a)7fVHWr!v773zBfx z{N?{CpseFMDm|jZx)$zT%NbJkCnb3oP3`Pl0y-p{w5#F48~lthO}|6mySAn8j>G@u z)$KI*h;s(c&Z3X?_Re)?GPiOtk;-7U!jF%IZGEc$xz<+#CoK##KG!0)^}!u6-qgRu zo}Svw*7vD?c|z7-4?GSO{OpQ>mcE^bwzP<4TnVZ?aa((P=L)DZX)kdF%v1gK)v5;V zq{bi2X-a%dEh&b(rU+(d)F#X@#Ro%F(Tu> zPuIa3y-P)h-uC*vYgJZo79HL)d-YamB)EekW)B7K2fI90tL|tNsVq?Y{ob|n5TuBc zb5`>#YJ9F0U64nc*?1Tibn)C5PsoI#I6}Yo!@Btu%!=b-eku4VZ2(tO>hPP@JX5r#?JwZ9l}+i7&{b! zr#ZD&cO=Hf-KF3+E^@&>rxf$r~*C zRz$M|-Dz+7qYK@6jP4>;CCqwi)x=A%Dezuy(ydzxuZnKmG$2Tt#g3oPAf9KM$)*r) zbD^ia$N%rEb>K#`tU(+^mfyg>w>Ei&)~6nq+Nz}5ko1$-Iq7}{9h zFXL{~sPX0x4hVV`y6A{=uo_k(0P!a;2>11n*8bP}N{o0VsB!*D#fXZCJ|1q5Ify>9 zzK&=`M5*zi_YKSvX;MokMNE$ggARbJ-&+T;B7k0hh8o{|Pcfh(S_hzSw-If4$E-S{ z6%nOrM}!7MJE1a@BJN&pqA3N(RoH=X`qVm%B`{LsZ(57t6LI#M8^3r0H;m=cE@mUB z1vk|Z?4#h|^~H#Z*xBMzQ3vzex#+nbE*FQ(%KA}b;AaDZhDPmK5jn3|0w;431|Uih za~rRzV_33bZ485N`-+7jat|%?a$`i0*rP+`9M<}_#`*43YncF(O zj;W0)1423hZg7NB*nE?PPF5W~}BWZ<$>)_eoDMcLVD>eS>JPT~$I~K>6 zOHk~Wjb_rhAom#74QH|8Bx5iyYX)Y|?Cbl;hf)3ekCB!Ceto`O{`=rfcML?_^}io{ z^ex-zDn6z7f1;iNlcI6hck?BVS}u8)qtsdZ(dAXNbkulzVPH0@WkofBEsEHM%&o$a zMg+_;m85Anckcv9L(`5wmY*6I@b)8%9n#L(ybL;>Dm}0Ed6Z#SjTxrK_kGGMhlrCq zqS-Vk!-kOKf|n;y4r**_@;=i-;Xe>myGUVF7E~x@3sPX)a_vuA!w3%KFFB#rw?q;sCiT0kT@pJPA zW{VPd+w6#&xP&N~s$lQ`6sv+qudG$y{iIiBadfyUr_NtW}Xw_h2s$R&ao(GsTwO zs#caQ2Mt$FL>`Z(t@~;T+TtkfMD293>+62p+)?LNgRU4)US9I_;ta*M>`E0IyrRcn z)H(r=Pr;)*y^lLv9FLLsrb>py{n+U8JbWCUn}Sa)DtRt(_{lLtt}R#eG=ZP}Y#g4( zYY>KePr;(7KYiX$XK0Zo;Bn+4z32rbvRiL^zSM7i>!s6<%7<#5)a`p z=*&>vb9<*mkhBZhs$j843lKG)((4sexJ6+z8saeDC22z*9XAsm9*kB}@4usI-JkJF zE_|v^_v!|IHW3EV`>Y4*Jq15+4$Kw>8n)UCqv6r{hK^<*X@WwRrp!b5R~2JJA^dwLqhNrQo9VUU`M@nPCej z$`T!sNqgaKK9Jdq6*YeEV#Z+Saomj!Zh^gP=WyNX-u0MqOb1VUe(&1Fk_UFj)K2tg zg9=t2aIl8U!P#`+Dp~39IrBk*u%K_J-T!YLzJpC6UZ*|Cm75)+#kS!$TYb1z-nE;k z_eh3bKY)dh9e8tOk-%V6hggJ;PzM71ZnG&8&&#ZtN^tAaOM@*d*?#_MqvpNoGiL7woEUgHdk-WwI!E%HIaSolO{tNDbev9}eTUSk(B^uXqt;SIH|Q>neGAp50Y)|MmYsS4l}*iS(+hSbllk z8?K5Cr#7DVReHm798yi(3tDmfYRg!PJeW9?8aDUT52eu`N{yfS)If`<1QAv98rUMPb+ZEf4Pt*}LS3XCQ4Q71-mN{^-jngddw74{;gn;vayiB_n;)1^hOq&3 z*QifPw}3XQq3NLmS%rZGDdLqL>-RMM7*u(*%ym_Hw8|38RmGhH4kG!tUOE`>Ob?uN za_+cuCZTO7xy|w;Gh5f?s)fphakg9mJ$A{*Oco z|82_c62%|_99z{nXam)Gy9Y2>!C)| zn*Y;{gh&J|UedGZH3w$8@zUmt_F1XeWmApM&7EL6RTmfAQSh7RH6}aZPNdy-K z-}R<}Ibygmf?l|zB6!-s^EvohIhw_YJK&Wm#Vcc38*`zL;G$^@-%|vKxO`mS4O%e4 zgdh#g+t-V0$fU>X%*2wG3jOpzcF<6;&{_1%!cW|omaWlkOY&%cOTw%0JZ%sij8tGsd(66xBv!vX}B7peitu+V)1;6~0fjO$&52i@?f|lSnRTjLhzm20F7G8us z4ap;_Pw>W}hTYS(?X3Z+rXI@(vzJ3KxxM-_Qst%VyW zrfFF7N=gx7)+iv7JH=0>o)pynQ3Ql=>6VCYABMmUiD$RVmLQ=culY_D=m-U$dVXMz zx;;m(MzpgFmeZcE7q$1vbLXTAE5F1PxAcAZPNA z#kxkmTLtS{Nv5&>IW?Z~LJ>y7_Y$rsioK(zDD^HA>0}bg=vKCsxkEqiBe=-;)nE}E z!mV2;xM|C{s<-Cl%>@F?5j-DWD13B@}EwM#KH5&27Dpf7%+hBS(%&6>`#-flJg&gB~>wEOPB z)zacb{E)7!9APBRQqp$l)qKH3hyCl7=vj7O7|ku7X(BjSB-e5vkCx@CiQ@Kk=hn*K zQ?UEF0j!A3+|QL4QX9I(7CI-IXb(m6>(LR(J$-?1_~|$r?**dZM{(Raz{=Ck?8-(% z!bL(7Lm`Wc;W?+*b-kp}g{B4LZV1KU#|#HhMuZY;kU$6_hhn029VAHi2kH=(K&Z5w z8n2&aK?(Zsxy_1=p*@x8Nr&2_<|ag6f;4Bq4J&Cs-(3T!QsX^S2Ihz>R!chBV}Xp| zCfSf&Dq3#Foi!ktTE9xKWc=yp#gYpdXr*KSn-Mmo}UOF>PpW))<37<_l_;b zLpB)1kcG*VMO=ug@1`wT3`XyanBh%a z(^~45Q$x?11E2#mZN+=}Ig$3T9#ZxXb@R~3@TT@qy3}>{lbht0T(;kAE`OM7KRD$8 zEXP^RYb!GtjcN!1+G2LM@XTLYNZDO*@hwzkcW3Hv@K?e!O2D8 z1O@*0)G9!Nf?wF=kwAK4E(y|RMc@6(;D6G z*)Ko5wuS_(B)IqI6uj-L1FfPGQw5FEsbL^0W#y=$?+Z1E1x@SNfkh#StbT-2wpu7VpHSb7d?+9-5m8;y_+gKmQ`Q^i?v7kDe*|UlBLL<`NeSn(W}?v z{hora`PD$HC>yl)jn%jt=X=p;Jkui`iQxZOt zATTa=B__R^NMDQHW4;2jis{Q_O=454a63`s*{uVuqKa6Ve(5qLQ#hwLLHSE1@nP6m zjDU2cBmyvv$j^w|e~;e3@{1~5Pw$~Xjk~9L)>rytDKni3r81jDvaigUSp#uh@uEpz zEp0}{kcaf9M0`_N&UY`-;9SEq2XN`gc>E2;OVA?9x(CzUiJnbZ1+;-}GUJ(4q{_T2 zw^eA7-c>d(lfwWP6Ziy;s%KYJyOk3cwZg=$E3S-k7ong$YV*GwKo#-s+KGNo)6Tkk zpjGrCh*QBTndI|Luq1g(p-6kukKBpW_~74)Q4szz)8Tjl2t2lV603_>T`BnKn=RnP zb`$4mC>Cx;>a&xvTe>Y2OGeFf?$TdGq87UYpaXCXP&IaUeC@5I&4`x_V8>e?d%`acT~mV z%F(JQ1@HL$0PvT!*YjlU^?J1baCftfeM6(43-(5f-Dv+EHEwytjk!oGtds7y8}-2d zPNsazXwe+*-%)V!XWeLv+y&ZJn1Lach@!>W(R1y_b#)svY8ykrmuC*Nigp7yiStx} zH>~#-n)3S<1Fq;R67LipHXKN6%lm5>bZR{A;bNhMPpE_*Y!d#>fV^xXEw;LbWgTv- zjr8}(G5yOxtE!b}MG+>@!A#Z|)iHCiR+nNX44H$Otb(m$HY8>uHS1s|3rFgh4T+h^ zjX0RCWUsJp&)kgia&M{%T()N-z;!T7)-m&*4W*cgG_-@+nmT5~V}voZV*l=XYpHTUh%KXA-A^Vegc#+4s` ztUsR)Z=Sk$?c7u`-?^xc^{5k=!>u8xumb@7(zN#+KQLF&oZ?oEHBTHnXqCkcrbzl*uxY1m zuft};rgTodQsY4n7Q-l_AlV(F5L`W(Yy1>aBYmaDH{V^1s5o9+v=hoG-g{VGF>S@9 z;D^t!U_&k3{APK*;yRNt1UB89&X_Tr#b=#XN6toW5%>PfU4U&Dr1gH0`y^iZK*NGPh`O zxtj||ZEihYcBYI|64uyLebiD4xevSC|fZ%~uCjS{9M#c;zGbg@wE}9%N{1V zgp1EKmkoDL=3QZ%(H+0XavXrxC%5=;2UbF5q(7%=f#V0}DMkt2!NS!aY!Y$#9&;PV=%7#N z#J$dK$JPO?c;qR-DR}UI6$2{#eyjOl4>BL2_FVgW>qriZq(apDO2$i##R!WCVX#SL z;P>!7nrMV>h`q6natX@Rcw1XBdcxlwY!U_ddz6RUgnn{t`MYP;A?%~z;ZF?AQ;Z92 zBPC5o(-sOm;pfR(-kmp5?|# z)^zx_m+f6UZ*JcmM;z0(ouIe_R#K_Wq6v^X%Ozf%Nz5ej5?`(LmPw?umG*q4pHpMw zj|PD1t%qip3RD-!%jB~|9XEaPgw0(kBw*fjHs1aeDFdi{o># zDR+$^3Kk1IqzH>2notp5|CeGBL?UkqGbV|G*b2|To|_vw%-la!;}t#`&%&=!ZG5a( zBENP)H`+3KKMs`=8x8##{cZo>-u1?`RYmdFB7;6)1GC{5MTQ0v9kDG8TE@i9g#8gv z7{O%yGJeSR6`jPSq!RDWu|{#hF@MtNu?_tETeZT4s8z>kx+Hd{K7c#neIeG z8iE3B?;$;tsDg_dS6WaC#_9cL_`GK~1c3cwM9(#soWCwf=po@ekje9{@b^hx3`-TFfE57hC+|d?AM)+|)n-Q}Ifb4W z=r*gWuw1@!t_v&t0`vJxhCD5LoxW5#T&O)*!b1w8g8C0pK~SiI)Jl7nOSG&fm`)qV zw$JLvg?KrajwcX|>v&7mDDu`Wc)Wc0{_}>sr(WK(|G1{Zgj&`F6KTI6%r!<_^wQ;g zuG}y7GvuuMR)>X}e zpta!ybW^wlJnG6T0Q2cy1CV6{1T1g7rZ{MBrn=U)(ZzNW0Q5W!ZP9Js_(~ds0qoQn zJ+tWQ+1EWghfZ%zWB&YKb1ASRK0Tl5inzyxDmv&1cNuAhsap^)geh3+KGS1FSIR+z z$mNwQ$!fXek}(#RO>t|uK=zFsJq~nPoP>kj+Scd#6vQXDj=H$Gd^ z)ou`DC(5zTl^ot+#O|a{H9__j^a)n${8%>P$I?#zf((1(o#?khG5*)sGwplGzwc}G zZ#feFEt~4!dRkJev{I+3Ru<;qbwgV(Sz819RH=dtj=QRCs;i2`y^vsOE%XJ?+zeZ@ z4E8Ray_U>s#i1oB+iYrV&o;G8nO8;^?fwAe^qx)^9wpoX=3---o3DU@y*{NlwFoI> zqZ+#96+CWNfCi&AVcvrjDUGynJ%ZQm!We)EiAFvg~u%;-R(wkm=YKQm2I%19`1&?|RF5+_=N=~Ox;M+1APL2+uuY*B|$rwH;$=H;Gt zQIu64dHoSrganv((o_>sE=L8)`J)HC0nzWnf8=mSYz2utShhZ>IQ0=;c48T0?!l2^ znG5(`7}aIYa-_3$jN_VG(XjT~;MHd5=7g0T51DUJOAs}3lH}?jMU3|qtRRS2t5(wP z8(8ah1(}YPGnSyWAE`FX}Ou)||>I7s*IchMs! zu*Q=nxaPffgMIywQ{JvPtK!*lHy4*3H?$#<9e4Jk6|>`#)8kG}ejg8?-R3@eWVqWe zMuGz8>A(pgB1^|IdA>A4!)OC84~HfEyQT0$AKwm*3wedbsNo#_9~2*+p|`xt@8Lp_ zQFrln+>WMrSNl8UKfDv!>O_&c!DRhfVS4$kukPJK1S{jR`PGU`rXPl8m^F+Pbt~;-Ezj%v*hBjuRPvLveYDi)J${VQ(Pc08-AwyV>V@{boAy$$ zV{lF{J85e|kKZ?KT}P?w&vogjTQ-(#dWT_S6|@h0MyVHnuO?@p{n2EqkK9F7&!Ba8 zGL=5}=D(P-nq(@y at the Computer Science Department (http://www.cs.columbia.edu/) of Columbia University (http://www.columbia.edu/), +as part of his +PhD thesis work (http://www.cs.columbia.edu/~ezk/research/tp/thesis_proposal.html). *Note History:: for more details. + +Bug Reports +=========== + + Before reporting a bug, see if it is a known one in the +bugs (http://www.cs.columbia.edu/~ezk/am-utils/BUGS.txt) file. Send +all bug reports to quoting the +details of the release and your configuration. These can be obtained +by running the command `amd -v'. It would greatly help if you could +provide a reproducible procedure for detecting the bug you are +reporting. + + Providing working patches is highly encouraged. Every patch +incorporated, however small, will get its author an honorable mention in +the authors file (http://www.cs.columbia.edu/~ezk/am-utils/AUTHORS.txt). + +Mailing List +============ + + There are two mailing lists for people interested in keeping +up-to-date with developments. + + 1. The older list, `amd-workers' is for general "how to" questions and + announcements. To subscribe, send a note to + .(1) To post a + message to this list, send mail to + . + + 2. The developers only list, `amd-dev' is for + + - announcements of alpha and beta releases of am-utils + + - reporting of bugs and patches + + - discussions of new features for am-utils + + - implementation and porting issues + + To subscribe, send a note to + with the single body text line `subscribe amd-dev'. To post a + message to this list, send mail to + . To avoid as much spam as + possible, only subscribers to this list may post to it. + + Subscribers of `amd-dev' are most suitable if they have the time + and resources to test new and buggy versions of amd, on as many + different platforms as possible. They should also be prepared to + learn and use the GNU Autoconf, Automake, and Libtool packages, + and of course, be very familiar with the complex code in the + am-utils package. In other words, subscribers on this list should + be able to contribute meaningfully to the development of amd. + + + ---------- Footnotes ---------- + + (1) Note that the older address, , +is defunct. + + +File: am-utils.info, Node: Intro, Next: History, Prev: Distrib, Up: Top + +Introduction +************ + + An "automounter" maintains a cache of mounted filesystems. +Filesystems are mounted on demand when they are first referenced, and +unmounted after a period of inactivity. + + Amd may be used as a replacement for Sun's automounter. The choice +of which filesystem to mount can be controlled dynamically with +"selectors". Selectors allow decisions of the form "hostname is THIS," +or "architecture is not THAT." Selectors may be combined arbitrarily. +Amd also supports a variety of filesystem types, including NFS, UFS and +the novel "program" filesystem. The combination of selectors and +multiple filesystem types allows identical configuration files to be +used on all machines thus reducing the administrative overhead. + + Amd ensures that it will not hang if a remote server goes down. +Moreover, Amd can determine when a remote server has become +inaccessible and then mount replacement filesystems as and when they +become available. + + Amd contains no proprietary source code and has been ported to +numerous flavors of Unix. + + +File: am-utils.info, Node: History, Next: Overview, Prev: Intro, Up: Top + +History +******* + + The Amd package has been without an official maintainer since 1992. +Several people have stepped in to maintain it unofficially. Most +notable were the `upl' (Unofficial Patch Level) releases of Amd, +created by me (Erez Zadok ), and available from +`ftp://ftp.cs.columbia.edu/pub/amd/'. The last such unofficial release +was `upl102'. + + Through the process of patching and aging, it was becoming more and +more apparent that Amd was in much need of revitalizing. Maintaining +Amd had become a difficult task. I took it upon myself to cleanup the +code, so that it would be easier to port to new platforms, add new +features, keep up with the many new feature requests, and deal with the +never ending stream of bug reports. + + I have been working on such a release of Amd on and off since +January of 1996. The new suite of tools is currently named "am-utils" +(AutoMounter Utilities), in line with GNU naming conventions, befitting +the contents of the package. In October of 1996 I had received enough +offers to help me with this task that I decided to make a mailing list +for this group of people. Around the same time, Amd had become a +necessary part of my PhD thesis work, resulting in more work performed +on am-utils. + + Am-utils version 6.0 was numbered with a major new release number to +distinguish it from the last official release of Amd (5.x). Many new +features have been added such as a GNU `configure' system, NFS Version +3, Autofs support, a run-time configuration file (`amd.conf'), many new +ports, more scripts and programs, as well as numerous bug fixes. +Another reason for the new major release number was to alert users of +am-utils that user-visible interfaces may have changed. In order to +make Amd work well for the next 10 years, and be easier to maintain, it +was necessary to remove old or unused features, change various syntax +files, etc. However, great care was taken to ensure the maximum +possible backwards compatibility. + + +File: am-utils.info, Node: Overview, Next: Supported Platforms, Prev: History, Up: Top + +Overview +******** + + Amd maintains a cache of mounted filesystems. Filesystems are +"demand-mounted" when they are first referenced, and unmounted after a +period of inactivity. Amd may be used as a replacement for Sun's +automount(8) program. It contains no proprietary source code and has +been ported to numerous flavors of Unix. *Note Supported Platforms::. + + Amd was designed as the basis for experimenting with filesystem +layout and management. Although Amd has many direct applications it is +loaded with additional features which have little practical use. At +some point the infrequently used components may be removed to streamline +the production system. + +* Menu: + +* Fundamentals:: +* Filesystems and Volumes:: +* Volume Naming:: +* Volume Binding:: +* Operational Principles:: +* Mounting a Volume:: +* Automatic Unmounting:: +* Keep-alives:: +* Non-blocking Operation:: + + +File: am-utils.info, Node: Fundamentals, Next: Filesystems and Volumes, Prev: Overview, Up: Overview + +Fundamentals +============ + + The fundamental concept behind Amd is the ability to separate the +name used to refer to a file from the name used to refer to its physical +storage location. This allows the same files to be accessed with the +same name regardless of where in the network the name is used. This is +very different from placing `/n/hostname' in front of the pathname +since that includes location dependent information which may change if +files are moved to another machine. + + By placing the required mappings in a centrally administered +database, filesystems can be re-organized without requiring changes to +configuration files, shell scripts and so on. + + +File: am-utils.info, Node: Filesystems and Volumes, Next: Volume Naming, Prev: Fundamentals, Up: Overview + +Filesystems and Volumes +======================= + + Amd views the world as a set of fileservers, each containing one or +more filesystems where each filesystem contains one or more "volumes". +Here the term "volume" is used to refer to a coherent set of files such +as a user's home directory or a TeX distribution. + + In order to access the contents of a volume, Amd must be told in +which filesystem the volume resides and which host owns the filesystem. +By default the host is assumed to be local and the volume is assumed to +be the entire filesystem. If a filesystem contains more than one +volume, then a "sublink" is used to refer to the sub-directory within +the filesystem where the volume can be found. + + +File: am-utils.info, Node: Volume Naming, Next: Volume Binding, Prev: Filesystems and Volumes, Up: Overview + +Volume Naming +============= + + Volume names are defined to be unique across the entire network. A +volume name is the pathname to the volume's root as known by the users +of that volume. Since this name uniquely identifies the volume +contents, all volumes can be named and accessed from each host, subject +to administrative controls. + + Volumes may be replicated or duplicated. Replicated volumes contain +identical copies of the same data and reside at two or more locations in +the network. Each of the replicated volumes can be used +interchangeably. Duplicated volumes each have the same name but contain +different, though functionally identical, data. For example, +`/vol/tex' might be the name of a TeX distribution which varied for +each machine architecture. + + Amd provides facilities to take advantage of both replicated and +duplicated volumes. Configuration options allow a single set of +configuration data to be shared across an entire network by taking +advantage of replicated and duplicated volumes. + + Amd can take advantage of replacement volumes by mounting them as +required should an active fileserver become unavailable. + + +File: am-utils.info, Node: Volume Binding, Next: Operational Principles, Prev: Volume Naming, Up: Overview + +Volume Binding +============== + + Unix implements a namespace of hierarchically mounted filesystems. +Two forms of binding between names and files are provided. A "hard +link" completes the binding when the name is added to the filesystem. A +"soft link" delays the binding until the name is accessed. An +"automounter" adds a further form in which the binding of name to +filesystem is delayed until the name is accessed. + + The target volume, in its general form, is a tuple (host, filesystem, +sublink) which can be used to name the physical location of any volume +in the network. + + When a target is referenced, Amd ignores the sublink element and +determines whether the required filesystem is already mounted. This is +done by computing the local mount point for the filesystem and checking +for an existing filesystem mounted at the same place. If such a +filesystem already exists then it is assumed to be functionally +identical to the target filesystem. By default there is a one-to-one +mapping between the pair (host, filesystem) and the local mount point so +this assumption is valid. + + +File: am-utils.info, Node: Operational Principles, Next: Mounting a Volume, Prev: Volume Binding, Up: Overview + +Operational Principles +====================== + + Amd operates by introducing new mount points into the namespace. +These are called "automount" points. The kernel sees these automount +points as NFS filesystems being served by Amd. Having attached itself +to the namespace, Amd is now able to control the view the rest of the +system has of those mount points. RPC calls are received from the +kernel one at a time. + + When a "lookup" call is received Amd checks whether the name is +already known. If it is not, the required volume is mounted. A +symbolic link pointing to the volume root is then returned. Once the +symbolic link is returned, the kernel will send all other requests +direct to the mounted filesystem. + + If a volume is not yet mounted, Amd consults a configuration +"mount-map" corresponding to the automount point. Amd then makes a +runtime decision on what and where to mount a filesystem based on the +information obtained from the map. + + Amd does not implement all the NFS requests; only those relevant to +name binding such as "lookup", "readlink" and "readdir". Some other +calls are also implemented but most simply return an error code; for +example "mkdir" always returns "read-only filesystem". + + +File: am-utils.info, Node: Mounting a Volume, Next: Automatic Unmounting, Prev: Operational Principles, Up: Overview + +Mounting a Volume +================= + + Each automount point has a corresponding mount map. The mount map +contains a list of key-value pairs. The key is the name of the volume +to be mounted. The value is a list of locations describing where the +filesystem is stored in the network. In the source for the map the +value would look like + + location1 location2 ... locationN + + Amd examines each location in turn. Each location may contain +"selectors" which control whether Amd can use that location. For +example, the location may be restricted to use by certain hosts. Those +locations which cannot be used are ignored. + + Amd attempts to mount the filesystem described by each remaining +location until a mount succeeds or Amd can no longer proceed. The +latter can occur in three ways: + + * If none of the locations could be used, or if all of the locations + caused an error, then the last error is returned. + + * If a location could be used but was being mounted in the + background then Amd marks that mount as being "in progress" and + continues with the next request; no reply is sent to the kernel. + + * Lastly, one or more of the mounts may have been "deferred". A + mount is deferred if extra information is required before the + mount can proceed. When the information becomes available the + mount will take place, but in the mean time no reply is sent to + the kernel. If the mount is deferred, Amd continues to try any + remaining locations. + + Once a volume has been mounted, Amd establishes a "volume mapping" +which is used to satisfy subsequent requests. + + +File: am-utils.info, Node: Automatic Unmounting, Next: Keep-alives, Prev: Mounting a Volume, Up: Overview + +Automatic Unmounting +==================== + + To avoid an ever increasing number of filesystem mounts, Amd removes +volume mappings which have not been used recently. A time-to-live +interval is associated with each mapping and when that expires the +mapping is removed. When the last reference to a filesystem is removed, +that filesystem is unmounted. If the unmount fails, for example the +filesystem is still busy, the mapping is re-instated and its +time-to-live interval is extended. The global default for this grace +period is controlled by the `-w' command-line option (*note -w: -w +Option.) or the amd.conf parameter `dismount_interval' (*note +dismount_interval Parameter::.). It is also possible to set this value +on a per-mount basis (*note opts: opts Option.). + + Filesystems can be forcefully timed out using the Amq command. +*Note Run-time Administration::. + + +File: am-utils.info, Node: Keep-alives, Next: Non-blocking Operation, Prev: Automatic Unmounting, Up: Overview + +Keep-alives +=========== + + Use of some filesystem types requires the presence of a server on +another machine. If a machine crashes then it is of no concern to +processes on that machine that the filesystem is unavailable. However, +to processes on a remote host using that machine as a fileserver this +event is important. This situation is most widely recognized when an +NFS server crashes and the behavior observed on client machines is that +more and more processes hang. In order to provide the possibility of +recovery, Amd implements a "keep-alive" interval timer for some +filesystem types. Currently only NFS makes use of this service. + + The basis of the NFS keep-alive implementation is the observation +that most sites maintain replicated copies of common system data such as +manual pages, most or all programs, system source code and so on. If +one of those servers goes down it would be reasonable to mount one of +the others as a replacement. + + The first part of the process is to keep track of which fileservers +are up and which are down. Amd does this by sending RPC requests to the +servers' NFS `NullProc' and checking whether a reply is returned. +While the server state is uncertain the requests are re-transmitted at +three second intervals and if no reply is received after four attempts +the server is marked down. If a reply is received the fileserver is +marked up and stays in that state for 30 seconds at which time another +NFS ping is sent. + + Once a fileserver is marked down, requests continue to be sent every +30 seconds in order to determine when the fileserver comes back up. +During this time any reference through Amd to the filesystems on that +server fail with the error "Operation would block". If a replacement +volume is available then it will be mounted, otherwise the error is +returned to the user. + + Although this action does not protect user files, which are unique on +the network, or processes which do not access files via Amd or already +have open files on the hung filesystem, it can prevent most new +processes from hanging. + + By default, fileserver state is not maintained for NFS/TCP mounts. +The remote fileserver is always assumed to be up. + + +File: am-utils.info, Node: Non-blocking Operation, Prev: Keep-alives, Up: Overview + +Non-blocking Operation +====================== + + Since there is only one instance of Amd for each automount point, +and usually only one instance on each machine, it is important that it +is always available to service kernel calls. Amd goes to great lengths +to ensure that it does not block in a system call. As a last resort +Amd will fork before it attempts a system call that may block +indefinitely, such as mounting an NFS filesystem. Other tasks such as +obtaining filehandle information for an NFS filesystem, are done using a +purpose built non-blocking RPC library which is integrated with Amd's +task scheduler. This library is also used to implement NFS keep-alives +(*note Keep-alives::.). + + Whenever a mount is deferred or backgrounded, Amd must wait for it +to complete before replying to the kernel. However, this would cause +Amd to block waiting for a reply to be constructed. Rather than do +this, Amd simply "drops" the call under the assumption that the kernel +RPC mechanism will automatically retry the request. + + +File: am-utils.info, Node: Supported Platforms, Next: Mount Maps, Prev: Overview, Up: Top + +Supported Platforms +******************* + + Am-utils has been ported to a wide variety of machines and operating +systems. Am-utils's code works for little-endian and big-endian +machines, as well as 32 bit and 64 bit architectures. Furthermore, when +Am-utils ports to an Operating System on one architecture, it is +generally readily portable to the same Operating System on all +platforms on which it is available. + + The table below lists those platforms supported by the latest +release. The listing is based on the standard output from GNU's +`config.guess' script. Since significant changes have been made to +am-utils, not all systems listed here have been verified working for all +features. + +Auto-Configured System Name Config Compile Amd NFS3 Shlib Hlfsd +alpha-dec-osf2.1 yes yes yes +alpha-dec-osf4.0 yes yes yes yes +alphaev5-unknown-linux-gnu yes yes yes n/a yes +hppa1.0-hp-hpux11.00 yes yes yes no +hppa1.1-hp-hpux10.10 yes yes yes n/a no +hppa1.1-hp-hpux10.20 yes yes yes n/a no +hppa1.1-hp-hpux9.01 yes yes yes n/a +hppa1.1-hp-hpux9.05 yes yes yes n/a +hppa1.1-hp-hpux9.07 yes yes yes n/a +i386-pc-bsdi2.1 yes yes yes n/a +i386-pc-bsdi3.0 yes yes yes n/a +i386-pc-bsdi3.1 yes yes yes n/a +i386-pc-solaris2.5.1 yes yes yes yes yes yes +i386-pc-solaris2.6 yes yes yes yes yes yes +i386-pc-solaris2.7 yes yes yes yes yes yes +i386-unknown-freebsd2.1.0 yes yes yes n/a +i386-unknown-freebsd2.2.1 yes yes yes n/a yes +i386-unknown-freebsd3.0 yes yes yes yes yes +i386-unknown-netbsd1.2.1 yes yes yes yes yes +i386-unknown-netbsd1.3 yes yes yes yes yes +i386-unknown-netbsd1.3.1 yes yes yes yes yes +i386-unknown-openbsd2.1 yes yes yes yes yes +i486-ncr-sysv4.3.03 yes yes yes +i486-pc-linux-gnulibc1 yes yes yes n/a yes +i586-pc-linux-gnu yes yes yes n/a yes +i586-pc-linux-gnulibc1 yes yes yes n/a yes +i686-pc-linux-gnu yes yes yes n/a yes +i686-pc-linux-gnulibc1 yes yes yes n/a yes +m68k-hp-hpux9.00 yes yes yes n/a +m68k-sun-sunos4.1.1 yes yes yes n/a +m68k-next-nextstep3 yes yes yes n/a +mips-dec-ultrix4.3 yes yes yes n/a +mips-sgi-irix5.2 +mips-sgi-irix5.3 yes yes yes yes +mips-sgi-irix6.2 yes yes yes yes +mips-sgi-irix6.4 yes yes yes yes yes +powerpc-ibm-aix4.1.5.0 yes yes yes n/a +powerpc-ibm-aix4.2.1.0 yes yes yes yes +rs6000-ibm-aix3.2 yes yes yes n/a +rs6000-ibm-aix3.2.5 yes yes yes n/a +rs6000-ibm-aix4.1.4.0 yes yes yes n/a +rs6000-ibm-aix4.1.5.0 yes yes yes n/a +sparc-sun-solaris2.3 yes yes yes n/a +sparc-sun-solaris2.4 yes yes yes n/a yes +sparc-sun-solaris2.5 yes yes yes yes yes +sparc-sun-solaris2.5.1 yes yes yes yes yes yes +sparc-sun-solaris2.6 yes yes yes yes yes yes +sparc-sun-solaris2.7 yes yes yes yes yes yes +sparc-sun-sunos4.1.1 yes yes yes n/a yes +sparc-sun-sunos4.1.3 yes yes yes n/a yes +sparc-sun-sunos4.1.3C yes yes yes n/a yes +sparc-sun-sunos4.1.3_U1 yes yes yes n/a yes +sparc-sun-sunos4.1.4 yes yes yes n/a yes +sparc-unknown-linux-gnulibc1 yes yes yes n/a yes +sparc-unknown-netbsd1.2E yes yes yes +sparc64-unknown-linux-gnu yes yes yes n/a yes + + See the `INSTALL' in the distribution for more specific details on +building and/or configuring for some systems. + + +File: am-utils.info, Node: Mount Maps, Next: Amd Command Line Options, Prev: Supported Platforms, Up: Top + +Mount Maps +********** + + Amd has no built-in knowledge of machines or filesystems. External +"mount-maps" are used to provide the required information. +Specifically, Amd needs to know when and under what conditions it +should mount filesystems. + + The map entry corresponding to the requested name contains a list of +possible locations from which to resolve the request. Each location +specifies filesystem type, information required by that filesystem (for +example the block special device in the case of UFS), and some +information describing where to mount the filesystem (*note fs +Option::.). A location may also contain "selectors" (*note +Selectors::.). + +* Menu: + +* Map Types:: +* Key Lookup:: +* Location Format:: + + +File: am-utils.info, Node: Map Types, Next: Key Lookup, Prev: Mount Maps, Up: Mount Maps + +Map Types +========= + + A mount-map provides the run-time configuration information to Amd. +Maps can be implemented in many ways. Some of the forms supported by +Amd are regular files, ndbm databases, NIS maps, the "Hesiod" name +server, and even the password file. + + A mount-map "name" is a sequence of characters. When an automount +point is created a handle on the mount-map is obtained. For each map +type configured, Amd attempts to reference the map of the appropriate +type. If a map is found, Amd notes the type for future use and deletes +the reference, for example closing any open file descriptors. The +available maps are configured when Amd is built and can be displayed by +running the command `amd -v'. + + When using an Amd configuration file (*note Amd Configuration +File::.) and the keyword `map_type' (*note map_type Parameter::.), you +may force the map used to any type. + + By default, Amd caches data in a mode dependent on the type of map. +This is the same as specifying `cache:=mapdefault' and selects a +suitable default cache mode depending on the map type. The individual +defaults are described below. The CACHE option can be specified on +automount points to alter the caching behavior (*note Automount +Filesystem::.). + + The following map types have been implemented, though some are not +available on all machines. Run the command `amd -v' to obtain a list +of map types configured on your machine. + +* Menu: + +* File maps:: +* ndbm maps:: +* NIS maps:: +* NIS+ maps:: +* Hesiod maps:: +* Password maps:: +* Union maps:: +* LDAP maps:: + + +File: am-utils.info, Node: File maps, Next: ndbm maps, Prev: Map Types, Up: Map Types + +File maps +--------- + + When Amd searches a file for a map entry it does a simple scan of +the file and supports both comments and continuation lines. + + Continuation lines are indicated by a backslash character (`\') as +the last character of a line in the file. The backslash, newline +character *and any leading white space on the following line* are +discarded. A maximum line length of 2047 characters is enforced after +continuation lines are read but before comments are stripped. Each +line must end with a newline character; that is newlines are +terminators, not separators. The following examples illustrate this: + + key valA valB; \ + valC + + specifies *three* locations, and is identical to + + key valA valB; valC + + However, + + key valA valB;\ + valC + + specifies only *two* locations, and is identical to + + key valA valB;valC + + After a complete line has been read from the file, including +continuations, Amd determines whether there is a comment on the line. +A comment begins with a hash ("`#'") character and continues to the end +of the line. There is no way to escape or change the comment lead-in +character. + + Note that continuation lines and comment support "only" apply to +file maps, or ndbm maps built with the `mk-amd-map' program. + + When caching is enabled, file maps have a default cache mode of +`all' (*note Automount Filesystem::.). + + +File: am-utils.info, Node: ndbm maps, Next: NIS maps, Prev: File maps, Up: Map Types + +ndbm maps +--------- + + An ndbm map may be used as a fast access form of a file map. The +program, `mk-amd-map', converts a normal map file into an ndbm database. +This program supports the same continuation and comment conventions that +are provided for file maps. Note that ndbm format files may *not* be +sharable across machine architectures. The notion of speed generally +only applies to large maps; a small map, less than a single disk block, +is almost certainly better implemented as a file map. + + ndbm maps have a default cache mode of `all' (*note Automount +Filesystem::.). + + +File: am-utils.info, Node: NIS maps, Next: NIS+ maps, Prev: ndbm maps, Up: Map Types + +NIS maps +-------- + + When using NIS (formerly YP), an Amd map is implemented directly by +the underlying NIS map. Comments and continuation lines are *not* +supported in the automounter and must be stripped when constructing the +NIS server's database. + + NIS maps have a default cache mode of `all' (*note Automount +Filesystem::.). + + The following rule illustrates what could be added to your NIS +`Makefile', in this case causing the `amd.home' map to be rebuilt: + $(YPTSDIR)/amd.home.time: $(ETCDIR)/amd.home + -@sed -e "s/#.*$$//" -e "/^$$/d" $(ETCDIR)/amd.home | \ + awk '{ \ + for (i = 1; i <= NF; i++) \ + if (i == NF) { \ + if (substr($$i, length($$i), 1) == "\\") \ + printf("%s", substr($$i, 1, length($$i) - 1)); \ + else \ + printf("%s\n", $$i); \ + } \ + else \ + printf("%s ", $$i); \ + }' | \ + $(MAKEDBM) - $(YPDBDIR)/amd.home; \ + touch $(YPTSDIR)/amd.home.time; \ + echo "updated amd.home"; \ + if [ ! $(NOPUSH) ]; then \ + $(YPPUSH) amd.home; \ + echo "pushed amd.home"; \ + else \ + : ; \ + fi + + Here `$(YPTSDIR)' contains the time stamp files, and `$(YPDBDIR)' +contains the dbm format NIS files. + + +File: am-utils.info, Node: NIS+ maps, Next: Hesiod maps, Prev: NIS maps, Up: Map Types + +NIS+ maps +--------- + + NIS+ maps do not support cache mode `all' and, when caching is +enabled, have a default cache mode of `inc'. + + XXX: FILL IN WITH AN EXAMPLE. + + +File: am-utils.info, Node: Hesiod maps, Next: Password maps, Prev: NIS+ maps, Up: Map Types + +Hesiod maps +----------- + + When the map name begins with the string `hesiod.' lookups are made +using the "Hesiod" name server. The string following the dot is used +as a name qualifier and is prepended with the key being located. The +entire string is then resolved in the `automount' context, or the +amd.conf parameter `hesiod_base' (*note hesiod_base Parameter::.). For +example, if the the key is `jsp' and map name is `hesiod.homes' then +"Hesiod" is asked to resolve `jsp.homes.automount'. + + Hesiod maps do not support cache mode `all' and, when caching is +enabled, have a default cache mode of `inc' (*note Automount +Filesystem::.). + + The following is an example of a "Hesiod" map entry: + + jsp.homes.automount HS TXT "rfs:=/home/charm;rhost:=charm;sublink:=jsp" + njw.homes.automount HS TXT "rfs:=/home/dylan/dk2;rhost:=dylan;sublink:=njw" + + +File: am-utils.info, Node: Password maps, Next: Union maps, Prev: Hesiod maps, Up: Map Types + +Password maps +------------- + + The password map support is unlike the four previous map types. When +the map name is the string `/etc/passwd' Amd can lookup a user name in +the password file and re-arrange the home directory field to produce a +usable map entry. + + Amd assumes the home directory has the format +`/anydir/dom1/../domN/login'. It breaks this string into a map entry +where `${rfs}' has the value `/anydir/domN', `${rhost}' has the value +`domN.....dom1', and `${sublink}' has the value login. + + Thus if the password file entry was + + /home/achilles/jsp + + the map entry used by Amd would be + + rfs:=/home/achilles;rhost:=achilles;sublink:=jsp + + Similarly, if the password file entry was + + /home/cc/sugar/mjh + + the map entry used by Amd would be + + rfs:=/home/sugar;rhost:=sugar.cc;sublink:=jsp + + +File: am-utils.info, Node: Union maps, Next: LDAP maps, Prev: Password maps, Up: Map Types + +Union maps +---------- + + The union map support is provided specifically for use with the union +filesystem, *note Union Filesystem::.. + + It is identified by the string `union:' which is followed by a colon +separated list of directories. The directories are read in order, and +the names of all entries are recorded in the map cache. Later +directories take precedence over earlier ones. The union filesystem +type then uses the map cache to determine the union of the names in all +the directories. + + +File: am-utils.info, Node: LDAP maps, Prev: Union maps, Up: Map Types + +LDAP maps +--------- + + LDAP (Lightweight Directory Access Protocol) maps do not support +cache mode `all' and, when caching is enabled, have a default cache mode +of `inc'. + + For example, an Amd map `amd.home' that looks as follows: + + /defaults opts:=rw,intr;type:=link + + zing -rhost:=shekel \ + host==shekel \ + host!=shekel;type:=nfs + +when converted to LDAP (*note amd2ldif::.), will result in the following +LDAP database: + $ amd2ldif amd.home CUCS < amd.home + dn: cn=amdmap timestamp, CUCS + cn : amdmap timestamp + objectClass : amdmapTimestamp + amdmapTimestamp: 873071363 + + dn: cn=amdmap amd.home[/defaults], CUCS + cn : amdmap amd.home[/defaults] + objectClass : amdmap + amdmapName : amd.home + amdmapKey : /defaults + amdmapValue : opts:=rw,intr;type:=link + + dn: cn=amdmap amd.home[], CUCS + cn : amdmap amd.home[] + objectClass : amdmap + amdmapName : amd.home + amdmapKey : + amdmapValue : + + dn: cn=amdmap amd.home[zing], CUCS + cn : amdmap amd.home[zing] + objectClass : amdmap + amdmapName : amd.home + amdmapKey : zing + amdmapValue : -rhost:=shekel host==shekel host!=shekel;type:=nfs + + +File: am-utils.info, Node: Key Lookup, Next: Location Format, Prev: Map Types, Up: Mount Maps + +How keys are looked up +====================== + + The key is located in the map whose type was determined when the +automount point was first created. In general the key is a pathname +component. In some circumstances this may be modified by variable +expansion (*note Variable Expansion::.) and prefixing. If the automount +point has a prefix, specified by the PREF option, then that is +prepended to the search key before the map is searched. + + If the map cache is a `regexp' cache then the key is treated as an +egrep-style regular expression, otherwise a normal string comparison is +made. + + If the key cannot be found then a "wildcard" match is attempted. +Amd repeatedly strips the basename from the key, appends `/*' and +attempts a lookup. Finally, Amd attempts to locate the special key `*'. + + For example, the following sequence would be checked if +`home/dylan/dk2' was being located: + + home/dylan/dk2 + home/dylan/* + home/* + * + + At any point when a wildcard is found, Amd proceeds as if an exact +match had been found and the value field is then used to resolve the +mount request, otherwise an error code is propagated back to the kernel. +(*note Filesystem Types::.). + + +File: am-utils.info, Node: Location Format, Prev: Key Lookup, Up: Mount Maps + +Location Format +=============== + + The value field from the lookup provides the information required to +mount a filesystem. The information is parsed according to the syntax +shown below. + + location-list: + location-selection + location-list white-space || white-space location-selection + location-selection: + location + location-selection white-space location + location: + location-info + -location-info + - + location-info: + sel-or-opt + location-info;sel-or-opt + ; + sel-or-opt: + selection + opt-ass + selection: + selector==value + selector!=value + opt-ass: + option:=value + white-space: + space + tab + + Note that unquoted whitespace is not allowed in a location +description. White space is only allowed, and is mandatory, where +shown with non-terminal white-space. + + A "location-selection" is a list of possible volumes with which to +satisfy the request. "location-selection"s are separated by the `||' +operator. The effect of this operator is to prevent use of +location-selections to its right if any of the location-selections on +its left were selected whether or not any of them were successfully +mounted (*note Selectors::.). + + The location-selection, and singleton "location-list", +`type:=ufs;dev:=/dev/xd1g' would inform Amd to mount a UFS filesystem +from the block special device `/dev/xd1g'. + + The "sel-or-opt" component is either the name of an option required +by a specific filesystem, or it is the name of a built-in, predefined +selector such as the architecture type. The value may be quoted with +double quotes `"', for example `type:="ufs";dev:="/dev/xd1g"'. These +quotes are stripped when the value is parsed and there is no way to get +a double quote into a value field. Double quotes are used to get white +space into a value field, which is needed for the program filesystem +(*note Program Filesystem::.). + +* Menu: + +* Map Defaults:: +* Variable Expansion:: +* Selectors:: +* Map Options:: + + +File: am-utils.info, Node: Map Defaults, Next: Variable Expansion, Prev: Location Format, Up: Location Format + +Map Defaults +------------ + + A location beginning with a dash `-' is used to specify default +values for subsequent locations. Any previously specified defaults in +the location-list are discarded. The default string can be empty in +which case no defaults apply. + + The location `-fs:=/mnt;opts:=ro' would set the local mount point to +`/mnt' and cause mounts to be read-only by default. Defaults specified +this way are appended to, and so override, any global map defaults +given with `/defaults'). + + +File: am-utils.info, Node: Variable Expansion, Next: Selectors, Prev: Map Defaults, Up: Location Format + +Variable Expansion +------------------ + + To allow generic location specifications Amd does variable expansion +on each location and also on some of the option strings. Any option or +selector appearing in the form `$"var"' is replaced by the current +value of that option or selector. For example, if the value of +`${key}' was `bin', `${autodir}' was `/a' and `${fs}' was +`${autodir}/local/${key}' then after expansion `${fs}' would have the +value `/a/local/bin'. Any environment variable can be accessed in a +similar way. + + Two pathname operators are available when expanding a variable. If +the variable name begins with `/' then only the last component of the +pathname is substituted. For example, if `${path}' was `/foo/bar' then +`${/path}' would be expanded to `bar'. Similarly, if the variable name +ends with `/' then all but the last component of the pathname is +substituted. In the previous example, `${path/}' would be expanded to +`/foo'. + + Two domain name operators are also provided. If the variable name +begins with `.' then only the domain part of the name is substituted. +For example, if `${rhost}' was `swan.doc.ic.ac.uk' then `${.rhost}' +would be expanded to `doc.ic.ac.uk'. Similarly, if the variable name +ends with `.' then only the host component is substituted. In the +previous example, `${rhost.}' would be expanded to `swan'. + + Variable expansion is a two phase process. Before a location is +parsed, all references to selectors, eg `${path}', are expanded. The +location is then parsed, selections are evaluated and option assignments +recorded. If there were no selections or they all succeeded the +location is used and the values of the following options are expanded in +the order given: SUBLINK, RFS, FS, OPTS, REMOPTS, MOUNT and UNMOUNT. + + Note that expansion of option values is done after "all" assignments +have been completed and not in a purely left to right order as is done +by the shell. This generally has the desired effect but care must be +taken if one of the options references another, in which case the +ordering can become significant. + + There are two special cases concerning variable expansion: + + 1. before a map is consulted, any selectors in the name received from + the kernel are expanded. For example, if the request from the + kernel was for `${arch}.bin' and the machine architecture was + `vax', the value given to `${key}' would be `vax.bin'. + + 2. the value of `${rhost}' is expanded and normalized before the + other options are expanded. The normalization process strips any + local sub-domain components. For example, if `${domain}' was + `Berkeley.EDU' and `${rhost}' was initially `snow.Berkeley.EDU', + after the normalization it would simply be `snow'. Hostname + normalization is currently done in a *case-dependent* manner. + + +File: am-utils.info, Node: Selectors, Next: Map Options, Prev: Variable Expansion, Up: Location Format + +Selectors +--------- + + Selectors are used to control the use of a location. It is possible +to share a mount map between many machines in such a way that filesystem +location, architecture and operating system differences are hidden from +the users. A selector of the form `arch==sun3;os==sunos4' would only +apply on Sun-3s running SunOS 4.x. + + Selectors can be negated by using `!=' instead of `=='. For example +to select a location on all non-Vax machines the selector `arch!=vax' +would be used. + + Selectors are evaluated left to right. If a selector fails then that +location is ignored. Thus the selectors form a conjunction and the +locations form a disjunction. If all the locations are ignored or +otherwise fail then Amd uses the "error" filesystem (*note Error +Filesystem::.). This is equivalent to having a location `type:=error' +at the end of each mount-map entry. + + The default value of many of the selectors listed here can be +overridden by an Amd command line switch or in an Amd configuration +file. *Note Amd Configuration File::. + + These are the selectors currently implemented. + +* Menu: + +* arch Selector Variable:: +* autodir Selector Variable:: +* byte Selector Variable:: +* cluster Selector Variable:: +* domain Selector Variable:: +* host Selector Variable:: +* hostd Selector Variable:: +* karch Selector Variable:: +* os Selector Variable:: +* osver Selector Variable:: + +* key Selector Variable:: +* map Selector Variable:: +* netnumber Selector Variable:: +* network Selector Variable:: +* path Selector Variable:: +* wire Selector Variable:: + +* exists Selector Function:: +* false Selector Function:: +* netgrp Selector Function:: +* in_network Selector Function:: +* true Selector Function:: + + +File: am-utils.info, Node: arch Selector Variable, Next: autodir Selector Variable, Prev: Selectors, Up: Selectors + +arch Selector Variable +...................... + + The machine architecture which was automatically determined at +compile time. The architecture type can be displayed by running the +command `amd -v'. *Note Supported Platforms::. + + +File: am-utils.info, Node: autodir Selector Variable, Next: byte Selector Variable, Prev: arch Selector Variable, Up: Selectors + +autodir Selector Variable +......................... + + The default directory under which to mount filesystems. This may be +changed by the `-a' command line option. *Note fs Option::. + + +File: am-utils.info, Node: byte Selector Variable, Next: cluster Selector Variable, Prev: autodir Selector Variable, Up: Selectors + +byte Selector Variable +...................... + + The machine's byte ordering. This is either `little', indicating +little-endian, or `big', indicating big-endian. One possible use is to +share `rwho' databases (*note rwho servers::.). Another is to share +ndbm databases, however this use can be considered a courageous +juggling act. + + +File: am-utils.info, Node: cluster Selector Variable, Next: domain Selector Variable, Prev: byte Selector Variable, Up: Selectors + +cluster Selector Variable +......................... + + This is provided as a hook for the name of the local cluster. This +can be used to decide which servers to use for copies of replicated +filesystems. `${cluster}' defaults to the value of `${domain}' unless +a different value is set with the `-C' command line option. + + +File: am-utils.info, Node: domain Selector Variable, Next: host Selector Variable, Prev: cluster Selector Variable, Up: Selectors + +domain Selector Variable +........................ + + The local domain name as specified by the `-d' command line option. +*Note host Selector Variable::. + + +File: am-utils.info, Node: host Selector Variable, Next: hostd Selector Variable, Prev: domain Selector Variable, Up: Selectors + +host Selector Variable +...................... + + The local hostname as determined by gethostname(2). If no domain +name was specified on the command line and the hostname contains a +period `.' then the string before the period is used as the host name, +and the string after the period is assigned to `${domain}'. For +example, if the hostname is `styx.doc.ic.ac.uk' then `host' would be +`styx' and `domain' would be `doc.ic.ac.uk'. `hostd' would be +`styx.doc.ic.ac.uk'. + + +File: am-utils.info, Node: hostd Selector Variable, Next: karch Selector Variable, Prev: host Selector Variable, Up: Selectors + +hostd Selector Variable +....................... + + This resolves to the `${host}' and `${domain}' concatenated with a +`.' inserted between them if required. If `${domain}' is an empty +string then `${host}' and `${hostd}' will be identical. + diff --git a/doc/am-utils.info-2 b/doc/am-utils.info-2 new file mode 100644 index 0000000..482539a --- /dev/null +++ b/doc/am-utils.info-2 @@ -0,0 +1,1428 @@ +This is Info file am-utils.info, produced by Makeinfo version 1.68 from +the input file am-utils.texi. + +START-INFO-DIR-ENTRY +* Am-utils: (am-utils). The Amd automounter suite of utilities +END-INFO-DIR-ENTRY + + +File: am-utils.info, Node: karch Selector Variable, Next: os Selector Variable, Prev: hostd Selector Variable, Up: Selectors + +karch Selector Variable +....................... + + This is provided as a hook for the kernel architecture. This is +used on SunOS 4 and SunOS 5, for example, to distinguish between +different `/usr/kvm' volumes. `${karch}' defaults to the "machine" +value gotten from uname(2). If the uname(2) system call is not +available, the value of `${karch}' defaults to that of `${arch}'. +Finally, a different value can be set with the `-k' command line option. + + +File: am-utils.info, Node: os Selector Variable, Next: osver Selector Variable, Prev: karch Selector Variable, Up: Selectors + +os Selector Variable +.................... + + The operating system. Like the machine architecture, this is +automatically determined at compile time. The operating system name can +be displayed by running the command `amd -v'. *Note Supported +Platforms::. + + +File: am-utils.info, Node: osver Selector Variable, Next: key Selector Variable, Prev: os Selector Variable, Up: Selectors + +osver Selector Variable +....................... + + The operating system version. Like the machine architecture, this is +automatically determined at compile time. The operating system name can +be displayed by running the command `amd -v'. *Note Supported +Platforms::. + + The following selectors are also provided. Unlike the other +selectors, they vary for each lookup. Note that when the name from the +kernel is expanded prior to a map lookup, these selectors are all +defined as empty strings. + + +File: am-utils.info, Node: key Selector Variable, Next: map Selector Variable, Prev: osver Selector Variable, Up: Selectors + +key Selector Variable +..................... + + The name being resolved. For example, if `/home' is an automount +point, then accessing `/home/foo' would set `${key}' to the string +`foo'. The key is prefixed by the PREF option set in the parent mount +point. The default prefix is an empty string. If the prefix was +`blah/' then `${key}' would be set to `blah/foo'. + + +File: am-utils.info, Node: map Selector Variable, Next: netnumber Selector Variable, Prev: key Selector Variable, Up: Selectors + +map Selector Variable +..................... + + The name of the mount map being used. + + +File: am-utils.info, Node: netnumber Selector Variable, Next: network Selector Variable, Prev: map Selector Variable, Up: Selectors + +netnumber Selector Variable +........................... + + This selector is identical to the `in_network' selector function, +see *Note in_network Selector Function::. It will match either the name +or number of any network interface on which this host is connected to. +The names and numbers of all attached interfaces are available from the +output of `amd -v'. + + +File: am-utils.info, Node: network Selector Variable, Next: path Selector Variable, Prev: netnumber Selector Variable, Up: Selectors + +network Selector Variable +......................... + + This selector is identical to the `in_network' selector function, +see *Note in_network Selector Function::. It will match either the name +or number of any network interface on which this host is connected to. +The names and numbers of all attached interfaces are available from the +output of `amd -v'. + + +File: am-utils.info, Node: path Selector Variable, Next: wire Selector Variable, Prev: network Selector Variable, Up: Selectors + +path Selector Variable +...................... + + The full pathname of the name being resolved. For example +`/home/foo' in the example above. + + +File: am-utils.info, Node: wire Selector Variable, Next: exists Selector Function, Prev: path Selector Variable, Up: Selectors + +wire Selector Variable +...................... + + This selector is identical to the `in_network' selector function, +see *Note in_network Selector Function::. It will match either the name +or number of any network interface on which this host is connected to. +The names and numbers of all attached interfaces are available from the +output of `amd -v'. + + The following boolean functions are selectors which take an argument +ARG. They return a value of true or false, and thus do not need to be +compared with a value. Each of these may be negated by prepending `!' +to their name. + + +File: am-utils.info, Node: exists Selector Function, Next: false Selector Function, Prev: wire Selector Variable, Up: Selectors + +exists Selector Function +........................ + + If the file listed by ARG exists (via lstat(2)), this function +evaluates to true. Otherwise it evaluates to false. + + +File: am-utils.info, Node: false Selector Function, Next: netgrp Selector Function, Prev: exists Selector Function, Up: Selectors + +false Selector Function +....................... + + Always evaluates to false. ARG is ignored. + + +File: am-utils.info, Node: netgrp Selector Function, Next: in_network Selector Function, Prev: false Selector Function, Up: Selectors + +netgrp Selector Function +........................ + + If the current host as determined by the value of `${host}' is a +member of the netgroup ARG, this selector evaluates to true. Otherwise +it evaluates to false. + + For example, suppose you have a netgroup `ppp-hosts', and for +reasons of performance, these have a local `/home' partition, while all +other clients on the faster network can access a shared home directory. +A common map to use for both might look like the following: + + home/* netgrp(ppp-hosts);type:=link;fs:=/local/${key} \ + !netgrp(ppp-hosts);type:=nfs;rhost=serv1;rfs:=/remote/${key} + + +File: am-utils.info, Node: in_network Selector Function, Next: true Selector Function, Prev: netgrp Selector Function, Up: Selectors + +in_network Selector Function +............................ + + If the current host has any network interface that is locally +attached to the network specified in ARG (either via name or number), +this selector evaluates to true. Otherwise it evaluates to false. + + For example, suppose you have two servers that have an exportable +`/opt' that smaller clients can NFS mount. The two servers are say, +`serv1' on network `foo-net.site.com' and `serv2' on network +`123.4.5.0'. You can write a map to be used by all clients that will +attempt to mount the closest one as follows: + + opt in_network(foo-net.site.com);rhost:=serv1;rfs:=/opt \ + in_network(123.4.5.0);rhost:=serv2;rfs:=/opt \ + rhost:=fallback-server + + +File: am-utils.info, Node: true Selector Function, Prev: in_network Selector Function, Up: Selectors + +true Selector Function +...................... + + Always evaluates to true. ARG is ignored. + + +File: am-utils.info, Node: Map Options, Prev: Selectors, Up: Location Format + +Map Options +----------- + + Options are parsed concurrently with selectors. The difference is +that when an option is seen the string following the `:=' is recorded +for later use. As a minimum the TYPE option must be specified. Each +filesystem type has other options which must also be specified. *Note +Filesystem Types::, for details on the filesystem specific options. + + Superfluous option specifications are ignored and are not reported +as errors. + + The following options apply to more than one filesystem type. + +* Menu: + +* addopts Option:: +* delay Option:: +* fs Option:: +* opts Option:: +* remopts Option:: +* sublink Option:: +* type Option:: + + +File: am-utils.info, Node: addopts Option, Next: delay Option, Prev: Map Options, Up: Map Options + +addopts Option +.............. + + This option adds additional options to default options normally +specified in the `/defaults' entry or the defaults of the key entry +being processed (*Note opts Option::). Normally when you specify +`opts' in both the `/defaults' and the map entry, the latter overrides +the former completely. But with `addopts' it will append the options +and override any conflicting ones. + + Options which start with `no' will override those with the same name +that do not start with `no' and vice verse. Special handling is given +to inverted options such as `soft' and `hard', `bg' and `fg', `ro' and +`rw', etc. + + For example, if the default options specified were + opts:=rw,nosuid,intr,rsize=1024,wsize=1024,quota,posix + + and the ones specified in a map entry were + + addopts:=grpid,suid,ro,rsize=2048,quota,nointr + + then the actual options used would be + + wsize=1024,posix,grpid,suid,ro,rsize=2048,quota,nointr + + +File: am-utils.info, Node: delay Option, Next: fs Option, Prev: addopts Option, Up: Map Options + +delay Option +............ + + The delay, in seconds, before an attempt will be made to mount from +the current location. Auxiliary data, such as network address, file +handles and so on are computed regardless of this value. + + A delay can be used to implement the notion of primary and secondary +file servers. The secondary servers would have a delay of a few +seconds, thus giving the primary servers a chance to respond first. + + +File: am-utils.info, Node: fs Option, Next: opts Option, Prev: delay Option, Up: Map Options + +fs Option +......... + + The local mount point. The semantics of this option vary between +filesystems. + + For NFS and UFS filesystems the value of `${fs}' is used as the +local mount point. For other filesystem types it has other meanings +which are described in the section describing the respective filesystem +type. It is important that this string uniquely identifies the +filesystem being mounted. To satisfy this requirement, it should +contain the name of the host on which the filesystem is resident and the +pathname of the filesystem on the local or remote host. + + The reason for requiring the hostname is clear if replicated +filesystems are considered. If a fileserver goes down and a +replacement filesystem is mounted then the "local" mount point "must" +be different from that of the filesystem which is hung. Some encoding +of the filesystem name is required if more than one filesystem is to be +mounted from any given host. + + If the hostname is first in the path then all mounts from a +particular host will be gathered below a single directory. If that +server goes down then the hung mount points are less likely to be +accidentally referenced, for example when getcwd(3) traverses the +namespace to find the pathname of the current directory. + + The `fs' option defaults to `${autodir}/${rhost}${rfs}'. In +addition, `rhost' defaults to the local host name (`${host}') and `rfs' +defaults to the value of `${path}', which is the full path of the +requested file; `/home/foo' in the example above (*note Selectors::.). +`${autodir}' defaults to `/a' but may be changed with the `-a' command +line option. Sun's automounter defaults to `/tmp_mnt'. Note that +there is no `/' between the `${rhost}' and `${rfs}' since `${rfs}' +begins with a `/'. + + +File: am-utils.info, Node: opts Option, Next: remopts Option, Prev: fs Option, Up: Map Options + +opts Option +........... + + The options to pass to the mount system call. A leading `-' is +silently ignored. The mount options supported generally correspond to +those used by mount(8) and are listed below. Some additional +pseudo-options are interpreted by Amd and are also listed. + + Unless specifically overridden, each of the system default mount +options applies. Any options not recognized are ignored. If no +options list is supplied the string `rw,defaults' is used and all the +system default mount options apply. Options which are not applicable +for a particular operating system are silently ignored. For example, +only 4.4BSD is known to implement the `compress' and `spongy' options. + +`acdirmax=N' + Set the maximum directory attribute cache timeout to N. + +`acdirmin=N' + Set the minimum directory attribute cache timeout to N. + +`acregmax=N' + Set the maximum file attribute cache timeout to N. + +`acregmin=N' + Set the minimum file attribute cache timeout to N. + +`actimeo=N' + Set the overall attribute cache timeout to N. + +`auto' +`ignore' + Ignore this mount by df(1). + +`cache' + Allow data to be cached from a remote server for this mount. + +`compress' + Use NFS compression protocol. + +`defperm' + Ignore the permission mode bits, and default file permissions to + 0555, UID 0, and GID 0. Useful for CD-ROMs formatted as ISO-9660. + +`dev' + Allow local special devices on this filesystem. + +`dumbtimr' + (XXX: a dumb timer?) + +`fsid' + Set ID of filesystem. + +`grpid' + Use BSD directory group-id semantics. + +`int' +`intr' + Allow keyboard interrupts on hard mounts. + +`multi' + Perform multi-component lookup on files. + +`maxgroups' + Set the maximum number of groups to allow for this mount. + +`nfsv3' + Use NFS Version 3 for this mount. + +`noac' + Turn off the attribute cache. + +`noauto' + (XXX: No automatic what?) + +`nocache' + Do not allow data to be cached from a remote server for this mount. + +`noconn' + Don't make a connection on datagram transports. + +`nocto' + No close-to-open consistency. + +`nodefperm' + Do not ignore the permission mode bits. Useful for CD-ROMS + formatted as ISO-9660. + +`nodev' +`nodevs' + Don't allow local special devices on this filesystem. + +`noint' + Do not allow keyboard interrupts for this mount + +`nosub' + Disallow mounts beneath this mount. + +`nosuid' + Don't allow set-uid or set-gid executables on this filesystem. + +`noversion' + Strip the extension `;#' from the version string of files recorded + on an ISO-9660 CD-ROM. + +`overlay' + Overlay this mount on top of an existing mount, if any. + +`pgthresh=N' + Set the paging threshold to N kilobytes. + +`port=N' + Set the NFS port to N. + +`posix' + Turn on POSIX static pathconf for mounts. + +`proto=S' + Use transport protocol S for NFS (can be `"tcp"' or `"udp"'). + +`quota' + Enable quota checking on this mount. + +`rdonly' +`ro' + Mount this filesystem readonly. + +`resvport' + Use a reserved port (smaller than 1024) for remote NFS mounts. + Most systems assume that, but some allow for mounts to occur on + non-reserved ports. This causes problems when such a system + tries to NFS mount one that requires reserved ports. It is + recommended that this option always be on. + +`retrans=n' + The number of NFS retransmits made before a user error is + generated by a `soft' mounted filesystem, and before a `hard' + mounted filesystem reports `NFS server "yoyo" not responding still + trying'. + +`retry' + Set the NFS retry counter. + +`rrip' + Uses the Rock Ridge Interchange Protocol (RRIP) extensions to + ISO-9660. + +`rsize=N' + The NFS read packet size. You may need to set this if you are + using NFS/UDP through a gateway or a slow link. + +`rw' + Allow reads and writes on this filesystem. + +`soft' + Give up after "retrans" retransmissions. + +`spongy' + Like `soft' for status requests, and `hard' for data transfers. + +`suid' + Allow set-uid programs on this mount. + +`symttl' + Turn of the symbolic link cache time-to-live. + +`sync' + Perform synchronous filesystem operations on this mount. + +`tcp' + Use TCP/IP instead of UDP/IP, ignored if the NFS implementation + does not support TCP/IP mounts. + +`timeo=N' + The NFS timeout, in tenth-seconds, before a request is + retransmitted. + +`vers=N' + Use NFS protocol version number N (can be 2 or 3). + +`wsize=N' + The NFS write packet size. You may need to set this if you are + using NFS/UDP through a gateway or a slow link. + + The following options are implemented by Amd, rather than being +passed to the kernel. + +`nounmount' + Configures the mount so that its time-to-live will never expire. + This is also the default for some filesystem types. + +`ping=N' + The interval, in seconds, between keep-alive pings. When four + consecutive pings have failed the mount point is marked as hung. + This interval defaults to 30 seconds. If the ping interval is + less than zero, no pings are sent and the host is assumed to be + always up. By default, pings are not sent for an NFS/TCP mount. + +`retry=N' + The number of times to retry the mount system call. + +`utimeout=N' + The interval, in seconds, by which the mount's time-to-live is + extended after an unmount attempt has failed. In fact the + interval is extended before the unmount is attempted to avoid + thrashing. The default value is 120 seconds (two minutes) or as + set by the `-w' command line option. + + +File: am-utils.info, Node: remopts Option, Next: sublink Option, Prev: opts Option, Up: Map Options + +remopts Option +.............. + + This option has the same use as `${opts}' but applies only when the +remote host is on a non-local network. For example, when using NFS +across a gateway it is often necessary to use smaller values for the +data read and write sizes. This can simply be done by specifying the +small values in REMOPTS. When a non-local host is accessed, the +smaller sizes will automatically be used. + + Amd determines whether a host is local by examining the network +interface configuration at startup. Any interface changes made after +Amd has been started will not be noticed. The likely effect will be +that a host may incorrectly be declared non-local. + + Unless otherwise set, the value of `${remopts}' is the same as the +value of `${opts}'. + + +File: am-utils.info, Node: sublink Option, Next: type Option, Prev: remopts Option, Up: Map Options + +sublink Option +.............. + + The subdirectory within the mounted filesystem to which the reference +should point. This can be used to prevent duplicate mounts in cases +where multiple directories in the same mounted filesystem are used. + + +File: am-utils.info, Node: type Option, Prev: sublink Option, Up: Map Options + +type Option +........... + + The filesystem type to be used. *Note Filesystem Types::, for a full +description of each type. + + +File: am-utils.info, Node: Amd Command Line Options, Next: Filesystem Types, Prev: Mount Maps, Up: Top + +Amd Command Line Options +************************ + + Many of Amd's parameters can be set from the command line. The +command line is also used to specify automount points and maps. + + The general format of a command line is + + amd [options] [{ directory map-name [-map-options] } ...] + + For each directory and map-name given or specified in the `amd.conf' +file, Amd establishes an automount point. The "map-options" may be any +sequence of options or selectors--*note Location Format::.. The +"map-options" apply only to Amd's mount point. + + `type:=toplvl;cache:=mapdefault;fs:=${map}' is the default value for +the map options. Default options for a map are read from a special +entry in the map whose key is the string `/defaults'. When default +options are given they are prepended to any options specified in the +mount-map locations as explained in *Note Map Defaults::. + + The "options" are any combination of those listed below. + + Once the command line has been parsed, the automount points are +mounted. The mount points are created if they do not already exist, in +which case they will be removed when Amd exits. Finally, Amd +disassociates itself from its controlling terminal and forks into the +background. + + Note: Even if Amd has been built with `-DDEBUG' (via `configure +--enable-debug'), it will still background itself and disassociate +itself from the controlling terminal. To use a debugger it is +necessary to specify `-D nodaemon' on the command line. However, even +with all of this, mounts and unmounts are performed in the background, +and Amd will always fork before doing them. Therefore, debugging what +happens closely during un/mounts is more challenging. + + *All* of Amd's command options (save `-F' and `-T') can be specified +in the `amd.conf' file. *Note Amd Configuration File::. If Amd is +invoked without any command line options, it will default to using the +configuration file `/etc/amd.conf', if one exists. + +* Menu: + +* -a Option:: Automount directory. +* -c Option:: Cache timeout interval. +* -d Option:: Domain name. +* -k Option:: Kernel architecture. +* -l Option:: Log file. +* -n Option:: Hostname normalization. +* -o Option:: Operating system version. +* -p Option:: Output process id. +* -r Option:: Restart existing mounts. +* -t Option:: Kernel RPC timeout. +* -v Option:: Version information. +* -w Option:: Wait interval after failed unmount. +* -x Option:: Log options. +* -y Option:: NIS domain. +* -C-Option:: Cluster name. +* -D-Option:: Debug flags. +* -F Option:: Amd configuration file. +* -H Option:: Show brief help. +* -O-Option:: Operating system name. +* -S Option:: Lock executable pages in memory. +* -T-Option:: Set tag for configuration file. + + +File: am-utils.info, Node: -a Option, Next: -c Option, Prev: Amd Command Line Options, Up: Amd Command Line Options + +`-a' DIRECTORY +============== + + Specifies the default mount directory. This option changes the +variable `${autodir}' which otherwise defaults to `/a'. For example, +some sites prefer `/amd' or `/n'. + + amd -a /amd ... + + +File: am-utils.info, Node: -c Option, Next: -d Option, Prev: -a Option, Up: Amd Command Line Options + +`-c' CACHE-INTERVAL +=================== + + Selects the period, in seconds, for which a name is cached by Amd. +If no reference is made to the volume in this period, Amd discards the +volume name to filesystem mapping. + + Once the last reference to a filesystem has been removed, Amd +attempts to unmount the filesystem. If the unmount fails the interval +is extended by a further period as specified by the `-w' command line +option or by the `utimeout' mount option. + + The default "cache-interval" is 300 seconds (five minutes). + + +File: am-utils.info, Node: -d Option, Next: -k Option, Prev: -c Option, Up: Amd Command Line Options + +`-d' DOMAIN +=========== + + Specifies the host's domain. This sets the internal variable +`${domain}' and affects the `${hostd}' variable. + + If this option is not specified and the hostname already contains the +local domain then that is used, otherwise the default value of +`${domain}' is `unknown.domain'. + + For example, if the local domain was `doc.ic.ac.uk', Amd could be +started as follows: + + amd -d doc.ic.ac.uk ... + + +File: am-utils.info, Node: -k Option, Next: -l Option, Prev: -d Option, Up: Amd Command Line Options + +`-k' KERNEL-ARCHITECTURE +======================== + + Specifies the kernel architecture of the system. This is usually the +output of `uname -m' (the "machine" value gotten from uname(2)). If +the uname(2) system call is not available, the value of `${karch}' +defaults to that of `${arch}'. + + The only effect of this option is to set the variable `${karch}'. + + This option would be used as follows: + + amd -k `arch -k` ... + + +File: am-utils.info, Node: -l Option, Next: -n Option, Prev: -k Option, Up: Amd Command Line Options + +`-l' LOG-OPTION +=============== + + Selects the form of logging to be made. Several special +"log-options" are recognized. + + 1. If "log-option" is the string `syslog', Amd will use the syslog(3) + mechanism. If your system supports syslog facilities, then the + default facility used is `LOG_DAEMON'. + + 2. When using syslog, if you wish to change the facility, append its + name to the log option name, delimited by a single colon. For + example, if "log-options" is the string `syslog:local7' then Amd + will log messages via syslog(3) using the `LOG_LOCAL7' facility. + If the facility name specified is not recognized, Amd will default + to `LOG_DAEMON'. Note: while you can use any syslog facility + available on your system, it is generally a bad idea to use those + reserved for other services such as `kern', `lpr', `cron', etc. + + 3. If "log-option" is the string `/dev/stderr', Amd will use standard + error, which is also the default target for log messages. To + implement this, Amd simulates the effect of the `/dev/fd' driver. + + Any other string is taken as a filename to use for logging. Log +messages are appended to the file if it already exists, otherwise a new +file is created. The file is opened once and then held open, rather +than being re-opened for each message. + + Normally, when long-running daemons hold an open file descriptor on a +log file, it is impossible to "rotate" the log file and compress older +logs on a daily basis. The daemon needs to be told to discard (via +close(2)) its file handle, and re-open the log file. This is done +using `amq -l' log-option. *Note Amq -l option::. + + If the `syslog' option is specified but the system does not support +syslog or if the named file cannot be opened or created, Amd will use +standard error. Error messages generated before Amd has finished +parsing the command line are printed on standard error. + + Since Amd tends to generate a lot of logging information (especially +if debugging was turned on), and due to it being an important program +running on the system, it is usually best to log to a separate disk +file. In that case Amd would be started as follows: + + amd -l /var/log/amd ... + + +File: am-utils.info, Node: -n Option, Next: -o Option, Prev: -l Option, Up: Amd Command Line Options + +`-n' +==== + + Normalizes the remote hostname before using it. Normalization is +done by replacing the value of `${rhost}' with the (generally fully +qualified) primary name returned by a hostname lookup. + + This option should be used if several names are used to refer to a +single host in a mount map. + + +File: am-utils.info, Node: -o Option, Next: -p Option, Prev: -n Option, Up: Amd Command Line Options + +`-o' OP-SYS-VER +=============== + + Override the compiled-in version number of the operating system, with +OP-SYS-VER. Useful when the built-in version is not desired for +backward compatibility reasons. For example, if the built-in version is +`2.5.1', you can override it to `5.5.1', and use older maps that were +written with the latter in mind. + + +File: am-utils.info, Node: -p Option, Next: -r Option, Prev: -o Option, Up: Amd Command Line Options + +`-p' +==== + + Causes Amd's process id to be printed on standard output. This can +be redirected to a suitable file for use with kill: + + amd -p > /var/run/amd.pid ... + + This option only has an affect if Amd is running in daemon mode. If +Amd is started with the `-D nodaemon' debug flag, this option is +ignored. + + +File: am-utils.info, Node: -r Option, Next: -t Option, Prev: -p Option, Up: Amd Command Line Options + +`-r' +==== + + Tells Amd to restart existing mounts (*note Inheritance +Filesystem::.). + + +File: am-utils.info, Node: -t Option, Next: -v Option, Prev: -r Option, Up: Amd Command Line Options + +`-t' TIMEOUT.RETRANSMIT +======================= + + Specifies the RPC "timeout" and "retransmit" intervals used by the +kernel to communicate to Amd. These are used to set the `timeo' and +`retrans' mount options. + + Amd relies on the kernel RPC retransmit mechanism to trigger mount +retries. The value of this parameter changes the retry interval. Too +long an interval gives poor interactive response, too short an interval +causes excessive retries. + + +File: am-utils.info, Node: -v Option, Next: -w Option, Prev: -t Option, Up: Amd Command Line Options + +`-v' +==== + + Print version information on standard error and then exit. The +output is of the form: + + Copyright (c) 1997-1998 Erez Zadok + Copyright (c) 1990 Jan-Simon Pendry + Copyright (c) 1990 Imperial College of Science, Technology & Medicine + Copyright (c) 1990 The Regents of the University of California. + am-utils version 6.0a15 (build 61). + Built by ezk@cs.columbia.edu on date Wed Oct 22 15:21:03 EDT 1997. + cpu=sparc (big-endian), arch=sun4, karch=sun4u. + full_os=solaris2.5.1, os=sos5, osver=5.5.1, vendor=sun. + Map support for: root, passwd, union, nisplus, nis, ndbm, file, error. + AMFS: nfs, link, nfsx, nfsl, host, linkx, program, union, inherit, + ufs, lofs, hsfs, pcfs, auto, direct, toplvl, error. + FS: autofs, cachefs, cdfs, lofs, nfs, nfs3, pcfs, tfs, tmpfs, ufs. + Network 1: wire="mcl-lab-net.cs.columbia.edu" (netnumber=128.59.13). + Network 2: wire="14-net.cs.columbia.edu" (netnumber=128.59.14). + Network 3: wire="old-net.cs.columbia.edu" (netnumber=128.59.16). + + The information includes the version number, number of times Amd was +compiled on the local system, release date and name of the release. +Following come the cpu type, byte ordering, and the architecture and +kernel architecture as `${arch}' and `${karch}', respectively. The +next line lists the full name of the system, the variables `${os}' and +`${osver}', and the vendor's name. *Note Supported Platforms::. + + Then come a list of map types supported, filesystems internally +supported by Amd (AMFS), and generic filesystems available (FS). +Finally all known networks (if any) of this host are listed by name and +number. They are available via the variables `${wire}' or +`${network}', and `${netnumber}' (*note Selectors::.) or the +`in_network' selector function (*note in_network Selector Function::.). + + +File: am-utils.info, Node: -w Option, Next: -x Option, Prev: -v Option, Up: Amd Command Line Options + +`-w' WAIT-TIMEOUT +================= + + Selects the interval in seconds between unmount attempts after the +initial time-to-live has expired. + + This defaults to 120 seconds (two minutes). + + +File: am-utils.info, Node: -x Option, Next: -y Option, Prev: -w Option, Up: Amd Command Line Options + +`-x' OPTS +========= + + Specifies the type and verbosity of log messages. "opts" is a comma +separated list selected from the following options: + +`fatal' + Fatal errors + +`error' + Non-fatal errors + +`user' + Non-fatal user errors + +`warn' + Recoverable errors + +`warning' + Alias for `warn' + +`info' + Information messages + +`map' + Mount map usage + +`stats' + Additional statistics + +`all' + All of the above + + Initially a set of default logging flags is enabled. This is as if +`-x all,nomap,nostats' had been selected. The command line is parsed +and logging is controlled by the `-x' option. The very first set of +logging flags is saved and can not be subsequently disabled using Amq. +This default set of options is useful for general production use. + + The `info' messages include details of what is mounted and unmounted +and when filesystems have timed out. If you want to have the default +set of messages without the `info' messages then you simply need `-x +noinfo'. The messages given by `user' relate to errors in the mount +maps, so these are useful when new maps are installed. The following +table lists the syslog priorities used for each of the message types. + +`fatal' + `LOG_CRIT' + +`error' + `LOG_ERR' + +`user' + `LOG_WARNING' + +`warning' + `LOG_WARNING' + +`info' + `LOG_INFO' + +`debug' + `LOG_DEBUG' + +`map' + `LOG_DEBUG' + +`stats' + `LOG_INFO' + + The options can be prefixed by the string `no' to indicate that this +option should be turned off. For example, to obtain all but `info' +messages the option `-x all,noinfo' would be used. + + If Amd was built with debugging enabled the `debug' option is +automatically enabled regardless of the command line options. + + +File: am-utils.info, Node: -y Option, Next: -C-Option, Prev: -x Option, Up: Amd Command Line Options + +`-y' NIS-DOMAIN +=============== + + Selects an alternate NIS domain. This is useful for debugging and +cross-domain shared mounting. If this flag is specified, Amd +immediately attempts to bind to a server for this domain. + + +File: am-utils.info, Node: -C-Option, Next: -D-Option, Prev: -y Option, Up: Amd Command Line Options + +`-C' CLUSTER-NAME +================= + + Specifies the name of the cluster of which the local machine is a +member. The only effect is to set the variable `${cluster}'. The +"cluster-name" is will usually obtained by running another command +which uses a database to map the local hostname into a cluster name. +`${cluster}' can then be used as a selector to restrict mounting of +replicated data. If this option is not given, `${cluster}' has the +same value as `${domain}'. This would be used as follows: + + amd -C `clustername` ... + + +File: am-utils.info, Node: -D-Option, Next: -F Option, Prev: -C-Option, Up: Amd Command Line Options + +`-D' OPTS +========= + + Controls the verbosity and coverage of the debugging trace; "opts" +is a comma separated list of debugging options. The `-D' option is +only available if Amd was compiled with `-DDEBUG', or configured with +`configure --enable-debug'. The memory debugging facilities (`mem') +are only available if Amd was compiled with `-DDEBUG_MEM' (in addition +to `-DDEBUG'), or configured with `configure --enable-debug=mem'. + + The most common options to use are `-D trace' and `-D test' (which +turns on all the useful debug options). As usual, every option can be +prefixed with `no' to turn it off. + +`all' + all options + +`amq' + register for amq + +`daemon' + enter daemon mode + +`fork' + fork server + +`full' + program trace + +`info' + info service specific debugging (hesiod, nis, etc.) In the case of + hesiod maps, turns on the hesiod RES_DEBUG internal debugging + option. + +`mem' + trace memory allocations + +`mtab' + use local `./mtab' file + +`str' + debug string munging + +`test' + full debug but no daemon + +`trace' + protocol trace + + You may also refer to the program source for a more detailed +explanation of the available options. + + +File: am-utils.info, Node: -F Option, Next: -H Option, Prev: -D-Option, Up: Amd Command Line Options + +`-F' CONF-FILE +============== + + Specify an Amd configuration file CONF-FILE to use. For a +description of the format and syntax, *note Amd Configuration File::.. +This configuration file is used to specify any options in lieu of typing +many of them on the command line. The `amd.conf' file includes +directives for every command line option Amd has, and many more that +are only available via the configuration file facility. The +configuration file specified by this option is processed after all other +options had been processed, regardless of the actual location of this +option on the command line. + + +File: am-utils.info, Node: -H Option, Next: -O-Option, Prev: -F Option, Up: Amd Command Line Options + +`-H' +==== + + Print a brief help and usage string. + + +File: am-utils.info, Node: -O-Option, Next: -S Option, Prev: -H Option, Up: Amd Command Line Options + +`-O' OP-SYS-NAME +================ + + Override the compiled-in name of the operating system, with +OP-SYS-NAME. Useful when the built-in name is not desired for backward +compatibility reasons. For example, if the build in name is `sunos5', +you can override it to the old name `sos5', and use older maps which +were written with the latter in mind. + + +File: am-utils.info, Node: -S Option, Next: -T-Option, Prev: -O-Option, Up: Amd Command Line Options + +`-S' +==== + + Do *not* lock the running executable pages of Amd into memory. To +improve Amd's performance, systems that support the plock(3) call lock +the Amd process into memory. This way there is less chance the +operating system will schedule, page out, and swap the Amd process as +needed. This tends to improve Amd's performance, at the cost of +reserving the memory used by the Amd process (making it unavailable for +other processes). If this behavior is not desired, use the `-S' option. + + +File: am-utils.info, Node: -T-Option, Prev: -S Option, Up: Amd Command Line Options + +`-T' TAG +======== + + Specify a tag to use with `amd.conf'. All map entries tagged with +TAG will be processed. Map entries that are not tagged are always +processed. Map entries that are tagged with a tag other than TAG will +not be processed. + + +File: am-utils.info, Node: Filesystem Types, Next: Amd Configuration File, Prev: Amd Command Line Options, Up: Top + +Filesystem Types +**************** + + To mount a volume, Amd must be told the type of filesystem to be +used. Each filesystem type typically requires additional information +such as the fileserver name for NFS. + + From the point of view of Amd, a "filesystem" is anything that can +resolve an incoming name lookup. An important feature is support for +multiple filesystem types. Some of these filesystems are implemented +in the local kernel and some on remote fileservers, whilst the others +are implemented internally by Amd. + + The two common filesystem types are UFS and NFS. Four other user +accessible filesystems (`link', `program', `auto' and `direct') are +also implemented internally by Amd and these are described below. +There are two additional filesystem types internal to Amd which are not +directly accessible to the user (`inherit' and `error'). Their use is +described since they may still have an effect visible to the user. + +* Menu: + +* Network Filesystem:: A single NFS filesystem. +* Network Host Filesystem:: NFS mount a host's entire export tree. +* Network Filesystem Group:: An atomic group of NFS filesystems. +* Unix Filesystem:: Native disk filesystem. +* Caching Filesystem:: Caching from remote server filesystem. +* CD-ROM Filesystem:: ISO9660 CD ROM. +* Loopback Filesystem:: Local loopback-mount filesystem. +* Memory/RAM Filesystem:: A memory or RAM-based filesystem. +* Null Filesystem:: 4.4BSD's loopback-mount filesystem. +* Floppy Filesystem:: MS-DOS Floppy filesystem. +* Translucent Filesystem:: The directory merging filesystem. +* Shared Memory+Swap Filesystem:: Sun's tmpfs filesystem. +* User ID Mapping Filesystem:: 4.4BSD's umapfs filesystem. +* Program Filesystem:: Generic Program mounts. +* Symbolic Link Filesystem:: Local link. +* Symbolic Link Filesystem II:: Local link referencing existing filesystem. +* NFS-Link Filesystem:: Link if path exists, NFS otherwise. +* Automount Filesystem:: +* Direct Automount Filesystem:: +* Union Filesystem:: +* Error Filesystem:: +* Top-level Filesystem:: +* Autofs Filesystem:: Sun's kernel-based automounter filesystem. +* Root Filesystem:: +* Inheritance Filesystem:: + + +File: am-utils.info, Node: Network Filesystem, Next: Network Host Filesystem, Prev: Filesystem Types, Up: Filesystem Types + +Network Filesystem (`nfs') +========================== + + The "nfs" (`type:=nfs') filesystem type provides access to Sun's NFS. + +The following options must be specified: + +`rhost' + the remote fileserver. This must be an entry in the hosts + database. IP addresses are not accepted. The default value is + taken from the local host name (`${host}') if no other value is + specified. + +`rfs' + the remote filesystem. If no value is specified for this option, + an internal default of `${path}' is used. + + NFS mounts require a two stage process. First, the "file handle" of +the remote file system must be obtained from the server. Then a mount +system call must be done on the local system. Amd keeps a cache of +file handles for remote file systems. The cache entries have a +lifetime of a few minutes. + + If a required file handle is not in the cache, Amd sends a request +to the remote server to obtain it. Amd "does not" wait for a response; +it notes that one of the locations needs retrying, but continues with +any remaining locations. When the file handle becomes available, and +assuming none of the other locations was successfully mounted, Amd will +retry the mount. This mechanism allows several NFS filesystems to be +mounted in parallel. The first one which responds with a valid file +handle will be used. + +An NFS entry might be: + + jsp host!=charm;type:=nfs;rhost:=charm;rfs:=/home/charm;sublink:=jsp + + The mount system call and any unmount attempts are always done in a +new task to avoid the possibility of blocking Amd. + + +File: am-utils.info, Node: Network Host Filesystem, Next: Network Filesystem Group, Prev: Network Filesystem, Up: Filesystem Types + +Network Host Filesystem (`host') +================================ + + The "host" (`type:=host') filesystem allows access to the entire +export tree of an NFS server. The implementation is layered above the +`nfs' implementation so keep-alives work in the same way. The only +option which needs to be specified is `rhost' which is the name of the +fileserver to mount. + + The `host' filesystem type works by querying the mount daemon on the +given fileserver to obtain its export list. Amd then obtains +filehandles for each of the exported filesystems. Any errors at this +stage cause that particular filesystem to be ignored. Finally each +filesystem is mounted. Again, errors are logged but ignored. One +common reason for mounts to fail is that the mount point does not exist. +Although Amd attempts to automatically create the mount point, it may +be on a remote filesystem to which Amd does not have write permission. + + When an attempt to unmount a `host' filesystem mount fails, Amd +remounts any filesystems which had successfully been unmounted. To do +this Amd queries the mount daemon again and obtains a fresh copy of the +export list. Amd then tries to mount any exported filesystems which +are not currently mounted. + + Sun's automounter provides a special `-hosts' map. To achieve the +same effect with Amd requires two steps. First a mount map must be +created as follows: + + * type:=host;rhost:=${key};fs:=${autodir}/${rhost}/root + +and then start Amd with the following command + + amd /net net.map + +where `net.map' is the name of map described above. Note that the +value of `${fs}' is overridden in the map. This is done to avoid a +clash between the mount tree and any other filesystem already mounted +from the same fileserver. + + If different mount options are needed for different hosts then +additional entries can be added to the map, for example + + host2 opts:=ro,nosuid,soft + +would soft mount `host2' read-only. + + +File: am-utils.info, Node: Network Filesystem Group, Next: Unix Filesystem, Prev: Network Host Filesystem, Up: Filesystem Types + +Network Filesystem Group (`nfsx') +================================= + + The "nfsx" (`type:=nfsx') filesystem allows a group of filesystems +to be mounted from a single NFS server. The implementation is layered +above the `nfs' implementation so keep-alives work in the same way. + + The options are the same as for the `nfs' filesystem with one +difference. + +The following options must be specified: + +`rhost' + the remote fileserver. This must be an entry in the hosts + database. IP addresses are not accepted. The default value is + taken from the local host name (`${host}') if no other value is + specified. + +`rfs' + as a list of filesystems to mount. The list is in the form of a + comma separated strings. + +For example: + + pub type:=nfsx;rhost:=gould;\ + rfs:=/public,/,graphics,usenet;fs:=${autodir}/${rhost}/root + + The first string defines the root of the tree, and is applied as a +prefix to the remaining members of the list which define the individual +filesystems. The first string is *not* used as a filesystem name. A +parallel operation is used to determine the local mount points to +ensure a consistent layout of a tree of mounts. + + Here, the *three* filesystems, `/public', `/public/graphics' and +`/public/usenet', would be mounted. + + A local mount point, `${fs}', *must* be specified. The default +local mount point will not work correctly in the general case. A +suggestion is to use `fs:=${autodir}/${rhost}/root'. + + +File: am-utils.info, Node: Unix Filesystem, Next: Caching Filesystem, Prev: Network Filesystem Group, Up: Filesystem Types + +Unix Filesystem (`ufs', `xfs', or `efs') +======================================== + + The "ufs" (`type:=ufs') filesystem type provides access to the +system's standard disk filesystem--usually a derivative of the Berkeley +Fast Filesystem. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + A UFS entry might be: + + jsp host==charm;type:=ufs;dev:=/dev/sd0d;sublink:=jsp + + UFS is the default Unix disk-based file system, which Am-utils picks +up during the autoconfiguration phase. Some systems have more than one +type, such as IRIX, that comes with EFS (Extent File System) and XFS +(Extended File System). In those cases, you may explicitly set the file +system type, by using entries such: + + ez1 type:=efs;dev:=/dev/xd0a + ez2 type:=xfs;dev:=/dev/sd3c + + +File: am-utils.info, Node: Caching Filesystem, Next: CD-ROM Filesystem, Prev: Unix Filesystem, Up: Filesystem Types + +Caching Filesystem (`cachefs') +============================== + + The "cachefs" (`type:=cachefs') filesystem caches files from one +location onto another, presumably providing faster access. It is +particularly useful to cache from a larger and remote (slower) NFS +partition to a smaller and local (faster) UFS directory. + +The following options must be specified: + +`cachedir' + the directory where the cache is stored. + +`rfs' + the path name to the "back file system" to be cached from. + +`fs' + the "front file system" mount point to the cached files, where Amd + will set a symbolic link pointing to. + + A CacheFS entry for, say, the `/import' Amd mount point, might be: + + copt type:=cachefs;cachedir:=/cache;rfs:=/import/opt;fs:=/n/import/copt + + Access to the pathname `/import/copt' will follow a symbolic link to +`/n/import/copt'. The latter is the mount point for a caching file +system, that caches from `/import/opt' to `/cache'. + + Caveats: + 1. This file system is currently only implemented for Solaris 2.x! + + 2. Before being used for the first time, the cache directory must be + initialized with `cfsadmin -c CACHEDIR'. See the manual page for + cfsadmin(1M) for more information. + + 3. The "back file system" mounted must be a complete file system, not + a subdirectory thereof; otherwise you will get an error "Invalid + Argument". + + 4. If Amd aborts abnormally, the state of the cache may be + inconsistent, requiring running the command `fsck -F cachefs + CACHEDIR'. Otherwise you will get the error "No Space Left on + Device". + + +File: am-utils.info, Node: CD-ROM Filesystem, Next: Loopback Filesystem, Prev: Caching Filesystem, Up: Filesystem Types + +CD-ROM Filesystem (`cdfs') +========================== + + The "cdfs" (`type:=cdfs') filesystem mounts a CD-ROM with an ISO9660 +format filesystem on it. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + A cdfs entry might be: + + cdfs os==sunos4;type:=cdfs;dev:=/dev/sr0 \ + os==sunos5;type:=cdfs;dev:=/dev/dsk/c0t6d0s2 + + +File: am-utils.info, Node: Loopback Filesystem, Next: Memory/RAM Filesystem, Prev: CD-ROM Filesystem, Up: Filesystem Types + +Loopback Filesystem (`lofs') +============================ + + The "lofs" (`type:=lofs') filesystem is also called the loopback +filesystem. It mounts a local directory on another, thus providing +mount-time binding to another location (unlike symbolic links). + + The loopback filesystem is particularly useful within the context of +a chroot-ed directory (via chroot(2)), to provide access to directories +otherwise inaccessible. + +The following option must be specified: + +`rfs' + the pathname to be mounted on top of `${fs}'. + + Usually, the FTP server runs in a chroot-ed environment, for security +reasons. In this example, lofs is used to provide a subdirectory within +a user's home directory, also available for public ftp. + + lofs type:=lofs;rfs:=/home/ezk/myftpdir;fs:=/usr/ftp/pub/ezk + + +File: am-utils.info, Node: Memory/RAM Filesystem, Next: Null Filesystem, Prev: Loopback Filesystem, Up: Filesystem Types + +Memory/RAM Filesystem (`mfs') +============================= + + The "mfs" (`type:=mfs') filesystem is available in 4.4BSD, Linux, +and other systems. It creates a filesystem in a portion of the +system's memory, thus providing very fast file (volatile) access. + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Null Filesystem, Next: Floppy Filesystem, Prev: Memory/RAM Filesystem, Up: Filesystem Types + +Null Filesystem (`nullfs') +========================== + + The "nullfs" (`type:=nullfs') filesystem is available from 4.4BSD, +and is very similar to the loopback filesystem, "lofs". + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Floppy Filesystem, Next: Translucent Filesystem, Prev: Null Filesystem, Up: Filesystem Types + +Floppy Filesystem (`pcfs') +========================== + + The "pcfs" (`type:=pcfs') filesystem mounts a floppy previously +formatted for the MS-DOS format. + +The following option must be specified: + +`dev' + the block special device to be mounted. + + A pcfs entry might be: + + pcfs os==sunos4;type:=pcfs;dev:=/dev/fd0 \ + os==sunos5;type:=pcfs;dev:=/dev/diskette + + +File: am-utils.info, Node: Translucent Filesystem, Next: Shared Memory+Swap Filesystem, Prev: Floppy Filesystem, Up: Filesystem Types + +Translucent Filesystem (`tfs') +============================== + + The "tfs" (`type:=tfs') filesystem is an older version of the 4.4BSD +"unionfs". + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Shared Memory+Swap Filesystem, Next: User ID Mapping Filesystem, Prev: Translucent Filesystem, Up: Filesystem Types + +Shared Memory+Swap Filesystem (`tmpfs') +======================================= + + The "tmpfs" (`type:=tmpfs') filesystem shares memory between a the +swap device and the rest of the system. It is generally used to +provide a fast access `/tmp' directory, one that uses memory that is +otherwise unused. This filesystem is available in SunOS 4.x and 5.x. + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + diff --git a/doc/am-utils.info-3 b/doc/am-utils.info-3 new file mode 100644 index 0000000..0a29663 --- /dev/null +++ b/doc/am-utils.info-3 @@ -0,0 +1,1363 @@ +This is Info file am-utils.info, produced by Makeinfo version 1.68 from +the input file am-utils.texi. + +START-INFO-DIR-ENTRY +* Am-utils: (am-utils). The Amd automounter suite of utilities +END-INFO-DIR-ENTRY + + +File: am-utils.info, Node: User ID Mapping Filesystem, Next: Program Filesystem, Prev: Shared Memory+Swap Filesystem, Up: Filesystem Types + +User ID Mapping Filesystem (`umapfs') +===================================== + + The "umapfs" (`type:=umapfs') filesystem maps User IDs of file +ownership, and is available from 4.4BSD. + + XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + + +File: am-utils.info, Node: Program Filesystem, Next: Symbolic Link Filesystem, Prev: User ID Mapping Filesystem, Up: Filesystem Types + +Program Filesystem (`program') +============================== + + The "program" (`type:=program') filesystem type allows a program to +be run whenever a mount or unmount is required. This allows easy +addition of support for other filesystem types, such as MIT's Remote +Virtual Disk (RVD) which has a programmatic interface via the commands +`rvdmount' and `rvdunmount'. + +The following options must be specified: + +`mount' + the program which will perform the mount. + +`unmount' + the program which will perform the unmount. + + The exit code from these two programs is interpreted as a Unix error +code. As usual, exit code zero indicates success. To execute the +program Amd splits the string on whitespace to create an array of +substrings. Single quotes `'' can be used to quote whitespace if that +is required in an argument. There is no way to escape or change the +quote character. + + To run the program `rvdmount' with a host name and filesystem as +arguments would be specified by +`fs:=${autodir}${path};mount:="/etc/rvdmount rvdmount fserver ${fs}"'. + + The first element in the array is taken as the pathname of the +program to execute. The other members of the array form the argument +vector to be passed to the program, "including argument zero". This +means that the split string must have at least two elements. The +program is directly executed by Amd, not via a shell. This means that +scripts must begin with a `#!' interpreter specification. + + If a filesystem type is to be heavily used, it may be worthwhile +adding a new filesystem type into Amd, but for most uses the program +filesystem should suffice. + + When the program is run, standard input and standard error are +inherited from the current values used by Amd. Standard output is a +duplicate of standard error. The value specified with the `-l' command +line option has no effect on standard error. + + +File: am-utils.info, Node: Symbolic Link Filesystem, Next: Symbolic Link Filesystem II, Prev: Program Filesystem, Up: Filesystem Types + +Symbolic Link Filesystem (`link') +================================= + + Each filesystem type creates a symbolic link to point from the volume +name to the physical mount point. The `link' filesystem does the same +without any other side effects. This allows any part of the machines +name space to be accessed via Amd. + + One common use for the symlink filesystem is `/homes' which can be +made to contain an entry for each user which points to their +(auto-mounted) home directory. Although this may seem rather expensive, +it provides a great deal of administrative flexibility. + +The following option must be defined: + +`fs' + The value of FS option specifies the destination of the link, as + modified by the SUBLINK option. If SUBLINK is non-null, it is + appended to `${fs}'`/' and the resulting string is used as the + target. + + The `link' filesystem can be thought of as identical to the `ufs' +filesystem but without actually mounting anything. + + An example entry might be: + + jsp host==charm;type:=link;fs:=/home/charm;sublink:=jsp + which would return a symbolic link pointing to `/home/charm/jsp'. + + +File: am-utils.info, Node: Symbolic Link Filesystem II, Next: NFS-Link Filesystem, Prev: Symbolic Link Filesystem, Up: Filesystem Types + +Symbolic Link Filesystem II (`linkx') +===================================== + + The "linkx" (`type:=linkx') filesystem type is identical to `link' +with the exception that the target of the link must exist. Existence +is checked with the lstat(2) system call. + + The `linkx' filesystem type is particularly useful for wildcard map +entries. In this case, a list of possible targets can be given and Amd +will choose the first one which exists on the local machine. + + +File: am-utils.info, Node: NFS-Link Filesystem, Next: Automount Filesystem, Prev: Symbolic Link Filesystem II, Up: Filesystem Types + +NFS-Link Filesystem (`nfsl') +============================ + + The "nfsl" (`type:=nfsl') filesystem type is a combination of two +others: `link' and `nfs'. If the local host name is equal to the value +of `${rhost}', or if the target pathname listed in `${fs}' exists, +`nfsl' will behave exactly as `type:=link', and refer to the target as +a symbolic link. If the local host name is not equal to the value of +`${rhost}', or if the target of the link does not exist, Amd will treat +it as `type:=nfs', and will mount a remote pathname for it. + + The `nfsl' filesystem type is particularly useful as a shorthand for +the more cumbersome and yet one of the most popular Amd entries. For +example, you can simplify all map entries that look like: + + zing -fs:=/n/shekel/u/zing \ + host!=shekel;type:=nfs;rhost:=shekel;rfs:=${fs} \ + host==shekel;type:=link + + or + + zing -fs:=/n/shekel/u/zing \ + exists(${fs});type:=link \ + !exists(${fs});type:=nfs;rhost:=shekel;rfs:=${fs} + + into a shorter form + + zing type:=nfsl;fs:=/n/shekel/u/zing;rhost:=shekel;rfs:=${fs} + + Not just does it make the maps smaller and simpler, but it avoids +possible mistakes that often happen when forgetting to set up the two +entries (one for `type:=nfs' and the other for `type:=link') necessary +to perform transparent mounts of existing or remote mounts. + + +File: am-utils.info, Node: Automount Filesystem, Next: Direct Automount Filesystem, Prev: NFS-Link Filesystem, Up: Filesystem Types + +Automount Filesystem (`auto') +============================= + + The "auto" (`type:=auto') filesystem type creates a new automount +point below an existing automount point. Top-level automount points +appear as system mount points. An automount mount point can also +appear as a sub-directory of an existing automount point. This allows +some additional structure to be added, for example to mimic the mount +tree of another machine. + + The following options may be specified: + +`cache' + specifies whether the data in this mount-map should be cached. + The default value is `none', in which case no caching is done in + order to conserve memory. However, better performance and + reliability can be obtained by caching some or all of a mount-map. + + If the cache option specifies `all', the entire map is enumerated + when the mount point is created. + + If the cache option specifies `inc', caching is done incrementally + as and when data is required. Some map types do not support cache + mode `all', in which case `inc' is used whenever `all' is + requested. + + Caching can be entirely disabled by using cache mode `none'. + + If the cache option specifies `regexp' then the entire map will be + enumerated and each key will be treated as an egrep-style regular + expression. The order in which a cached map is searched does not + correspond to the ordering in the source map so the regular + expressions should be mutually exclusive to avoid confusion. + + Each mount map type has a default cache type, usually `inc', which + can be selected by specifying `mapdefault'. + + The cache mode for a mount map can only be selected on the command + line. Starting Amd with the command: + + amd /homes hesiod.homes -cache:=inc + + will cause `/homes' to be automounted using the "Hesiod" name + server with local incremental caching of all successfully resolved + names. + + All cached data is forgotten whenever Amd receives a `SIGHUP' + signal and, if cache `all' mode was selected, the cache will be + reloaded. This can be used to inform Amd that a map has been + updated. In addition, whenever a cache lookup fails and Amd needs + to examine a map, the map's modify time is examined. If the cache + is out of date with respect to the map then it is flushed as if a + `SIGHUP' had been received. + + An additional option (`sync') may be specified to force Amd to + check the map's modify time whenever a cached entry is being used. + For example, an incremental, synchronized cache would be created + by the following command: + + amd /homes hesiod.homes -cache:=inc,sync + +`fs' + specifies the name of the mount map to use for the new mount point. + + Arguably this should have been specified with the `${rfs}' option + but we are now stuck with it due to historical accident. + +`pref' + alters the name that is looked up in the mount map. If `${pref}', + the "prefix", is non-null then it is prepended to the name + requested by the kernel "before" the map is searched. + + The server `dylan.doc.ic.ac.uk' has two user disks: `/dev/dsk/2s0' +and `/dev/dsk/5s0'. These are accessed as `/home/dylan/dk2' and +`/home/dylan/dk5' respectively. Since `/home' is already an automount +point, this naming is achieved with the following map entries: + + dylan type:=auto;fs:=${map};pref:=${key}/ + dylan/dk2 type:=ufs;dev:=/dev/dsk/2s0 + dylan/dk5 type:=ufs;dev:=/dev/dsk/5s0 + + +File: am-utils.info, Node: Direct Automount Filesystem, Next: Union Filesystem, Prev: Automount Filesystem, Up: Filesystem Types + +Direct Automount Filesystem (`direct') +====================================== + + The "direct" (`type:=direct') filesystem is almost identical to the +automount filesystem. Instead of appearing to be a directory of mount +points, it appears as a symbolic link to a mounted filesystem. The +mount is done at the time the link is accessed. *Note Automount +Filesystem:: for a list of required options. + + Direct automount points are created by specifying the `direct' +filesystem type on the command line: + + amd ... /usr/man auto.direct -type:=direct + + where `auto.direct' would contain an entry such as: + + usr/man -type:=nfs;rfs:=/usr/man \ + rhost:=man-server1 rhost:=man-server2 + + In this example, `man-server1' and `man-server2' are file servers +which export copies of the manual pages. Note that the key which is +looked up is the name of the automount point without the leading `/'. + + +File: am-utils.info, Node: Union Filesystem, Next: Error Filesystem, Prev: Direct Automount Filesystem, Up: Filesystem Types + +Union Filesystem (`union') +========================== + + The "union" (`type:=union') filesystem type allows the contents of +several directories to be merged and made visible in a single +directory. This can be used to overcome one of the major limitations +of the Unix mount mechanism which only allows complete directories to +be mounted. + + For example, supposing `/tmp' and `/var/tmp' were to be merged into +a new directory called `/mtmp', with files in `/var/tmp' taking +precedence. The following command could be used to achieve this effect: + + amd ... /mtmp union:/tmp:/var/tmp -type:=union + + Currently, the unioned directories must *not* be automounted. That +would cause a deadlock. This seriously limits the current usefulness of +this filesystem type and the problem will be addressed in a future +release of Amd. + + Files created in the union directory are actually created in the last +named directory. This is done by creating a wildcard entry which points +to the correct directory. The wildcard entry is visible if the union +directory is listed, so allowing you to see which directory has +priority. + + The files visible in the union directory are computed at the time +Amd is started, and are not kept up-to-date with respect to the +underlying directories. Similarly, if a link is removed, for example +with the `rm' command, it will be lost forever. + + +File: am-utils.info, Node: Error Filesystem, Next: Top-level Filesystem, Prev: Union Filesystem, Up: Filesystem Types + +Error Filesystem (`error') +========================== + + The "error" (`type:=error') filesystem type is used internally as a +catch-all in the case where none of the other filesystems was selected, +or some other error occurred. Lookups and mounts always fail with "No +such file or directory". All other operations trivially succeed. + + The error filesystem is not directly accessible. + + +File: am-utils.info, Node: Top-level Filesystem, Next: Autofs Filesystem, Prev: Error Filesystem, Up: Filesystem Types + +Top-level Filesystem (`toplvl') +=============================== + + The "toplvl" (`type:=toplvl') filesystems is derived from the `auto' +filesystem and is used to mount the top-level automount nodes. +Requests of this type are automatically generated from the command line +arguments and can also be passed in by using the `-M' option of the +"Amq" command. That option is insecure, and is unavailable unless +am-utils was configured with `--with-amq-mount'. + + +File: am-utils.info, Node: Root Filesystem, Next: Inheritance Filesystem, Prev: Autofs Filesystem, Up: Filesystem Types + +Root Filesystem (`root') +======================== + + The "root" (`type:=root') filesystem type acts as an internal +placeholder onto which Amd can pin `toplvl' mounts. Only one node of +this type need ever exist and one is created automatically during +startup. The effect of having more than one root node is undefined. + + The root filesystem is not directly accessible. + + +File: am-utils.info, Node: Autofs Filesystem, Next: Root Filesystem, Prev: Top-level Filesystem, Up: Filesystem Types + +Autofs Filesystem (`autofs') +============================ + + The "autofs" (`type:=autofs') filesystem uses Sun's kernel-based +automounter supporting filesystem for Amd's mount points. Hence it is +another type of top level filesystem. + + The autofs filesystem is not directly accessible from Amd maps, but +only from the `amd.conf' file (*note mount_type Parameter::.). + + Note that Autofs support is still very early. See the distribution +file `README.autofs' for detail of what works and what does not. + + +File: am-utils.info, Node: Inheritance Filesystem, Prev: Root Filesystem, Up: Filesystem Types + +Inheritance Filesystem (`inherit') +================================== + + The "inheritance" (`type:=inherit') filesystem is not directly +accessible. Instead, internal mount nodes of this type are +automatically generated when Amd is started with the `-r' option. At +this time the system mount table is scanned to locate any filesystems +which are already mounted. If any reference to these filesystems is +made through Amd then instead of attempting to mount it, Amd simulates +the mount and "inherits" the filesystem. This allows a new version of +Amd to be installed on a live system simply by killing the old daemon +with `SIGTERM' and starting the new one. + + This filesystem type is not generally visible externally, but it is +possible that the output from `amq -m' may list `inherit' as the +filesystem type. This happens when an inherit operation cannot be +completed for some reason, usually because a fileserver is down. + + +File: am-utils.info, Node: Amd Configuration File, Next: Run-time Administration, Prev: Filesystem Types, Up: Top + +Amd Configuration File +********************** + + The `amd.conf' file is the configuration file for Amd, as part of +the am-utils suite. This file contains runtime configuration +information for the Amd automounter program. + +* Menu: + +* File Format:: +* The Global Section:: +* Regular Map Sections:: +* Common Parameters:: +* Global Parameters:: +* Regular Map Parameters:: +* amd.conf Examples:: + + +File: am-utils.info, Node: File Format, Next: The Global Section, Prev: Amd Configuration File, Up: Amd Configuration File + +File Format +=========== + + The `amd.conf' file consists of sections and parameters. A section +begins with the name of the section in square brackets `[]' and +continues until the next section begins or the end of the file is +reached. Sections contain parameters of the form `name = value'. + + The file is line-based -- that is, each newline-terminated line +represents either a comment, a section name or a parameter. No +line-continuation syntax is available. + + Section names, parameter names and their values are case sensitive. + + Only the first equals sign in a parameter is significant. Whitespace +before or after the first equals sign is discarded. Leading, trailing +and internal whitespace in section and parameter names is irrelevant. +Leading and trailing whitespace in a parameter value is discarded. +Internal whitespace within a parameter value is not allowed, unless the +whole parameter value is quoted with double quotes as in `name = "some +value"'. + + Any line beginning with a pound sign `#' is ignored, as are lines +containing only whitespace. + + The values following the equals sign in parameters are all either a +string (no quotes needed if string does not include spaces) or a +boolean, which may be given as `yes'/`no'. Case is significant in all +values. Some items such as cache timeouts are numeric. + + +File: am-utils.info, Node: The Global Section, Next: Regular Map Sections, Prev: File Format, Up: Amd Configuration File + +The Global Section +================== + + The global section must be specified as `[global]'. Parameters in +this section either apply to Amd as a whole, or to all other regular map +sections which follow. There should be only one global section defined +in one configuration file. + + It is highly recommended that this section be specified first in the +configuration file. If it is not, then regular map sections which +precede it will not use global values defined later. + + +File: am-utils.info, Node: Regular Map Sections, Next: Common Parameters, Prev: The Global Section, Up: Amd Configuration File + +Regular Map Sections +==================== + + Parameters in regular (non-global) sections apply to a single map +entry. For example, if the map section `[/homes]' is defined, then all +parameters following it will be applied to the `/homes' Amd-managed +mount point. + + +File: am-utils.info, Node: Common Parameters, Next: Global Parameters, Prev: Regular Map Sections, Up: Amd Configuration File + +Common Parameters +================= + + These parameters can be specified either in the global or a +map-specific section. Entries specified in a map-specific section +override the default value or one defined in the global section. If +such a common parameter is specified only in the global section, it is +applicable to all regular map sections that follow. + +* Menu: + +* browsable_dirs Parameter:: +* map_options Parameter:: +* map_type Parameter:: +* mount_type Parameter:: +* search_path Parameter:: + + +File: am-utils.info, Node: browsable_dirs Parameter, Next: map_options Parameter, Prev: Common Parameters, Up: Common Parameters + +browsable_dirs Parameter +------------------------ + + (type=string, default=`no'). If `yes', then Amd's top-level mount +points will be browsable to readdir(3) calls. This means you could run +for example ls(1) and see what keys are available to mount in that +directory. Not all entries are made visible to readdir(3): the +`/defaults' entry, wildcard entries, and those with a `/' in them are +not included. If you specify `full' to this option, all but the +`/defaults' entry will be visible. Note that if you run a command +which will attempt to stat(2) the entries, such as often done by `ls +-l' or `ls -F', Amd will attempt to mount every entry in that map. +This is often called a "mount storm". + + +File: am-utils.info, Node: map_options Parameter, Next: map_type Parameter, Prev: browsable_dirs Parameter, Up: Common Parameters + +map_options Parameter +--------------------- + + (type=string, default no options). This option is the same as +specifying map options on the command line to Amd, such as `cache:=all'. + + +File: am-utils.info, Node: map_type Parameter, Next: mount_type Parameter, Prev: map_options Parameter, Up: Common Parameters + +map_type Parameter +------------------ + + (type=string, default search all map types). If specified, Amd will +initialize the map only for the type given. This is useful to avoid the +default map search type used by Amd which takes longer and can have +undesired side-effects such as initializing NIS even if not used. +Possible values are + +`file' + plain files + +`hesiod' + Hesiod name service from MIT + +`ldap' + Lightweight Directory Access Protocol + +`ndbm' + (New) dbm style hash files + +`nis' + Network Information Services (version 2) + +`nisplus' + Network Information Services Plus (version 3) + +`passwd' + local password files + +`union' + union maps + + +File: am-utils.info, Node: mount_type Parameter, Next: search_path Parameter, Prev: map_type Parameter, Up: Common Parameters + +mount_type Parameter +-------------------- + + (type=string, default=`nfs'). All Amd mount types default to NFS. +That is, Amd is an NFS server on the map mount points, for the local +host it is running on. If `autofs' is specified, Amd will be an autofs +server for those mount points. + + +File: am-utils.info, Node: search_path Parameter, Prev: mount_type Parameter, Up: Common Parameters + +search_path Parameter +--------------------- + + (type=string, default no search path). This provides a +(colon-delimited) search path for file maps. Using a search path, +sites can allow for local map customizations and overrides, and can +distributed maps in several locations as needed. + + +File: am-utils.info, Node: Global Parameters, Next: Regular Map Parameters, Prev: Common Parameters, Up: Amd Configuration File + +Global Parameters +================= + + The following parameters are applicable to the `[global]' section +only. + +* Menu: + +* arch Parameter:: +* auto_dir Parameter:: +* cache_duration Parameter:: +* cluster Parameter:: +* debug_options Parameter:: +* dismount_interval Parameter:: +* fully_qualified_hosts Parameter:: +* hesiod_base Parameter:: +* karch Parameter:: +* ldap_base Parameter:: +* ldap_cache_maxmem Parameter:: +* ldap_cache_seconds Parameter:: +* ldap_hostports Parameter:: +* local_domain Parameter:: +* log_file Parameter:: +* log_options Parameter:: +* nfs_retransmit_counter Parameter:: +* nfs_retry_interval Parameter:: +* nis_domain Parameter:: +* normalize_hostnames Parameter:: +* os Parameter:: +* osver Parameter:: +* pid_file Parameter:: +* plock Parameter:: +* portmap_program Parameter:: +* print_pid Parameter:: +* print_version Parameter:: +* restart_mounts Parameter:: +* selectors_on_default Parameter:: +* show_statfs_entries Parameter:: +* unmount_on_exit Parameter:: + + +File: am-utils.info, Node: arch Parameter, Next: auto_dir Parameter, Prev: Global Parameters, Up: Global Parameters + +arch Parameter +-------------- + + (type=string, default to compiled in value). Allows you to override +the value of the arch Amd variable. + + +File: am-utils.info, Node: auto_dir Parameter, Next: cache_duration Parameter, Prev: arch Parameter, Up: Global Parameters + +auto_dir Parameter +------------------ + + (type=string, default=`/a'). Same as the `-a' option to Amd. This +sets the private directory where Amd will create sub-directories for +its real mount points. + + +File: am-utils.info, Node: cache_duration Parameter, Next: cluster Parameter, Prev: auto_dir Parameter, Up: Global Parameters + +cache_duration Parameter +------------------------ + + (type=numeric, default=300). Same as the `-c' option to Amd. Sets +the duration in seconds that looked up map entries remain in the cache. + + +File: am-utils.info, Node: cluster Parameter, Next: debug_options Parameter, Prev: cache_duration Parameter, Up: Global Parameters + +cluster Parameter +----------------- + + (type=string, default no cluster). Same as the `-C' option to Amd. +Specifies the alternate HP-UX cluster to use. + + +File: am-utils.info, Node: debug_options Parameter, Next: dismount_interval Parameter, Prev: cluster Parameter, Up: Global Parameters + +debug_options Parameter +----------------------- + + (type=string, default no debug options). Same as the `-D' option to +Amd. Specify any debugging options for Amd. Works only if am-utils +was configured for debugging using the `--enable-debug' option. The +`mem' option alone can be turned on via `--enable-debug=mem'. +Otherwise debugging options are ignored. Options are comma delimited, +and can be preceded by the string `no' to negate their meaning. You +can get the list of supported debugging options by running `amd -v'. +Possible values are: + +`all' + all options + +`amq' + register for amq + +`daemon' + enter daemon mode + +`fork' + fork server + +`full' + program trace + +`mem' + trace memory allocations + +`mtab' + use local `./mtab' file + +`str' + debug string munging + +`test' + full debug but no daemon + +`trace' + protocol trace + + +File: am-utils.info, Node: dismount_interval Parameter, Next: fully_qualified_hosts Parameter, Prev: debug_options Parameter, Up: Global Parameters + +dismount_interval Parameter +--------------------------- + + (type=numeric, default=120). Same as the `-w' option to Amd. +Specify in seconds, the time between attempts to dismount file systems +that have exceeded their cached times. + + +File: am-utils.info, Node: fully_qualified_hosts Parameter, Next: hesiod_base Parameter, Prev: dismount_interval Parameter, Up: Global Parameters + +fully_qualified_hosts Parameter +------------------------------- + + (type=string, default=`no'). If `yes', Amd will perform RPC +authentication using fully-qualified host names. This is necessary for +some systems, and especially when performing cross-domain mounting. For +this function to work, the Amd variable `${hostd}' is used, requiring +that `${domain}' not be null. + + +File: am-utils.info, Node: hesiod_base Parameter, Next: karch Parameter, Prev: fully_qualified_hosts Parameter, Up: Global Parameters + +hesiod_base Parameter +--------------------- + + (type=string, default=`automount'). Specify the base name for +hesiod maps. + + +File: am-utils.info, Node: karch Parameter, Next: ldap_base Parameter, Prev: hesiod_base Parameter, Up: Global Parameters + +karch Parameter +--------------- + + (type=string, default to karch of the system). Same as the `-k' +option to Amd. Allows you to override the kernel-architecture of your +system. Useful for example on Sun (Sparc) machines, where you can +build one Amd binary, and run it on multiple machines, yet you want +each one to get the correct karch variable set (for example, sun4c, +sun4m, sun4u, etc.) Note that if not specified, Amd will use uname(2) +to figure out the kernel architecture of the machine. + + +File: am-utils.info, Node: ldap_base Parameter, Next: ldap_cache_maxmem Parameter, Prev: karch Parameter, Up: Global Parameters + +ldap_base Parameter +------------------- + + (type=string, default not set). Specify the base name for LDAP. + + +File: am-utils.info, Node: ldap_cache_maxmem Parameter, Next: ldap_cache_seconds Parameter, Prev: ldap_base Parameter, Up: Global Parameters + +ldap_cache_maxmem Parameter +--------------------------- + + (type=numeric, default=131072). Specify the maximum memory Amd +should use to cache LDAP entries. + + +File: am-utils.info, Node: ldap_cache_seconds Parameter, Next: ldap_hostports Parameter, Prev: ldap_cache_maxmem Parameter, Up: Global Parameters + +ldap_cache_seconds Parameter +---------------------------- + + (type=numeric, default=0). Specify the number of seconds to keep +entries in the cache. + + +File: am-utils.info, Node: ldap_hostports Parameter, Next: local_domain Parameter, Prev: ldap_cache_seconds Parameter, Up: Global Parameters + +ldap_hostports Parameter +------------------------ + + (type=string, default not set). Specify LDAP-specific values such +as country and organization. + + +File: am-utils.info, Node: local_domain Parameter, Next: log_file Parameter, Prev: ldap_hostports Parameter, Up: Global Parameters + +local_domain Parameter +---------------------- + + (type=string, default no sub-domain). Same as the `-d' option to +Amd. Specify the local domain name. If this option is not given the +domain name is determined from the hostname, by removing the first +component of the fully-qualified host name. + + +File: am-utils.info, Node: log_file Parameter, Next: log_options Parameter, Prev: local_domain Parameter, Up: Global Parameters + +log_file Parameter +------------------ + + (type=string, default=`stderr'). Same as the `-l' option to Amd. +Specify a file name to log Amd events to. If the string `/dev/stderr' +is specified, Amd will send its events to the standard error file +descriptor. + + If the string `syslog' is given, Amd will record its events with the +system logger syslogd(8). If your system supports syslog facilities, +then the default facility used is `LOG_DAEMON'. + + When using syslog, if you wish to change the facility, append its +name to the option name, delimited by a single colon. For example, if +it is the string `syslog:local7' then Amd will log messages via +syslog(3) using the `LOG_LOCAL7' facility. If the facility name +specified is not recognized, Amd will default to `LOG_DAEMON'. Note: +while you can use any syslog facility available on your system, it is +generally a bad idea to use those reserved for other services such as +`kern', `lpr', `cron', etc. + + +File: am-utils.info, Node: log_options Parameter, Next: nfs_retransmit_counter Parameter, Prev: log_file Parameter, Up: Global Parameters + +log_options Parameter +--------------------- + + (type=string, default no logging options). Same as the `-x' option +to Amd. Specify any logging options for Amd. Options are comma +delimited, and can be preceded by the string `no' to negate their +meaning. The `debug' logging option is only available if am-utils was +configured with `--enable-debug'. You can get the list of supported +debugging options by running `amd -v'. Possible values are: + +`all' + all messages + +`debug' + debug messages + +`error' + non-fatal system errors + +`fatal' + fatal errors + +`info' + information + +`map' + map errors + +`stats' + additional statistical information + +`user' + non-fatal user errors + +`warn' + warnings + +`warning' + warnings + + +File: am-utils.info, Node: nfs_retransmit_counter Parameter, Next: nfs_retry_interval Parameter, Prev: log_options Parameter, Up: Global Parameters + +nfs_retransmit_counter Parameter +-------------------------------- + + (type=numeric, default=110). Same as the counter part of the `-t' +interval.counter option to Amd. Specifies the retransmit counter's +value in *tenths* of seconds. + + +File: am-utils.info, Node: nfs_retry_interval Parameter, Next: nis_domain Parameter, Prev: nfs_retransmit_counter Parameter, Up: Global Parameters + +nfs_retry_interval Parameter +---------------------------- + + (type=numeric, default=8). Same as the interval part of the `-t' +interval.counter option to Amd. Specifies the interval in *tenths* of +seconds, between NFS/RPC/UDP retries. + + +File: am-utils.info, Node: nis_domain Parameter, Next: normalize_hostnames Parameter, Prev: nfs_retry_interval Parameter, Up: Global Parameters + +nis_domain Parameter +-------------------- + + (type=string, default to local NIS domain name). Same as the `-y' +option to Amd. Specify an alternative NIS domain from which to fetch +the NIS maps. The default is the system domain name. This option is +ignored if NIS support is not available. + + +File: am-utils.info, Node: normalize_hostnames Parameter, Next: os Parameter, Prev: nis_domain Parameter, Up: Global Parameters + +normalize_hostnames Parameter +----------------------------- + + (type=boolean, default=`no'). Same as the `-n' option to Amd. If +`yes', then the name referred to by `${rhost}' is normalized relative +to the host database before being used. The effect is to translate +aliases into "official" names. + + +File: am-utils.info, Node: os Parameter, Next: osver Parameter, Prev: normalize_hostnames Parameter, Up: Global Parameters + +os Parameter +------------ + + (type=string, default to compiled in value). Same as the `-O' +option to Amd. Allows you to override the compiled-in name of the +operating system. Useful when the built-in name is not desired for +backward compatibility reasons. For example, if the built-in name is +`sunos5', you can override it to `sos5', and use older maps which were +written with the latter in mind. + + +File: am-utils.info, Node: osver Parameter, Next: pid_file Parameter, Prev: os Parameter, Up: Global Parameters + +osver Parameter +--------------- + + (type=string, default to compiled in value). Same as the `-o' +option to Amd. Allows you to override the compiled-in version number +of the operating system. Useful when the built-in version is not +desired for backward compatibility reasons. For example, if the build +in version is `2.5.1', you can override it to `5.5.1', and use older +maps that were written with the latter in mind. + + +File: am-utils.info, Node: pid_file Parameter, Next: plock Parameter, Prev: osver Parameter, Up: Global Parameters + +pid_file Parameter +------------------ + + (type=string, default=`/dev/stdout'). Specify a file to store the +process ID of the running daemon into. If not specified, Amd will +print its process id onto the standard output. Useful for killing Amd +after it had run. Note that the PID of a running Amd can also be +retrieved via Amq (*note Amq -p option::.). + + This file is used only if the `print_pid' option is on (*note +print_pid Parameter::.). + + +File: am-utils.info, Node: plock Parameter, Next: portmap_program Parameter, Prev: pid_file Parameter, Up: Global Parameters + +plock Parameter +--------------- + + (type=boolean, default=`yes'). Same as the `-S' option to Amd. If +`yes', lock the running executable pages of Amd into memory. To +improve Amd's performance, systems that support the plock(3) call can +lock the Amd process into memory. This way there is less chance the +operating system will schedule, page out, and swap the Amd process as +needed. This improves Amd's performance, at the cost of reserving the +memory used by the Amd process (making it unavailable for other +processes). + + +File: am-utils.info, Node: portmap_program Parameter, Next: print_pid Parameter, Prev: plock Parameter, Up: Global Parameters + +portmap_program Parameter +------------------------- + + (type=numeric, default=300019). Specify an alternate Port-mapper RPC +program number, other than the official number. This is useful when +running multiple Amd processes. For example, you can run another Amd +in "test" mode, without affecting the primary Amd process in any way. +For safety reasons, the alternate program numbers that can be specified +must be in the range 300019-300029, inclusive. Amq has an option `-P' +which can be used to specify an alternate program number of an Amd to +contact. In this way, amq can fully control any number of Amd +processes running on the same host. + + +File: am-utils.info, Node: print_pid Parameter, Next: print_version Parameter, Prev: portmap_program Parameter, Up: Global Parameters + +print_pid Parameter +------------------- + + (type=boolean, default=`no'). Same as the `-p' option to Amd. If +`yes', Amd will print its process ID upon starting. + + +File: am-utils.info, Node: print_version Parameter, Next: restart_mounts Parameter, Prev: print_pid Parameter, Up: Global Parameters + +print_version Parameter +----------------------- + + (type=boolean, default=`no'). Same as the `-v' option to Amd, but +the version prints and Amd continues to run. If `yes', Amd will print +its version information string, which includes some configuration and +compilation values. + + +File: am-utils.info, Node: restart_mounts Parameter, Next: selectors_on_default Parameter, Prev: print_version Parameter, Up: Global Parameters + +restart_mounts Parameter +------------------------ + + (type=boolean, default=`no'). Same as the `-r' option to Amd. If +`yes' Amd will scan the mount table to determine which file systems are +currently mounted. Whenever one of these would have been auto-mounted, +Amd inherits it. + + +File: am-utils.info, Node: selectors_on_default Parameter, Next: show_statfs_entries Parameter, Prev: restart_mounts Parameter, Up: Global Parameters + +selectors_on_default Parameter +------------------------------ + + (type=boolean, default=`no'). If `yes', then the `/defaults' entry +of maps will be looked for and any selectors processed before setting +defaults for all other keys in that map. Useful when you want to set +different options for a complete map based on some parameters. For +example, you may want to better the NFS performance over slow +slip-based networks as follows: + + /defaults \ + wire==slip-net;opts:=intr,rsize=1024,wsize=1024 \ + wire!=slip-net;opts:=intr,rsize=8192,wsize=8192 + + +File: am-utils.info, Node: show_statfs_entries Parameter, Next: unmount_on_exit Parameter, Prev: selectors_on_default Parameter, Up: Global Parameters + +show_statfs_entries Parameter +----------------------------- + + (type=boolean), default=`no'). If `yes', then all maps which are +browsable will also show the number of entries (keys) they have when +df(1) runs. (This is accomplished by returning non-zero values to the +statfs(2) system call). + + +File: am-utils.info, Node: unmount_on_exit Parameter, Prev: show_statfs_entries Parameter, Up: Global Parameters + +unmount_on_exit Parameter +------------------------- + + (type=boolean), default=`no'). If `yes', then Amd will attempt to +unmount all file systems which it knows about. Normally it leaves all +(esp. NFS) mounted file systems intact. Note that Amd does not know +about file systems mounted before it starts up, unless the +`restart_mounts' option is used (*note restart_mounts Parameter::.). + + +File: am-utils.info, Node: Regular Map Parameters, Next: amd.conf Examples, Prev: Global Parameters, Up: Amd Configuration File + +Regular Map Parameters +====================== + + The following parameters are applicable only to regular map sections. + +* Menu: + +* map_name Parameter:: +* tag Parameter:: + + +File: am-utils.info, Node: map_name Parameter, Next: tag Parameter, Prev: Regular Map Parameters, Up: Regular Map Parameters + +map_name Parameter +------------------ + + (type=string, must be specified). Name of the map where the keys are +located. + + +File: am-utils.info, Node: tag Parameter, Prev: map_name Parameter, Up: Regular Map Parameters + +tag Parameter +------------- + + (type=string, default no tag). Each map entry in the configuration +file can be tagged. If no tag is specified, that map section will +always be processed by Amd. If it is specified, then Amd will process +the map if the `-T' option was given to Amd, and the value given to that +command-line option matches that in the map section. + + +File: am-utils.info, Node: amd.conf Examples, Prev: Regular Map Parameters, Up: Amd Configuration File + +amd.conf Examples +================= + + The following is the actual `amd.conf' file I use at the Computer +Science Department of Columbia University. + + # GLOBAL OPTIONS SECTION + [ global ] + normalize_hostnames = no + print_pid = no + #pid_file = /var/run/amd.pid + restart_mounts = yes + #unmount_on_exit = yes + auto_dir = /n + log_file = /var/log/amd + log_options = all + #debug_options = all + plock = no + selectors_on_default = yes + # config.guess picks up "sunos5" and I don't want to edit my maps yet + os = sos5 + # if you print_version after setting up "os", it will show it. + print_version = no + map_type = file + search_path = /etc/amdmaps:/usr/lib/amd:/usr/local/AMD/lib + browsable_dirs = yes + fully_qualified_hosts = no + + # DEFINE AN AMD MOUNT POINT + [ /u ] + map_name = amd.u + + [ /proj ] + map_name = amd.proj + + [ /src ] + map_name = amd.src + + [ /misc ] + map_name = amd.misc + + [ /import ] + map_name = amd.import + + [ /tftpboot/.amd ] + tag = tftpboot + map_name = amd.tftpboot + + +File: am-utils.info, Node: Run-time Administration, Next: FSinfo, Prev: Amd Configuration File, Up: Top + +Run-time Administration +*********************** + +* Menu: + +* Starting Amd:: +* Stopping Amd:: +* Restarting Amd:: +* Controlling Amd:: + + +File: am-utils.info, Node: Starting Amd, Next: Stopping Amd, Prev: Run-time Administration, Up: Run-time Administration + +Starting Amd +============ + + Amd is best started from `/etc/rc.local' on BSD systems, or from the +appropriate start-level script in `/etc/init.d' on System V systems. + + if [ -f /usr/local/sbin/ctl-amd ]; then + /usr/local/sbin/ctl-amd start; (echo -n ' amd') > /dev/console + fi + +The shell script, `ctl-amd' is used to start, stop, or restart Amd. It +is a relatively generic script. All options you want to set should not +be made in this script, but rather updated in the `amd.conf' file. +*Note Amd Configuration File::. + + If you do not wish to use an Amd configuration file, you may start +Amd manually. For example, getting the map entries via NIS: + + amd -r -l /var/log/amd `ypcat -k auto.master` + + +File: am-utils.info, Node: Stopping Amd, Next: Restarting Amd, Prev: Starting Amd, Up: Run-time Administration + +Stopping Amd +============ + + Amd stops in response to two signals. + +`SIGTERM' + causes the top-level automount points to be unmounted and then Amd + to exit. Any automounted filesystems are left mounted. They can + be recovered by restarting Amd with the `-r' command line option. + +`SIGINT' + causes Amd to attempt to unmount any filesystems which it has + automounted, in addition to the actions of `SIGTERM'. This signal + is primarily used for debugging. + + Actions taken for other signals are undefined. + + The easiest and safest way to stop Amd, without having to find its +process ID by hand, is to use the `ctl-amd' script, as with: + + ctl-amd stop + + +File: am-utils.info, Node: Restarting Amd, Next: Controlling Amd, Prev: Stopping Amd, Up: Run-time Administration + +Restarting Amd +============== + + Before Amd can be started, it is vital to ensure that no other Amd +processes are managing any of the mount points, and that the previous +process(es) have terminated cleanly. When a terminating signal is set +to Amd, the automounter does *not* terminate right then. Rather, it +starts by unmounting all of its managed mount mounts in the background, +and then terminates. It usually takes a few seconds for this process +to happen, but it can take an arbitrarily longer time. If two or more +Amd processes attempt to manage the same mount point, it usually will +result in a system lockup. + + The easiest and safest way to restart Amd, without having to find +its process ID by hand, sending it the `SIGTERM' signal, waiting for Amd +to die cleanly, and verifying so, is to use the `ctl-amd' script, as +with: + + ctl-amd restart + + The script will locate the process ID of Amd, kill it, and wait for +it to die cleanly before starting a new instance of the automounter. +`ctl-amd' will wait for a total of 30 seconds for Amd to die, and will +check once every 5 seconds if it had. + + +File: am-utils.info, Node: Controlling Amd, Prev: Restarting Amd, Up: Run-time Administration + +Controlling Amd +=============== + + It is sometimes desirable or necessary to exercise external control +over some of Amd's internal state. To support this requirement, Amd +implements an RPC interface which is used by the "Amq" program. A +variety of information is available. + + Amq generally applies an operation, specified by a single letter +option, to a list of mount points. The default operation is to obtain +statistics about each mount point. This is similar to the output shown +above but includes information about the number and type of accesses to +each mount point. + +* Menu: + +* Amq default:: Default command behavior. +* Amq -f option:: Flushing the map cache. +* Amq -h option:: Controlling a non-local host. +* Amq -l option:: Controlling the log file. +* Amq -m option:: Obtaining mount statistics. +* Amq -M-option:: Mounting a volume. +* Amq -p option:: Getting Amd's process ID. +* Amq -P-option:: Contacting alternate Amd processes. +* Amq -s option:: Obtaining global statistics. +* Amq -T option:: Use TCP transport. +* Amq -U-option:: Use UDP transport. +* Amq -u option:: Forcing volumes to time out. +* Amq -v option:: Version information. +* Other Amq options:: Three other special options. + + +File: am-utils.info, Node: Amq default, Next: Amq -f option, Prev: Controlling Amd, Up: Controlling Amd + +Amq default information +----------------------- + + With no arguments, "Amq" obtains a brief list of all existing mounts +created by Amd. This is different from the list displayed by df(1) +since the latter only includes system mount points. + +The output from this option includes the following information: + + * the automount point, + + * the filesystem type, + + * the mount map or mount information, + + * the internal, or system mount point. + +For example: + + / root "root" sky:(pid75) + /homes toplvl /usr/local/etc/amd.homes /homes + /home toplvl /usr/local/etc/amd.home /home + /homes/jsp nfs charm:/home/charm /a/charm/home/charm/jsp + /homes/phjk nfs toytown:/home/toytown /a/toytown/home/toytown/ai/phjk + +If an argument is given then statistics for that volume name will be +output. For example: + + What Uid Getattr Lookup RdDir RdLnk Statfs Mounted@ + /homes 0 1196 512 22 0 30 90/09/14 12:32:55 + /homes/jsp 0 0 0 0 1180 0 90/10/13 12:56:58 + +`What' + the volume name. + +`Uid' + ignored. + +`Getattr' + the count of NFS "getattr" requests on this node. This should + only be non-zero for directory nodes. + +`Lookup' + the count of NFS "lookup" requests on this node. This should only + be non-zero for directory nodes. + +`RdDir' + the count of NFS "readdir" requests on this node. This should only + be non-zero for directory nodes. + +`RdLnk' + the count of NFS "readlink" requests on this node. This should be + zero for directory nodes. + +`Statfs' + the count of NFS "statfs" requests on this node. This should only + be non-zero for top-level automount points. + +`Mounted@' + the date and time the volume name was first referenced. + + +File: am-utils.info, Node: Amq -f option, Next: Amq -h option, Prev: Amq default, Up: Controlling Amd + +Amq `-f' option +--------------- + + The `-f' option causes Amd to flush the internal mount map cache. +This is useful for example in Hesiod maps since Amd will not +automatically notice when they have been updated. The map cache can +also be synchronized with the map source by using the `sync' option +(*note Automount Filesystem::.). + + +File: am-utils.info, Node: Amq -l option, Next: Amq -m option, Prev: Amq -h option, Up: Controlling Amd + +Amq `-l' option +--------------- + + Tell Amd to use log_file as the log file name. For security +reasons, this *must* be the same log file which Amd used when started. +This option is therefore only useful to refresh Amd's open file handle +on the log file, so that it can be rotated and compressed via daily +cron jobs. + + +File: am-utils.info, Node: Amq -h option, Next: Amq -l option, Prev: Amq -f option, Up: Controlling Amd + +Amq `-h' option +--------------- + + By default the local host is used. In an HP-UX cluster the root +server is used since that is the only place in the cluster where Amd +will be running. To query Amd on another host the `-h' option should +be used. + + +File: am-utils.info, Node: Amq -m option, Next: Amq -M-option, Prev: Amq -l option, Up: Controlling Amd + +Amq `-m' option +--------------- + + The `-m' option displays similar information about mounted +filesystems, rather than automount points. The output includes the +following information: + + * the mount information, + + * the mount point, + + * the filesystem type, + + * the number of references to this filesystem, + + * the server hostname, + + * the state of the file server, + + * any error which has occurred. + + For example: + + "root" truth:(pid602) root 1 localhost is up + hesiod.home /home toplvl 1 localhost is up + hesiod.vol /vol toplvl 1 localhost is up + hesiod.homes /homes toplvl 1 localhost is up + amy:/home/amy /a/amy/home/amy nfs 5 amy is up + swan:/home/swan /a/swan/home/swan nfs 0 swan is up (Permission denied) + ex:/home/ex /a/ex/home/ex nfs 0 ex is down + + When the reference count is zero the filesystem is not mounted but +the mount point and server information is still being maintained by Amd. + diff --git a/doc/am-utils.info-4 b/doc/am-utils.info-4 new file mode 100644 index 0000000..58ee651 --- /dev/null +++ b/doc/am-utils.info-4 @@ -0,0 +1,1372 @@ +This is Info file am-utils.info, produced by Makeinfo version 1.68 from +the input file am-utils.texi. + +START-INFO-DIR-ENTRY +* Am-utils: (am-utils). The Amd automounter suite of utilities +END-INFO-DIR-ENTRY + + +File: am-utils.info, Node: Amq -M-option, Next: Amq -p option, Prev: Amq -m option, Up: Controlling Amd + +Amq `-M' option +--------------- + + The `-M' option passes a new map entry to Amd and waits for it to be +evaluated, possibly causing a mount. For example, the following +command would cause `/home/toytown' on host `toytown' to be mounted +locally on `/mnt/toytown'. + + amq -M '/mnt/toytown type:=nfs;rfs:=/home/toytown;rhost:=toytown;fs:=${key}' + + Amd applies some simple security checks before allowing this +operation. The check tests whether the incoming request is from a +privileged UDP port on the local machine. "Permission denied" is +returned if the check fails. + + This option is very insecure as it is vulnerable to attacks such as +IP Spoofing. In other words, it is relatively easy for an attacker who +really wants to, to make your Amd process mount any filesystem from the +Internet! Therefore, the *complete* code which supports the `-M' +option in Amd and Amq is turned off by default. To turn it on, you +have to reconfigure am-utils with `configure --enable-amq-mount'. +Think twice before doing so, and use this option only if you absolutely +need to. + + A future release of Amd will include code to allow the mount(8) +command to mount automount points: + + mount -t amd /vol hesiod.vol + + This will then allow Amd to be controlled from the standard system +filesystem mount list. + + +File: am-utils.info, Node: Amq -p option, Next: Amq -P-option, Prev: Amq -M-option, Up: Controlling Amd + +Amq `-p' option +--------------- + + Return the process ID of the remote or locally running Amd. Useful +when you need to send a signal to the local Amd process, and would +rather not have to search through the process table. This option is +used in the `ctl-amd' script. + + +File: am-utils.info, Node: Amq -P-option, Next: Amq -s option, Prev: Amq -p option, Up: Controlling Amd + +Amq `-P' option +--------------- + + Contact an alternate running Amd that had registered itself on a +different RPC PROGRAM_NUMBER and apply all other operations to that +instance of the automounter. This is useful when you run multiple +copies of Amd, and need to manage each one separately. If not +specified, Amq will use the default program number for Amd, 300019. +For security reasons, the only alternate program numbers Amd can use +range from 300019 to 300029, inclusive. + + For example, to kill an alternate running Amd: + + kill `amq -p -P 300020` + + +File: am-utils.info, Node: Amq -s option, Next: Amq -T option, Prev: Amq -P-option, Up: Controlling Amd + +Amq `-s' option +--------------- + + The `-s' option displays global statistics. If any other options +are specified or any filesystems named then this option is ignored. +For example: + + requests stale mount mount unmount + deferred fhandles ok failed failed + 1054 1 487 290 7017 + +`Deferred requests' + are those for which an immediate reply could not be constructed. + For example, this would happen if a background mount was required. + +`Stale filehandles' + counts the number of times the kernel passes a stale filehandle to + Amd. Large numbers indicate problems. + +`Mount ok' + counts the number of automounts which were successful. + +`Mount failed' + counts the number of automounts which failed. + +`Unmount failed' + counts the number of times a filesystem could not be unmounted. + Very large numbers here indicate that the time between unmount + attempts should be increased. + + +File: am-utils.info, Node: Amq -T option, Next: Amq -U-option, Prev: Amq -s option, Up: Controlling Amd + +Amq `-T' option +--------------- + + The `-T' option causes the Amq to contact Amd using the TCP +transport only (connection oriented). Normally, Amq will use TCP +first, and if that failed, will try UDP. + + +File: am-utils.info, Node: Amq -U-option, Next: Amq -u option, Prev: Amq -T option, Up: Controlling Amd + +Amq `-U' option +--------------- + + The `-U' option causes the Amq to contact Amd using the UDP +transport only (connectionless). Normally, Amq will use TCP first, and +if that failed, will try UDP. + + +File: am-utils.info, Node: Amq -u option, Next: Amq -v option, Prev: Amq -U-option, Up: Controlling Amd + +Amq `-u' option +--------------- + + The `-u' option causes the time-to-live interval of the named mount +points to be expired, thus causing an unmount attempt. This is the only +safe way to unmount an automounted filesystem. It is not possible to +unmount a filesystem which has been mounted with the `nounmount' flag. + + +File: am-utils.info, Node: Amq -v option, Next: Other Amq options, Prev: Amq -u option, Up: Controlling Amd + +Amq `-v' option +--------------- + + The `-v' option displays the version of Amd in a similar way to +Amd's `-v' option. + + +File: am-utils.info, Node: Other Amq options, Prev: Amq -v option, Up: Controlling Amd + +Other Amq options +----------------- + + Two other operations are implemented. These modify the state of Amd +as a whole, rather than any particular filesystem. The `-x' and `-D' +options have exactly the same effect as Amd's corresponding command +line options. + + When Amd receives a `-x' flag it limits the log options being +modified to those which were not enabled at startup. This prevents a +user turning *off* any logging option which was specified at startup, +though any which have been turned on since then can still be turned +off. The `-D' option has a similar behavior. + + +File: am-utils.info, Node: FSinfo, Next: Hlfsd, Prev: Run-time Administration, Up: Top + +FSinfo +****** + + XXX: this chapter should be reviewed by someone knowledgeable with +fsinfo. + +* Menu: + +* FSinfo Overview:: Introduction to FSinfo. +* Using FSinfo:: Basic concepts. +* FSinfo Grammar:: Language syntax, semantics and examples. +* FSinfo host definitions:: Defining a new host. +* FSinfo host attributes:: Definable host attributes. +* FSinfo filesystems:: Defining locally attached filesystems. +* FSinfo static mounts:: Defining additional static mounts. +* FSinfo automount definitions:: +* FSinfo Command Line Options:: +* FSinfo errors:: + + +File: am-utils.info, Node: FSinfo Overview, Next: Using FSinfo, Prev: FSinfo, Up: FSinfo + +FSinfo overview +=============== + + FSinfo is a filesystem management tool. It has been designed to +work with Amd to help system administrators keep track of the ever +increasing filesystem namespace under their control. + + The purpose of FSinfo is to generate all the important standard +filesystem data files from a single set of input data. Starting with a +single data source guarantees that all the generated files are +self-consistent. One of the possible output data formats is a set of +Amd maps which can be used amongst the set of hosts described in the +input data. + + FSinfo implements a declarative language. This language is +specifically designed for describing filesystem namespace and physical +layouts. The basic declaration defines a mounted filesystem including +its device name, mount point, and all the volumes and access +permissions. FSinfo reads this information and builds an internal map +of the entire network of hosts. Using this map, many different data +formats can be produced including `/etc/fstab', `/etc/exports', Amd +mount maps and `/etc/bootparams'. + + +File: am-utils.info, Node: Using FSinfo, Next: FSinfo Grammar, Prev: FSinfo Overview, Up: FSinfo + +Using FSinfo +============ + + The basic strategy when using FSinfo is to gather all the +information about all disks on all machines into one set of +declarations. For each machine being managed, the following data is +required: + + * Hostname + + * List of all filesystems and, optionally, their mount points. + + * Names of volumes stored on each filesystem. + + * NFS export information for each volume. + + * The list of static filesystem mounts. + + The following information can also be entered into the same +configuration files so that all data can be kept in one place. + + * List of network interfaces + + * IP address of each interface + + * Hardware address of each interface + + * Dumpset to which each filesystem belongs + + * and more ... + + To generate Amd mount maps, the automount tree must also be defined +(*note FSinfo automount definitions::.). This will have been designed +at the time the volume names were allocated. Some volume names will +not be automounted, so FSinfo needs an explicit list of which volumes +should be automounted. + + Hostnames are required at several places in the FSinfo language. It +is important to stick to either fully qualified names or unqualified +names. Using a mixture of the two will inevitably result in confusion. + + Sometimes volumes need to be referenced which are not defined in the +set of hosts being managed with FSinfo. The required action is to add a +dummy set of definitions for the host and volume names required. Since +the files generated for those particular hosts will not be used on them, +the exact values used is not critical. + + +File: am-utils.info, Node: FSinfo Grammar, Next: FSinfo host definitions, Prev: Using FSinfo, Up: FSinfo + +FSinfo grammar +============== + + FSinfo has a relatively simple grammar. Distinct syntactic +constructs exist for each of the different types of data, though they +share a common flavor. Several conventions are used in the grammar +fragments below. + + The notation, list(xxx), indicates a list of zero or more xxx's. +The notation, opt(xxx), indicates zero or one xxx. Items in double +quotes, eg "host", represent input tokens. Items in angle brackets, eg +, represent strings in the input. Strings need not be in +double quotes, except to differentiate them from reserved words. +Quoted strings may include the usual set of C "\" escape sequences with +one exception: a backslash-newline-whitespace sequence is squashed into +a single space character. To defeat this feature, put a further +backslash at the start of the second line. + + At the outermost level of the grammar, the input consists of a +sequence of host and automount declarations. These declarations are +all parsed before they are analyzed. This means they can appear in any +order and cyclic host references are possible. + + fsinfo : list(fsinfo_attr) ; + + fsinfo_attr : host | automount ; + +* Menu: + +* FSinfo host definitions:: +* FSinfo automount definitions:: + + +File: am-utils.info, Node: FSinfo host definitions, Next: FSinfo host attributes, Prev: FSinfo Grammar, Up: FSinfo + +FSinfo host definitions +======================= + + A host declaration consists of three parts: a set of machine +attribute data, a list of filesystems physically attached to the +machine, and a list of additional statically mounted filesystems. + + host : "host" host_data list(filesystem) list(mount) ; + + Each host must be declared in this way exactly once. Such things as +the hardware address, the architecture and operating system types and +the cluster name are all specified within the "host data". + + All the disks the machine has should then be described in the "list +of filesystems". When describing disks, you can specify what "volname" +the disk/partition should have and all such entries are built up into a +dictionary which can then be used for building the automounter maps. + + The "list of mounts" specifies all the filesystems that should be +statically mounted on the machine. + +* Menu: + +* FSinfo host attributes:: +* FSinfo filesystems:: +* FSinfo static mounts:: + + +File: am-utils.info, Node: FSinfo host attributes, Next: FSinfo filesystems, Prev: FSinfo host definitions, Up: FSinfo host definitions + +FSinfo host attributes +====================== + + The host data, "host_data", always includes the "hostname". In +addition, several other host attributes can be given. + + host_data : + | "{" list(host_attrs) "}" + ; + + host_attrs : host_attr "=" + | netif + ; + + host_attr : "config" + | "arch" + | "os" + | "cluster" + ; + + The "hostname" is, typically, the fully qualified hostname of the +machine. + + Examples: + + host dylan.doc.ic.ac.uk + + host { + os = hpux + arch = hp300 + } dougal.doc.ic.ac.uk + + The options that can be given as host attributes are shown below. + +* Menu: + +* netif Option: FSinfo host netif: +* config Option: FSinfo host config: +* arch Option: FSinfo host arch: +* os Option: FSinfo host os: +* cluster Option: FSinfo host cluster: + + +File: am-utils.info, Node: FSinfo host netif, Next: FSinfo host config, Up: FSinfo host attributes + +netif Option +------------ + + This defines the set of network interfaces configured on the machine. +The interface attributes collected by FSinfo are the IP address, subnet +mask and hardware address. Multiple interfaces may be defined for +hosts with several interfaces by an entry for each interface. The +values given are sanity checked, but are currently unused for anything +else. + + netif : "netif" "{" list(netif_attrs) "}" ; + + netif_attrs : netif_attr "=" ; + + netif_attr : "inaddr" | "netmask" | "hwaddr" ; + + Examples: + + netif ie0 { + inaddr = 129.31.81.37 + netmask = 0xfffffe00 + hwaddr = "08:00:20:01:a6:a5" + } + + netif ec0 { } + + +File: am-utils.info, Node: FSinfo host config, Next: FSinfo host arch, Prev: FSinfo host netif, Up: FSinfo host attributes + +config Option +------------- + + This option allows you to specify configuration variables for the +startup scripts (`rc' scripts). A simple string should immediately +follow the keyword. + + Example: + + config "NFS_SERVER=true" + config "ZEPHYR=true" + + This option is currently unsupported. + + +File: am-utils.info, Node: FSinfo host arch, Next: FSinfo host os, Prev: FSinfo host config, Up: FSinfo host attributes + +arch Option +----------- + + This defines the architecture of the machine. For example: + + arch = hp300 + + This is intended to be of use when building architecture specific +mountmaps, however, the option is currently unsupported. + + +File: am-utils.info, Node: FSinfo host os, Next: FSinfo host cluster, Prev: FSinfo host arch, Up: FSinfo host attributes + +os Option +--------- + + This defines the operating system type of the host. For example: + + os = hpux + + This information is used when creating the `fstab' files, for +example in choosing which format to use for the `fstab' entries within +the file. + + +File: am-utils.info, Node: FSinfo host cluster, Prev: FSinfo host os, Up: FSinfo host attributes + +cluster Option +-------------- + + This is used for specifying in which cluster the machine belongs. +For example: + + cluster = "theory" + + The cluster is intended to be used when generating the automount +maps, although it is currently unsupported. + + +File: am-utils.info, Node: FSinfo filesystems, Next: FSinfo static mounts, Prev: FSinfo host attributes, Up: FSinfo host definitions + +FSinfo filesystems +================== + + The list of physically attached filesystems follows the machine +attributes. These should define all the filesystems available from this +machine, whether exported or not. In addition to the device name, +filesystems have several attributes, such as filesystem type, mount +options, and `fsck' pass number which are needed to generate `fstab' +entries. + + filesystem : "fs" "{" list(fs_data) "}" ; + + fs_data : fs_data_attr "=" + | mount + ; + + fs_data_attr + : "fstype" | "opts" | "passno" + | "freq" | "dumpset" | "log" + ; + + Here, is the device name of the disk (for example, +`/dev/dsk/2s0'). The device name is used for building the mount maps +and for the `fstab' file. The attributes that can be specified are +shown in the following section. + + The FSinfo configuration file for `dylan.doc.ic.ac.uk' is listed +below. + + host dylan.doc.ic.ac.uk + + fs /dev/dsk/0s0 { + fstype = swap + } + + fs /dev/dsk/0s0 { + fstype = hfs + opts = rw,noquota,grpid + passno = 0; + freq = 1; + mount / { } + } + + fs /dev/dsk/1s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount /usr { + local { + exportfs "dougal eden dylan zebedee brian" + volname /nfs/hp300/local + } + } + } + + fs /dev/dsk/2s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default { + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk2 + } + } + + fs /dev/dsk/3s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default { + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk3 + } + } + + fs /dev/dsk/5s0 { + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default { + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk5 + } + } + +* Menu: + +* fstype Option: FSinfo filesystems fstype: +* opts Option: FSinfo filesystems opts: +* passno Option: FSinfo filesystems passno: +* freq Option: FSinfo filesystems freq: +* mount Option: FSinfo filesystems mount: +* dumpset Option: FSinfo filesystems dumpset: +* log Option: FSinfo filesystems log: + + +File: am-utils.info, Node: FSinfo filesystems fstype, Next: FSinfo filesystems opts, Up: FSinfo filesystems + +fstype Option +------------- + + This specifies the type of filesystem being declared and will be +placed into the `fstab' file as is. The value of this option will be +handed to `mount' as the filesystem type--it should have such values as +`4.2', `nfs' or `swap'. The value is not examined for correctness. + + There is one special case. If the filesystem type is specified as +`export' then the filesystem information will not be added to the +host's `fstab' information, but it will still be visible on the +network. This is useful for defining hosts which contain referenced +volumes but which are not under full control of FSinfo. + + Example: + + fstype = swap + + +File: am-utils.info, Node: FSinfo filesystems opts, Next: FSinfo filesystems passno, Prev: FSinfo filesystems fstype, Up: FSinfo filesystems + +opts Option +----------- + + This defines any options that should be given to mount(8) in the +`fstab' file. For example: + + opts = rw,nosuid,grpid + + +File: am-utils.info, Node: FSinfo filesystems passno, Next: FSinfo filesystems freq, Prev: FSinfo filesystems opts, Up: FSinfo filesystems + +passno Option +------------- + + This defines the fsck(8) pass number in which to check the +filesystem. This value will be placed into the `fstab' file. + + Example: + + passno = 1 + + +File: am-utils.info, Node: FSinfo filesystems freq, Next: FSinfo filesystems mount, Prev: FSinfo filesystems passno, Up: FSinfo filesystems + +freq Option +----------- + + This defines the interval (in days) between dumps. The value is +placed as is into the `fstab' file. + + Example: + + freq = 3 + + +File: am-utils.info, Node: FSinfo filesystems mount, Next: FSinfo filesystems dumpset, Prev: FSinfo filesystems freq, Up: FSinfo filesystems + +mount Option +------------ + + This defines the mountpoint at which to place the filesystem. If the +mountpoint of the filesystem is specified as `default', then the +filesystem will be mounted in the automounter's tree under its volume +name and the mount will automatically be inherited by the automounter. + + Following the mountpoint, namespace information for the filesystem +may be described. The options that can be given here are `exportfs', +`volname' and `sel'. + + The format is: + + mount : "mount" vol_tree ; + + vol_tree : list(vol_tree_attr) ; + + vol_tree_attr + : "{" list(vol_tree_info) vol_tree "}" ; + + vol_tree_info + : "exportfs" + | "volname" + | "sel" + ; + + Example: + + mount default { + exportfs "dylan dougal florence zebedee" + volname /vol/andrew + } + + In the above example, the filesystem currently being declared will +have an entry placed into the `exports' file allowing the filesystem to +be exported to the machines `dylan', `dougal', `florence' and +`zebedee'. The volume name by which the filesystem will be referred to +remotely, is `/vol/andrew'. By declaring the mountpoint to be +`default', the filesystem will be mounted on the local machine in the +automounter tree, where Amd will automatically inherit the mount as +`/vol/andrew'. + +`exportfs' + a string defining which machines the filesystem may be exported to. + This is copied, as is, into the `exports' file--no sanity checking + is performed on this string. + +`volname' + a string which declares the remote name by which to reference the + filesystem. The string is entered into a dictionary and allows + you to refer to this filesystem in other places by this volume + name. + +`sel' + a string which is placed into the automounter maps as a selector + for the filesystem. + + +File: am-utils.info, Node: FSinfo filesystems dumpset, Next: FSinfo filesystems log, Prev: FSinfo filesystems mount, Up: FSinfo filesystems + +dumpset Option +-------------- + + This provides support for Imperial College's local file backup tools +and is not documented further here. + + +File: am-utils.info, Node: FSinfo filesystems log, Prev: FSinfo filesystems dumpset, Up: FSinfo filesystems + +log Option +---------- + + Specifies the log device for the current filesystem. This is ignored +if not required by the particular filesystem type. + + +File: am-utils.info, Node: FSinfo static mounts, Next: FSinfo automount definitions, Prev: FSinfo filesystems, Up: FSinfo host definitions + +FSinfo static mounts +==================== + + Each host may also have a number of statically mounted filesystems. +For example, the host may be a diskless workstation in which case it +will have no `fs' declarations. In this case the `mount' declaration +is used to determine from where its filesystems will be mounted. In +addition to being added to the `fstab' file, this information can also +be used to generate a suitable `bootparams' file. + + mount : "mount" list(localinfo) ; + + localinfo : localinfo_attr ; + + localinfo_attr + : "as" + | "from" + | "fstype" + | "opts" + ; + + The filesystem specified to be mounted will be searched for in the +dictionary of volume names built when scanning the list of hosts' +definitions. + + The attributes have the following semantics: +`from MACHINE' + mount the filesystem from the machine with the hostname of + "machine". + +`as MOUNTPOINT' + mount the filesystem locally as the name given, in case this is + different from the advertised volume name of the filesystem. + +`opts OPTIONS' + native mount(8) options. + +`fstype TYPE' + type of filesystem to be mounted. + + An example: + + mount /export/exec/hp300/local as /usr/local + + If the mountpoint specified is either `/' or `swap', the machine +will be considered to be booting off the net and this will be noted for +use in generating a `bootparams' file for the host which owns the +filesystems. + + +File: am-utils.info, Node: FSinfo automount definitions, Next: FSinfo Command Line Options, Prev: FSinfo static mounts, Up: FSinfo + +Defining an Amd Mount Map in FSinfo +=================================== + + The maps used by Amd can be constructed from FSinfo by defining all +the automount trees. FSinfo takes all the definitions found and builds +one map for each top level tree. + + The automount tree is usually defined last. A single automount +configuration will usually apply to an entire management domain. One +`automount' declaration is needed for each Amd automount point. FSinfo +determines whether the automount point is "direct" (*note Direct +Automount Filesystem::.) or "indirect" (*note Top-level Filesystem::.). +Direct automount points are distinguished by the fact that there is no +underlying "automount_tree". + + automount : "automount" opt(auto_opts) automount_tree ; + + auto_opts : "opts" ; + + automount_tree + : list(automount_attr) + ; + + automount_attr + : "=" + | "->" + | "{" automount_tree "}" + ; + + If is given, then it is the string to be placed in +the maps for Amd for the `opts' option. + + A "map" is typically a tree of filesystems, for example `home' +normally contains a tree of filesystems representing other machines in +the network. + + A map can either be given as a name representing an already defined +volume name, or it can be a tree. A tree is represented by placing +braces after the name. For example, to define a tree `/vol', the +following map would be defined: + + automount /vol { } + + Within a tree, the only items that can appear are more maps. For +example: + + automount /vol { + andrew { } + X11 { } + } + + In this case, FSinfo will look for volumes named `/vol/andrew' and +`/vol/X11' and a map entry will be generated for each. If the volumes +are defined more than once, then FSinfo will generate a series of +alternate entries for them in the maps. + + Instead of a tree, either a link (NAME `->' DESTINATION) or a +reference can be specified (NAME `=' DESTINATION). A link creates a +symbolic link to the string specified, without further processing the +entry. A reference will examine the destination filesystem and +optimize the reference. For example, to create an entry for `njw' in +the `/homes' map, either of the two forms can be used: + + automount /homes { + njw -> /home/dylan/njw + } + + or + + automount /homes { + njw = /home/dylan/njw + } + + In the first example, when `/homes/njw' is referenced from Amd, a +link will be created leading to `/home/dylan/njw' and the automounter +will be referenced a second time to resolve this filename. The map +entry would be: + + njw type:=link;fs:=/home/dylan/njw + + In the second example, the destination directory is analyzed and +found to be in the filesystem `/home/dylan' which has previously been +defined in the maps. Hence the map entry will look like: + + njw rhost:=dylan;rfs:=/home/dylan;sublink:=njw + + Creating only one symbolic link, and one access to Amd. + + +File: am-utils.info, Node: FSinfo Command Line Options, Next: FSinfo errors, Prev: FSinfo automount definitions, Up: FSinfo + +FSinfo Command Line Options +=========================== + + FSinfo is started from the command line by using the command: + + fsinfo [options] files ... + + The input to FSinfo is a single set of definitions of machines and +automount maps. If multiple files are given on the command-line, then +the files are concatenated together to form the input source. The files +are passed individually through the C pre-processor before being parsed. + + Several options define a prefix for the name of an output file. If +the prefix is not specified no output of that type is produced. The +suffix used will correspond either to the hostname to which a file +belongs, or to the type of output if only one file is produced. +Dumpsets and the `bootparams' file are in the latter class. To put the +output into a subdirectory simply put a `/' at the end of the prefix, +making sure that the directory has already been made before running +Fsinfo. + +* Menu: + +* -a FSinfo Option:: Amd automount directory: +* -b FSinfo Option:: Prefix for bootparams files. +* -d FSinfo Option:: Prefix for dumpset data files. +* -e FSinfo Option:: Prefix for exports files. +* -f FSinfo Option:: Prefix for fstab files. +* -h FSinfo Option:: Local hostname. +* -m FSinfo Option:: Prefix for automount maps. +* -q FSinfo Option:: Ultra quiet mode. +* -v FSinfo Option:: Verbose mode. +* -I FSinfo Option:: Define new #include directory. +* -D-FSinfo Option:: Define macro. +* -U FSinfo Option:: Undefine macro. + + +File: am-utils.info, Node: -a FSinfo Option, Next: -b FSinfo Option, Prev: FSinfo Command Line Options, Up: FSinfo Command Line Options + +`-a' AUTODIR +------------ + + Specifies the directory name in which to place the automounter's +mountpoints. This defaults to `/a'. Some sites have the autodir set +to be `/amd', and this would be achieved by: + + fsinfo -a /amd ... + + +File: am-utils.info, Node: -b FSinfo Option, Next: -d FSinfo Option, Prev: -a FSinfo Option, Up: FSinfo Command Line Options + +`-b' BOOTPARAMS +--------------- + + This specifies the prefix for the `bootparams' filename. If it is +not given, then the file will not be generated. The `bootparams' file +will be constructed for the destination machine and will be placed into +a file named `bootparams' and prefixed by this string. The file +generated contains a list of entries describing each diskless client +that can boot from the destination machine. + + As an example, to create a `bootparams' file in the directory +`generic', the following would be used: + + fsinfo -b generic/ ... + + +File: am-utils.info, Node: -d FSinfo Option, Next: -e FSinfo Option, Prev: -b FSinfo Option, Up: FSinfo Command Line Options + +`-d' DUMPSETS +------------- + + This specifies the prefix for the `dumpsets' file. If it is not +specified, then the file will not be generated. The file will be for +the destination machine and will be placed into a filename `dumpsets', +prefixed by this string. The `dumpsets' file is for use by Imperial +College's local backup system. + + For example, to create a `dumpsets' file in the directory `generic', +then you would use the following: + + fsinfo -d generic/ ... + + +File: am-utils.info, Node: -e FSinfo Option, Next: -f FSinfo Option, Prev: -d FSinfo Option, Up: FSinfo Command Line Options + +`-e' EXPORTFS +------------- + + Defines the prefix for the `exports' files. If it is not given, +then the file will not be generated. For each machine defined in the +configuration files as having disks, an `exports' file is constructed +and given a filename determined by the name of the machine, prefixed +with this string. If a machine is defined as diskless, then no +`exports' file will be created for it. The files contain entries for +directories on the machine that may be exported to clients. + + Example: To create the `exports' files for each diskfull machine and +place them into the directory `exports': + + fsinfo -e exports/ ... + + +File: am-utils.info, Node: -f FSinfo Option, Next: -h FSinfo Option, Prev: -e FSinfo Option, Up: FSinfo Command Line Options + +`-f' FSTAB +---------- + + This defines the prefix for the `fstab' files. The files will only +be created if this prefix is defined. For each machine defined in the +configuration files, a `fstab' file is created with the filename +determined by prefixing this string with the name of the machine. These +files contain entries for filesystems and partitions to mount at boot +time. + + Example, to create the files in the directory `fstabs': + + fsinfo -f fstabs/ ... + + +File: am-utils.info, Node: -h FSinfo Option, Next: -m FSinfo Option, Prev: -f FSinfo Option, Up: FSinfo Command Line Options + +`-h' HOSTNAME +------------- + + Defines the hostname of the destination machine to process for. If +this is not specified, it defaults to the local machine name, as +returned by gethostname(2). + + Example: + + fsinfo -h dylan.doc.ic.ac.uk ... + + +File: am-utils.info, Node: -m FSinfo Option, Next: -q FSinfo Option, Prev: -h FSinfo Option, Up: FSinfo Command Line Options + +`-m' MOUNT-MAPS +--------------- + + Defines the prefix for the automounter files. The maps will only be +produced if this prefix is defined. The mount maps suitable for the +network defined by the configuration files will be placed into files +with names calculated by prefixing this string to the name of each map. + + For example, to create the automounter maps and place them in the +directory `automaps': + + fsinfo -m automaps/ ... + + +File: am-utils.info, Node: -q FSinfo Option, Next: -v FSinfo Option, Prev: -m FSinfo Option, Up: FSinfo Command Line Options + +`-q' +---- + + Selects quiet mode. FSinfo suppress the "running commentary" and +only outputs any error messages which are generated. + + +File: am-utils.info, Node: -v FSinfo Option, Next: -D-FSinfo Option, Prev: -q FSinfo Option, Up: FSinfo Command Line Options + +`-v' +---- + + Selects verbose mode. When this is activated, the program will +display more messages, and display all the information discovered when +performing the semantic analysis phase. Each verbose message is output +to `stdout' on a line starting with a `#' character. + + +File: am-utils.info, Node: -D-FSinfo Option, Next: -I FSinfo Option, Prev: -v FSinfo Option, Up: FSinfo Command Line Options + +`-D' NAME[=DEFN] +---------------- + + Defines a symbol "name" for the preprocessor when reading the +configuration files. Equivalent to `#define' directive. + + +File: am-utils.info, Node: -I FSinfo Option, Next: -U FSinfo Option, Prev: -D-FSinfo Option, Up: FSinfo Command Line Options + +`-I' DIRECTORY +-------------- + + This option is passed into the preprocessor for the configuration +files. It specifies directories in which to find include files + + +File: am-utils.info, Node: -U FSinfo Option, Prev: -I FSinfo Option, Up: FSinfo Command Line Options + +`-U' NAME +--------- + + Removes any initial definition of the symbol "name". Inverse of the +`-D' option. + + +File: am-utils.info, Node: FSinfo errors, Prev: FSinfo Command Line Options, Up: FSinfo + +Errors produced by FSinfo +========================= + + The following table documents the errors and warnings which FSinfo +may produce. + +" expected + Occurs if an unescaped newline is found in a quoted string. + +ambiguous mount: VOLUME is a replicated filesystem + If several filesystems are declared as having the same volume + name, they will be considered replicated filesystems. To mount a + replicated filesystem statically, a specific host will need to be + named, to say which particular copy to try and mount, else this + error will result. + +can't open FILENAME for writing + Occurs if any errors are encountered when opening an output file. + +cannot determine localname since volname VOLUME is not uniquely defined + If a volume is replicated and an attempt is made to mount the + filesystem statically without specifying a local mountpoint, + FSinfo cannot calculate a mountpoint, as the desired pathname + would be ambiguous. + +DEVICE has duplicate exportfs data + Produced if the `exportfs' option is used multiple times within the + same branch of a filesystem definition. For example, if you + attempt to set the `exportfs' data at different levels of the + mountpoint directory tree. + +dump frequency for HOST:DEVICE is non-zero + Occurs if DEVICE has its `fstype' declared to be `swap' or + `export' and the `dump' option is set to a value greater than + zero. Swap devices should not be dumped. + +duplicate host HOSTNAME! + If a host has more than one definition. + +end of file within comment + A comment was unterminated before the end of one of the + configuration files. + +FILENAME: cannot open for reading + If a file specified on the command line as containing + configuration data could not be opened. + +FILESYSTEM has a volname but no exportfs data + Occurs when a volume name is declared for a file system, but the + string specifying what machines the filesystem can be exported to + is missing. + +fs field "FIELD-NAME" already set + Occurs when multiple definitions are given for one of the + attributes of a host's filesystem. + +host field "FIELD-NAME" already set + If duplicate definitions are given for any of the fields with a + host definition. + +HOST:DEVICE has more than one mount point + Occurs if the mount option for a host's filesystem specifies + multiple trees at which to place the mountpoint. + +HOST:DEVICE has no mount point + Occurs if the `mount' option is not specified for a host's + filesystem. + +HOST:DEVICE needs field "FIELD-NAME" + Occurs when a filesystem is missing a required field. FIELD-NAME + could be one of `fstype', `opts', `passno' or `mount'. + +HOST:mount field specified for swap partition + Occurs if a mountpoint is given for a filesystem whose type is + declared to be `swap'. + +malformed IP dotted quad: ADDRESS + If the Internet address of an interface is incorrectly specified. + An Internet address definition is handled to inet_addr(3N) to see + if it can cope. If not, then this message will be displayed. + +malformed netmask: NETMASK + If the netmask cannot be decoded as though it were a hexadecimal + number, then this message will be displayed. It will typically be + caused by incorrect characters in the NETMASK value. + +mount field "FIELD-NAME" already set + Occurs when a static mount has multiple definitions of the same + field. + +mount tree field "FIELD-NAME" already set + Occurs when the FIELD-NAME is defined more than once during the + definition of a filesystems mountpoint. + +netif field FIELD-NAME already set + Occurs if you attempt to define an attribute of an interface more + than once. + +network booting requires both root and swap areas + Occurs if a machine has mount declarations for either the root + partition or the swap area, but not both. You cannot define a + machine to only partially boot via the network. + +no disk mounts on HOSTNAME + If there are no static mounts, nor local disk mounts specified for + a machine, this message will be displayed. + +no volname given for HOST:DEVICE + Occurs when a filesystem is defined to be mounted on `default', but + no volume name is given for the file system, then the mountpoint + cannot be determined. + +not allowed '/' in a directory name + Occurs when a pathname with multiple directory elements is + specified as the name for an automounter tree. A tree should only + have one name at each level. + +pass number for HOST:DEVICE is non-zero + Occurs if DEVICE has its `fstype' declared to be `swap' or + `export' and the fsck(8) pass number is set. Swap devices should + not be fsck'd. *Note FSinfo filesystems fstype::. + +sub-directory DIRECTORY of DIRECTORY-TREE starts with '/' + Within the filesystem specification for a host, if an element + DIRECTORY of the mountpoint begins with a `/' and it is not the + start of the tree. + +sub-directory of DIRECTORY-TREE is named "default" + `default' is a keyword used to specify if a mountpoint should be + automatically calculated by FSinfo. If you attempt to specify a + directory name as this, it will use the filename of `default' but + will produce this warning. + +unknown \ sequence + Occurs if an unknown escape sequence is found inside a string. + Within a string, you can give the standard C escape sequences for + strings, such as newlines and tab characters. + +unknown directory attribute + If an unknown keyword is found while reading the definition of a + host's filesystem mount option. + +unknown filesystem attribute + Occurs if an unrecognized keyword is used when defining a host's + filesystems. + +unknown host attribute + Occurs if an unrecognized keyword is used when defining a host. + +unknown mount attribute + Occurs if an unrecognized keyword is found while parsing the list + of static mounts. + +unknown volname VOLUME automounted [ on name ] + Occurs if VOLUME is used in a definition of an automount map but + the volume name has not been declared during the host filesystem + definitions. + +volname VOLUME is unknown + Occurs if an attempt is made to mount or reference a volume name + which has not been declared during the host filesystem definitions. + +volname VOLUME not exported from MACHINE + Occurs if you attempt to mount the volume VOLUME from a machine + which has not declared itself to have such a filesystem available. + + +File: am-utils.info, Node: Hlfsd, Next: Assorted Tools, Prev: FSinfo, Up: Top + +Hlfsd +***** + + Hlfsd is a daemon which implements a filesystem containing a +symbolic link to subdirectory within a user's home directory, depending +on the user which accessed that link. It was primarily designed to +redirect incoming mail to users' home directories, so that it can be +read from anywhere. It was designed and implemented by +Erez Zadok and Alexander Dupuy , at the Computer Science Department +(http://www.cs.columbia.edu/) of Columbia University (http://www.columbia.edu/). A +paper (http://www.cs.columbia.edu/~ezk/research/hlfsd/hlfsd.html) on +Hlfsd was presented at the Usenix LISA VII conference in 1993. + + Hlfsd operates by mounting itself as an NFS server for the directory +containing linkname, which defaults to `/hlfs/home'. Lookups within +that directory are handled by Hlfsd, which uses the password map to +determine how to resolve the lookup. The directory will be created if +it doesn't already exist. The symbolic link will be to the accessing +user's home directory, with subdir appended to it. If not specified, +subdir defaults to `.hlfsdir'. This directory will also be created if +it does not already exist. + + A `SIGTERM' sent to Hlfsd will cause it to shutdown. A `SIGHUP' will +flush the internal caches, and reload the password map. It will also +close and reopen the log file, to enable the original log file to be +removed or rotated. A `SIGUSR1' will cause it to dump its internal +table of user IDs and home directories to the file `/tmp/hlfsddump'. + +* Menu: + +* Introduction to Hlfsd:: +* Background to Mail Delivery:: +* Using Hlfsd:: + + +File: am-utils.info, Node: Introduction to Hlfsd, Next: Background to Mail Delivery, Prev: Hlfsd, Up: Hlfsd + +Introduction to Hlfsd +===================== + + Electronic mail has become one of the major applications for many +computer networks, and use of this service is expected to increase over +time, as networks proliferate and become faster. Providing a convenient +environment for users to read, compose, and send electronic mail has +become a requirement for systems administrators (SAs). + + Widely used methods for handling mail usually require users to be +logged into a designated "home" machine, where their mailbox files +reside. Only on that one machine can they read newly arrived mail. +Since users have to be logged into that system to read their mail, they +often find it convenient to run all of their other processes on that +system as well, including memory and CPU-intensive jobs. For example, +in our department, we have allocated and configured several +multi-processor servers to handle such demanding CPU/memory +applications, but these were underutilized, in large part due to the +inconvenience of not being able to read mail on those machines. (No +home directories were located on these designated CPU-servers, since we +did not want NFS service for users' home directories to have to compete +with CPU-intensive jobs. At the same time, we discouraged users from +running demanding applications on their home machines.) + + Many different solutions have been proposed to allow users to read +their mail on any host. However, all of these solutions fail in one or +more of several ways: + + * they introduce new single points of failure + + * they require using different mail transfer agents (MTAs) or user + agents (UAs) + + * they do not solve the problem for all cases, i.e. the solution is + only partially successful for a particular environment. + + We have designed a simple filesystem, called the "Home-Link File +System", to provide the ability to deliver mail to users' home +directories, without modification to mail-related applications. We have +endeavored to make it as stable as possible. Of great importance to us +was to make sure the HLFS daemon, `hlfsd' , would not hang under any +circumstances, and would take the next-best action when faced with +problems. Compared to alternative methods, Hlfsd is a stable, more +general solution, and easier to install/use. In fact, in some ways, we +have even managed to improve the reliability and security of mail +service. + + Our server implements a small filesystem containing a symbolic link +to a subdirectory of the invoking user's home directory, and named +symbolic links to users' mailbox files. + + The Hlfsd server finds out the UID of the process that is accessing +its mount point, and resolves the pathname component `home' as a +symbolic link to a subdirectory within the home directory given by the +UID's entry in the password file. If the GID of the process that +attempts to access a mailbox file is a special one (called HLFS_GID), +then the server maps the name of the *next* pathname component directly +to the user's mailbox. This is necessary so that access to a mailbox +file by users other than the owner can succeed. The server has safety +features in case of failures such as hung filesystems or home directory +filesystems that are inaccessible or full. + + On most of our machines, mail gets delivered to the directory +`/var/spool/mail'. Many programs, including UAs, depend on that path. +Hlfsd creates a directory `/mail', and mounts itself on top of that +directory. Hlfsd implements the path name component called `home', +pointing to a subdirectory of the user's home directory. We have made +`/var/spool/mail' a symbolic link to `/mail/home', so that accessing +`/var/spool/mail' actually causes access to a subdirectory within a +user's home directory. + + The following table shows an example of how resolving the pathname +`/var/mail/NAME' to `/users/ezk/.mailspool/NAME' proceeds. + +Resolving Component Pathname left to resolve Value if symbolic link +/ var/mail/NAME +var/ mail/NAME +mail@ /mail/home/NAME mail@ -> /mail/home +/ mail/home/NAME +mail/ home/NAME +home@ NAME home@ -> + /users/ezk/.mailspool +/ users/ezk/.mailspool/NAME +users/ ezk/.mailspool/NAME +ezk/ .mailspool/NAME +.mailspool/ NAME +NAME + + +File: am-utils.info, Node: Background to Mail Delivery, Next: Using Hlfsd, Prev: Introduction to Hlfsd, Up: Hlfsd + +Background to Mail Delivery +=========================== + + This section provides an in-depth discussion of why available methods +for delivering mail to home directories are not as good as the one used +by Hlfsd. + +* Menu: + +* Single-Host Mail Spool Directory:: +* Centralized Mail Spool Directory:: +* Distributed Mail Spool Service:: +* Why Deliver Into the Home Directory?:: + + +File: am-utils.info, Node: Single-Host Mail Spool Directory, Next: Centralized Mail Spool Directory, Prev: Background to Mail Delivery, Up: Background to Mail Delivery + +Single-Host Mail Spool Directory +-------------------------------- + + The most common method for mail delivery is for mail to be appended +to a mailbox file in a standard spool directory on the designated "mail +home" machine of the user. The greatest advantage of this method is +that it is the default method most vendors provide with their systems, +thus very little (if any) configuration is required on the SA's part. +All they need to set up are mail aliases directing mail to the host on +which the user's mailbox file is assigned. (Otherwise, mail is +delivered locally, and users find mailboxes on many machines.) + + As users become more sophisticated, and aided by windowing systems, +they find themselves logging in on multiple hosts at once, performing +several tasks concurrently. They ask to be able to read their mail on +any host on the network, not just the one designated as their "mail +home". + diff --git a/doc/am-utils.info-5 b/doc/am-utils.info-5 new file mode 100644 index 0000000..5fa2dff --- /dev/null +++ b/doc/am-utils.info-5 @@ -0,0 +1,1230 @@ +This is Info file am-utils.info, produced by Makeinfo version 1.68 from +the input file am-utils.texi. + +START-INFO-DIR-ENTRY +* Am-utils: (am-utils). The Amd automounter suite of utilities +END-INFO-DIR-ENTRY + + +File: am-utils.info, Node: Centralized Mail Spool Directory, Next: Distributed Mail Spool Service, Prev: Single-Host Mail Spool Directory, Up: Background to Mail Delivery + +Centralized Mail Spool Directory +-------------------------------- + + A popular method for providing mail readability from any host is to +have all mail delivered to a mail spool directory on a designated +"mail-server" which is exported via NFS to all of the hosts on the +network. Configuring such a system is relatively easy. On most +systems, the bulk of the work is a one-time addition to one or two +configuration files in `/etc'. The file-server's spool directory is +then hard-mounted across every machine on the local network. In small +environments with only a handful of hosts this can be an acceptable +solution. In our department, with a couple of hundred active hosts and +thousands of mail messages processed daily, this was deemed completely +unacceptable, as it introduced several types of problems: + +Scalability and Performance + As more and more machines get added to the network, more mail + traffic has to go over NFS to and from the mail-server. Users like + to run mail-watchers, and read their mail often. The stress on the + shared infrastructure increases with every user and host added; + loads on the mail server would most certainly be high since all + mail delivery goes through that one machine.(1) This leads to + lower reliability and performance. To reduce the number of + concurrent connections between clients and the server host, some + SAs have resorted to automounting the mail-spool directory. But + this solution only makes things worse: since users often run mail + watchers, and many popular applications such as `trn', `emacs', + `csh' or `ksh' check periodically for new mail, the automounted + directory would be effectively permanently mounted. If it gets + unmounted automatically by the automounter program, it is most + likely to get mounted shortly afterwards, consuming more I/O + resources by the constant cycle of mount and umount calls. + +Reliability + The mail-server host and its network connectivity must be very + reliable. Worse, since the spool directory has to be + hard-mounted,(2) many processes which access the spool directory + (various shells, `login', `emacs', etc.) would be hung as long as + connectivity to the mail-server is severed. To improve + reliability, SAs may choose to backup the mail-server's spool + partition several times a day. This may make things worse since + reading or delivering mail while backups are in progress may cause + backups to be inconsistent; more backups consume more backup-media + resources, and increase the load on the mail-server host. + + ---------- Footnotes ---------- + + (1) Delivery via NFS-mounted filesystems may require usage of +`rpc.lockd' and `rpc.statd' to provide distributed file-locking, both +of which are widely regarded as unstable and unreliable. Furthermore, +this will degrade performance, as local processes as well as remote +`nfsd' processes are kept busy. + + (2) No SA in their right minds would soft-mount read/write +partitions -- the chances for data loss are too great. + + +File: am-utils.info, Node: Distributed Mail Spool Service, Next: Why Deliver Into the Home Directory?, Prev: Centralized Mail Spool Directory, Up: Background to Mail Delivery + +Distributed Mail Spool Service +------------------------------ + + Despite the existence of a few systems that support delivery to +users' home directories, mail delivery to home directories hasn't +caught on. We believe the main reason is that there are too many +programs that "know" where mailbox files reside. Besides the obvious +(the delivery program `/bin/mail' and mail readers like `/usr/ucb/Mail', +`mush', `mm', etc.), other programs that know mailbox location are +login, from, almost every shell, `xbiff', `xmailbox', and even some +programs not directly related to mail, such as `emacs' and `trn'. +Although some of these programs can be configured to look in different +directories with the use of environment variables and other resources, +many of them cannot. The overall porting work is significant. + + Other methods that have yet to catch on require the use of a special +mail-reading server, such as IMAP or POP. The main disadvantage of +these systems is that UAs need to be modified to use these services -- +a long and involved task. That is why they are not popular at this +time. + + Several other ideas have been proposed and even used in various +environments. None of them is robust. They are mostly very +specialized, inflexible, and do not extend to the general case. Some of +the ideas are plain bad, potentially leading to lost or corrupt mail: + +automounters + Using an automounter such as Amd to provide a set of symbolic links + from the normal spool directory to user home directories is not + sufficient. UAs rename, unlink, and recreate the mailbox as a + regular file, therefore it must be a real file, not a symbolic + link. Furthermore, it must reside in a real directory which is + writable by the UAs and MTAs. This method may also require + populating `/var/spool/mail' with symbolic links and making sure + they are updated. Making Amd manage that directory directly + fails, since many various lock files need to be managed as well. + Also, Amd does not provide all of the NFS operations which are + required to write mail such as write, create, remove, and unlink. + +`$MAIL' + Setting this variable to an automounted directory pointing to the + user's mail spool host only solves the problem for those programs + which know and use `$MAIL'. Many programs don't, therefore this + solution is partial and of limited flexibility. Also, it requires + the SAs or the users to set it themselves -- an added level of + inconvenience and possible failures. + +/bin/mail + Using a different mail delivery agent could be the solution. One + such example is `hdmail'. However, `hdmail' still requires + modifying all UAs, the MTA's configuration, installing new + daemons, and changing login scripts. This makes the system less + upgradable or compatible with others, and adds one more + complicated system for SAs to deal with. It is not a complete + solution because it still requires each user have their `$MAIL' + variable setup correctly, and that every program use this variable. + + +File: am-utils.info, Node: Why Deliver Into the Home Directory?, Prev: Distributed Mail Spool Service, Up: Background to Mail Delivery + +Why Deliver Into the Home Directory? +------------------------------------ + + There are several major reasons why SAs might want to deliver mail +directly into the users' home directories: + +Location + Many mail readers need to move mail from the spool directory to the + user's home directory. It speeds up this operation if the two are + on the same filesystem. If for some reason the user's home + directory is inaccessible, it isn't that useful to be able to read + mail, since there is no place to move it to. In some cases, + trying to move mail to a non-existent or hung filesystem may + result in mail loss. + +Distribution + Having all mail spool directories spread among the many more + filesystems minimizes the chances that complete environments will + grind to a halt when a single server is down. It does increase + the chance that there will be someone who is not able to read + their mail when a machine is down, but that is usually preferred + to having no one be able to read their mail because a centralized + mail server is down. The problem of losing some mail due to the + (presumably) higher chances that a user's machine is down is + minimized in HLFS. + +Security + Delivering mail to users' home directories has another advantage -- + enhanced security and privacy. Since a shared system mail spool + directory has to be world-readable and searchable, any user can see + whether other users have mail, when they last received new mail, + or when they last read their mail. Programs such as `finger' + display this information, which some consider an infringement of + privacy. While it is possible to disable this feature of `finger' + so that remote users cannot see a mailbox file's status, this + doesn't prevent local users from getting the information. + Furthermore, there are more programs which make use of this + information. In shared environments, disabling such programs has + to be done on a system-wide basis, but with mail delivered to + users' home directories, users less concerned with privacy who do + want to let others know when they last received or read mail can + easily do so using file protection bits. + + In summary, delivering mail to home directories provides users the +functionality sought, and also avoids most of the problems just +discussed. + + +File: am-utils.info, Node: Using Hlfsd, Prev: Background to Mail Delivery, Up: Hlfsd + +Using Hlfsd +=========== + +* Menu: + +* Controlling Hlfsd:: +* Hlfsd Options:: +* Hlfsd Files:: + + +File: am-utils.info, Node: Controlling Hlfsd, Next: Hlfsd Options, Prev: Using Hlfsd, Up: Using Hlfsd + +Controlling Hlfsd +----------------- + + Much the same way Amd is controlled by `ctl-amd', so does Hlfsd get +controlled by the `ctl-hlfsd' script: + +ctl-hlfsd start + Start a new Hlfsd. + +ctl-hlfsd stop + Stop a running Hlfsd. + +ctl-hlfsd restart + Stop a running Hlfsd, wait for 10 seconds, and then start a new + one. It is hoped that within 10 seconds, the previously running + Hlfsd terminate properly; otherwise, starting a second one could + cause system lockup. + + For example, on our systems, we start Hlfsd within `ctl-hlfsd' as +follows on Solaris 2 systems: + + hlfsd -a /var/alt_mail -x all -l /var/log/hlfsd /mail/home .mailspool + + The directory `/var/alt_mail' is a directory in the root partition +where alternate mail will be delivered into, when it cannot be delivered +into the user's home directory. + + Normal mail gets delivered into `/var/mail', but on our systems, +that is a symbolic link to `/mail/home'. `/mail' is managed by Hlfsd, +which creates a dynamic symlink named `home', pointing to the +subdirectory `.mailspool' *within* the accessing user's home directory. +This results in mail which normally should go to `/var/mail/`$USER'', +to go to ``$HOME'/.mailspool/`$USER''. + + Hlfsd does not create the `/var/mail' symlink. This needs to be +created (manually) once on each host, by the system administrators, as +follows: + + mv /var/mail /var/alt_mail + ln -s /mail/home /var/mail + + +File: am-utils.info, Node: Hlfsd Options, Next: Hlfsd Files, Prev: Controlling Hlfsd, Up: Using Hlfsd + +Hlfsd Options +------------- + +-a ALT_DIR + Alternate directory. The name of the directory to which the + symbolic link returned by Hlfsd will point, if it cannot access + the home directory of the user. This defaults to `/var/hlfs'. + This directory will be created if it doesn't exist. It is + expected that either users will read these files, or the system + administrators will run a script to resend this "lost mail" to its + owner. + +-c CACHE-INTERVAL + Caching interval. Hlfsd will cache the validity of home + directories for this interval, in seconds. Entries which have + been verified within the last CACHE-INTERVAL seconds will not be + verified again, since the operation could be expensive, and the + entries are most likely still valid. After the interval has + expired, Hlfsd will re-verify the validity of the user's home + directory, and reset the cache time-counter. The default value + for CACHE-INTERVAL is 300 seconds (5 minutes). + +-f + Force fast startup. This option tells Hlfsd to skip startup-time + consistency checks such as existence of mount directory, alternate + spool directory, symlink to be hidden under the mount directory, + their permissions and validity. + +-g GROUP + Set the special group HLFS_GID to GROUP. Programs such as + `/usr/ucb/from' or `/usr/sbin/in.comsat', which access the + mailboxes of other users, must be setgid `HLFS_GID' to work + properly. The default group is `hlfs'. If no group is provided, + and there is no group `hlfs', this feature is disabled. + +-h + Help. Print a brief help message, and exit. + +-i RELOAD-INTERVAL + Map-reloading interval. Each RELOAD-INTERVAL seconds, Hlfsd will + reload the password map. Hlfsd needs the password map for the + UIDs and home directory pathnames. Hlfsd schedules a `SIGALRM' to + reload the password maps. A `SIGHUP' sent to Hlfsd will force it + to reload the maps immediately. The default value for + RELOAD-INTERVAL is 900 seconds (15 minutes.) + +-l LOGFILE + Specify a log file to which Hlfsd will record events. If LOGFILE + is the string `syslog' then the log messages will be sent to the + system log daemon by syslog(3), using the `LOG_DAEMON' facility. + This is also the default. + +-n + No verify. Hlfsd will not verify the validity of the symbolic link + it will be returning, or that the user's home directory contains + sufficient disk-space for spooling. This can speed up Hlfsd at the + cost of possibly returning symbolic links to home directories + which are not currently accessible or are full. By default, Hlfsd + validates the symbolic-link in the background. The `-n' option + overrides the meaning of the `-c' option, since no caching is + necessary. + +-o MOUNT-OPTIONS + Mount options which Hlfsd will use to mount itself on top of + DIRNAME. By default, MOUNT-OPTIONS is set to `ro'. If the system + supports symbolic-link caching, default options are set to + `ro,nocache'. + +-p + Print PID. Outputs the process-id of Hlfsd to standard output + where it can be saved into a file. + +-v + Version. Displays version information to standard error. + +-x LOG-OPTIONS + Specify run-time logging options. The options are a comma + separated list chosen from: `fatal', `error', `user', `warn', + `info', `map', `stats', `all'. + +-C + Force Hlfsd to run on systems that cannot turn off the NFS + attribute-cache. Use of this option on those systems is + discouraged, as it may result in loss or misdelivery of mail. The + option is ignored on systems that can turn off the attribute-cache. + +-D LOG-OPTIONS + Select from a variety of debugging options. Prefixing an option + with the string `no' reverses the effect of that option. Options + are cumulative. The most useful option is `all'. Since this + option is only used for debugging other options are not documented + here. A fuller description is available in the program source. A + `SIGUSR1' sent to Hlfsd will cause it to dump its internal + password map to the file `/usr/tmp/hlfsd.dump.XXXXXX', where + `XXXXXX' will be replaced by a random string generated by + mktemp(3) or (the more secure) mkstemp(3). + +-P PASSWORD-FILE + Read the user-name, user-id, and home directory information from + the file PASSWORD-FILE. Normally, Hlfsd will use getpwent(3) to + read the password database. This option allows you to override the + default database, and is useful if you want to map users' mail + files to a directory other than their home directory. Only the + username, uid, and home-directory fields of the file PASSWORD-FILE + are read and checked. All other fields are ignored. The file + PASSWORD-FILE must otherwise be compliant with Unix Version 7 + colon-delimited format passwd(4). + + +File: am-utils.info, Node: Hlfsd Files, Prev: Hlfsd Options, Up: Using Hlfsd + +Hlfsd Files +----------- + + The following files are used by Hlfsd: + +`/hlfs' + directory under which Hlfsd mounts itself and manages the symbolic + link `home'. + +`.hlfsdir' + default sub-directory in the user's home directory, to which the + `home' symbolic link returned by Hlfsd points. + +`/var/hlfs' + directory to which `home' symbolic link returned by Hlfsd points + if it is unable to verify the that user's home directory is + accessible. + + For discussion on other files used by Hlfsd, see *Note lostaltmail:: +and *Note lostaltmail.conf-sample::. + + +File: am-utils.info, Node: Assorted Tools, Next: Examples, Prev: Hlfsd, Up: Top + +Assorted Tools +************** + + The following are additional utilities and scripts included with +am-utils, and get installed. + +* Menu: + +* am-eject:: +* amd.conf-sample:: +* amd2ldif:: +* amd2sun:: +* ctl-amd:: +* ctl-hlfsd:: +* expn:: +* fix-amd-map:: +* fixmount:: +* fixrmtab:: +* lostaltmail:: +* lostaltmail.conf-sample:: +* mk-amd-map:: +* pawd:: +* wait4amd:: +* wait4amd2die:: +* wire-test:: + + +File: am-utils.info, Node: am-eject, Next: amd.conf-sample, Prev: Assorted Tools, Up: Assorted Tools + +am-eject +======== + + A shell script unmounts a floppy or CD-ROM that is automounted, and +then attempts to eject the removable device. + + +File: am-utils.info, Node: amd.conf-sample, Next: amd2ldif, Prev: am-eject, Up: Assorted Tools + +amd.conf-sample +=============== + + A sample Amd configuration file. *Note Amd Configuration File::. + + +File: am-utils.info, Node: amd2ldif, Next: amd2sun, Prev: amd.conf-sample, Up: Assorted Tools + +amd2ldif +======== + + A script to convert Amd maps to LDAP input files. Use it as follows: + + amd2ldif mapname base < amd.mapfile > mapfile.ldif + + +File: am-utils.info, Node: amd2sun, Next: ctl-amd, Prev: amd2ldif, Up: Assorted Tools + +amd2sun +======= + + A script to convert Amd maps to Sun Automounter maps. Use it as +follows + + amd2sun < amd.mapfile > auto_mapfile + + +File: am-utils.info, Node: ctl-amd, Next: ctl-hlfsd, Prev: amd2sun, Up: Assorted Tools + +ctl-amd +======= + + A script to start, stop, or restart Amd. Use it as follows: + +ctl-amd start + Start a new Amd process. + +ctl-amd stop + Stop the running Amd. + +ctl-amd restart + Stop the running Amd (if any), safely wait for it to terminate, and + then start a new process -- only if the previous one died cleanly. + + *Note Run-time Administration:: for more details. + + +File: am-utils.info, Node: ctl-hlfsd, Next: expn, Prev: ctl-amd, Up: Assorted Tools + +ctl-hlfsd +========= + + A script for controlling Hlfsd, much the same way `ctl-amd' controls +Amd. Use it as follows: + +ctl-hlfsd start + Start a new Hlfsd process. + +ctl-hlfsd stop + Stop the running Hlfsd. + +ctl-hlfsd restart + Stop the running Hlfsd (if any), wait for 10 seconds for it to + terminate, and then start a new process -- only if the previous one + died cleanly. + + *Note Hlfsd:: for more details. + + +File: am-utils.info, Node: expn, Next: fix-amd-map, Prev: ctl-hlfsd, Up: Assorted Tools + +expn +==== + + A script to expand email addresses into their full name. It is +generally useful when using with the `lostaltmail' script, but is a +useful tools otherwise. + + $ expn -v ezk@cs.columbia.edu + ezk@cs.columbia.edu -> + ezk@shekel.mcl.cs.columbia.edu + ezk@shekel.mcl.cs.columbia.edu -> + Erez Zadok <"| /usr/local/mh/lib/slocal -user ezk || exit 75> + Erez Zadok <\ezk> + Erez Zadok + + +File: am-utils.info, Node: fix-amd-map, Next: fixmount, Prev: expn, Up: Assorted Tools + +fix-amd-map +=========== + + Am-utils changed some of the syntax and default values of some +variables. For example, the default value for `${os}' for Solaris 2.x +(aka SunOS 5.x) systems used to be `sos5', it is now more automatically +generated from `config.guess' and its value is `sunos5'. + + This script converts older Amd maps to new ones. Use it as follows: + + fix-amd-map < old.map > new.map + + +File: am-utils.info, Node: fixmount, Next: fixrmtab, Prev: fix-amd-map, Up: Assorted Tools + +fixmount +======== + + `fixmount' is a variant of showmount(8) that can delete bogus mount +entries in remote mountd(8) daemons. This is useful to cleanup +otherwise ever-accumulating "junk". Use it for example: + + fixmount -r host + + See the online manual page for `fixmount' for more details of its +usage. + + +File: am-utils.info, Node: fixrmtab, Next: lostaltmail, Prev: fixmount, Up: Assorted Tools + +fixrmtab +======== + + A script to invalidate `/etc/rmtab' entries for hosts named. Also +restart mountd for changes to take effect. Use it for example: + + fixrmtab host1 host2 ... + + +File: am-utils.info, Node: lostaltmail, Next: lostaltmail.conf-sample, Prev: fixrmtab, Up: Assorted Tools + +lostaltmail +=========== + + A script used with Hlfsd to resend any "lost" mail. Hlfsd redirects +mail which cannot be written into the user's home directory to an +alternate directory. This is useful to continue delivering mail, even +if the user's file system was unavailable, full, or over quota. But, +the mail which gets delivered to the alternate directory needs to be +resent to its respective users. This is what the `lostaltmail' script +does. + + Use it as follows: + + lostaltmail + + This script needs a configuration file `lostaltmail.conf' set up +with the right parameters to properly work. *Note Hlfsd:: for more +details. + + +File: am-utils.info, Node: lostaltmail.conf-sample, Next: mk-amd-map, Prev: lostaltmail, Up: Assorted Tools + +lostaltmail.conf-sample +======================= + + This is a text file with configuration parameters needed for the +`lostaltmail' script. The script includes comments explaining each of +the configuration variables. See it for more information. Also *note +Hlfsd::. for general information. + + +File: am-utils.info, Node: mk-amd-map, Next: pawd, Prev: lostaltmail.conf-sample, Up: Assorted Tools + +mk-amd-map +========== + + This program converts a normal Amd map file into an ndbm database +with the same prefix as the named file. Use it as follows: + + mk-amd-map mapname + + +File: am-utils.info, Node: pawd, Next: wait4amd, Prev: mk-amd-map, Up: Assorted Tools + +pawd +==== + + Pawd is used to print the current working directory, adjusted to +reflect proper paths that can be reused to go through the automounter +for the shortest possible path. In particular, the path printed back +does not include any of Amd's local mount points. Using them is +unsafe, because Amd may unmount managed file systems from the mount +points, and thus including them in paths may not always find the files +within. + + Without any arguments, Pawd will print the automounter adjusted +current working directory. With any number of arguments, it will print +the adjusted path of each one of the arguments. + + +File: am-utils.info, Node: wait4amd, Next: wait4amd2die, Prev: pawd, Up: Assorted Tools + +wait4amd +======== + + A script to wait for Amd to start on a particular host before +performing an arbitrary command. The command is executed repeatedly, +with 1 second intervals in between. You may interrupt the script using +`^C' (or whatever keyboard sequence your terminal's `intr' function is +bound to). + + Examples: + +wait4amd saturn amq -p -h saturn + When Amd is up on host `saturn', get the process ID of that + running Amd. + +wait4amd pluto rlogin pluto + Remote login to host `pluto' when Amd is up on that host. It is + generally necessary to wait for Amd to properly start and + initialize on a remote host before logging in to it, because + otherwise user home directories may not be accessible across the + network. + +wait4amd pluto + A short-hand version of the previous command, since the most useful + reason for this script is to login to a remote host. I use it very + often when testing out new versions of Amd, and need to reboot hung + hosts. + + +File: am-utils.info, Node: wait4amd2die, Next: wire-test, Prev: wait4amd, Up: Assorted Tools + +wait4amd2die +============ + + This script is used internally by `ctl-amd' when used to restart +Amd. It waits for Amd to terminate. If it detected that Amd +terminated cleanly, this script will return an exist status of zero. +Otherwise, it will return a non-zero exit status. + + The script tests for Amd's existence once every 5 seconds, six +times, for a total of 30 seconds. It will return a zero exist status as +soon as it detects that Amd dies. + + +File: am-utils.info, Node: wire-test, Prev: wait4amd2die, Up: Assorted Tools + +wire-test +========= + + A simple program to test if some of the most basic networking +functions in am-util's library `libamu' work. It also tests the +combination of NFS protocol and version number that are supported from +the current host, to a remote one. + + For example, in this test a machine which only supports NFS Version +2 is contacting a remote host that can support the same version, but +using both UDP and TCP. If no host name is specified, `wire-test' will +try `localhost'. + + $ wire-test moisil + Network name is "mcl-lab-net.cs.columbia.edu" + Network number is "128.59.13" + Network name is "old-net.cs.columbia.edu" + Network number is "128.59.16" + My IP address is 0x7f000001. + NFS Version and protocol tests to host "moisil"... + testing vers=2, proto="udp" -> found version 2. + testing vers=3, proto="udp" -> failed! + testing vers=2, proto="tcp" -> found version 2. + testing vers=3, proto="tcp" -> failed! + + +File: am-utils.info, Node: Examples, Next: Internals, Prev: Assorted Tools, Up: Top + +Examples +******** + +* Menu: + +* User Filesystems:: +* Home Directories:: +* Architecture Sharing:: +* Wildcard Names:: +* rwho servers:: +* /vol:: +* /defaults with selectors:: +* /tftpboot in a chroot-ed environment:: + + +File: am-utils.info, Node: User Filesystems, Next: Home Directories, Prev: Examples, Up: Examples + +User Filesystems +================ + + With more than one fileserver, the directories most frequently +cross-mounted are those containing user home directories. A common +convention used at Imperial College is to mount the user disks under +/home/machine. + + Typically, the `/etc/fstab' file contained a long list of entries +such as: + + machine:/home/machine /home/machine nfs ... + + for each fileserver on the network. + + There are numerous problems with this system. The mount list can +become quite large and some of the machines may be down when a system is +booted. When a new fileserver is installed, `/etc/fstab' must be +updated on every machine, the mount directory created and the filesystem +mounted. + + In many environments most people use the same few workstations, but +it is convenient to go to a colleague's machine and access your own +files. When a server goes down, it can cause a process on a client +machine to hang. By minimizing the mounted filesystems to only include +those actively being used, there is less chance that a filesystem will +be mounted when a server goes down. + + The following is a short extract from a map taken from a research +fileserver at Imperial College. + + Note the entry for `localhost' which is used for users such as the +operator (`opr') who have a home directory on most machine as +`/home/localhost/opr'. + + /defaults opts:=rw,intr,grpid,nosuid + charm host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \ + host==${key};type:=ufs;dev:=/dev/xd0g + # + ... + + # + localhost type:=link;fs:=${host} + ... + # + # dylan has two user disks so have a + # top directory in which to mount them. + # + dylan type:=auto;fs:=${map};pref:=${key}/ + # + dylan/dk2 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/${key} \ + host==dylan;type:=ufs;dev:=/dev/dsk/2s0 + # + dylan/dk5 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/${key} \ + host==dylan;type:=ufs;dev:=/dev/dsk/5s0 + ... + # + toytown host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \ + host==${key};type:=ufs;dev:=/dev/xy1g + ... + # + zebedee host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} \ + host==${key};type:=ufs;dev:=/dev/dsk/1s0 + # + # Just for access... + # + gould type:=auto;fs:=${map};pref:=${key}/ + gould/staff host!=gould;type:=nfs;rhost:=gould;rfs:=/home/${key} + # + gummo host!=${key};type:=nfs;rhost:=${key};rfs:=/home/${key} + ... + + This map is shared by most of the machines listed so on those +systems any of the user disks is accessible via a consistent name. Amd +is started with the following command + + amd /home amd.home + + Note that when mounting a remote filesystem, the "automounted" mount +point is referenced, so that the filesystem will be mounted if it is +not yet (at the time the remote `mountd' obtains the file handle). + + +File: am-utils.info, Node: Home Directories, Next: Architecture Sharing, Prev: User Filesystems, Up: Examples + +Home Directories +================ + + One convention for home directories is to locate them in `/homes' so +user `jsp''s home directory is `/homes/jsp'. With more than a single +fileserver it is convenient to spread user files across several +machines. All that is required is a mount-map which converts login +names to an automounted directory. + + Such a map might be started by the command: + + amd /homes amd.homes + + where the map `amd.homes' contained the entries: + + /defaults type:=link # All the entries are of type:=link + jsp fs:=/home/charm/jsp + njw fs:=/home/dylan/dk5/njw + ... + phjk fs:=/home/toytown/ai/phjk + sjv fs:=/home/ganymede/sjv + + Whenever a login name is accessed in `/homes' a symbolic link +appears pointing to the real location of that user's home directory. In +this example, `/homes/jsp' would appear to be a symbolic link pointing +to `/home/charm/jsp'. Of course, `/home' would also be an automount +point. + + This system causes an extra level of symbolic links to be used. +Although that turns out to be relatively inexpensive, an alternative is +to directly mount the required filesystems in the `/homes' map. The +required map is simple, but long, and its creation is best automated. +The entry for `jsp' could be: + + jsp -sublink:=${key};rfs:=/home/charm \ + host==charm;type:=ufs;dev:=/dev/xd0g \ + host!=charm;type:=nfs;rhost:=charm + + This map can become quite big if it contains a large number of +entries. By combining two other features of Amd it can be greatly +simplified. + + First the UFS partitions should be mounted under the control of +`/etc/fstab', taking care that they are mounted in the same place that +Amd would have automounted them. In most cases this would be something +like `/a/"host"/home/"host"' and `/etc/fstab' on host `charm' would +have a line: + + /dev/xy0g /a/charm/home/charm 4.2 rw,nosuid,grpid 1 5 + + The map can then be changed to: + + /defaults type:=nfs;sublink:=${key};opts:=rw,intr,nosuid,grpid + jsp rhost:=charm;rfs:=/home/charm + njw rhost:=dylan;rfs:=/home/dylan/dk5 + ... + phjk rhost:=toytown;rfs:=/home/toytown;sublink:=ai/${key} + sjv rhost:=ganymede;rfs:=/home/ganymede + + This map operates as usual on a remote machine (ie `${host}' not +equal to `${rhost}'). On the machine where the filesystem is stored +(ie `${host}' equal to `${rhost}'), Amd will construct a local +filesystem mount point which corresponds to the name of the locally +mounted UFS partition. If Amd is started with the `-r' option then +instead of attempting an NFS mount, Amd will simply inherit the UFS +mount (*note Inheritance Filesystem::.). If `-r' is not used then a +loopback NFS mount will be made. This type of mount is known to cause +a deadlock on many systems. + + +File: am-utils.info, Node: Architecture Sharing, Next: Wildcard Names, Prev: Home Directories, Up: Examples + +Architecture Sharing +==================== + + Often a filesystem will be shared by machines of different +architectures. Separate trees can be maintained for the executable +images for each architecture, but it may be more convenient to have a +shared tree, with distinct subdirectories. + + A shared tree might have the following structure on the fileserver +(called `fserver' in the example): + + local/tex + local/tex/fonts + local/tex/lib + local/tex/bin + local/tex/bin/sun3 + local/tex/bin/sun4 + local/tex/bin/hp9000 + ... + + In this example, the subdirectories of `local/tex/bin' should be +hidden when accessed via the automount point (conventionally `/vol'). +A mount-map for `/vol' to achieve this would look like: + + /defaults sublink:=${/key};rhost:=fserver;type:=link + tex type:=auto;fs:=${map};pref:=${key}/ + tex/fonts host!=fserver;type:=nfs;rfs:=/vol/tex \ + host==fserver;fs:=/usr/local/tex + tex/lib host!=fserver;type:=nfs;rfs:=/vol/tex \ + host==fserver;fs:=/usr/local/tex + tex/bin -sublink:=${/key}/${arch} \ + host!=fserver;type:=nfs;rfs:=/vol/tex \ + host:=fserver;fs:=/usr/local/tex + + When `/vol/tex/bin' is referenced, the current machine architecture +is automatically appended to the path by the `${sublink}' variable. +This means that users can have `/vol/tex/bin' in their `PATH' without +concern for architecture dependencies. + + +File: am-utils.info, Node: Wildcard Names, Next: rwho servers, Prev: Architecture Sharing, Up: Examples + +Wildcard Names & Replicated Servers +=================================== + + By using the wildcard facility, Amd can "overlay" an existing +directory with additional entries. The system files are usually +mounted under `/usr'. If instead, Amd is mounted on `/usr', additional +names can be overlayed to augment or replace names in the "master" +`/usr'. A map to do this would have the form: + + local type:=auto;fs:=local-map + share type:=auto;fs:=share-map + * -type:=nfs;rfs:=/export/exec/${arch};sublink:="${key}" \ + rhost:=fserv1 rhost:=fserv2 rhost:=fserv3 + + Note that the assignment to `${sublink}' is surrounded by double +quotes to prevent the incoming key from causing the map to be +misinterpreted. This map has the effect of directing any access to +`/usr/local' or `/usr/share' to another automount point. + + In this example, it is assumed that the `/usr' files are replicated +on three fileservers: `fserv1', `fserv2' and `fserv3'. For any +references other than to `local' and `share' one of the servers is used +and a symbolic link to ${autodir}/${rhost}/export/exec/${arch}/whatever +is returned once an appropriate filesystem has been mounted. + + +File: am-utils.info, Node: rwho servers, Next: /vol, Prev: Wildcard Names, Up: Examples + +`rwho' servers +============== + + The `/usr/spool/rwho' directory is a good candidate for automounting. +For efficiency reasons it is best to capture the rwho data on a small +number of machines and then mount that information onto a large number +of clients. The data written into the rwho files is byte order +dependent so only servers with the correct byte ordering can be used by +a client: + + /defaults type:=nfs + usr/spool/rwho -byte==little;rfs:=/usr/spool/rwho \ + rhost:=vaxA rhost:=vaxB \ + || -rfs:=/usr/spool/rwho \ + rhost:=sun4 rhost:=hp300 + + +File: am-utils.info, Node: /vol, Next: /defaults with selectors, Prev: rwho servers, Up: Examples + +`/vol' +====== + + `/vol' is used as a catch-all for volumes which do not have other +conventional names. + + Below is part of the `/vol' map for the domain `doc.ic.ac.uk'. The +`r+d' tree is used for new or experimental software that needs to be +available everywhere without installing it on all the fileservers. +Users wishing to try out the new software then simply include +`/vol/r+d/{bin,ucb}' in their path. + + The main tree resides on one host `gould.doc.ic.ac.uk', which has +different `bin', `etc', `lib' and `ucb' sub-directories for each +machine architecture. For example, `/vol/r+d/bin' for a Sun-4 would be +stored in the sub-directory `bin/sun4' of the filesystem `/usr/r+d'. +When it was accessed a symbolic link pointing to +`/a/gould/usr/r+d/bin/sun4' would be returned. + + /defaults type:=nfs;opts:=rw,grpid,nosuid,intr,soft + wp -opts:=rw,grpid,nosuid;rhost:=charm \ + host==charm;type:=link;fs:=/usr/local/wp \ + host!=charm;type:=nfs;rfs:=/vol/wp + ... + # + src -opts:=rw,grpid,nosuid;rhost:=charm \ + host==charm;type:=link;fs:=/usr/src \ + host!=charm;type:=nfs;rfs:=/vol/src + # + r+d type:=auto;fs:=${map};pref:=r+d/ + # per architecture bin,etc,lib&ucb... + r+d/bin rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + r+d/etc rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + r+d/include rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key} + r+d/lib rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + r+d/man rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key} + r+d/src rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key} + r+d/ucb rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=${/key}/${arch} + # hades pictures + pictures -opts:=rw,grpid,nosuid;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/pictures \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=pictures + # hades tools + hades -opts:=rw,grpid,nosuid;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/hades \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=hades + # bsd tools for hp. + bsd -opts:=rw,grpid,nosuid;arch==hp9000;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/bsd \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=bsd + + +File: am-utils.info, Node: /defaults with selectors, Next: /tftpboot in a chroot-ed environment, Prev: /vol, Up: Examples + +`/defaults' with selectors +========================== + + It is sometimes useful to have different defaults for a given map. +To achieve this, the `/defaults' entry must be able to process normal +selectors. This feature is turned on by setting `selectors_on_default += yes' in the `amd.conf' file. *Note selectors_on_default Parameter::. + + In this example, I set different default NFS mount options for hosts +which are running over a slower network link. By setting a smaller size +for the NFS read and write buffer sizes, you can greatly improve remote +file service performance. + + /defaults \ + wire==slip-net;opts:=rw,intr,rsize=1024,wsize=1024,timeo=20,retrans=10 \ + wire!=slip-net;opts:=rw,intr + + +File: am-utils.info, Node: /tftpboot in a chroot-ed environment, Prev: /defaults with selectors, Up: Examples + +`/tftpboot' in a chroot-ed environment +====================================== + + In this complex example, we attempt to run an Amd process *inside* a +chroot-ed environment. `tftpd' (Trivial FTP) is used to trivially +retrieve files used to boot X-Terminals, Network Printers, Network +routers, diskless workstations, and other such devices. For security +reasons, `tftpd' (and also `ftpd') processes are run using the +chroot(2) system call. This provides an environment for these +processes, where access to any files outside the directory where the +chroot-ed process runs is denied. + + For example, if you start `tftpd' on your system with + + chroot /tftpboot /usr/sbin/tftpd + +then the `tftpd' process will not be able to access any files outside +`/tftpboot'. This ensures that no one can retrieve files such as +`/etc/passwd' and run password crackers on it. + + Since the TFTP service works by broadcast, it is necessary to have at +least one TFTP server running on each subnet. If you have lots of files +that you need to make available for `tftp', and many subnets, it could +take significant amounts of disk space on each host serving them. + + A solution we implemented at Columbia University was to have every +host run `tftpd', but have those servers retrieve the boot files from +two replicated servers. Those replicated servers have special +partitions dedicated to the many network boot files. + + We start Amd as follows: + + amd /tftpboot/.amd amd.tftpboot + + That is, Amd is serving the directory `/tftpboot/.amd'. The `tftp' +server runs inside `/tftpboot' and is chroot-ed in that directory too. +The `amd.tftpboot' map looks like: + + # + # Amd /tftpboot directory -> host map + # + + /defaults opts:=nosuid,ro,intr,soft;fs:=/tftpboot/import;type:=nfs + + tp host==lol;rfs:=/n/lol/import/tftpboot;type:=lofs \ + host==ober;rfs:=/n/ober/misc/win/tftpboot;type:=lofs \ + rhost:=ober;rfs:=/n/ober/misc/win/tftpboot \ + rhost:=lol;rfs:=/n/lol/import/tftpboot + + To help understand this example, I list a few of the file entries +that are created inside `/tftpboot': + + $ ls -la /tftpboot + dr-xr-xr-x 2 root 512 Aug 30 23:11 .amd + drwxrwsr-x 12 root 512 Aug 30 08:00 import + lrwxrwxrwx 1 root 33 Feb 27 1997 adminpr.cfg -> ./.amd/tp/hplj/adminpr.cfg + lrwxrwxrwx 1 root 22 Dec 5 1996 tekxp -> ./.amd/tp/xterms/tekxp + lrwxrwxrwx 1 root 1 Dec 5 1996 tftpboot -> . + + Here is an explanation of each of the entries listed above: + +`.amd' + This is the Amd mount point. Note that you do not need to run a + separate Amd process for the TFTP service. The chroot(2) system + call only protects against file access, but the same process can + still serve files and directories inside and outside the chroot-ed + environment, because Amd itself was not run in chroot-ed mode. + +`import' + This is the mount point where Amd will mount the directories + containing the boot files. The map is designed so that remote + directories will be NFS mounted (even if they are already mounted + elsewhere), and local directories are loopback mounted (since they + are not accessible outside the chroot-ed `/tftpboot' directory). + +`adminpr.cfg' +`tekxp' + Two manually created symbolic links to directories *inside* the + Amd-managed directory. The crossing of the component `tp' will + cause Amd to automount one of the remote replicas. Once crossed, + access to files inside proceeds as usual. The `adminpr.cfg' is a + configuration file for an HP Laser-Jet 4si printer, and the `tekxp' + is a directory for Tektronix X-Terminal boot files. + +`tftpboot' + This innocent looking symlink is important. Usually, when devices + boot via the TFTP service, they perform the `get file' command to + retrieve FILE. However, some devices assume that `tftpd' does not + run in a chroot-ed environment, but rather "unprotected", and thus + use a full pathname for files to retrieve, as in `get + /tftpboot/file'. This symlink effectively strips out the leading + `/tftpboot/'. + + +File: am-utils.info, Node: Internals, Next: Acknowledgments & Trademarks, Prev: Examples, Up: Top + +Internals +********* + + Note that there are more error and logging messages possible than are +listed here. Most of them are self-explanatory. Refer to the program +sources for more details on the rest. + +* Menu: + +* Log Messages:: + + +File: am-utils.info, Node: Log Messages, Prev: Internals, Up: Internals + +Log Messages +============ + + In the following sections a brief explanation is given of some of the +log messages made by Amd. Where the message is in `typewriter' font, +it corresponds exactly to the message produced by Amd. Words in +"italic" are replaced by an appropriate string. Variables, `${var}', +indicate that the value of the appropriate variable is output. + + Log messages are either sent directly to a file, or logged via the +syslog(3) mechanism. *Note log_file Parameter:: In either case, +entries in the file are of the form: + date-string hostname amd[pid] message + +* Menu: + +* Fatal errors:: +* Info messages:: + + +File: am-utils.info, Node: Fatal errors, Next: Info messages, Prev: Log Messages, Up: Log Messages + +Fatal errors +------------ + + Amd attempts to deal with unusual events. Whenever it is not +possible to deal with such an error, Amd will log an appropriate +message and, if it cannot possibly continue, will either exit or abort. +These messages are selected by `-x fatal' on the command line. When +syslog(3) is being used, they are logged with level `LOG_FATAL'. Even +if Amd continues to operate it is likely to remain in a precarious +state and should be restarted at the earliest opportunity. + +Attempting to inherit not-a-filesystem + The prototype mount point created during a filesystem restart did + not contain a reference to the restarted filesystem. This error + "should never happen". + +Can't bind to domain "NIS-domain" + A specific NIS domain was requested on the command line, but no + server for that domain is available on the local net. + +Can't determine IP address of this host (hostname) + When Amd starts it determines its own IP address. If this lookup + fails then Amd cannot continue. The hostname it looks up is that + obtained returned by gethostname(2) system call. + +Can't find root file handle for automount point + Amd creates its own file handles for the automount points. When it + mounts itself as a server, it must pass these file handles to the + local kernel. If the filehandle is not obtainable the mount point + is ignored. This error "should never happen". + +Must be root to mount filesystems (euid = euid) + To prevent embarrassment, Amd makes sure it has appropriate system + privileges. This amounts to having an euid of 0. The check is + made after argument processing complete to give non-root users a + chance to access the `-v' option. + +No work to do - quitting + No automount points were given on the command line and so there is + no work to do. + +Out of memory + While attempting to malloc some memory, the memory space available + to Amd was exhausted. This is an unrecoverable error. + +Out of memory in realloc + While attempting to realloc some memory, the memory space + available to Amd was exhausted. This is an unrecoverable error. + +cannot create rpc/udp service + Either the NFS or AMQ endpoint could not be created. + +gethostname: description + The gethostname(2) system call failed during startup. + +host name is not set + The gethostname(2) system call returned a zero length host name. + This can happen if Amd is started in single user mode just after + booting the system. + +ifs_match called! + An internal error occurred while restarting a pre-mounted + filesystem. This error "should never happen". + +mount_afs: description + An error occurred while Amd was mounting itself. + +run_rpc failed + Somehow the main NFS server loop failed. This error "should never + happen". + +unable to free rpc arguments in amqprog_1 + The incoming arguments to the AMQ server could not be free'ed. + +unable to free rpc arguments in nfs_program_1 + The incoming arguments to the NFS server could not be free'ed. + +unable to register (AMQ_PROGRAM, AMQ_VERSION, udp) + The AMQ server could not be registered with the local portmapper + or the internal RPC dispatcher. + +unable to register (NFS_PROGRAM, NFS_VERSION, 0) + The NFS server could not be registered with the internal RPC + dispatcher. + + XXX: This section needs to be updated + diff --git a/doc/am-utils.info-6 b/doc/am-utils.info-6 new file mode 100644 index 0000000..65c7227 --- /dev/null +++ b/doc/am-utils.info-6 @@ -0,0 +1,789 @@ +This is Info file am-utils.info, produced by Makeinfo version 1.68 from +the input file am-utils.texi. + +START-INFO-DIR-ENTRY +* Am-utils: (am-utils). The Amd automounter suite of utilities +END-INFO-DIR-ENTRY + + +File: am-utils.info, Node: Info messages, Prev: Fatal errors, Up: Log Messages + +Info messages +------------- + + Amd generates information messages to record state changes. These +messages are selected by `-x info' on the command line. When syslog(3) +is being used, they are logged with level `LOG_INFO'. + + The messages listed below can be generated and are in a format +suitable for simple statistical analysis. "mount-info" is the string +that is displayed by "Amq" in its mount information column and placed +in the system mount table. + +"${path}" forcibly timed out + An automount point has been timed out by the Amq command. + +"${path}" has timed out + No access to the automount point has been made within the timeout + period. + +Filehandle denied for "${rhost}:${rfs}" + The mount daemon refused to return a file handle for the requested + filesystem. + +Filehandle error for "${rhost}:${rfs}": description + The mount daemon gave some other error for the requested + filesystem. + +Finishing with status exit-status + Amd is about to exit with the given exit status. + +Re-synchronizing cache for map ${map} + The named map has been modified and the internal cache is being + re-synchronized. + +file server ${rhost} is down - timeout of "${path}" ignored + An automount point has timed out, but the corresponding file + server is known to be down. This message is only produced once + for each mount point for which the server is down. + +file server ${rhost} type nfs is down + An NFS file server that was previously up is now down. + +file server ${rhost} type nfs is up + An NFS file server that was previously down is now up. + +file server ${rhost} type nfs starts down + A new NFS file server has been referenced and is known to be down. + +file server ${rhost} type nfs starts up + A new NFS file server has been referenced and is known to be up. + +mount of "${path}" on ${fs} timed out + Attempts to mount a filesystem for the given automount point have + failed to complete within 30 seconds. + +mount-info mounted fstype ${type} on ${fs} + A new file system has been mounted. + +mount-info restarted fstype ${type} on ${fs} + Amd is using a pre-mounted filesystem to satisfy a mount request. + +mount-info unmounted fstype ${type} from ${fs} + A file system has been unmounted. + +mount-info unmounted fstype ${type} from ${fs} link ${fs}/${sublink} + A file system of which only a sub-directory was in use has been + unmounted. + +restarting mount-info on ${fs} + A pre-mounted file system has been noted. + + XXX: This section needs to be updated + + +File: am-utils.info, Node: Acknowledgments & Trademarks, Next: Index, Prev: Internals, Up: Top + +Acknowledgments & Trademarks +**************************** + + Many thanks to the Amd Developers + mailing list through the months +developing am-utils. These members have contributed to the +discussions, ideas, code and documentation, and subjected their systems +to alpha quality code. Special thanks go to those +authors (http://www.cs.columbia.edu/~ezk/am-utils/AUTHORS.txt) who have +submitted patches. + + Thanks to the Formal Methods Group at Imperial College for suffering +patiently while Amd was being developed on their machines. + + Thanks to the many people who have helped with the development of +Amd, especially Piete Brooks at the Cambridge University Computing Lab +for many hours of testing, experimentation and discussion. + + Thanks to the Amd Workers +mailing list members for many suggestions and bug reports to Amd. + + * DEC, VAX and Ultrix are registered trademarks of Digital Equipment + Corporation. + + * AIX and IBM are registered trademarks of International Business + Machines Corporation. + + * Sun, NFS and SunOS are registered trademarks of Sun Microsystems, + Inc. + + * UNIX is a registered trademark in the USA and other countries, + exclusively licensed through X/Open Company, Ltd. + + * All other registered trademarks are owned by their respective + owners. + + +File: am-utils.info, Node: Index, Prev: Acknowledgments & Trademarks, Up: Top + +Index +***** + +* Menu: + +* !exists, boolean mount selector: exists Selector Function. +* !false, boolean mount selector: false Selector Function. +* !in_network, boolean mount selector: in_network Selector Function. +* !netgrp, boolean mount selector: netgrp Selector Function. +* !true, boolean mount selector: true Selector Function. +* /defaults with selectors: /defaults with selectors. +* /etc/passwd maps: Password maps. +* /etc/rc.local additions: Starting Amd. +* /tftpboot in a chroot-ed environment: /tftpboot in a chroot-ed environment. +* /vol: /vol. +* Additions to /etc/rc.local: Starting Amd. +* addopts, mount option: addopts Option. +* Aliased hostnames: -n Option. +* Alternate locations: Mounting a Volume. +* am-eject: am-eject. +* Amd command line options: Amd Command Line Options. +* Amd Configuration File: Amd Configuration File. +* Amd configuration file: -F Option. +* Amd configuration file; specifying name: -F Option. +* Amd's PID: Amq -p option. +* Amd's process ID: Amq -p option. +* amd.conf: Amd Configuration File. +* amd.conf common parameters: Common Parameters. +* amd.conf examples: amd.conf Examples. +* amd.conf file: -F Option. +* amd.conf file format: File Format. +* amd.conf global parameters: Global Parameters. +* amd.conf global section: The Global Section. +* amd.conf regular map parameters: Regular Map Parameters. +* amd.conf regular map sections: Regular Map Sections. +* amd.conf-sample: amd.conf-sample. +* amd2ldif: amd2ldif. +* amd2sun: amd2sun. +* Amq command: Run-time Administration. +* arch Parameter: arch Parameter. +* arch Selector Variable: arch Selector Variable. +* arch, FSinfo host attribute: FSinfo host arch. +* arch, mount selector: arch Selector Variable. +* Architecture dependent volumes: Architecture Sharing. +* Architecture sharing: Architecture Sharing. +* Architecture specific mounts: rwho servers. +* Assorted Tools: Assorted Tools. +* Atomic NFS mounts: Network Filesystem Group. +* auto, filesystem type: Automount Filesystem. +* auto_dir Parameter: auto_dir Parameter. +* autodir Selector Variable: autodir Selector Variable. +* autodir, mount selector: autodir Selector Variable. +* Autofs filesystem: Autofs Filesystem. +* autofs, filesystem type: Autofs Filesystem. +* Automatic generation of user maps: Password maps. +* Automount directory: -a Option. +* Automount filesystem: Automount Filesystem. +* Automounter configuration maps: Mount Maps. +* Automounter fundamentals: Fundamentals. +* Background mounts: Mounting a Volume. +* Background to Mail Delivery: Background to Mail Delivery. +* Binding names to filesystems: Volume Binding. +* bootparams, FSinfo prefix: -b FSinfo Option. +* browsable_dirs Parameter: browsable_dirs Parameter. +* Bug reports: Distrib. +* byte Selector Variable: byte Selector Variable. +* byte, mount selector: byte Selector Variable. +* Cache interval: -c Option. +* cache, mount option: Automount Filesystem. +* cache_duration Parameter: cache_duration Parameter. +* cachedir, mount option: Caching Filesystem. +* cachefs, filesystem type: Caching Filesystem. +* Caching Filesystem: Caching Filesystem. +* Catch-all mount point: /vol. +* CD-ROM Filesystem: CD-ROM Filesystem. +* cdfs, filesystem type: CD-ROM Filesystem. +* Centralized Mail Spool Directory: Centralized Mail Spool Directory. +* Changing the interval before a filesystem times out: -c Option. +* chroot: /tftpboot example: /tftpboot in a chroot-ed environment. +* Cluster names: -C-Option. +* cluster Parameter: cluster Parameter. +* cluster Selector Variable: cluster Selector Variable. +* cluster, FSinfo host attribute: FSinfo host cluster. +* cluster, mount selector: cluster Selector Variable. +* Command line options, Amd: Amd Command Line Options. +* Command line options, FSinfo: FSinfo Command Line Options. +* config, FSinfo host attribute: FSinfo host config. +* Configuration file; tags: -T-Option. +* Configuration map types: Map Types. +* Controlling Amd: Controlling Amd. +* Controlling Hlfsd: Controlling Hlfsd. +* Creating a pid file: -p Option. +* ctl-amd <1>: Starting Amd. +* ctl-amd: ctl-amd. +* ctl-hlfsd <1>: Controlling Hlfsd. +* ctl-hlfsd: ctl-hlfsd. +* Debug options: -D-Option. +* debug_options Parameter: debug_options Parameter. +* Debugging a new Amd configuration: Amq -P-option. +* debugging hesiod resolver service: -D-Option. +* Debugging options via Amq: Other Amq options. +* Defining a host, FSinfo: FSinfo host definitions. +* Defining an Amd mount map, FSinfo: FSinfo automount definitions. +* Defining host attributes, FSinfo: FSinfo host attributes. +* delay, mount option: delay Option. +* Delaying mounts from specific locations: delay Option. +* Determining the map type: Map Types. +* dev, mount option <1>: Unix Filesystem. +* dev, mount option <2>: CD-ROM Filesystem. +* dev, mount option: Floppy Filesystem. +* Direct automount filesystem: Direct Automount Filesystem. +* direct, filesystem type: Direct Automount Filesystem. +* Discovering version information: -v Option. +* Discovering what is going on at run-time: Controlling Amd. +* Disk filesystems: Unix Filesystem. +* dismount_interval Parameter: dismount_interval Parameter. +* Displaying brief help: -H Option. +* Displaying the process id: -p Option. +* Distributed Mail Spool Service: Distributed Mail Spool Service. +* Domain name: -d Option. +* domain Selector Variable: domain Selector Variable. +* Domain stripping: Variable Expansion. +* domain, mount selector: domain Selector Variable. +* Domainname operators: Variable Expansion. +* dumpset, FSinfo filesystems option: FSinfo filesystems dumpset. +* dumpset, FSinfo prefix: -d FSinfo Option. +* Duplicated volumes: Volume Naming. +* EFS: Unix Filesystem. +* efs, filesystem type: Unix Filesystem. +* Environment variables: Variable Expansion. +* Error filesystem: Error Filesystem. +* error, filesystem type: Error Filesystem. +* Example of architecture specific mounts: rwho servers. +* Example of mounting home directories: Home Directories. +* exists Selector Function: exists Selector Function. +* exists, boolean mount selector: exists Selector Function. +* expn: expn. +* export, FSinfo special fstype: FSinfo filesystems fstype. +* exportfs, FSinfo mount option: FSinfo filesystems mount. +* exports, FSinfo prefix: -e FSinfo Option. +* false Selector Function: false Selector Function. +* false, boolean mount selector: false Selector Function. +* File map syntactic conventions: File maps. +* File maps: File maps. +* Fileserver: Filesystems and Volumes. +* Filesystem: Filesystems and Volumes. +* Filesystem info package: FSinfo. +* Filesystem type; auto: Automount Filesystem. +* Filesystem type; autofs: Autofs Filesystem. +* Filesystem type; cachefs: Caching Filesystem. +* Filesystem type; cdfs: CD-ROM Filesystem. +* Filesystem type; direct: Direct Automount Filesystem. +* Filesystem type; efs: Unix Filesystem. +* Filesystem type; error: Error Filesystem. +* Filesystem type; host: Network Host Filesystem. +* Filesystem type; inherit: Inheritance Filesystem. +* Filesystem type; link: Symbolic Link Filesystem. +* Filesystem type; linkx: Symbolic Link Filesystem II. +* Filesystem type; lofs: Loopback Filesystem. +* Filesystem type; mfs: Memory/RAM Filesystem. +* Filesystem type; nfs: Network Filesystem. +* Filesystem type; nfsl: NFS-Link Filesystem. +* Filesystem type; nfsx: Network Filesystem Group. +* Filesystem type; nullfs: Null Filesystem. +* Filesystem type; pcfs: Floppy Filesystem. +* Filesystem type; program: Program Filesystem. +* Filesystem type; root: Root Filesystem. +* Filesystem type; tfs: Translucent Filesystem. +* Filesystem type; tmpfs: Shared Memory+Swap Filesystem. +* Filesystem type; toplvl: Top-level Filesystem. +* Filesystem type; ufs: Unix Filesystem. +* Filesystem type; umapfs: User ID Mapping Filesystem. +* Filesystem type; union: Union Filesystem. +* Filesystem type; xfs: Unix Filesystem. +* Filesystem types: Filesystem Types. +* fix-amd-map: fix-amd-map. +* fixmount: fixmount. +* fixrmtab: fixrmtab. +* Flat file maps: File maps. +* Floppy Filesystem: Floppy Filesystem. +* Flushing the map cache: Amq -f option. +* Forcing Amq to use a TCP transport: Amq -T option. +* Forcing Amq to use a UDP transport: Amq -U-option. +* Forcing filesystem to time out: Amq -u option. +* freq, FSinfo filesystems option: FSinfo filesystems freq. +* fs, mount option: fs Option. +* FSinfo: FSinfo. +* FSinfo arch host attribute: FSinfo host arch. +* FSinfo automount definitions: FSinfo automount definitions. +* FSinfo cluster host attribute: FSinfo host cluster. +* FSinfo command line options: FSinfo Command Line Options. +* FSinfo config host attribute: FSinfo host config. +* FSinfo dumpset filesystems option: FSinfo filesystems dumpset. +* FSinfo error messages: FSinfo errors. +* FSinfo filesystems: FSinfo filesystems. +* FSinfo freq filesystems option: FSinfo filesystems freq. +* FSinfo fstype filesystems option: FSinfo filesystems fstype. +* FSinfo grammar: FSinfo Grammar. +* FSinfo host attributes: FSinfo host attributes. +* FSinfo host definitions: FSinfo host definitions. +* FSinfo log filesystems option: FSinfo filesystems log. +* FSinfo mount filesystems option: FSinfo filesystems mount. +* FSinfo opts filesystems option: FSinfo filesystems opts. +* FSinfo os host attribute: FSinfo host os. +* FSinfo overview: FSinfo Overview. +* FSinfo passno filesystems option: FSinfo filesystems passno. +* FSinfo static mounts: FSinfo static mounts. +* fstab, FSinfo prefix: -f FSinfo Option. +* fstype, FSinfo filesystems option: FSinfo filesystems fstype. +* fully_qualified_hosts Parameter: fully_qualified_hosts Parameter. +* Generic volume name: /vol. +* Global statistics: Amq -s option. +* Grammar, FSinfo: FSinfo Grammar. +* Help; showing from Amd: -H Option. +* Hesiod maps: Hesiod maps. +* Hesiod: turning on RES_DEBUG: -D-Option. +* hesiod_base Parameter: hesiod_base Parameter. +* History: History. +* Hlfsd: Hlfsd. +* Hlfsd Files: Hlfsd Files. +* Hlfsd Options: Hlfsd Options. +* Hlfsd; background: Background to Mail Delivery. +* Hlfsd; controlling: Controlling Hlfsd. +* Hlfsd; Files: Hlfsd Files. +* Hlfsd; introduction: Introduction to Hlfsd. +* Hlfsd; Options: Hlfsd Options. +* Hlfsd; using: Using Hlfsd. +* Hlfsd; Why Deliver Into the Home Directory?: Why Deliver Into the Home Directory?. +* Home directories: Home Directories. +* Home-Link Filesystem: Hlfsd. +* host Selector Variable: host Selector Variable. +* host, filesystem type: Network Host Filesystem. +* host, mount selector: host Selector Variable. +* hostd Selector Variable: hostd Selector Variable. +* hostd, mount selector: hostd Selector Variable. +* Hostname normalization: -n Option. +* hostname, FSinfo command line option: -h FSinfo Option. +* How keys are looked up: Key Lookup. +* How locations are parsed: Location Format. +* How to access environment variables in maps: Variable Expansion. +* How to discover your version of Amd: -v Option. +* How to mount a local disk: Unix Filesystem. +* How to mount a UFS filesystems: Unix Filesystem. +* How to mount all NFS exported filesystems: Network Host Filesystem. +* How to mount an atomic group of NFS filesystems: Network Filesystem Group. +* How to mount and NFS filesystem: Network Filesystem. +* How to reference an existing part of the local name space: Symbolic Link Filesystem II. +* How to reference part of the local name space: Symbolic Link Filesystem. +* How to select log messages: -x Option. +* How to set default map parameters: Map Defaults. +* How to set map cache parameters: Automount Filesystem. +* How to start a direct automount point: Direct Automount Filesystem. +* How to start an indirect automount point: Automount Filesystem. +* How variables are expanded: Variable Expansion. +* in_network Selector Function: in_network Selector Function. +* in_network, boolean mount selector: in_network Selector Function. +* inherit, filesystem type: Inheritance Filesystem. +* Inheritance filesystem: Inheritance Filesystem. +* Interval before a filesystem times out: -c Option. +* Introduction: Intro. +* Introduction to Hlfsd: Introduction to Hlfsd. +* karch Parameter: karch Parameter. +* karch Selector Variable: karch Selector Variable. +* karch, mount selector: karch Selector Variable. +* Keep-alives: Keep-alives. +* Key lookup: Key Lookup. +* key Selector Variable: key Selector Variable. +* key, mount selector: key Selector Variable. +* Killing and starting Amd: Restarting Amd. +* LDAP maps: LDAP maps. +* ldap_base Parameter: ldap_base Parameter. +* ldap_cache_maxmem Parameter: ldap_cache_maxmem Parameter. +* ldap_cache_seconds Parameter: ldap_cache_seconds Parameter. +* ldap_hostports Parameter: ldap_hostports Parameter. +* License Information: License. +* Lightweight Directory Access Protocol: LDAP maps. +* link, filesystem type: Symbolic Link Filesystem. +* linkx, filesystem type: Symbolic Link Filesystem II. +* Listing currently mounted filesystems: Controlling Amd. +* local_domain Parameter: local_domain Parameter. +* Location format: Location Format. +* Location lists: Mounting a Volume. +* locking executable pages in memory: -S Option. +* lofs, filesystem type: Loopback Filesystem. +* Log file, resetting: Amq -l option. +* Log filename: -l Option. +* Log message selection: -x Option. +* log, FSinfo filesystems option: FSinfo filesystems log. +* log_file Parameter: log_file Parameter. +* log_options Parameter: log_options Parameter. +* Logging options via Amq: Other Amq options. +* Looking up keys: Key Lookup. +* Loopback Filesystem: Loopback Filesystem. +* lostaltmail: lostaltmail. +* lostaltmail.conf-sample: lostaltmail.conf-sample. +* lostaltmail; configuration file: lostaltmail.conf-sample. +* Mailing list: Distrib. +* Map cache options: Automount Filesystem. +* Map cache synchronizing: Automount Filesystem. +* Map cache types: Automount Filesystem. +* Map cache, flushing: Amq -f option. +* Map defaults: Map Defaults. +* Map entry format: Location Format. +* Map lookup: Key Lookup. +* Map options: Map Options. +* map Selector Variable: map Selector Variable. +* Map types: Map Types. +* map, mount selector: map Selector Variable. +* map_name Parameter: map_name Parameter. +* map_options Parameter: map_options Parameter. +* map_type Parameter: map_type Parameter. +* maps, FSinfo command line option: -m FSinfo Option. +* Memory/RAM Filesystem: Memory/RAM Filesystem. +* mfs, filesystem type: Memory/RAM Filesystem. +* mk-amd-map: mk-amd-map. +* Mount a filesystem under program control: Program Filesystem. +* Mount flags; acdirmax: opts Option. +* Mount flags; acdirmin: opts Option. +* Mount flags; acregmax: opts Option. +* Mount flags; acregmin: opts Option. +* Mount flags; actimeo: opts Option. +* Mount flags; auto: opts Option. +* Mount flags; cache: opts Option. +* Mount flags; compress: opts Option. +* Mount flags; defperm: opts Option. +* Mount flags; dev: opts Option. +* Mount flags; dumbtimr: opts Option. +* Mount flags; fsid: opts Option. +* Mount flags; grpid: opts Option. +* Mount flags; ignore: opts Option. +* Mount flags; int: opts Option. +* Mount flags; intr: opts Option. +* Mount flags; maxgroups: opts Option. +* Mount flags; multi: opts Option. +* Mount flags; nfsv3: opts Option. +* Mount flags; noac: opts Option. +* Mount flags; noauto: opts Option. +* Mount flags; nocache: opts Option. +* Mount flags; noconn: opts Option. +* Mount flags; nocto: opts Option. +* Mount flags; nodefperm: opts Option. +* Mount flags; nodev: opts Option. +* Mount flags; nodevs: opts Option. +* Mount flags; noint: opts Option. +* Mount flags; nosub: opts Option. +* Mount flags; nosuid: opts Option. +* Mount flags; nounmount: opts Option. +* Mount flags; noversion: opts Option. +* Mount flags; overlay: opts Option. +* Mount flags; pgthresh: opts Option. +* Mount flags; ping: opts Option. +* Mount flags; port: opts Option. +* Mount flags; posix: opts Option. +* Mount flags; proto: opts Option. +* Mount flags; quota: opts Option. +* Mount flags; rdonly: opts Option. +* Mount flags; resvport: opts Option. +* Mount flags; retrans: opts Option. +* Mount flags; retry: opts Option. +* Mount flags; retry=N: opts Option. +* Mount flags; ro: opts Option. +* Mount flags; rrip: opts Option. +* Mount flags; rsize: opts Option. +* Mount flags; rw: opts Option. +* Mount flags; soft: opts Option. +* Mount flags; spongy: opts Option. +* Mount flags; suid: opts Option. +* Mount flags; symttl: opts Option. +* Mount flags; sync: opts Option. +* Mount flags; tcp: opts Option. +* Mount flags; timeo: opts Option. +* Mount flags; utimeout=N: opts Option. +* Mount flags; vers: opts Option. +* Mount flags; wsize: opts Option. +* Mount home directories: Home Directories. +* Mount information: Mount Maps. +* Mount map types: Map Types. +* Mount maps: Mount Maps. +* Mount option; addopts: addopts Option. +* Mount option; cache: Automount Filesystem. +* Mount option; cachedir: Caching Filesystem. +* Mount option; delay: delay Option. +* Mount option; dev <1>: Unix Filesystem. +* Mount option; dev <2>: CD-ROM Filesystem. +* Mount option; dev: Floppy Filesystem. +* Mount option; fs: fs Option. +* Mount option; mount: Program Filesystem. +* Mount option; opts: opts Option. +* Mount option; remopts: remopts Option. +* Mount option; rfs <1>: Network Filesystem. +* Mount option; rfs: Loopback Filesystem. +* Mount option; rhost: Network Filesystem. +* Mount option; sublink: sublink Option. +* Mount option; type: type Option. +* Mount option; unmount: Program Filesystem. +* Mount retries: Mounting a Volume. +* Mount selector; arch: arch Selector Variable. +* Mount selector; autodir: autodir Selector Variable. +* Mount selector; byte: byte Selector Variable. +* Mount selector; cluster: cluster Selector Variable. +* Mount selector; domain: domain Selector Variable. +* Mount selector; exists: exists Selector Function. +* Mount selector; false: false Selector Function. +* Mount selector; host: host Selector Variable. +* Mount selector; hostd: hostd Selector Variable. +* Mount selector; in_network: in_network Selector Function. +* Mount selector; karch: karch Selector Variable. +* Mount selector; key: key Selector Variable. +* Mount selector; map: map Selector Variable. +* Mount selector; netgrp: netgrp Selector Function. +* Mount selector; netnumber: netnumber Selector Variable. +* Mount selector; network: network Selector Variable. +* Mount selector; os: os Selector Variable. +* Mount selector; osver: osver Selector Variable. +* Mount selector; path: path Selector Variable. +* Mount selector; true: true Selector Function. +* Mount selector; wire: wire Selector Variable. +* mount system call: opts Option. +* mount system call flags: opts Option. +* Mount types: Filesystem Types. +* mount, FSinfo filesystems option: FSinfo filesystems mount. +* mount, mount option: Program Filesystem. +* mount_type Parameter: mount_type Parameter. +* Mounting a local disk: Unix Filesystem. +* Mounting a remote part of the name space if target is missing: NFS-Link Filesystem. +* Mounting a UFS filesystem: Unix Filesystem. +* Mounting a volume: Mounting a Volume. +* Mounting an atomic group of NFS filesystems: Network Filesystem Group. +* Mounting an existing part of the local name space: Symbolic Link Filesystem II. +* Mounting an NFS filesystem: Network Filesystem. +* Mounting entire export trees: Network Host Filesystem. +* Mounting part of the local name space: Symbolic Link Filesystem. +* Mounting user filesystems: User Filesystems. +* Multiple Amd processes: Amq -P-option. +* Multiple-threaded server: Non-blocking Operation. +* Namespace: Volume Binding. +* ndbm maps: ndbm maps. +* netgrp Selector Function: netgrp Selector Function. +* netgrp, boolean mount selector: netgrp Selector Function. +* netnumber Selector Variable: netnumber Selector Variable. +* netnumber, mount selector: netnumber Selector Variable. +* Network filesystem group: Network Filesystem Group. +* Network host filesystem: Network Host Filesystem. +* network Selector Variable: network Selector Variable. +* network, mount selector: network Selector Variable. +* Network-wide naming: Volume Naming. +* NFS: Network Filesystem. +* NFS ping: Keep-alives. +* NFS V.3 support: Supported Platforms. +* nfs, filesystem type: Network Filesystem. +* NFS-Link filesystem II: NFS-Link Filesystem. +* nfs_retransmit_counter Parameter: nfs_retransmit_counter Parameter. +* nfs_retry_interval Parameter: nfs_retry_interval Parameter. +* nfsl, filesystem type: NFS-Link Filesystem. +* nfsx, filesystem type: Network Filesystem Group. +* NIS (YP) domain name: -y Option. +* NIS (YP) maps: NIS maps. +* NIS+ maps: NIS+ maps. +* nis_domain Parameter: nis_domain Parameter. +* Nodes generated on a restart: Inheritance Filesystem. +* Non-blocking operation: Non-blocking Operation. +* normalize_hostnames Parameter: normalize_hostnames Parameter. +* Normalizing hostnames: -n Option. +* Null Filesystem: Null Filesystem. +* nullfs, filesystem type: Null Filesystem. +* Obtaining the source code: Distrib. +* Operating System name: -O-Option. +* Operating System version: -o Option. +* Operational principles: Operational Principles. +* opts, FSinfo filesystems option: FSinfo filesystems opts. +* opts, mount option: opts Option. +* os Parameter: os Parameter. +* os Selector Variable: os Selector Variable. +* os, FSinfo host attribute: FSinfo host os. +* os, mount selector: os Selector Variable. +* osver Parameter: osver Parameter. +* osver Selector Variable: osver Selector Variable. +* osver, mount selector: osver Selector Variable. +* Overriding defaults on the command line: Amd Command Line Options. +* Overriding or adding options to a mount: addopts Option. +* Overriding the default mount point: fs Option. +* Overriding the local domain name: -d Option. +* Overriding the NIS (YP) domain name: -y Option. +* Passing parameters to the mount system call: opts Option. +* passno, FSinfo filesystems option: FSinfo filesystems passno. +* Password file maps: Password maps. +* path Selector Variable: path Selector Variable. +* path, mount selector: path Selector Variable. +* Pathname operators: Variable Expansion. +* pawd: pawd. +* pcfs, filesystem type: Floppy Filesystem. +* Picking up existing mounts: -r Option. +* pid file, creating with -p option: -p Option. +* PID; Amd: Amq -p option. +* pid_file Parameter: pid_file Parameter. +* plock Parameter: plock Parameter. +* plock; using: -S Option. +* portmap_program Parameter: portmap_program Parameter. +* Primary server: delay Option. +* print_pid Parameter: print_pid Parameter. +* print_version Parameter: print_version Parameter. +* Process id: -p Option. +* process id of Amd daemon: -p Option. +* Process ID; Amd: Amq -p option. +* Program filesystem: Program Filesystem. +* program, filesystem type: Program Filesystem. +* Querying an alternate host: Amq -h option. +* quiet, FSinfo command line option: -q FSinfo Option. +* Referencing an existing part of the local name space: Symbolic Link Filesystem II. +* Referencing an existing part of the name space if target exists: NFS-Link Filesystem. +* Referencing part of the local name space: Symbolic Link Filesystem. +* Regular expressions in maps: Automount Filesystem. +* remopts, mount option: remopts Option. +* Replacement volumes: Volume Naming. +* Replicated volumes: Volume Naming. +* Resetting the Amd log file: Amq -l option. +* Resolving aliased hostnames: -n Option. +* restart_mounts Parameter: restart_mounts Parameter. +* Restarting Amd: Restarting Amd. +* Restarting existing mounts: -r Option. +* rfs, mount option <1>: Loopback Filesystem. +* rfs, mount option: Network Filesystem. +* rhost, mount option: Network Filesystem. +* Root filesystem: Root Filesystem. +* root, filesystem type: Root Filesystem. +* RPC Program numbers; Amd: Amq -P-option. +* RPC retries: Non-blocking Operation. +* Run-time administration: Run-time Administration. +* Running multiple Amd: Amq -P-option. +* rwho servers: rwho servers. +* search_path Parameter: search_path Parameter. +* Secondary server: delay Option. +* sel, FSinfo mount option: FSinfo filesystems mount. +* Selecting specific log messages: -x Option. +* Selector; arch: arch Selector Variable. +* Selector; autodir: autodir Selector Variable. +* Selector; byte: byte Selector Variable. +* Selector; cluster: cluster Selector Variable. +* Selector; domain: domain Selector Variable. +* Selector; exists: exists Selector Function. +* Selector; false: false Selector Function. +* Selector; host: host Selector Variable. +* Selector; hostd: hostd Selector Variable. +* Selector; in_network: in_network Selector Function. +* Selector; karch: karch Selector Variable. +* Selector; key: key Selector Variable. +* Selector; map: map Selector Variable. +* Selector; netgrp: netgrp Selector Function. +* Selector; netnumber: netnumber Selector Variable. +* Selector; network: network Selector Variable. +* Selector; os: os Selector Variable. +* Selector; osver: osver Selector Variable. +* Selector; path: path Selector Variable. +* Selector; true: true Selector Function. +* Selector; wire: wire Selector Variable. +* Selectors: Selectors. +* selectors on default: /defaults with selectors. +* selectors_on_default Parameter: selectors_on_default Parameter. +* Server crashes: Keep-alives. +* Setting a delay on a mount location: delay Option. +* Setting additional options on a mount location: addopts Option. +* Setting Amd's RPC parameters: -t Option. +* Setting debug flags: -D-Option. +* Setting default map parameters: Map Defaults. +* Setting map cache parameters: Automount Filesystem. +* Setting map options: Map Options. +* Setting system mount options: opts Option. +* Setting system mount options for non-local networks: remopts Option. +* Setting the Amd log file via Amq: Amq -l option. +* Setting the cluster name: -C-Option. +* Setting the default mount directory: -a Option. +* Setting the filesystem type option: type Option. +* Setting the interval before a filesystem times out: -c Option. +* Setting the interval between unmount attempts: -w Option. +* Setting the Kernel architecture: -k Option. +* Setting the local domain name: -d Option. +* Setting the local mount point: fs Option. +* Setting the log file: -l Option. +* Setting the NIS (YP) domain name: -y Option. +* Setting the Operating System name: -O-Option. +* Setting the Operating System version: -o Option. +* Setting the sublink option: sublink Option. +* shared libraries: Supported Platforms. +* Shared Memory and Swap Filesystem: Shared Memory+Swap Filesystem. +* Sharing a fileserver between architectures: Architecture Sharing. +* show_statfs_entries Parameter: show_statfs_entries Parameter. +* SIGHUP signal: Automount Filesystem. +* SIGINT signal: Stopping Amd. +* SIGTERM signal: Stopping Amd. +* Single-Host Mail Spool Directory: Single-Host Mail Spool Directory. +* Source code distribution: Distrib. +* Starting Amd: Starting Amd. +* Statically mounts filesystems, FSinfo: FSinfo static mounts. +* Statistics: Amq -s option. +* Stopping Amd: Stopping Amd. +* Stripping the local domain name: Variable Expansion. +* sublink: Filesystems and Volumes. +* sublink, mount option: sublink Option. +* Supported Platforms: Supported Platforms. +* Symbolic link filesystem: Symbolic Link Filesystem. +* Symbolic link filesystem II: Symbolic Link Filesystem II. +* Symlink if target exists, NFS otherwise: NFS-Link Filesystem. +* symlink, link filesystem type: Symbolic Link Filesystem. +* symlink, linkx filesystem type: Symbolic Link Filesystem II. +* symlink, nfsl filesystem type: NFS-Link Filesystem. +* Synchronizing the map cache: Automount Filesystem. +* syslog: -l Option. +* syslog facility; specifying an alternate: -l Option. +* syslog priorities: -x Option. +* tag Parameter: tag Parameter. +* Tags for Amd configuration file: -T-Option. +* TCP; using with Amq: Amq -T option. +* tfs, filesystem type: Translucent Filesystem. +* The mount system call: opts Option. +* tmpfs, filesystem type: Shared Memory+Swap Filesystem. +* Top level filesystem: Top-level Filesystem. +* toplvl, filesystem type: Top-level Filesystem. +* Translucent Filesystem: Translucent Filesystem. +* true Selector Function: true Selector Function. +* true, boolean mount selector: true Selector Function. +* type, mount option: type Option. +* Types of configuration map: Map Types. +* Types of filesystem: Filesystem Types. +* Types of mount map: Map Types. +* UDP; using with Amq: Amq -U-option. +* UFS: Unix Filesystem. +* ufs, filesystem type: Unix Filesystem. +* umapfs, filesystem type: User ID Mapping Filesystem. +* Union file maps: Union maps. +* Union filesystem: Union Filesystem. +* union, filesystem type: Union Filesystem. +* Unix filesystem: Unix Filesystem. +* Unix namespace: Volume Binding. +* unmount attempt backoff interval: -w Option. +* unmount, mount option: Program Filesystem. +* unmount_on_exit Parameter: unmount_on_exit Parameter. +* Unmounting a filesystem: Amq -u option. +* User filesystems: User Filesystems. +* User ID Mapping Filesystem: User ID Mapping Filesystem. +* User maps, automatic generation: Password maps. +* Using FSinfo: Using FSinfo. +* Using Hlfsd: Using Hlfsd. +* Using syslog to log errors: -l Option. +* Using the password file as a map: Password maps. +* Variable expansion: Variable Expansion. +* verbose, FSinfo command line option: -v FSinfo Option. +* Version information: -v Option. +* Version information at run-time: Amq -v option. +* volname, FSinfo mount option: FSinfo filesystems mount. +* Volume: Filesystems and Volumes. +* Volume binding: Volume Binding. +* Volume names: Volume Naming. +* wait4amd: wait4amd. +* wait4amd2die: wait4amd2die. +* Why Deliver Into the Home Directory?: Why Deliver Into the Home Directory?. +* Wildcards in maps: Key Lookup. +* wire Selector Variable: wire Selector Variable. +* wire, mount selector: wire Selector Variable. +* wire-test: wire-test. +* XFS: Unix Filesystem. +* xfs, filesystem type: Unix Filesystem. +* YP domain name: -y Option. + + diff --git a/doc/am-utils.ps b/doc/am-utils.ps new file mode 100644 index 0000000..dc05aca --- /dev/null +++ b/doc/am-utils.ps @@ -0,0 +1,20379 @@ +%!PS-Adobe-2.0 +%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software +%%Title: am-utils.dvi +%%Pages: 115 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMSY10 CMSL10 CMR7 CMTT10 CMB10 CMMI10 +%%+ CMTT12 CMBXSL10 CMR9 CMSL9 CMTT9 CMBXTI10 CMTI10 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSCommandLine: dvips am-utils.dvi -o am-utils.ps +%DVIPSParameters: dpi=600, comments removed +%DVIPSSource: TeX output 1998.11.03:1221 +%%BeginProcSet: tex.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 +mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} +ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div +hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul +TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} +forall round exch round exch]setmatrix}N /@landscape{/isls true N}B +/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B +/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ +/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N +string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N +end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ +/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] +N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup +length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ +128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub +get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data +dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N +/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup +/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx +0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff +setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff +.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} +if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup +length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ +cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin +0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul +add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict +/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false +RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 +false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform +round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg +rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail +{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} +B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ +4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ +p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p +a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.1: CMBX12 1.0 +%%CreationDate: 1991 Aug 20 16:34:54 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-53 -251 1139 750}readonly def +/UniqueID 5000769 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACDD6500ABDA5ED9835F6A016CFC8F00B6C052ED76A +87856B50F4D80DFAEB508C97F8281F3F88B17E4D3B90C0F65EC379791AACDC162A66CBBC5BE2 +F53AAD8DE72DD113B55A022FBFEE658CB95F5BB32BA0357B5E050FDDF264A07470BEF1C52119 +B6FBD5C77EBED964AC5A2BBEC9D8B3E48AE5BB003A63D545774B922B9D5FF6B0066ECE43645A +131879B032137D6D823385FE55F3402D557FD3B4486BE79011D1F5BFAE5C1F476EE6F05EB1D2 +CAEB269958B194521197B312FCCED4867F3C8FBD030BD715D8FFDA1DCD454B174E7A1A97B59F +E770E67702519D9D9B23D61AC08424D555242A8CA08C49AEF300945D99B999A79CE74804AE6B +FDE623F4463371442F6523A5F6CE19C839A708C025132E22C696C8CCADE45680E5197189D0F9 +8E7F0D5F955E353970B392CF530A68CC56B0035DDFBF206C3074BEEB0739DCBCA272A6E629FB +7AEA2C5BA7BAE50C7B4CA595DF78200C352997EC3EE564DF229FBB5473F5E8CCB1CC0153E9A7 +E299A8EAA29B69D1B622B1F0CFFC58291248759607D91150CB0651120970DC9F743BEBEF44F6 +AE92FACEC57658999C8BF01F60611560043962C0695E1BB87D090E0FDAAB659D6557208A660B +E9AEEF8AE55F71B8BC76394D792967E41BD8023B6E7F8C3D9987D5E54C53BF2BBB32855B9464 +73B44833BD78873DF8E4C7E668FFFF25AABB8DA4148F744B9D0524D6CB8281247B3052CC5D66 +F3F1BCF8A56A3FB446EA587BD8BE30257652CEE035628AEDDFD8283B5AD21B8B1480AD24D898 +970AC8A1E33E543CE4E3C48F9EE621C5CE3E8AE930F890011B630866C988606068D9E92396EB +F51BB3DB204505FC3D09D4701AC703A14D92BBFE27BD7411B363A88E33A8E9A8025AC31F21E7 +3DC52B333B918D0B1270C54873A490222D041A66E0192612BE6D2C88958A8F70C10390146EE5 +091DF020AB97675E8E6901226EED50125D36C221BE8F20647442444B13F0325F899B8FA15E14 +14119B45F920F73DC3496F6DE0DD4418A1181E791B49A52866C79D377494BEFF7F1B444111BC +A4FC2BFB7279FA2938FA9BE2DE762F20D470813C4EE0034371812EFB9F87014528B7A09BE4F0 +1F1F84DE922D6C66D7F6FF96A49233B2396D9C19B85B132FF565893AD3A11DDB88E469FC1DEC +D51E5B3FADFD1E3E50914839DEE5D5D2B63F83E8A7953833EFE2492A30314F32E2BD9A758F2A +BDA8107618EEF886F13905EECE29E3A0267FA506A77271C89450B6CB4320E2A9169EC494917A +370CE72227860BB7ECCA9D1DAC4AFDD4BC59CA1DFC10A5D530DC1E8AFA557BA49454F211BBB2 +4B86044A9008092E262BBACE0C5F084A66DAB3BD57DF91E3D4440C9974666E46AF84B0C0F928 +6045D15EF5C5E601CFC42D8D2A14117BF73DF97A8C602FAFA97F13823603CD70D202551F6BAE +D6F13442564A85BAF8FC53676FCA540943F23146BEEF9691FC26B2C7327B63627570EAA85ACE +4938C3884221F1A91F5E57E303425C649D12E0977D78BC7D32CB30710817926509A49DAE5C95 +30BD89B44C105695CE609BABD50A7A2CCDB30F679D849577A8E7C0300D2606DAC4658B4A0555 +DF2D2740EC5F9D76270DAC943DA0E0271755607D355709DC9B0DB68098E3DED0C081DD742BFA +7C29090A2BDA699D4EBBAD79BB3B901E59159869FF13361A167ECDC51D1E655F475D453CCF93 +5F637C2CF08B222968F2DA3D3630A9747CB5B8AC4B042BC44CC22A488CC8099AA15FA2C43D1B +C9ADAFB2A4129E880F5CFCD563B41A16096EA07B96BCE2B2E81C89968F5A3949889EBDF25E07 +042B81DFF462DB36311BB3FAF1387A3BFF193C09FF4972FF743A3FAC0DD57995444D2AE34BA0 +A8AA9C69457654D2221C8927124BF9E1B2D768CF672CDE3A6945E627F11D1D08E1403A06ADDC +A67CAA82958FFD15CE17CEB235F4CA05231E6E10CC2BC7803FC2F92CBFDCDD09F100A0CDA8B6 +D73A1F2F4778BE732F2FFD8AF6170FC11D37A83C9260606E5EB14A411E1C7CD5B6D2E0D722A3 +7A1F628512DD6598F9845398F854BB17DF1840FA7AF1CD58981A5EA8993F45CC1A3FFEB6BACA +6CF815DADCE91BB92C9BE218C4BD91EBEAEE4E17E302284B42FACDCC1ABA0C22A8FE7A30E401 +6EC238B6A530112E7BC5371AB48E599F966C94EBDA672001483D1E35E683F93EBB02BA0F647C +6F79918B8E2D7C0D292F306BC366B9679A7A8A5998250DC90F0A752E5A23EDA3CD8B699BA875 +E05D2B6758C1F886864764FE26BAAFD976AC47150B12B93C97315AB530EEF6A8F8D32B727F84 +EB7C05DAEA7DF55B4847AD59DBEF771A5E47347E8A5872B4A2414EF8A4D1B37924BE9FC1DCCA +A10D6E78817CDB99D5F42D5645454AA8D2151E48EEE83725BED583D358514F58A919256F22E1 +AC4BF1CA50DF0F807470859EF15928B40B9C95B6116B1FFD997B32D93E38B128C9230D1A040F +B8B3829FD409FE25BD28EA79BA3258B22F939D7985A98C8FAF502225F5100B3EF74E4520531D +F8C8A2D3AC2D58E3253CB250D45E7E556DD90CEC4592C52D9156606C4DD6382BBAB9F31DCE02 +BA08F28FFE973935DBF3C98DC25CFCF02ABAC24117B76E4792525848C321C47505D2FEED7623 +6E9780014483026CC580F40C5F259AD273E1F24DB59B1639B1BCB62290D4AB2B2088FE370158 +BF3C2431A00256C9658DD428D0DF17D1F89C7689E1E0C659B595C4C34BF20DE7F5C0F3649BE0 +87B6DD06CFCC99E75CFFCBC48BB87101E0877A8FDB807754688211F442CEAB20069AFA09DB64 +5E42B931FC22C739B14110DA27C7B04D591FF8DF2F8DEBDD2E8A443F37E7A75512ED33CB5A71 +9E7082005E1F721484EDE774637BC948E02D3F6B044B10BB61A1A233938C3A916E90911328D7 +3EEB236257DFE33BA5BD5BB8F51472AC89BAAF3F9E462F6BFEFABC6BB2A2A906A8E56A2A5AB7 +312E2916065328E1E641C44336913473F2215707C8589C0BD6B3B8599531D10C1CF65D27567E +EFF8C237141AD3696EBFB9FD0F4C7B4A21844B49CA7992D9A0EF837C2F3D3A2F8E2840B18968 +4954F0957DB9ACDF6E4695C532312027093C7D0F81371452A1A53BB20114C06C068A7536E074 +FDD44626B54496C92FF4F165B83DE07627DB4F0CD4722F4FDB11457FCAA43A82CB382178AB36 +F347BAAE3251FED22CC067E92B812D3ACBC28A8FE180D155D9C5FBEC15659B06A82E27D6BDE2 +7B009702E3B50797BBB275B2A60455FAEDC9BDC471A5851DA8196600C6FB6DECC045D3B2B38C +AEC0DB9AA656277F3FA30F1BCB83147917E117A24514073D79F1BE0E5BF96B4D693349D78759 +940EF4EA6B070E18870A8D6B2A0786D03F6012872AF771A623706A655D50D12663BD97FACEBB +A4931766132796CE9409533394AA54084B952AD4E9E903F1E78A18AE224E1452E3EAFC9BB774 +5131D76290E8C6EFEB4CBBBCD535BDDC3CE5A05CA2B4082AE44410C1E3412B0F6B7D85374D0F +B877AD4925C4E51AD251BBBDADCB2CD0F5499E912E7D1F990FE5226CEF4CF5407E1391B5D4B3 +3EF359429E92BEF23CD65434A96921B803C779AD7A7729CD428B6032147EB8D5820262B34A49 +9B2F00E5E8D4A58220DD26BD583C474332F99F0FEFD5CE4967396CC85C8BC36088556B214FAA +19D7AEF255CFC8901B6170FFEBE5529301198328010992EEFED22015A09981E34213C4262351 +738911A3C2B671357FFB5EAB7682DB8D397BAAEA9FBD77F82C0A79E7DCFAA3C6ED6883B61B3B +5111B88E2A942D7459AA5F53B51A25042668F5D5FF4A557301762A1D2AE18D80C484171D62E6 +BD2C06E70C2AB20922247DE62912A28DEC4DAC4972F680E71E85EC91688DB753E7EE6DB6EE5E +8FAF7D27E0CC82F44DB9761DA4684F99FE3AC501583FFB4C46C006BDE1FBCBCCA4F3DD2CF4AF +C0F291565180564913D487EBAF5A952EB8BFBFD3C6B4A5B039B9E7BA51319226C1C576E5E35F +334F7672A6F547A1F655FD7BE11DBD0384F33519E240C1E6D7190220F6B655234BF89916FE04 +4B72DD365B5FEF3A883073304ABB1140CFF90AC69A1D97AE9C50BD4CC351C845C3948E2A9FCB +87F2008EB6CE3062850B9D62B9771562431D857DB4CAD5358CAC24C5611F0BCDB1827BDCC7B6 +C3F11AB223EA3C628F9A13CCCEC21F9269A53396F580CEA765E84A2E35B26C65255B8C5A44B6 +3A776A0F26951226838156AEF2CF8BF7D543E0B3BA996D17977BA5D485CFB7E6D486A5653550 +1EF6A915AE5A9F085A5DA01CD63579CE067256494661DE2F0955BCB4D9DB4B3F80366CC82050 +B10956B665F8EE8CE42FD744C123A7555150A08D2096F995592A208270271357BD8501E7180B +D9AAC78029B6C34021474C4804523D5378E39DF856B0A472AE88BDE75ECF8AB07B83F5EF3D4C +9CDA72DB9E2F32DA943950DA10610D6618B3FEF5B75DFEFC72F64B8BFB700DA3C86594A8BE10 +13C03ECB9C95DBAB90D2A05E3183A23280CD878A5B4DB7A6D6A47325B5DA70D4CF1CF8EB2EFA +7712169DEFA459545CA551A81021A587FFE5B8760A1A78897E9C9F34B167458AE9D6E56CA4E9 +21620628AB8F73F73E174944623AC10FCF21644F64D7BBFC59CC02DBE0AD7C4409C6F66440B8 +49668F7E2A0053BE5B5A825AAB22BB3434F7B2DA21214A3587CDACE32AEB83FA4A183C198C02 +BD03648AC9278F3FC195E4E69B72A5CB745F081E32163A698FEC233F0AFA15939D940FBE917C +51CBC887E2EBD9DE24290790290042ED7F7DC16E866E5313A3E790BF7D8EA7D785E641054E5D +B4D3FA933DAC53C3BE7E971C70388E6B8171A6FDE2055F3A8C490877A89F4790F57C0D61FBE7 +8A39D7A0391C78C503AD0C38D88FA809F7B5F8E902018ED0F9777610A3D38ECE44C3903D9917 +86338D7A9AC65FDDE2692C9344D55B1D9668775543BCCEF80299EC86DF2E36ACC5C4CB2B4B99 +08D009E93D86CC368D00D4C5378D16DB76E705D5ADEFFE926658DAE283740BD3A89FD9A58C04 +84537258493A0206FAE4E0BE0A29F79DA258C34801B4A43BCFD52E3569CA9C10E5685FAFC1BD +2F51DDC62F4337976463C0251737081A65516D01120E16EE8D5DF0B91BBB79DA0C5ED1EF4861 +4F6EE3FD267346F3D2E27EB67A5525782F8317E3088DBE7B0E5F3A6511622457ADF255CAC387 +F5C6F43FEE8E3B6376F840ACC54A59CA06239324D63084F4BC92CBC68C4AE84EF3E564022D31 +38358ABF949BFCBD44F8844281223DAC02741A51851EBDF4CA1CE54A6B12735A0DFB27290382 +D73A99AA9B3E6F6095F9ECF650A95E2DC65FE753CAA05A2FFBF69B80F15A6EA308D2BEE55654 +263D6F89C3B5E221BBEEC02904F134CC2B658D48555101101CDA5F3A4CD7885F274D98F221A9 +EF4B9F3BFA7A67E19DF1D51155116AE7BB81455C6A87F7B2F55FB0F87A2C993B6E580CB73D84 +FFADE6F51C1AE0DBBE5F6C01D294D6A86634661692E48AE5F340F2DEDBDFC5C886CDBF5B9FA1 +219F8A4942BBA3E3950B40EADED15480F3BD19EA73CD34C413E0F10B39302B1344C4583C806D +F07025287630E2A058EE41E75FEA0DD30C5675CAA994FB6548403E4A974CB1C8B7E6FA451751 +813DAA7A151B8DA6F6A83943D8C863A22ACA521CB48FF44005B755732CF460E576246923FB80 +5EEB14273C11223EC80ADBA78310840E535C9035E64F74C153EDD5BC599B1A34CA78D097461E +96B316512232CD0055AF1432571BEF54A3C20B0821C1E70F5628C55FF91374C2DD41ED49EB38 +A48CE23ECDE5396A1B067E1FEA6A3A76FB8D6FB64FA64CB8C0689492AEFB149EFA33273F4BB8 +A54A81830843451E2249DAA708885617168901506D8847DAA295994F554F5A5246A7DE45CFDF +E2A698ED607639CD8BF8038A936EA0F7010AF52FA87A215724A01D28A230C84AD8582152E0C5 +859237D9B361733EE78ABF2FD1EF19F69E366BB89858BE92C3FB979215DDD2C3F05B9424D513 +D8CDDDBA7614332F5F9D95B52A1D20EBD8821710A0D1CDD07272241F6420663959BD6F7DDFA7 +1BEE74E03797DBB29082C414DCB96E0DAC42D630576FA4EACC54D150E3BFBFF35A28939BE164 +4E12FD13F4FB0C05E89C0B58167E3D48C8378AC05805C98DF4F0F152C12C8F79EF93E5473BED +582362876286E71D119037C9E2BAF29E1DCFD46F5E5EC4B19E97C73DDE60D3CC50B696D7E62E +4312BE7587163D3ABC9EBFA9895535B704F7070D69F5B19E335E15EC9CE099A0EAC212A175AC +CDF7C5312A927AA67473DF1F6F21E7D7467889EA082131E7223E4BF4A71271EFBF6102977DA8 +54407DEE2CACB78146F78B23BFD7FFA492FFB3799AFA4BC88E686F0941DB77C845E4866B1E8B +5DA393B3D26E3841FBB7BB53E0DC558FEACAB01F8B5F7745E3BC8B823C5789BEE21493DF48A0 +D8253B1DC1C879F824977C2AF5D39FCC7773483B7352176C0100F06D9DC8FDCC4B92B2EC113D +DE787FFAA650308A720F7C69F712456B3A9F6A3BE1A4664FEFF85A251243AFB7E1748C12A64F +1C492A47830057C282F0825BBBFB73C82DC488C6D8A532AB60DA409E9BFEEF119A6D520FBEB7 +BF4E561FFA8A9DB7E5A3FB8F177331EBB016D41131BF1F84B23FC2F003C248FA9F78DC13255F +35F5D269DAF722364DB47927F90E76DA79F7721B2C610F51DF3C28111D1463C44F96F6F9E847 +31378BE592C0D97B8F2DB6E6F2CEF9CD3EF05F6AEBA16E02DA551D53D96B2A2976DF8E7FD23D +8B502E739D4B82C0220C6F3BE0C0F3EE31E3AEF001FFC4CD22D6E79EAAD191627A8BDECAAD17 +D135E74AA817DBF43C3EE5923CC4F8B1FBA58F18891AC6BFFA484ED7652B37DBBF3AED56A2DA +5350807A71A369E08ACA1EEFED4BFBAE14580F8EE4BF718C15A0CA869EB567BCB97AAA3E0695 +E5827274CDB917BD3D7D808BD98DAD257FA37D747C6669EE577C8FD8ABD025CE81BECD5210D1 +5275B81236FDBA2740972C653D8641626C41DD2B72EA32393F3F5D8153D91C9C3A53B073FE66 +9175FF999D6D07E9E306C98D1EDE9C2EF23FE83FB0A41F3981C62B4F39206946032D3D24A1FE +812088A332CB13456C8E25DC6787B4E2780893A3A4E005E10EFCB80A388A20D3CBDE094351E2 +E9CC5913392A09B96CD320B23DC4992CC6CFAB53B513A2A9D044C299A3B2FBBD6B7F622CB380 +1CEB1D7BF3AF0ABB5DA14AF5EC8E90DCDF6999BD1322218FEA4220E210FD6F81A21DDA2AC4CF +1C4DA55222B288D7FC9953751880DABEAB14976E8983F34F87C571CEDC1A3E0734E26864BEDD +4AA8A834E348D83D2B66FA86C1C0EDFEC28592283B075E85AEE3504593DFA740B82B292853BC +39348A54E93AB0A815742535A382B0FEE5B552F0F02366850F97DC9FCEE811B1188FE21663D4 +C7505B7F243A9023EC54E2C2FA4E5800F600190C7B959AB5F0C67C82C305A2EE245B6D4EBEE0 +A862D577F718CB719212550133120EABCB69F88B45CE14BDCFB88176EBA9A02797B395B022B3 +99C6DD835C093D6C4758913B05C3D6340935E1E54DF4B9A2BC85BB6460656292E8FC57F332A7 +E3D31EFBFC21FFAD5C08579A27AF547AB338BB2DF92E85D22B16903B3FEA1834B23590A2FD70 +568F6E4D979B52879D12202BC250D9F59F1994E68A7774EAC77A0B43FA04CFD024E8CDC496E0 +7DBD2B1939278DBF4E0BAB271F152470E8BE9190F39DCE106C8218AF820AF686FE79BAFBB0C2 +A9FF956A72E9639268DBD561AD58660FEFADFE64E26E112E86619DA4114B7AFE5A28BB7EA87E +8D2A4E10735F5092B411C57605C10D38C1DF81DA3799C08C03E24827496CC88082FF78209151 +840FE9C741B9B665495D50AF95DBCA1E04B84A4E17E2C25BC7A2FB1F8819638F852707E15016 +157AF20893D6E9EDBEFBF30937CA50C7C6E7D389776E5C19FB78AD37ACF1B9E09C17E09358EF +3C42ACB14892ECC993D208624B3B8267962211E762E43D40C8E38AF8F87FE34743B8B3562401 +DAE7020D87F0DC8F1D4C34C7B0AAC0329539F31C01C8BB434AE4F79CE6A5A1143621F71ADB4A +9354DFB795C5C078405662D58A1E9A8EBA25B7BB1B10A699A50BEB3D53440207429D692D939C +228D61F31B59A8E30DB0B661D98890E4F30C9D60C8B8E5BCBB61DA5FF3C5180CDBCCAABBB9BD +A0AA52B126E408F0640BCDAE439F4EA033BF794282C2E8D11EA81081FFC0AC7C9860B9EB2E24 +CF7BD764ED6583479F5F69809968E1730A3D520666A78CBE0D9043DA21AF1BE118B7C361D5BC +AD5BCC44B1246E1C23D51019961BBC2C8878013F01AB5663F88AF58C122A720B37A58FEBD448 +DC9B7E5D0CF899D4E30821E52C6E813B0D35BFD25E77AC15DDCC4DA4CF088A2E09634CC3D33F +0E5E01E64AC6F52A878A687EB5833F6603170E8A95F86612E6C64AC4D454DBC792AEA828675B +04B3FBC2A516D6DF08A8E6D5B2C4DD184083F7CE348FC6E00FCD2FEC3275B5B798998ED7D82E +C26ABE6B84C9496669F6B91B850DE68C93D8C88C87DB649260899EA6D47C511DC61C55698B52 +5D9AC30A25137A131E81D4C46EF4D10F1B22B19AFD9A25B2275649C2E0A36059B9112C3CE9EC +E70F60BF199DC446E98298CC330E7C9BA5CBA216324AAA0D716A85941FD89FDC3418BBD50E6F +2065CAFAF0CB8BDB929C9AEE28C7ABBA000AA86878ED57FEFD9E8EBDA6FBB1F904434F54C8A5 +23B2499B1976D751F39445A1B5DEAF740DC6167E4C686E57C85C9CC7928E81F5FBCBE180E351 +58B0193C4A9366913D16F7CA770C5B339F767D1A6B78DEE14C41205024CB91C022AFC8C50E7B +46D599EC421F7932FFF7A5658514C04D79CE7888CAB8C0C2EB7AB618B457F7C87F3566ED1E6E +3A079B4138DB57172BD5749AC5E927014D994345222A9471799E453A42D9FF5DBE1E667D3330 +DD78C367FAA10F4CA07BE0988888799391A326531D519C737DC4239B17C8517F0DA8579CAED0 +F4435C49467B2DAFBC20DBA54DD3F1817F640B4102DA5959943291A2DF95120179030BEF4B89 +D00C97589383C4DB1D12D1B0AA92644E331645C3D29D0E627EF393F8548DFA97BDEE2562852B +048B68DE53C73A34F6BFFD46B06531FB0DE9BFC1CCDACBC0E01AB74A7E1080C37DD61CFA5692 +5977DEC172EEC9CEC0AB77CDFD5FFAB6BB9EF1D7D09E577E957A87899F231B07D0D56349CFAD +B9304F8F0644433B373D652E961AF6E3F144076D0C64DED32EE2C4161CD1DEBECDFE672479C9 +9500FD1B830202D5DEE3EFEC8D4C0117110626DD178DFCCE0F4B223410C3B27E5C1B4FCC9575 +D2B54BA6D147912F88A301AE52324E8992F359C81DF160C062F978C70022C9518F61E3C0665A +D283858A9A5444E48295B744A7B8361156D59AF3AD40CA71D441F3C8123C06A2CCF2854E6186 +415ADDAA381348FD5EFC7750C33E9C7F4AA936F0BA0CD58343F1B9FF545138565223061ECB76 +81BE43B021D629F6B11CE8D740AC875C5DBA8D4D1F241DCEC7B1931188609AA3246FD1AB4F76 +A3BEE835B9BB0A0F042E2F79F49278FDEAFF07DAC5A3E697BBCCFF1CA9C4FCC3D3F0C6DD57B7 +C30B241188D0FABB3C6447BB5F64776AA3270F56C4240A9BB282CC4F3B7EEC6A4C76523BD82C +603859E99D354B27151E90D488F1B38C89442C9066CFB7134303112CE4A49DC85F1D730C97F8 +82A561906B6AB8701F90C79DF081A21671E7F4353B34E744CB825DE60DEE525CA9ECD73B2632 +7C5CE54322CABE4FEE57ED2185C6FDF42BAD9FC37844B280E8B7B4FA9D0349C65BD24FEFFB55 +DED55CABA317031F48F1A15710AA9B7B6B3BC1962C3A430B02B1DE05283386ED065946063D1B +469F939B3E7347C0E73E00BB1286731245F90573C9C81F478AB32F995F8DAECEE22982B2693D +D0B0C8B9E6709C45EAD5C03EC0D56CEABCB52054F8EF3D81AD23729A174872535435165358B9 +2B8A3BF046235333244465DB7D82EC059C586D7120C3166489FA8785FF7E7514C6307B477A7B +5E1BC04E5A40AAC790038E462C5B9EC505DBADD1DF4A91E4C4BB904E24C4D15830E9F83A938F +1A2B9640ECA597F78C330A2BA05C1BCFD0B414A70EF2C6F36971E77B9BDAD5B2CBDEE001FCC9 +F407C6850468381FAFD112EEE30C4FDCA2349C940D22513C88F06E13E70A5956F9FC600FEC55 +FE1C4A902C2C97618E6C5E10EF4C679296F5A1D076B78E365D947109D928D641C7CF8AE98204 +6DCC359544BB0A031D21B0EE902FC526000D1105B30C4DAE93D2A00F9235A299978F22B7F596 +9E20B200DCDD753FC301187E510F04A056D0B7DDE478DBF963CB77E3563547AB30CA42B02DB1 +F3EB664B99722AD0BD3C68DD4AE1777B80A830CDE780E2AE13400ACB0027AC9A0B929915E196 +4A4B030A15622071D62A4BC379CF1077ADBB17D870D641355F6AFF1180318BC7D00ADBCAE1CA +6B303D6D96FA5E01C48D367B0E161D37B64454E292A04F62A49974ED6A2862EF0EAF918F481F +FDB142677AB8C292C0CBB170E1F5C61D52198EED8B445DC1806C424AFF7FE410AFFBFAD628CC +BDE0D47515A3F76A0A635234FF38C200D43E64FB83565F8EEEAFED18DFB96C9C0F274A0B454D +1337C38F2DEFF120B5D96C1C34C470F5777E975CB078FB20FA4C64D5BB5AFF659949F7343457 +4B597A5D5339F3AA378436360B2DBDD1312AF74F69655FEC1E0C54E8FF56AA83F9026E9D700E +6D07BEE86247803FC034EC026CFB805D8E8636C1D26629C1DA5820F973D6166AB3A667157FBF +3C111203C8E2AA0047A88229C584DE59E855690095298F20E9D5D5508509A2EF415B3D5D57F0 +488CAE89785404E4FA2A952F812269E688E816E60760B864F03B6418E4A60E173C47D30DD5C5 +D830A6C2DD7C033C283ECBB3A3E540D1B0411218E68D15373AEE1DCD3EB547504BEC9D409EE5 +AC9BD6E25595B85BC081B63B8DDC04A7A73AF371E8B4CE4442D7E992D699B98187DE6EA37251 +52CB1096CE26CBCD00F8556F280E070E792832D788079AAB8E19B6435F24AA5DF6EE06805FBB +10EB523D87526815958169FA3CC5023504BA39227BA2BF9BA68F7D2CC3D35E55E9D4D2E43F2B +1DCE3D4C340C1DDD30544A3B5DEF7C8AE1714B761D9BCB68BA2069865579E94C5C4F77C536CE +296DBB8591A9992E6B094B1E880BB3D386B62EB79AB2D2FF5232BF209E9492251434D1D1505F +D4ED79BD3C5857139105E19EBA5291B872E9B521E605314931E4A6BDE8E6060483695E9ADDE1 +D23A1EBCF65A1D70DDD30B4BDC41ACD776E4FE6F43562004D2C256A19341D8BB460569D0DC29 +242082F57D911065EAA0FD333B1F536DEBD235510987C1C211AFF2CFA09FDA26AACE78EB9704 +5F7F79F0629C29DFA844E61F1C908B25B378091B69A4631B123BA6357CA673747B2BADF8D7AA +D722DB0C3C7F736A3B0486351B2E09F407F9F0999BA41962052F6A2BE21CE7F50F2FB327D4E8 +717A6EE7698398164187446CBC66ECF404154914EA0B73B50079A31FB772F7B2F69C5C4D91C8 +15FA0D16B80AF6934B57203D09C74E7E2AF81AB8E1262DA81C7D1B4AB465DCCE17702093486D +CC4D1C2B42E82CB1AFAC08074E828C10FC504C352D555B3EBC718B177B453CCAFAC5F452928D +2D6F996ABBEA6F56AEA83DDAA2572539C9387BACB8F51794AFB53D8D0600A57C3F47068B7DC1 +C87BD6AC0109E1071B08975D8C36A7622108873C66D4DD5F94ED291CCED279613F8E5D781EC7 +9C45841AF61B11D4D63E9E81D0A1CDC746D5A2269B8FF812F360C715F72C12A95D259E9336E1 +893B0B63490E45BAE5B218D48D4FB7F8AF334B0C8868E476B094718F125314677F70D55D8270 +665BCAA9BF61237A4A51E538FF77B64AFA102FE54B2B376AB91FAA4DB74EBAF5A9E7EF7B3B92 +D7632C29612A14F97D34BF6B0B350AB70FEE1D189C0B91565CF6CFD2B127F74202910FA0CDA0 +99BE1AB21DF0790E11BE8CFF67E5D5F532C28984BE7F663CBE2DBD216EBFEC440AE57672D73E +F239AB13FBF96F971714EC97DF0A817DD554F9C8E4F5D83097635665B9F9ED9FCA4B90F2F7C9 +1500405E51709FC23339173A7AA82BFA6855A597407794D64DF5BC6BED7C9BE5467BADE6CBBA +350CC97E1946B831DCB9667EEB0F765938A366F0A2E9EDF7B18462A7562B16FC0571CF134521 +9BA2B5DD81ABA342E3D5E669064558AF03F193BE70859357CF225BE8F4CA91BA6FD586FCBB19 +36EFBB98CD53F4C20C6356EEABE99AA6EFE12344ED993F6900CEA58CEAA2C3CA11A9800EE66A +77F166796E50CF91CD03E7549BBE8A6DD164A5030601C38C4E27C7E6646241F3D7BB507B5768 +30188BC6257B6EE2456D833E4DFDCA89CC9D42E9D633AA37FCF53B1FA3082DC71F07645C36E7 +C28F7FFA23D2ABC86C35D233DB0D1A9E294D26C7735830EB84BA4A1462AE05273A1857F7B415 +1195EE1544A159E20CC9A3D02D5080C1799834DAFDCD3519914BACC3DD0EFBBFC9AB8F5C642E +E43A0A03DC418E30C692797ED182436FEB233D7DF3CF503BD04CA23EAC21BB125661A3486C63 +3FB7DB486D2C92BA706653115D1CF76534161F2C0787E2DF2A7D3B17C25EAC19BE80B13C9B64 +2E947BCEB6068FB0A784CFFF5ED7EDAA0ED85232A17843F3B8EA51869F928369467A1C0DFCD5 +2D1B8DA34612ADDD5AB8B0DCB43D7069EC100F022DC0AA8A58DF4077C9B51FEB8C83489722AF +993FF35EB326CB03F366476975220493DC515C8B0E81E9E4A10C08A299A060A59D3AA36552C7 +1DE029ADB6E935D83BFC60B4C8695DB88601B7175772253F71B47DF4570EC3CF45CB121F17A5 +7893CD830AA443BBA910D2C17F16B92E97DFAB2CB1B127FD4301B4FB8B7D252FD241A3088EBB +74FE703AAEC0C4FA72750D805110A6385E63BA36479A57EF6503AD517D6068E46CD7CB598D1D +B4DD9159099A971DCA8EC7B541F53640050297B51E7DEBDB6C8255D20E5A9002E06685981F70 +27B83292D91BF860DC74FD97035918480ADA40A1CC39895717FE28F5D2F4287AAF9CF7476186 +A47BFB88E148C84DE9252BA906AB9173C40E4260D753C2F26206DBF8DE9DC9F999DF84E14B77 +EF8451C83068FF946A5BADD00C3FDC07898D356314F8174CE325CA1104294E3C04C1FE78BB87 +C24F7FDC9A61A47839AF3BD717FE9A406AD590FF710FA3DBAB5A8C2C8D5E209FD764981F4F9B +AB49C7BCBEB6F2FC6F120D00255A457EA8883E0E5AA8B73DAE41235D9CCD14CC870209635C1E +C5C8FD4F1D3C8CF5B46B1B29A462A73EE776C3C4FA8BA77A96FF8C5E53CABAF07BA97C1B9765 +98EF63DC102AE8F4178726ED80A86007ECDD4F1F2DB902A914B8713B267164227B87970BC84D +ECCBA36FD9EC1541D774476BDBD010D056E919E324DBB8EF94E6FE323B74D823CDC39BA65DC4 +CF79EFBD53275847EAD4436ADBB90A423EC11C7BC7D5F92EE8BD1185A6AE517E5BA092AC4DC3 +65CD09B76918A17E47BE0ADB78DB14AFED185566501EA8E700BB8AB39DFBEC17FABD673D0064 +8C7691C0B70981292C10E8C5685454B12697F4039B7A868E7500AD0940EB401405DD2111261D +76F6CAE355CAC9AE1D9494555540B3F0C70E612B62FFDBB46FBCDE3D92D789BCBA8C191DF73D +1B3664AFE893E74E061B53957FCC15651D7C8B2A6BEF972745DA44BD7C5E9E1811CE0B226EB8 +A0FA1D9E65A5F7A67255E5D869B891CD2A7048683443BEB68F6F080FDDA4FBDDEA5354BB83B3 +A66CA4D6222FAA71E961BD7B8D8A40EE15AB6F8E5F08D0C8CD8101F903FD01448A8F8AAA5ADD +78EBCC4CA1F1CCB3F7189379F1B8C78430471916B7DE75FBBECB451B4C1552971F76C77FD3DA +7BD8F4219C37EDE680061ECF469048E7AC2FCE74E9390FAB831234E94160A8897C22F410EB01 +3749E0B1E31350D4FB24D4D1E42AFA8B560667E90AD4D3AD433F7E4867CF8FEBD10E897F163B +8FBD4649CCE6406653ECFC89E006D7F53A198313D2D70E44ED8D6E1AF4D028A2BA8B56171BC5 +81A698A8D1482F293F3388E36E1295F70C016524408EA17B8A9AC5E5EC2CEC4A17EA1D4A9F95 +87DC738D2F684F4C85EBA085729181FD6D492468C9B75CA04893BF655A536F7666666A54E9CF +FAC2F7CB1FCB0300D173BDCF967FBE99FD66ECE5D5466E729C2CA6D649910E62C212E6ECB391 +B5DCAFF8C2441F78C55D7A4522DBFB9E29F594D6D046F302F2DF18A4CCBD0FB9BC072787691E +3CEA1958375F9E693F6EF181C515254718CF96966EA02368602DD5C39E11A3C0763A3BD1D948 +E80C085CA48FAB3C91BB1EC8952684B838A2BDF474CFA4F658BA40A551400336A3AF4228ABE1 +26FA57C0BDC176274EE8A943482D3A883909006A8A4EE589541659A3F79575F0F80525199F52 +2D6699B2E60F7D42D0A6897DCF801560DCB7285EB868BB90734412B0BAB00627CBB051A95544 +9AF1A1DEDB97B169D48FCA4243C0DF6F630CDF0C6CE6C595609E6BE97A15D4CA210B2E10D2C2 +A15D005017BC9674C8ADA52FC5C601E34FA33BD7976000D5590E8BA944C5588DD09D2739D54B +90E04C3048A9AC893177CDF6CF915B1B117A467D9DA6240E06621D94026ED305BA951037B0C4 +1B81AA5F06119AB3E0D7A6C1D10B1ADF3C76C8BD7CDD8517D02C710AA48B42A9B9082731BA53 +AFE1BEE778B2A14A3D8411DD9E806693C6C403770474BE70892A83129C91450A90A786EDAA5D +C7F5F00A30D991045C7EF4929CA7BF663BA9115D9D32F2E65EDCDE9158D803385A8B2CF71AA8 +70F4B05B475AC88C76E29A572A20570BC96E21489DA313BB670B6940FA8562BF9AC584312EE4 +973B163DE0E417CB32A66724E8617152661666683FFF437ABC531F8A7C4973859A9A97E86CA5 +02D9D4F63BE74048017A9E76598BFA5A50ACC823BA92740D9B9260A56E2F2BB7E64032E6A79F +017800666BB51C2F5CCA5B3966E7C608E7F9152DADE0C782CEF7DC785ADE657AB2B792553578 +91A94C95319C2A385B766113ED7D87E8D74FA8FA72E163D54E07DC638C92570F5CD4C6CC5EA6 +9E5B2D12AD68815F37517209CBF56CDE3B15C20D0A3F42DB87574EBD3F51CE770556E9C641AB +B7E8513BCDF9D630D15F41F7C55CA229F1CFCDB456C9C45FE13C4144BAE9ED1E62C68EA466B4 +7CE7D1F2BB3573E6E382E01E637822118099B18EB6B9F4733ECC2CB1FDC22065AC4C480B354E +7ACCB3A2CEC06E1D32DEF08CFC567273E3A74893688F767B86E30B2EDF454842C0B96F8A1721 +050B7BF33BFBE167BA34D63F381EF5A35351BE8D7643A89CBC6809FEEE622FFFB1B7EEA7B1F0 +D140930BBC6AF4AA6B9ECD64CC6FB79C999B914EB7D427183D41BC539A38E903F315BA6627D5 +9FADFF710A81B23A5D684993DF1E1ED04EDE664F05DA10E8601FB33909C1A9BA6CD1CC544181 +CFF9BBA596B0B0EFBBC7542AB8589BD5CAEA7C4FDD0607CFBE48AC53CDAE2944B86DC0C11986 +5F916AABC627A9D20FDD79E8C62CFB3673BD29EE23F2B9BCA08467AE907D59F3FBBFC238FF23 +B15303E623C9E6DE820810E19B47A8723C2B5141F3B0AC89725934EA7080F90197DDAB0AD4DA +98907EDF2464213FA29F0B14A9A2BF1920C7908787DCB5500AA7D27DA7EF5D15C7CEA19D58DD +ED19854D37D24F4F863C02CE9348BE6A2214C728258F5790104581428E33502D34FCA3925ABC +5249EFD1372FE677793561625B75BE1FADA5AAE50B38E657DD80AD035A588C2C6F666E55C876 +9A7932257B25B526F831AFD78B65057D3B6D39626D3521D2920A9D2B5BCAC0C684896AE016E0 +D8BF361DC68FBE58BBF511E2C05F603AB07BB4D417A00F4A4FD0307C6A5FB67702B1B0678908 +90EB03091975CD4E42269334A5E5DBFD776B35429721E589513F1312C33100FB9459FCA71766 +0C0CA07F4EC7E799DF7117A096B1A5EDB41BD85C193FC11AA642CAD84288FD41251DC0D1871A +970FB66CCB957EE0C92F1CC4A1D5AD2A54595950062D885B4CA0FCF92C48F417E79D1A27D181 +32C4BB84D5FA007ED0A38E16740D9638C264CB01194CDF428B840DDB21DDA112C352AE4CE983 +6F303B4A68778FD10820A54AB50A0299AD7E0C75FA88CCFE3BC240A27509A3623A57B35480CF +6CFB39A28ED1945745C8C7D250140CCCE794B0D93F00278CB0CAD38029B0C9B723AA80EFA675 +EE43AFA3EFC4384BD524EE051D27ABD21B2E2D6BFFAF1B6F1FA258918CB65FED56437EACC243 +9B646FE845952AC70248A9CAFE886EB5C2083E9434C75A5C6D79BD250408CD9CEE45E3E15EBC +BB635246B7233380B7FE8B1A0B18B678F4230808E48BBD980457CCB0CA8550F4E01FC89EAFFE +011BD6787B63AD6C116800C622B3E657B485D87B839889F071C2988CED7786AF2ABE03212AEF +97B0FF6591500014B0A188460F814C3C67B1A1E435D6DD6A1C748505312678B85B7AE9EBB880 +CF0402EAAB49539288DD1FA78A8B00D654FA0E778382FC372C235B69D5D4AD284FC8B1A1F9D2 +A06E0BAA7B99405BDBB7646888D8902F907E41036796D5CB431478DB858B2A2693E56377905C +30890C13B4FD088BD9545EB2E57E0D339BFE9C4C5A157E9856EECDD95C7F0008E4D802458FA5 +E77EB7E104970DA2A83EE44705FC4B6AA2638FADCDFA8D041783A5E5A79518A9410A4FCAFA71 +30A0A022083C5F36BB8C5C339E9F39EF79C8DCA9294190D02AC32A1395CDE6B35E1D22FCFF88 +5A809AD1F94E9AF767A7CB627398A2043F93B42947D5A7B61968224A7585376E6409E98C091D +08AE8E9B2761C995709E7F2C1FDF573CB660392DFC4B9CD5CEDBCC06A3BD6873EBC39C07DC0C +067B21673B9CD246144A478BE0FAC9585242F0938F142D24ED5F6E2865238A1975A09A45BF8E +B110BA16EB33E514B3F4581B2BE3B2D5CC58549EAFF5D9936E2102AD13BA32C32CA9DB3CDBCD +9EB5B7AFBEC3168BF3A4F8E52D3A3A178A35E152F96D619C75806DB974453800E4B2A546052D +DE37A3588BA43C171DB5078C64557F86989C769655298EE6A23FDA1905A423EDC6A69E4A81C1 +6DE852B1DFA65B4962151651169E33CE04D79600C1FCA9494533BD2B0BC117C2A6B920572FDE +2C20BDBC750C4591F0C3EF957328B5C38740853E13C4E525D33C3CA08251BB79C3A274A448CA +4AF4755FD55071D0A4439583462E66E434A0E55750D02AE2E56F72764BF88553DD1CC1AB6FBD +B818794881272D351E9D33DE2B6945CA7F48DC9E7862840C07774CB0ED9012E1FC428F990392 +753956DD8972775A1BC32917A4A79426FDE3B859451D6820B2D27B056FFC8D779D8158387949 +CE1EBC9E660482C969A1440006E9B0526C17A8297D2DAB83DB20EB4A6E043F8D19DFCA4BC478 +3FE49DA57F99776F99C53648371D88C9FAFD33481F3567B9F5000D2F631E8C9E9EE72F712298 +A9E19867D22E87628EE8579F2EC09D6FA836D0011C73C2C7D8AFA7F9AB34C28B8D9C90CE9E41 +109B24035477DD75B5DAA912FAF4841E8B9916653EB0DA935B54BAF3655953E0A7DB4901E7DA +C00D01C07AF44A7DD106FDF8799A1F9DE4AF629C6A9C8D6ECCEFD0A44FB6718CC8A198F79BD1 +B589F83B3CD92A95D639005D60C221F3829BC4E113D2FED0F29740A7DCED9154E2CB6B02678B +9F85D1951E6EEEADBC4EC7FFBA50C87B66C7D45D217A0A91263D15AD722402975CFC4B90B2FC +AD630C2AA120FD0D6C263BD63FAF531BEA97993E73BB629D35DDB106B8EFC8F8124F1442453A +0586245FC6B44E5316C2A291A884302F750C2120D3868EB1C8C4CB62799DDC1DFE62B0C4D800 +67207C194F3BA90FBE6339F98C7B1DF79487144E28DB29C57CC3F275BD8A66BAA89130F3E16F +F9162DAB12C58C3FD9B062D4A8D0A4C215BA14EF1D7ABF92BF3887930E8A6099D54DD502AFCC +2F2FFFAFB8EFF2298141E7D48E671D99F093F0E7ACB5FB4363230758D7B81CB86B58E762FF1F +2F20DF1F0DC33DA8F618E87485478A97145C83D0C69D741A545CA4C91F21FBA87B25EE14D0CB +51EB473C1068225EC32200E7D4715E03742426CA000EF3B6E661A63C7EFDD89D687C07B86831 +51C316070399C1AFA39576ED47BB18F999D06F7B0BCFDB35E9F2F6D495D4FE3B402B4FD6705D +D5E2BFCA05B4220A360C9D808B52AC98D4DDF5B6D853C2AA82211E9D0F96B2002375238E1586 +15FEA9A161EFD7DAA69B82EC279CE440755F57BF63B2079044A49FA5889B5DA2E800FBAA4793 +73B10F93D5963B8FC6E57A34B3FA3E1C4332037A17B5282CB9A5160AB0D17E13D8ED1617C258 +10DF28BAB41FACD21F31114A01DEDA3FF4199960B84A986DFBA78667B8E2CB1B47E7D3242FD7 +C5AB801D2A0B7A133DF86291AC4DC49A4660230D90BBDCF739013D4F6CEA79A1216A8764ECD1 +147832228491314B147EC9C8E2F993B940D876767DD3E7E8AE360BC5E6EDA9EB6308F30998BB +600B0848D1D858AA80EEE4778A7C3EBC13408A24A4EF51D013DC85137819E314FDD0184937D7 +FDAF472D7FADF58CB0FF3D25ECAAA2898E391D93E993D24BD902C559733EBF55116D0D55D9B2 +874CD649646E61C5461833F62AFB581E6012C8930ACE1C2A3CE51BED10266580B7414B543F7B +EFA58E741A746A989815E25D20F104C081A7839C04D2F74EC149140D621273F0D9A5E9333278 +612B73DFDBF108278582EDF0010EC2CD26B62E18C0CDC5ED5F9E29A0DF2055A097517B174A2F +92F614ABB9F52BB19ED260AA886E87488D81E4FDB334B2E5C882D8E7BED9D77AD1C7FD6441ED +445F04280E66294A259F8BB54CD414E48845C21EAE82337DE9A4566D5BE0952F09EFA6A9B4F0 +E9A0D7F22B4824A1894C84DB3A4945E438AA6018FB67FDE9934327D47A4412988D21C7DD19A5 +916D467419EA0F28E49816F57FA749E541D0459D87338BEB777E923EAB04ABD6505F69FFA311 +267FAF0EE5CE0A99B5E60A89371A0906DBD1687E278CE40088702B3B0AE80802F1674A465EA5 +2638F46D7D86A287AB78BA715E3D42FBBEE7C8967707A7E25DC9E0F309F484156A0FD2B55941 +B103880E29B7086D604B666EBA5EDBFD91F0C80C15CE75665FE2A759248CC49CAF11DE03465A +564A94469A9D9021EB7055AB79B4A2CBE984CF5E5EB6A8A0B6EFD6249BE428788A44A92A077A +EB1BEF546F1A1F003B8DD3DCCEDEBBB1782D769DE4E2268D8AD88FFF96433426365221699EE2 +DF551789A3A11BB8CF89C874F7A97F666D609E14E58802E176C804618D14CD07D79BECD9D97D +9E1852A631B585648AFE1A4D3D848FD2A514857D02B817CBB6702D5D654955A39DE5AA1858F9 +BD8DD56D0D40C64CB26BA9A934566D066D79F9D8C237786964218D794DBB39A1AFCDE7466F94 +E2FC9F819D396DFD8784BE7FA5AA12DA11CDD6BCF74CBF8843C029BE70E0CC67974ED1E5B645 +61EE9D259145414B51B07C362E710614B778BD72036B502A3791D3E17E1BCA74773BC1488F8F +D87CDF23412C53304618365A06A41CF545FCE8A75F8882417E4B330738B5B6A008AA681595AB +A5EB562A27D9210185D4006CF27AFA035ADC7CC4A5BC12FDC17D186DB3089B6524177D822459 +5665415B277216BC8ECBB1A44CFD285CC550FE40945F809AC2C3BDB2220D24001A2D1781F860 +4C4EFBA8CACB9DC84A986CD8C123EB82E8092F1D244690AC562B17CD2796B34EA1F8FAA4C1D0 +1EB8630686259468473F5B6EF4553F42A97E5C90987D47EA0E0A582884037FEE85BB1A31B0EB +E54D4BE1336D2EDBEB7073A37EC6A171280FCEE583979C4EC7FD555496011A983DCEBB1638E7 +1A1998A1F46963637D15881A6084CA64541F18FD2F6BB1A2D6ECC2C9FECA9AABE5528173956B +8B1AE9CD064096DA93A47451EABBB6F66871D819348FDF933F6ACD6A1665DFABA9DFFA45AC7F +19576910EE2D29B55893C1C37C96111A4309FE3867982D442182B9EEA4223EB0AC1BF024EFFC +B6B763F89789F2CCF741837E0D070CE490C98290BC3B7C1EB0F1F63897E97808395955E21DE5 +D901298B8369941CF82758F8E50706842FEE4D5D3EAAF5B90CE83E28E102F0DD6DB09337B68B +EDD79043C9ACD85456970ACFC4A3A7B5185F4CA5AE34292ABC51F08901E81B9305276A1FB4BA +7B6FD947D8DA0C247116A567BBF53394146A5C4F83067E1ED282582302A1910A7B9722451B60 +1F86AE0F15A02075E9109F4320FF3C8593254A13C98C1E9E9BDFDDB990C5F509D72A9AEED360 +D907821438A9B0171808E8A3D6C97C53858262A942F8AF989C42A59934C6CF38500FE955EA7D +B23AA4A041C0F9FEE2083A1A7F80499191A5EBE1512E1FB59F6F2AF9B0A554CCB018C272B8B3 +46B56251222CE57388554B40975B9077711A94505BD9437BA3FE1705ECB8E39EC490F5597F8D +5F3BE4AC1B544C6003923764739E900CC9AC92A1CC521A827EF69EA1144A8AC65A817EE6F9E9 +279032D3EED5BF37EE84434CA0F045A292A8EF703C787FB99196438E79281F4148B13C6BFDBF +DCDF079CB53021750E8F46C18EEBAEF2147ED9B6C743E349136F41D1F3CCC18749CD0BD08C80 +C428C7EC37FA7ADBC24E31AC9A1DC0AB67486FEAB6DB8F8E25AF5564C2C43A64DF503A69A1B9 +5FD86BEE84E8B672E34AB2985139024E58DE8B94740F1F4C7A68FBA709AD8069658F6D4E0DC4 +74063F68F61F877E802BAD74E5FFC2B57639D6842E80EE741F9F659CD28ECA3976CBFE947429 +51A0060705BDBAF15AE41E883F76911F7FEB57955E0355C301594A7B0F6223B603B94F201C43 +CFDA55003ED5EC7372CCF2DDDF64B129638F12113E67A0D9140E7111F2CCED3E9A9B1F909C61 +254848174B16CC5B192D48FBCCA707ECBD0F2CF43BA2819CF7F5BB74AAF99A37B56D7F6181EF +BBBB62E18C26B79B691B22AD307DA6820639CF96C7A346EA38A7DBE38EC4A9D102976D8EA550 +D1C94B32C0EE1469F76C3996CB82FFFE1F2571D96F173A6DDF5CB9A5F76C977DC9F316F25FC4 +61040D8CBBCCCF9941D034F4ABADF1630DB3CFAB2B20FC47DB8D06B7E1846B518CE9E0C628D0 +CAF7F80D5FF7B1B1DEB5018675A0FCFA07A996F3CD40B0F792338FA5B63131C88B2DD26ECB7D +0A97B28DC6CB48F50B02A7C208DA73CF5377C561A6E8D78AB59C282AEA1DE094EE74EF5E80F9 +44025F7F9E00380308D75DD7E0C059A9A7317A488A007670BE08D38FCA8D197B03C483FA0F46 +1EF4806CDC0B23F10E7CF09ECDB1395A1428B56B4EF3F1A89DB6FA66460DCF1ED1A157BCBB98 +084F630377A92FFE603374BA934399723457DA7D0253863E7C8F5E3CB01BB74BA6753678EC36 +6CA115B5836A1BD43155F956C7F107765D8E746E8BD0E11C2BC4F80EBAC352D85CC09EE42970 +14D8791D481D2E1C654F4C267FAAE6C46D9780903DC788EA32436675CB65F8833D340F58675E +8731170473C45ECBD5AB02D77E252FEB8AC276D505EE1343F3F5F1046F29BF706C4C3F52E024 +A0DBB4572AB187C8503BA0E9EB4969F44DB6068ED207B457896E9FD05411580988166437D89B +9F3AE0D16CB87A94843639CBBA97A156F8B07BF16C661F6F4929EE7CF184ADAC2DA87F2E7E90 +BA4916B23CE8F1C6C3E452533BD39F9BC14F7B3422DBAAB75FA96C5EFA4B0CA4B1813E5D823C +4592A0C54320135B9E8FD92D9F75CF800EF2EA5AAB64149075C40617D405084F46AE813A6F78 +F29F34441614BCD95FAAE355F771F53DA38E193D9F9460CFE4ED2F38918056DD5FE1C5E25394 +5064B5E1F76F6E48949D3C021EC198E1AC5AED61CDDA8FDF39A3C121D263391A602163DDFA46 +3E6749B01F4EDE29600C5FEA1DAFCD849F51AAFD04A0C8A504915A8CACB61FFD61E17C9B0EED +9590909B765CCE927136FF1FFB71D33A18C626AF34D52BFFD9FAA9538388A139DEDC21BB04CD +99173E96758B75E8053A5C27D9EB7A29D0CAD4F055A6ACF498EF1765CA08D669898D9EE0F30E +9BDC5774B83D6D7EE498997C2EBBA9D2AFC5251BAA4899CD0B64B543A67861314F4CA2F667A4 +94C57C209AB2AF7EE8E4E5FC0FB0E24235F48D83CB44CD5D833076499AD6BC5FBC97A5F2ED11 +731AA9D3146D4AE8D9E79D316667AC445EA9D63C5F2ADED44AEFBD382B7037ED814DEB9527F4 +5E58047F3B1B3FCD0BED6478E17BD4DAFBD57F365B977FEC7D94BC31EFC2C1B4985DDB28705F +EBF645E10124CFE0F1348B2F99073CF2F910AFFB284C17B436008E17E75B1E12D3A80E4AAEAA +EC845628EA6BDB454F2E04D2168789AB27215C831C9EC510D46FD73821DDA2CEA3BE3CBD56AC +3C6527C43F233FBBC3FEE7D97EC19E9CEF7C98C0658B52AAEF32B5F053B6E1C9FAB55E026680 +2B34235FBB374A421BD90722EC6C8455C3F657260AB830A1C32E8A04A159D8858238E6FA8525 +96CD16D891BF65DAD55EFD61585FD7FEE57FBD8398591DE62535BA65B3B13F37C51F4E927100 +5224ABD38B47F488A0E5A7EE5FBEE849E839E5764636C3AFCDC52881C7E187A46974B8C9DFA7 +B27F01197C9660E0F489DA5FFE4B1000BC6290760B02D74FA0C1EF2D5BCD4E9B2C6AC41E3B76 +3C946C2C648E12962BCF5BFAC0374CCC1F3659F91EB9821CADC614B4983C9C7AABA083E35CAE +18559FF42FB6A2E80BC8EAD7ECADAD0BB19D090067DEA2956A597AA9E5DF460F3E9B8E629BDC +1992EDD41A3277CD5808F2DC4B8C7FD9C69F08867FD68689D4BF50E9505E505AAC5134563675 +72009E9B96E7ED4BBB366D08C41DC44491560A43D2BCAB86E6ADC9BC829CFF096C8181180BFC +C249C3DB759B05978393F4B2380FB857D48380BFFAD9D00E445E620BB081CFD2FDA09105E182 +FA8F8B72BA849CB74E4FA168C3E0EF861EA99615869BCFE9A70B0A44330387D1F2275FFC441B +BD8DA42FF01816AAB6FAA53000C1ED613F6CDA9A0C00A18A9567881D39A369753E5725E3AF79 +2FC729D3AF70D6039F7E71E05D4EEEB4800A09948AB2918DA9DB5FD672B2C951F512554B8A76 +02295555E7CDF2F39BC048AC30479276B9EA4A0B56E88D1260017B9C2863DDECEA427A6CA9A3 +8E92EE00FBE42438C84B9F394C7FEF519C6FE32644110398A8088371E4C0A0CBAE6F1DBDB864 +B08C2984A600B2A2A4B1523F07D4F04D479D12F8AE39A602560784DA69BE1FC3361E9E9A9188 +EC68019D2C29EC12A5452C27564F4808FCF7CB42638E838286A3F96CF603EF88FEF15E41620E +263F86E6DF082E3ACDF8C9700A1F7F167D8C7AF6B591EEE2A22B4DD38EDA5B3928D6527DA5BD +C9537DB63A4031FF0F7057A4F42F535E7BC4297021526A79DD5ABE4F63D4EE9499A9B64E6575 +0CAE0C6A280475D6376FB67B3D8A274CA3AD188F8DBC75CA19F1B281324E85927D912C89CE26 +F423753B53A55C0D085E576F2EA05BD25C4C1CB67D0335BFB839420C14B5D5FFD66989FF2C59 +2EB45947A81678EC6CD0D8693CEBEBB22A18F9FC5B25BB67A2AA8BEFCB08A47A637333DA4534 +97C4A2CC411118B3F9C2363D144F7B71F72512C92762A90BCF9BE05AD62E5E37C36CCB796075 +426C946A3EA7A7B2C3EB669566500259E2416F6F70182B1898BFA7A9C7A36A8D25380D3AA703 +7C364321FFD9FB8CDE851B2F88DF2C4501CD51467F2DF02DE0CB4CD6B8D19CACF0C6E26E3080 +E589C1246018A94A6667EB7B9AAAF40EBD8CF7EFBFD286C896068119F65EC69196FC9AF064DB +6641088B73D339235FD9FC8543E0074DA85899058920BE8C0B2E9AD854D230E3A6280F1C0940 +064E99A15E36A1B60B71717FCB68AAF53FB877D48DD15B68EF58C51B36ACE7BBC95147BF984F +1C57C216ED78B32C54E66328E01117D813247073927EEC57D912BC848B912F360FDC3DD8BF20 +33C5C9D445BB26F1E2E9193BEAEC0F262A3639AADE399DAA245D8974AC09B41B59C453ACBEF3 +D92B86273D580929ED4BAA8033457B490C2C652FBB6896A782C05AE45406BAF49B1289EEDCF4 +4493F9C3253D851ACE91A5B2853A22F00724470B9529C84DF49797F636B3D95D43E23AC3015E +D9D9A78A3758963C1A82E7AB7A716BBF96EAFB1DD49D56A7C037886CA6F66D9679036FBEBDAD +86FDE112C44CDD7D1878EE00EF4F142A71A4A67AD34A9458A610AD82A7C6104AE60B0A4811F9 +8084AEA6FAB407ED8C05311AB3A63049BAA67EFBAAC66B46F3FC4318A7A76BE15772513C5CBE +41A83B7BAEA045066D6BEE773D7C6A619F692A5999657F4ED2119E54117C8CF12528ED9BCA06 +CBBB81DE3743020D146FF5B9572F7359A7AA29D616D48A64435155577F3446D9F4041F1F40BF +A1B7C0A637921F5953D6459EF605A612CF3E05050100E101A4B07E7B22E68622349FD62AA0CD +8807399B223462CC2B2571896E36EAD5081A651DD4AECA736E04E11D172FCF656108BF725393 +E6047E08280A4ADA62807FE911A15E7F5A1224DA23C47D3DF9A508F8BA13941C222162A54B84 +44180D1F8270C48747274F55EF4CA73B14FDEE152D09AC094213266B6C47669E7B83DA8C8B94 +C1D082E6EE5031017E112AF6F5ACF48AD3B1106AB79B6AB03C83B2928A17436BE7F09851589B +45D8C64EDAAB50C649D8F3F27BB16EF656CC8E0306E82C8237034A8C5803B0F3B1AECDC981BC +D70FF6428B2995BE2C10290C630EA07E0AE82009F1D3696FFBE386749E71A4025DDE64309A0E +39A16ED744090224C6E7D167D9B8D09E083A748FF4A93D734EA6A74B031E9681152ABD0413A2 +C81D5635E8A41C8CEC4A80D0AF319BE22FD450E357B0E8979FA8A229F6748053E911EB8C8C6B +601F915C32D89810C669024D98B7310238907E1535909A4D86047741CB9A60CE1745E67F10E5 +C701B2D0516D8A701FA7DCDDC9B63C61825D19400A1580730001EA089C0F28227C19E15E0D65 +C1CD06013331D365A5F7A967150966DEE3AA6FCE26C325E7D58DC98B2B1C1FBFB02214BC4B1A +9648ADF27DDCCC963EA7E093FD55731950E93604EC6025DD86E9287B0C67C6EA0D966603377A +C3CD7B63102990A20AB67E8135E4D1A919F71C94B3DAD964B8ECAEEC67EDA37CCDCD05A1CD56 +687A27B9A34CF64AA79F8122ACF294AF7DCEAB5089CEEA9844DF0963A89DACB9B335C79B4F2D +56A3A79912EC12D1997108AEC17D09BC5195504476738195A370BA31391216C1DA185C52EA3E +C1663F0366CF3AD8AF5A8D249165E195C382D3ADB9DDA81E6CFD5111BA3A1F9E34925C96E50A +F59FA2FF2AC7F3DC83934B34C6AFEAD5C77655486ED36D142E3816A1349A12E5040700169BFA +F7BE4788032671F296076FCB427A76DF2834FB0386B2EBE115FDB5B5CE32D57A15410005208F +C897D88EC8B2B46A870F0D476103548D553D2438222CEB4EC6897D2810DB5DADF53B5B6ADD9B +9A71EB194549B33B3BF7A68E97DE150F4D0252FF10808947A8C101176E95453A15D0E66D511F +04F38F403D391B3D288CCCF72DB576BC570A40D3E8E5D2E7DA7F30BC7935987669009525BA8A +455B82CBD926F9D1618FCA6DC148789ADFF738AC49633EEAF3B888661885457F4391CE7C1828 +EED082EDB38D41FF225B33EA712F582D90F09C6330CAC12C489140DF4504C4DA101347C5114D +14C07D745E1FFB92896CCB79705BA14834A75F0F3DDFD1FCCDA8BC5DE059529680DF1876E41A +F43FE1A14310AB93DB5E786A167E446FE4302025AF6B3D8D5C725636CDDF52C9816AB82B8CD4 +83AABF7D64383CA9486ACD71DAD03CDCDF43E145CA1FC94D9ACD5420A01005666DE5FC83E43F +6A96A3F1670E75A23F740CF7A60E18171B14A94DA4D07C4147A23F89C97E6D00C96A14E66C22 +EC782FA58FDE3AF40BB4A5C11AA5A9796025179AFD88D99F723B3973BB671E34D209DDB0EB6D +C1732A128527B328DE5C4DBA0EEF997428A2E45CB00480C231B5D92225CFF3309F433B1D7A8F +69157A9604EDB80B3CEE8115D70EDF96DF018F7201FD18F06F3458CAF1159BF90CB565163926 +BD8F4D0977FDD4695D035FFE9F78E9DAF495268A87F0F8E1BA42E1C4F4DD9B05356988E11BFD +95C1D802FFBE17FA86B5ECCB2B5E9CD88F207F90A3778748DFB87C512569A1469780A0FB01D5 +A384E0CD78113ED23256AE529B7E781373B80BF1EE6E77F200F8D1FED4CBC879B5EC66FE7E13 +AE60FBC69D4F2FB1FE730F186D3BDD4978CABF4CEEA2C7BC7C1F02D9E6AB312F6E8FAD1A0F70 +67974F05648EE94D0EA8BF45D2F4EFDD5380125C4BCB71839761CA99CA4452A4140C13ABB97B +4DB59F6CC6A4308B8185DCB4E95AF89D58493209D8A9FBF86D999E67CC864DCF467258C5C605 +03D54EC2F758C4DA866D8891016BF166091B12E72B1216CEEB2954ACC9B1DF4B640702923EA1 +F340EDD3419E5FFBAF1BB29F51956ABB395B1AA815E103479DFE45B3677615C08AC770317269 +7C7F5223C9547961A33FFC5D794C5CF7280C0417635B9A64B837C6CDF1940BF5D3A2CD9212D4 +14A3167FF7C7A51C83889964D92FFE0D550CA7C102DE86C82BAB1DA3912F3190F00872ED9D0C +19AC14B72CA8FEF8B826B63A163022183F998CC7814D78D9D8C38AC122B1267CF92D075D8EBD +79E1209E8BD89B056E4CFAD4B1D6A822EECDBB2FF40DA248325DDE31A95EEB9EB75D699B9EA9 +46ADD2365455D9F24A436476CE9E962E33E450C186A006EA57651AEB09D8DB7134D0520C1468 +1BEE3EEF9F3A84177B6D5CCDCDEF2BE7DBEE03997F7B34FCCF9AB319F0680C03C2771B179EEA +27E1FA6B2EADAB7F6592538CC1ACCB5F64C3F7972943A942E7FC28DAB2D8BD0D4A585E94CD6B +467DEE7EB490397F3A6820B7CD9E043A785A26D0509FFC935900EADF6297B35ACA9239C776C2 +B6A61523A529A54E01199B30522328053878C3DCECE69AC39BCF136290C5BC6CD04F5355723A +80C79624AEB7F76423400BEC6EA0531C57816DA649A44CB791275F8146C6F6AC95CCE9C7DF4D +18E8DE58B7F96F425D92C7D3449F1CF5E067442391F0F0441DC254A8A3D4C7597150331450B4 +5BFC026AA5D0BEC87414AD2A6E07F5FD61218AB4D1AF843C2AB6696361DDED9A9E331F368824 +22791FFBFD40927A9A65580CA9AA9CB36367C52559FC3209A96CFDA7478517C28ADEECB8C2EA +E5F937AAABFD9CAE42C17749D721F19D318388F7F2E859EBD55AA68F41DED828451700EEBF9A +7763D95905407731A817A5E785509C123754F745600659A07EAF8C4D08FFE1E41AA8CB78CE5C +FCF7293E5AF48777561A4231034DB95CC1196C847A1958C4F1AB2989F8364BB8BEBD6FAB569F +C4CE68D99C7B7771665B895220261DAFFD471B89D2DE6066C8CEC85823898879291674D51382 +6A44A5A2FCCD842B9CEEEA58DFE92B0A78D913DB57D8A15711609F451D60321AACE03FB0EAB5 +BC4E05FC73C0E29B7AE92403439D3DDA8D36129B1CB0A760C0677745105F93936AD4AA8AB435 +77C79E15150460A16F1C217152779715493F0396F46A80CC38E2C9991C9866796D03AC9DF4F5 +C59547F4671C27A74010B946BEF91FDED2BCB2E88249B37FE24F6B642350AEE9FDE8AF9A1846 +B5CB26DD18AA8785CC4B24A829B5F3E8293CB1CFE81797FEB369872B9530A3C0E966EA3A173D +25EC080F4B8FD4F556165CDF8B64563FE05611C9B3EE283D58BFD1B6A358DB387C4CCB3EA0F4 +5CA7A1D1578BA672D16C1B200443BBF30EF30EA2A5CE8B4C0B3EF08067D319CAEA860E047CA4 +3C1F7DE53CA65A7D92CF0579D13F5AE278C09D0DE5A169692AA07F740D829654F0680CAB9C79 +87614B458A3CAD5F0E2BD34782705CDA7F9C0C00B5606E0323CE23C78B43ED2FE475FCEDE0BE +1440FE42F488209643F76CB8F4DBFA2D8F089C7B425FF199570FA1D811CA4EBCCE920CB75986 +FAA11E1A666D3B821AD30CFB9648B97FA98EFB14D3EFE11B9E84FC33080755FD53825468775D +7460CC9758AEFF32610EABC33709088D60E7BA195279D2D1E7F8E2A5B3A427D0322B65D486D1 +E623DA45652AB7F71EEDDEF1FC1AD31A5B4C620A85BF26D732F678FD79A2213F78DF9ABB79FF +B9CE5AD8D59ABB59B75E48265E5F89994A4E3FE517980C63B94E0CB5C31C3858DFE6F6744682 +D300A12844F97B4EB8DC14D52B1FADA4C2694596F889621F0C60D7F59909928D6B9C4BF0260C +DD1E984C167D3BFA86145DC3733CAB12C945CE524341B6BE5BDBC882BA89B8493F4BB5DAAAC6 +8265AC8F0D1D8781FEC6A913F6C967C2E6809E6E7DA7F55E99AF47FF083836E2D59B1DE167BF +7B85F21A51848D37345BD6617ACB7C939FCE5A99615CAA1592669199C54C616A00DC2858B1EE +3E06548146B81EBFEB1B52CD3033FE447CEA19567F80EB109C9F64EF24B2E067019DBA2C2608 +FD901D7C9F6072226B543542D917D89731586A4B758ED05C95A2E8A264CC2AFA63F2A7952BBA +E1A771122530B8770ED378FAE3AD93406107AFA5EFFCEC6C66CD3427BE67C8405536562F9039 +033B25742F13ED631550799EE520ACD98B6AE8CE08C3951FA3D04D66E91D42D54431E7F4C36B +F29B792922BCF1D85DB39D66B6FA92AEB89E2CFF9C0A150FC67A419D926F10F01A8F3E18DFEA +9470586ADD9DE03892B9E0989A2B1AAB57FAD07E5D9F7A5CB510AC82459949A286E4FBCA5199 +54F1EC6118A03538FBCD4C0CF85AAFEAAB0390AE0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec + +8053514D28EC28DA1630165FAB262882D3FCA78881823C5537FE6C3DDA8EE5B897E17CB027F5 +C73FDBB56B0A7C25FC3512B55FE8F3ACFBFFCC7F4A382D8299CC8FD37D3CEA49DABDCA92847A +F0560B404EF71134B0F3D99934FC9D0B4E602011B9CFB856C23F958F3C5A2FBE0EF8587D1F57 +74879C324E51FCB22888B74F241550D7401EB990D4F3A7AF635198422283CAC1B6CD446DDBCB +D915DB9BFF88844E784C6BF7389803D9450B0C21756A017306457C7E62C1D269F306BD3402E2 +66DEFC3B5E7D8A8D2F5BF0FE6DDD40D07391DF4FAD4A6018DCE29A2B8F692B29F2023A7C0E66 +DE8ED85C14F1F8492167357F51A7E84CC5D92E0FEE4D81CF7FBC8DE52D2E7BB57142033993F9 +C08C315ABADE8DBC4A732E84E142D3BEE51557910E12CD8AA37C459A5E6B7F5269F59078ABA3 +BE4641A11AC48D0B625C8325B38EC08E4C9E5E7FED976A5650D99D82114F449B9CA14C4EC957 +702295A39A93EF93F61899B8EA06B092C3C1E503E6E436E0A9FA22576C8930AB3DC8C20F5D82 +B69CDDF8FF4DACFA9C54BED5A3AA3EA5B129FE96BE632843B9B6BC91B615581A985DB56B1E01 +CA60EE69CA92CF5C0882ECE62EDAD3E106D835348822400F0B66AF658F2AE56ED08F8B001057 +1807009B73AB12A8CF14CA6C71F03C2A48C500F9D62266AF154A6375FF600D9BAC3F05CE3414 +2D6867A79581C533176BB2F3117336671E2E44638A97167E2EA9644E31EA16C2AD2990EA33C5 +4001E0C8156E6DE8AB6A4D40A7137BA275F39589FEA2E2DB8256ADC103D6F9CC038037A47E8F +D469C5F98A5E3C15BD4ACE40D340018B1CFF7D1ED8ABB0AC57B5B5A2C20A51957B96C453EDB7 +DAE5AFFD91A46D938FE0A13363001D844DED4323F1EE6D30012AEA19B024A552315505535C85 +DC26BAD31E09C50E6512802976D298C4E90D0044C362E6BF3AB362A454EE93DE25CE54411090 +C29E9D75C80CE26A84404BD9DE3AEE0E3F921AC587F907572B8354A5C3165EEA7E8B2BA4E333 +802132F760B41A900C698EB3D2738BEA0AAF7AAE96A558F08B61AEC7C7D65B2889BB7B99800C +FFEE5BA19AC90FCE11437BE1DDFCF0BCA5670B543B9644A71C8726D0C1005ABDB96F6E0CF7CA +AA3195017CA81519151C2C0B04F81E717C0691B63A76E9B25329CE2625B711CB7BF99D23EC2B +B5EC8AEFB8C1A3B422AD617B3DA4D49685FD44CC21A1FE5E1541163AB3E1594601D63C7E9880 +1D7746474377CE93F81404F3570AFBD5DBFE77578605917AB96963987E6EFC2D3F99FA56ECAE +6422579852567F90CC90E4EF6D6F71D1858270205477E221018A375CA83C572B3F972C5181D1 +8643CECB04909D84CF767174B3C0C8EC69BF1E9FDFBC0FC7ED97EC67D878EA4DDAC8CAA522FD +C6932DF721B81AF837AB56B547D4799241310D6692918FCF8A46189A78D6638AAD7CB4462D87 +74EC73D184076595C94C0B4A8233CD34F2D92F6FF94F941DFD589DEF2CE790D5CB2159B95333 +8C7384CB68C11779120A68BFA20B993D8C0313987EB96A2EAA2C11CFD838E6AA48A89E6DDEF3 +FAE1A1B078BE9787140270556A96E2725A8CF1AD46FB52938900730154AEC60F544C3D49F176 +3861F54B46A3B70315B46EBE51C42FABEA87A5339ECE2B64270749188D73A07E0E3866EF9AAE +A996FA92AB443C08FB8A840DED26BA68E94CC23CC1F6968B0F3C7E8F4FC0C5CAD0F7A332E7F9 +55287ACF2485539C7B652F7A29D9E4AEC20A8E023AEDE26BD4C761BD3561269FAAC6FD5A651F +FFF9211F8DF220994DAD6D105A92D5794CF2AA526B2143C7150BA584A2B597F6982403D93073 +CB066B569BACF95DA04B4202BD24059A8DBDD3ED8AA9E89B2788F3B078A81A557BC743C12A1E +00FDEFFD030C032E81DE3142A106C0EDE1BC9D566440BCEC4260295CEACDD54BD0E25F6B9DD8 +FAC41F453BCC731777E1E6ACAF37A8178D11BE1BEDD6681815F3D5EE8D240B7CE9B14FCFAFD5 +04216F26DC2827FB0F6158416EB24F8BD7616EBBFE9378718824CC6E51135F8F489E9A55A0F8 +40608A99A32EADE4251F27FF86EC7F324DC9B534D7135E30F2EC1B6D93D7DB919651E03F30A8 +82F2DFA457D307F17751532AD70E632A04A63CA1A507FC6AF4073126BE0127D86974B426F489 +FF62A53C1986FD048AD76454D42BE16A6060101239B138BB638765C46EB006F7F8DD312337BE +08D4381272FCEFBD74B7B2EC098B436365586A832721A0113B2BF1D853FA8B062BEEA25CABC6 +0998CF4D38B49A3F4BCB372198A196C9EB6DF2CBE59A59858AE212031C9AD7FBB9C3E8E9E6DE +45DCCA521F3AF361282F7B3EC507C8B3AFCF18B9678EBB2F11C01C9DC3C4FD3134C5A3DF6B6F +4C75EC985466C4F505847F1475C91E5D83A6BF754837DA02F9E868EB0DD76EC4D31C8B1ED935 +ACCA73E1CB9B4192BB0A853F947228C3064E8F923A9133EEC9C52C626E29689DD54FA433B970 +2636FBD87C5D81C4F278168783509D5F4256C77A855C97A48D18DE6EE1D47C7C33E9AD227ED7 +02F120303731BEA6F3055D764046EED36A06C75855A928084C5773168AB985DEA7CD767C780A +91E740E6E088CB93D43A489145030221DE0E1B2DBE954EF414B9568F3B1C5329F5FCBEE927AA +23309AD22E10F9349B6CADE7A090D19B9460405CDEB89BF1617B2C297AF5629458235F1B8C95 +F5BC442DEBB34DA5D20B11E96660CE9E5CD19A84AA54F42B106FC87C7C0405B0CBBC249950D3 +A7C353D691D77BA031C840C8F43A220CFC749CE34C2791DD627CA074753963D2E59794496D55 +AEC96FFD48EAFDB29F8ABC8D91932DD5B01F65EBDA034BEF3C7219E097670621058662C5BBFA +A939DEBF999E9F68E5C4E64CBB0774A9A186E741346103865FEFB088AF547545CF7763DA0664 +96986377B587EFCA5C9EDF22EC13D1AA6F483C4A0ADDFE395F83534D7BE5285E6A207D53A8A9 +60ED89E9BD27AFCBBDA23B2D9876A8D8CFCC299990D521E076CF8387D514570871376C21509B +95EA15CCFC7278851F14DE8308B72E111893F0338488BCEDD0F2F8EAF07326BF97C3727459EC +89F8121C96A45E3DB1C63D478D0A6DA5F5E6834938EF1CA41B910F25A82F2774E3CAE9F1909D +BE21EE8E003E27B84C43B39FE247B8E19538648F246D325357A246365B9B2B13DC68CDD7E44D +99D86C642565B1FC376D2E530048B27A7C44B6811719054D3AC99CBBF5665AE76F11E2781B8C +040F73454BC794B1432E6C3A58BBB8CBEF345D3178C8D01D6B26BF7F485A5C3BD36DD01F39B0 +34E536ABDC6632EB4038FCCAE0453E85B3BED8C3D4620A2AA2DABD0CD93090E9B8E964C491C3 +AEE45B592E4EB12970647E2A5E68BDA429F53074257C02975268F8C28F06350C26646D658008 +FAB0562F40644EDB0FBAB79826B16CFFEF1302C8A13173CC9CF7C8FC906693E486FF096B2D18 +E96841A5FA8A34A5B4B68462BFFA48102464DC22EB50F1F80A26E929D4CDC4B90589266915E8 +433D46D433ED8920543777360D25546794CD9A3A1EACE8AF188CC18DDB9DD1659F9FA462A5AC +E6A6AD068140356E8C1E48DEFD171947F78F086C6E267FEF13D16EE68D0FB0AAE589F7E090F0 +88FE80BD6CF8EC0EDD28C735748FC6E7FD421E33B16EA6319937D2D63A94AD76F95B61813DB1 +81A113274D5F3B4DF5EE90E69FAFCAFBE4466F5D5F48EEA62A7CDCD4F9418437707F706B290B +86C30FEED99522875EF5E2D491920983BF4E9F1C71F20F1B9645E30521EBF2F1C9010103C60A +9A6DB7E6297F7C3E29CB150307FB7A1A1A94710EDDC6AE88742CC7044492DD7A217583C99A6B +E7B720246FDAA00683A3B82EF6BFA87F2FCD741AD8BBA68B751740435DC6AFB1BB88D1593DB1 +52CE92C19E1AB29C8E8FE89477CDDBBE29B8DCF1EA6F70990BE9A0425000404F2F5DFBAFA35E +70BB87066464C992343E8BEC66EF483DCE474F3ED7953DC1F6BBC14EB3495704D1765D0B3285 +A05AE494342F6B70D9A4241291B3147C77A8AC0E08E5BFE60C8B6E2048876A6CBFAD8EFE4860 +95DA764F4AB9E4D8153F89BFA2D9BF2759826EC18F64F1AB083949F4BC127411A477D4C24D7E +0FB0C96A96A31386CC5892B398D48750FD09638BA6D62CC685688E79AF31F13B744F395984B2 +0AA483FDA558C6A91CB9AAE9053E7A5B5B8659BF0631C543F4C370FFB006290353908786BB5D +B373233C12F3506E2C4DB0D59C1EA8EA75A7662B90C4AC1561303F4FB8536C1534FEAE4ED772 +DCB49734F5285FAFC99FBB081ABC3DBE87180D9BDE2A844B054D8BBBBEF5CEB39F5CADE252EC +6164A74E75625050CEAB8FD8D8513550D4420FDFE6FDDCBB816E204115614FE82CEF36DB23A7 +DD31CE6FC923B575EAABEBB5820BB2739CCBB41BE2A4A95CFFEC9332DACF05936A3194AB4F77 +39E5B4A868A7CAD3B1D940056F84B41E81B072C02C0D0BDE7C64DEF54B1097F68368AC0B39E0 +DF5E5733FEACF02EF12A1CD0ABB0805C2F7E7FD7C824D9B348E893D68F3F31B807829015C54B +8D2AA7E8DAA14A364428F3E706FC649E274E47914452704B1BC56A41CAAC736C8826B7BACA1D +4FAEBFEDDD0EE8FE3BCB53EE291356B7A4B699C33CD7EAAC34E3B92E7F3ABC32852453259908 +74E34513647D521ADA13F83584CEF20DC503EB352BF881AAD4C00894CC581A819CA7CDE96A9F +8DBFC22767B215141C8677BFE6F1F0DEE4254986AE871F87BCCDCC10E2298BBD90A625337936 +3FFB2B093C2F54001070E655E9C4CD389266DE373971BB763279F9EFC4E5A223990153618C66 +54B5740049A3DE2A80D613CD5AC5BACD34315C43996D1A420DDDFE7365060EAC81AF060B8344 +3FA8176CBE3F4C2EA819B493FB5B4A2E4A0039F028CAB0B47FC70F178DF04C7CD4DA22BFBBE5 +344C9E9CDF1020AC1A43C8E5B9D19B621565A6DAB2B1CB6CDE2524B33FB1DA6B5988F5BE4E73 +08A17C73E406DBCB51FEB3D79B84FF8B0284F7EA92BEB9CBA6CD5999CA7DD20EC02E000FB48C +DCA51B8E747C0E25B28431543D9095482657364ACC1C647B2140C502623F7B9E3F335C2E44DB +33DB82C01AE27AF66BC2284971A5249911D897263210DE4A9A65232738D83D10AEA8C5D3C687 +128B64EAE94D6FB30B7BA9105BA8E01BC9925C312CCD8BD273E904D8FF13F4DF7EDD21C23D0C +09A32A4C90B0577ABE7AAA53E836CA60B1697621049BB36F8013026D77910193742725574222 +DDD3ADF4E872E6D57C1DED571A1636893DD7F49D8280233CFF4339B075628AB591783783548F +17134E69EC5EC25B3B8036039DA276BA1507649E7DF1EF9E29F0AF07BEEEA346D470B4F1DF92 +5040602539BD1D8218384B53BDF16C74A1A6BA2A7871B67E06CCC015BECF2F020295E27CFAD6 +2D3EB7831922FAB24780FB158C21E769875373606E1BA9BDA9F15352EB5413FFE162EB2AC194 +4BD7D980D232A2F3DB3CD38390E0DCE3241113CEAAC83EE29B2980EA6DDDD4EF5727024E4343 +AFF44318AA1382662A78A41BFD6ED98264A6B0BC629CF924EA0A635B0885D682C26819043E39 +ED44241D4E8B50AB92256F9431A8123117D77891AFFE4E2833BC0517DE287A747E88409CC30D +7D098A4FC80C6D91534304E7FDA873FEFF704EC1F7450226F09D5E89E245622973D9A789736C +71E6651182BABE81ACA969C62E1458FA67A3B9D38CF364F383E719F7066D2839D95F262F8A5A +F87DEF903EC3269466519E68E857088D318839FD0B0E51A6D358A93A543E2401F57FF7E970F8 +BB7BEB37BEACAA000EC58DF62D2064EB45A81144C146B744B10406EAC2C1E350E2DC328B6A83 +9DF820B289A84167B404BA1FC63E453DE7B58A9EF959D7E2FC1DAEB5CE90A1DD935E8C5D7DE7 +E2684FF0502901BB451FAF9ACB439F548657E3BE938E7A2B5924DDA2E7010CD26A181D84A5D7 +5294F6E56DFF88F3C207C9D457CDDBF2D3037AC9A93CE9D53FA0CAA4F21057762954580F0F2D +47AF43D5D7679A9D44D45D682EE73493A2B8C390E24EF27C84E701C879BBB1FAD6BC8B89BB27 +959EE86BE486786D1C81612D9546AB59D5216367C027B5B0F51A41C9AE2778A04965A846990D +1727F3F3E09AD0B913C9742371AB5669A2CF4863833A19CE69FF161B1D6BB0CD61272CF94526 +4584ECDCD290E2767F087A836F12AACBECAC49C3FB28A605C6220E8233EA2C9AEFDA87EA2CF9 +D3D52FD6D16612AD07279DDFC4F20B59C905A146B1F4A51547DB82758886E9D3609B495BD941 +616057E460B94856191791A2D16B90A7C33534A9DBAE17C96D68E009219857FBC92EBE189875 +EFABA56704CC9305DE0D32C4CA5293B306A4EE9DCBB131C128626C4171EBCB2DEE830B9BCB98 +B4FE23BC63C9186C21EB7D9CDFE2E685399D57D6D1A857C11FFE47F6D0BB79839B6C88702EAF +6A59BEFDC8B35A03768AF411EA16C277F7EFBADA006619B31CD2EAB657BBC8CD4A44340F4D9F +D34007ADDDF2DCAC3058D22267490E90657808CC716B7EC3444638215495A7BF077956F16EE3 +053864EBD2EAE7B210EA370D71414952F2076D689ABD98E76030D92E4D49A79734FEA3F05719 +8F8DE62F64468D06D0E6443EEE3F2677049B08E8A09907A2785D91C009F8FAF6F1DF1CC39D0A +E11E8F1C939A0C13E49A448E89B0EDA7CCEF06166A8449B358B0C661E40A7935A6E4F866ECE4 +23CE4C978CF749F3B2B8AAB56AEEEDD498DB77143F77B4FEDF5C6502A3D2AB4D0BDB8EE456D7 +DA3B9CC800DA8D0CCAAD981DA5193A528C7B5628F065B7FD1DDB0FBC4A74C32751E8B4747206 +8A3A6F380CE2258D33FC49780EF2570FD279BBB54D4246F40CFA9F13AA9E13C6CC030DC19960 +115C2DAECF52027F917D3D9D44C60B0B2D1030EDC6BB055926CCC512AC2BAFAE7C12D8ED487D +D3901FC2842D3A7A69117A8B82292FEA44FBD40BF6C27686EAB94A520F63B77B82D5425478D7 +4B5E4E81A8439F560B1CE7C626E51CC3EFB877A9AF37BFCC1A72D40855995DF53B3F4451CC29 +A5600CEA6B2FD2BD9DDF106FB7B6B6E19477426212F3B5C25DCB1B777B643A318046E02ABBEB +67201DD98D892D6E13B0853CC206B62AC7E7D386A77C6C9A3817FFD5009D515EB5F770DCA0BC +4D9DE562EFDAAACEDE34096EF6DCEE08C735DA36893C41592443E0B69446B93EE9F758EB75C2 +4FCC4E8193A1F77999F2D4395E1BD24909CB805CE3A26A47ECF376A79F480C9402DCF3A86BFA +971DB7C977F813C21AC8C071B6F210B251695A40B735D7F8E27F9DA47AF7FDE2A6E7321488DB +E7555BA82E23FA2DE3092227E1A21C5E6DF4EC83A0578B4E99FF377C9E655D7D6DE412CF0F67 +D3ECA45624BD1AD4EE76AAA5F99C73A1FB470C8C7EA472890E1436BB51FE764F95810DA0C3FF +D1C3136223F6610F3B226978B8F9E35C9B09DC863C05DF439717251910A64E4AFAF2323CE1D2 +A168DC57CB1F4F2F9D24071F49444B1A5C6956F236734816FA3147656FD7C5F547748AF983E5 +529FA4787E540BDC4023377A7B7E248A37550CB0FD519F30F1BA3A323D171612F802068AE4FE +FF8D067185F9E5211B1218656EFFB8762824E05EDBD304B71678B3C4808F7819AF193B247D3D +7A3EE51986157E6D101C07A521379A097751CC6C53FC6AA6519E2D0093AD0CCC5145F4D788F0 +46EABE997100DEFFC6B7D79BEE09A92E34BCC15124D2405BB614B4E265378126544D041C4A16 +71E65832930D6F15E11387F39862F9BCD513CC611A9F9ECDFA53175DADF03BAAF5C32FCCAEFF +3446E67A62D3B15294E426310F64B6509E88D3225DF909BE2C73A9CC8CC643645B394CC3F5C6 +1FEB91F1522CE9882A60504C14C69CE7089F3EE5B3202D3E5C2C2A98B8A4C8655A911EE03DBE +72E474EFE0A0B1FB9062E474DDAE008B0ACE5016AEFBB40F157B9BF07ACBCA319380105AFD61 +5DA19C9F932BC8D14480F6AC4E607FD4A7C34AAC43CD26301EAACAB8A4DC8584EFEB56A2E569 +5E84030F39501223DF87FD3F16D3950713C483D8164FE2A180AFD985C11D55A9E22A61F0C5FD +3A0036DC51904A84B07D409388B897FC92C1C91A971B2482E668A27386B33494F751B5B9EC4C +5ED765A88F5A675960AA7F644E77696BEE684E098C69A8119BCA27067E52E1FA95C3E54CFA56 +8FEB54B92C3A8A2DA2CB44C9DA1DA7BAE1B05087D025F767658D885E89D654620C2827013ECC +B38C7021F83863313BF35116AEB2669FFABD5F1F035C23BF0244099A32D2FD13EE00C09E30EA +3BFE334227C6A143CB716A3C584B6ADD52C6370F7BA917855F2295B9DFF2BCA64A0504D0E557 +861EFB856A19CE99B64EB7EAD11C2474E79D5EC30DE5DDD094AC37D8EE50C4F4D39E32E284B2 +F347848ACACCF519272AA1FEE3000AC3A495B54385CB50373AB7B790B473D0449B7622AD526A +1BAC985945964D6D2B05089ADCF9DB30F1032639205877D7E78DB7F9B136055C1451663CE4D3 +9FE864E02B1339006A1065FB76C6E438EB132629AF5E1FCF6022E608674E3546CB02A893B558 +F3B2C76BD0A897B4EDE61A21B8F6C34FFE820D66F3B89EDEA86E13EF5CF0E33E82BAC2B4CE6C +DDDB572ED1C9AD69FF853ABC58C0CACFFC0D86D80D7C8D10139ED4C9DDA73C4B56E375CA70FC +E18EB1E322F046A4A44AD7F2731BC2059E391688C03B86B305E9BD9BAB8F3D1B6EE52789D559 +A5200AC84183FEE544DB210122C74BB2CA648599DB3CD1AF261567B84AEB332F0647288F8F8B +01D5068D74D7E89472D8DF3E901F6B523FE04C519843E0B730F403BB99CAD493201F950E943D +B95FC52B13A3AD8CCC6478D5CBE5DD019BED1ACE4D02E09353E6E31B9A9EA9C76D89D9490D71 +3CA451693D235A0C8B0A3DED5CF2A846ECE5CAF52627ACDBE76CF57A09CF6768D0A53906B15A +FC5183B9DE1029D19E64B64BC2E075B536663C524BFE35C9E412A7C0D23D316E0645BAA41DF9 +ABA61284F801F7CB852F49B24A96CD4C743F9B1D1A69F3E30808282C32C2C4655715D8F3AD53 +F3FDE97823989864479EABAB5876C77CC134EB66C688BE3777C74B3A87EF1616DDE5A8A46185 +997DF2FAFF5518EA7AEC3379730BC509D09C5C378B47DA67F9F5740B641DC790766896352D0B +E0EE84D686496066469C995583EDA0BFA51178091918D2B9EE8CED4163E45FA312885A64F177 +F03E6D77DD649C7D71B47FE885D72887927AC070CC64E825917776264E722AA6157C22A429BC +0D38B56E5A0D6473FCCAFCC17B4BD8860ADDB9BC33E2FDED66EF95205FFF084578C37913E205 +9CB3C1ECFA4142C0A2AD1781C373CB6FE9819F4CF8E5B5774D7A6BABB1FAA71D0C96175B9DFC +08A3154C2F1AD566E0D03E6A01D3848F0C6C06755A0511948D51FE8626A32AE97CEE9C01E15E +A61A556170E7E4D3697783BD42D586535C38CCA8D543A9AAA828C4813E89BC30B686049910A6 +C01D7FDCC55895A3F7019B0CC78C23925D8CC1207C51FA19E6B8992A289EDD5669C33186A7E8 +38D5A0A3C101C82558785010F877B05D943C5F874D0524622D43EEE25CA87C2AA4553804CB6A +D1508B9406BB1CDF868DCFFD19483BF1D8EE2844E62A2E1CD09807983B7742A841BA2A03D8A9 +2568624EF3C504F9B2F4389E23E323D1FA1F4F0670711DA7D827400F36C9FC870EA2553C7E25 +45E2A5086FED5BF966114D5FB48721AF70E04393326BDE080D3082C292C9C251E2D82C0C3F03 +04E9A46203E0E5E76829E21A3B961F02AFAEA15397F0060E5059A5FC66A2B622AF1D62FCAC51 +6EC3327C95A0C2810EB42A7209D12E90D1D41EF442D0F3DE55493615D4135B4F44BD09759657 +58B16A8DF9D39E78A73DF41C2EFBACC2C91ABF75C849E2BBCBAD263F8577E16D60BB6BD463DF +3A4BAC62F28B44CE08BF52A268AC27779E3A317B965A44321615891B627541C53768F33694D6 +EE76903BBED8ACC45FA00EEFD20224E09D95E93605987839D92C4E0E1853D8C3F25FDF0A8268 +B38A6B8D9286535A49B25631BF31451F81B5ABCBA66A07056EE34EC320367DCE6CFA97113291 +32E1155535F8094570639F9FC72E1ADBB4EA99EF7C7CFCEE8D74C2AC70927CA9973C4E1C4DB1 +13613466EAB58C0037BA93230A3D6EF41739122912A15319374C6A6D7FEDA8B1DC15EDD2F286 +12EDD846D8AA051F24523BF92C6920C2AE3CEED5868BDA6ECD483ED181AB69CCE78668A087DE +0A00A960810675F75412A8EB6018C638583DFB07B4B4CA48C2D3A7CD407F552DDD7A91556004 +2B173D2DFE64EAA41500FDB64FE572E09D06BEE892AAF0CD711F3D6752302EA4F69AEA675A48 +EE69C2416805E7E6EAD9889FE072F1C2F5D3A89D277A90DC9EA38271DA1A455CCB3598FA99C5 +5A788073DC12B2265D409DE2DE24FB4399E911CA80169AD5812BCAB83BD0692C37A1B8053585 +BD7303C20B6A06BDE9873823DE9E9EDD9F403E78E7C386341919035561CB94379210A5E14CB7 +43687CD843FB306B6946D8BB1C290D802EE3F096F54D70743B22E661F81C89F190971F27FF9B +0E6C273CE3B35E6F5A586B411F6CF55C2909AD70D348C6F6322EF1DD08EA36F1B99ED590D012 +3DB978BCFF31E5EE9EC3FB969E71C0864757AEEF1750ACD6A6F08A086CCF15E65A712ED37564 +B73DCF2A5E86E05C7725DE9F13DF59ED3E92438D9017754365735E5731853520D9771223DE22 +52388C4C6F7FF44614112780B14180C0CE01C50F94BDE65F4692CFF4B52F6D9D1FB562475BF9 +E94120A510389E9B3574C62FE0CD45E19615971BECB8C2388B4D5D095B914E6F887F3F708D7A +65B516758CF5EEEE4DD127315FC3EF04CD5915978141B2CEFB3D2C0FB5DD64E25EEFC85CB2F8 +80CC6AD20B9C9F0C1256A9C4E8CEB2B400C8D50079E6F58F7A064CCA9FC3EEAA7F7C34BC51D6 +799520C5534EEC1A1EFCC52B9ED43E7695ACAF3EC4590D9C0BC16915769DEEF8F39BF7992449 +4888D4DCA2484053A29598DEC70C2BF94BC2494BE4841F9676DE13196AF9B9A329DA016F17F6 +2ED26A75CA3089750BE5DE919429B989EEB4C10C20AB764BA2C4035F14264B055771B6AB98E0 +D673580FDEBADD2719C80E9B8322112C9AAA9AD2329B045EFFA948AF1EF7B0038B4D3C068CDE +62E5F808213F4A04D4979BFDFFFAC94483C546B35E965D4D0625FC01856623E146EF193A5538 +09C0D1E182E8D7759CD2B467A84254A2EABCEAF9E764A05BBB84522353B2505C56115F489E4A +906064C9C5266F823741A1BD1695796BCDAD01B38003522EEF9FFB7FB7F79F8D6C43B6685C17 +F72F06060993C9A30F8E31AE8CAE4F3BAD51D8262688A6443CE6A07C1CF676CC4F755849E2F9 +DA19B14130FC72E31BC6E4E062C041EAC5EAC486032535FEDC0DA2F8BDFEE2B72C1BF0BE510D +BA08E0A5700FAF1686EAA93420F20F92C0516609ADAC4F7EAFB5FB2CCDA18BB3FEE2702A462F +8AE39A733B0699D29FDA1E821FB03964F477A2FF5580FA4874F60D6F3505A4287E17AC2BF565 +9E42FD41F257EF45798CE2D8E09C0593FE7C41E67D79316E8D61CDEEEEEEC60EFC9BF26E803F +5C3EE7404D05ED2018F8C9DD0EBEC3BD39E20AFFB51582BD5049DE9AD7437849330674FD17CE +6B9B6F646F9CB66CB5DE5457BD512BECCAED183FD5C5D834846E6F8BE301FB267A4A67758590 +3CE45864294FEACC65B46D604D84D846098339D20FE034B77A49DDF85718CF9DE18D10028B37 +15994C5F2571EA3DC7E98F66601C647C80839E3F3477D78584870837F653243BEF6FF49C347C +5FE9C7F45A28F7BAC5AD9929D508628CDBBD4EED3295F06CEB89D378632C34D514A0B22BEFA7 +E090AFBE45EA64C03BD1367B63763F4570D25F59E83D344E8DDCD26CA66C1787FF09EFB314E4 +CDAA3BCAF8C94372828623E973768B6FAB1327C6CF5BEDCD37972CC2505B12D2A26F7D5AC9E3 +F623024A9370A44BC95FB17C035F71BB43853DC7CA66BBA610CC29FAE5636B21C2366F88675E +C0EB2BE3C127BFD579CF818ED98D657779430F5C75A0CB97A52F3547907BFE2AD55A59B0B5A0 +DF0D25000907FDB6D5781EA549FA89078516665CBEF095D9411A2DD1CF6A355BC77E2447ABDD +21DA230AA18D5E130DFEC1B75E5C1F6CB9D3C860A95E9FD960EB8D73EED1E168E357CF305786 +A8F01B63EA2D9301A6A3F886CBE4F678BF1BA1CAD67F3924B6408561A435E0720DCDD29C53AA +53C1747BA074E6588B3AB7B66B5686AA58EC9BFE7DC107D97B8EE627C9E79601B95791704FCE +469944BC90EC77AE5A9A5F2A73A4894712899DEF4BA334DB850A7187988BFC315A5E207AA6D5 +76741B3068F18C7AD741B6A4B6DEBF5A3C3E178D10E25FDDE0A01AFD5EEF225849E3B5BF1846 +28EE473A34303C2524D78B8E7B8D9308F1A90852C8463AC1997C91DD233CCB7E4A16E95CCAA0 +E4AD48E2C499397A4F558C23360EDE957D872238A446C39024A369429B2CE348AA5FAB425897 +EE02B71F085DE26264002AD168130598150C4F560E0510A135014E55A74F65B4CE7E1A96146C +609280B49F0AF1830C3C8A6045BC7774D3895348962A7AEE947AC962547AA28B02608CE2F91F +EC34848EC86C4BF8507A9C0AE9A0697699531E11ED9E85CCF52231672F0879B801860B013181 +5CCFC49012F03305D6D382E4E4565BD1D2F860EA8BD636D8582FD332972F1CBE62844355C933 +786BE37490A7EE43217854DF7797EB8680B93D9220F643DD70B2993A7A0A194159A9BE04441F +478A77B3D2CC38302701166DEA70D72224C9481BE0E68BB6802BC6E9D131C3B3FED642779139 +5CB3393D4817AAAEDD39AFD6508C9CB4FD67FD3BC18C65F27203AE022A522C1B750960B7A745 +0EEB8718DC911D645198227B2E729B6CA4149EB9D21369500208D94593A087C76205D1046B91 +4C31FB5F5D6FA1EFC908532B27AFBF73C27E2FC9228ABF72920CE48C03E3381A952A0B1F25A9 +9EDCD216B154AE6279B33315E822EACF095C00D7359EA834885DB0E6D07BAA9091FB364CFD43 +E378ED0C06B9A1F7C3A7922C85DAF6CAC5FC111A51292D4C7D43E9773F262AA032782252CEBF +2274842EA390B0056C3E0BBAF1DFE11D91679F6313316735FF6820166D4FDDD7E76A72469529 +1E224466ED210C82AE79C44A828E7B625F872C5A3723FF9A09E7D77D0555C9984F7EFCBF3B9A +1B156E5047E312C8CB86D26B0E6345FCE3BCF8D0196C95C5AEDED0403733EB6BDE2F6A65CD1A +0FE13DE66A2DDB3F912ABBFE0CD59D4A6D9299E1309CF7494C93896FE76C132FFB98E3315B28 +950E21CACA613DA51EA612678FE24DB3B04BA25EAD7E2A020318D2C79619B78BAEB21AEE2E60 +69D8470392695EDFBFE2DFBC2274D8BC8BB3551CA84E341419C7E718187260497EDCAFB7F588 +D1C7663CCBF8DDF1FE23C48D1A9B211BB0C75871CF8DE53C45A00E601F87BD65B9471CCC46D4 +481C5E83BA65153CE608D5FF6595FCED940CC0999FAFB2F44E0055E57E59C73BF3AD6FF70CC5 +A0F32A97D61CDCBEDDD34A295A3A7A9DF1EDD9169616D1F8D4C5E20A86DD2FA590B46A974D11 +45FE89D1F0664C3E0FEF70DF6D393AE7CF0B662E285C02E9C447672F73E90138E68F216C0072 +F5BBAB3943B40D24FB09841E142889A4B927E4A7F762E0ABDE430D6C4D8026F76A62B3B35BF9 +53B1EC19932E8E24EF20D2A50BD0EC86D6C0A61D1B206AFDB625353E1FDC15F96F3A48303DC6 +CDB7E4131FB3B6E7D80B1B332673F6D1DDA6BCD90F359014D59EB5445FB90E31E51D9E1962D8 +20792C2AC64E60125B0EE5CBBE02AC8BB9CA43A2961A5012E0BAFB42DA92DCC8948B043F0F98 +C522149E57FE699C9BCA6DF84D5FEB2F55C49407AA52345AF0F2B39C360876D5A6FD1C3C6D42 +82F070B8AE2DD3BB78DD78C7801A235EEF4A700128A9CFC7CC3B122CE69DBF577F6531B7898B +A31A1B915CCACC4B3B1226104877EF805795A93A2F2EB41CCB759441A17E6B7B033094D0861A +5A55F80D94B203FEC9582926A9CB5F8CB395C110ECE72754485D674DF6CC0BB84882BA26FC17 +01E3B2530A2D44DB5E8702DF2CDC597A8BD9CC12E95B7D274A51136B61E49C7F920BE8E6E17F +1B20EFD1F6F84ECF575B2CCB40AD7876E8B8C7B083E2CF8253D06CC4F6CC2A5FDBBD8CE6986E +18F759ABB35F7E77AEF16D5BB2DFBB457DA2ABDB2148EEBD4F88DE2B9B3244FF78BCEF9F98D9 +3AFEF587269D7952B9557D0EC61FB268980730EF3B6C5CF569EA19DEDD3AAFEC29D8FB9DBC80 +43E7C702920C678DEFE3017BD9791D74A6CE7A6BA312EC7407D2771A6F22E3E81EA35351C3CB +BDA7A7A5256C67AB65C84F0193D75209307DA141DC60D87B33684BCAAEAC9047A0F3861EC185 +132A14F5F48F19E38E132FEE76B5D7C70AFD29FE30411C5B7D624BD75FBF27D89844B1845F02 +7B866433344AF2DBF37587F2144E40358096A2F6CB884595E57C3A21A1B5FD1A9E007C530FBB +2FA384169531124511C0E643D093478AAFD5CBDEC5EB0EF47546A893EF0D04E30A89BC3D4516 +351662F937F26C80CA874E471EABA85AB541F51FE6F94E01BA628A0EA320FF000A2C3B93162B +40E33F49C81F759B0CDFC167B5E06A6B2592D78794A4A91A03F9F95AAB96850F726DE1782B03 +F66CF1C647872FE423AB0DAD21098C19A267859AB150D8CEE49EA83C0984C348D06E99EDB60D +797683B4B5255E3C521619DA2C26038BEEA2C6C013383A30D6155C3C6FECB3FEBF3205D291B3 +E26CB6F76AB6E222FAE350EF49B9C15AB1DBCAE734E377610A27B1013F0AC3B11E9235E952F6 +C65DAEB43581FE06E04BD94DBDD42AADE4CD6B475DA642910A0240BCFBB2848039B614F11B5C +0DE8B157BA49EC715748F2857009BBB3A0B550B4EB88631B53A69F025F61E4F0A1BF13265E20 +78C6291C114B8ED63A7F3A2D3FA6EA7BDA7445CE3DFA913FAB9FC964D6A5599175CE8EDE602C +7F17CC5E9390AF0D3148FBE8E7D5C8780DF83D34E4C1CFC0BA9DB11975A171928147D4053086 +BB7A29B4CB6620278E5D7D42B5778DB639D37D3149B525FA9A2B972D3F33A2E6735130446448 +EABC73AD3E00E0B2F5E774ADC1AA4E9ECA4C0E5DC2AEF0F7DAA42D37CAFBCF8FE67CDD3E7C02 +413E617562850E2EE2E68744895071D192B4505470D228C8CE86FF4B650F07E454F8DF8F5376 +8226231441DC5A026FB268E920C71680BB1426E4FFB38B27A019398C3CBBBEBA91C4988E10E3 +D873D3A7C8FC4FAA207B94A23E653BD646505B8688530D3DD734EB22AEDEAEE8274FB964378E +744E82C76A1E65E40A60DA47189ADB7FEF7006F180C2AEDE96672B55E12700D795951BFE14DF +F7EAFCF483E8036C07226D1259883EC8380404BA3523D786E55685878EA1CC6F9D2B32DD91AE +126BECFDC77B9825D602E3F18EA08021413BC95E5F64A120D41C719CD786BF2EF3E1A9B5CF28 +D80F65B01191653515BE6B53E59834541465F45839682F587530B63A3BA92D74062042AAA119 +12B071EC81BF6667D22DC7302F0A5299F3F3432FD03820E43BCE1007BBF0620163A0AE9C1A62 +B6FF44204FFA819F9D85849D450ABEFF5F3EE19B3FCA8EEB405ADB8A05C4809BCA050F846975 +C56B5079AE720299A7ECC8D846776048693005704658E43640CD89E6149093B4778AB677B379 +7DE560AEB7E09DBE57D723A4AA62EE8C42A83C10418133D262E5E9CBD39532F3881662FB84C3 +8F33ED685443965795C725956506FB106FE0960832A2C292560D3A43EEB72F4355B836CF5044 +767477AAD5346469F8E4E90F712DF820A0B7183C0FF090444A994D81E2941EA3C373282BF57B +9952FEE56B1B0B7AD89AEC79A85DC03FD2A35F5B87E061D15B65A48398F836788F6B41C749DB +F425391D99F0B31420DEB5C800EE281A427DB0C1FF7E03105C434F95907BD74775C980B4AB46 +A88652C8D59BE6CDB3531123CB25E9AF5CDADC324AAEFB9F8DC7E1EF4D288C6DA52487B922A9 +C9526875CB3E528AB79122F9886517E892115104A20A8EB4CA7628083B24C0B0F0DD2BB0D35E +3E1D3BD0D50135F7B7F1F5FA5349C9953C4F61F00EF5F11E662AD12E8D9F156E32B845FB8E12 +1297658DBFCD943F1AAA74F38D43EBD080C41DDC92101722D829DFD3EA37DD5120803EB06734 +6B636815A8738403DBC18BB8D8164A8E450A7273F8164031290B465A44A268CAA510E9EFBB71 +114E603718BBE415F2426ED24BA413B286C42902D8C5E483070D3A3C57058E6D640369797383 +5C78166A00C235F8B4A4D155E723010F7500A7179625D248F2DCD8A368AA5FC85600143AE81E +BE8D901EF42702D30AA628595AD111ABF0E1E06A7939420D648F03FC840A51919C588BE0F7B3 +BF71B51EC7DED081D0E2FACC72D65C77FD6864A2A30748803D0558ED2BEC1FC3A91710CC9F6B +2C8A66F8C4EB43635926CB75B89AF438F224DCC5A542C653790E2CB2831E6AC5590BA51EFF51 +40C5F620102ADA7E964D21ED4E7AA39B2735E67E1862227C6E1DA2210EA7080000E90162F5F5 +2677F188D75022B9A6173AA3F4E45449348EFA7A4D119A8C4682A1E205DD922BD9D65A5620A8 +D9D103B853D56B872122F3B649565C904E6284D66979793B16C853BECCF478864EB043CFB096 +42F0675D88E62AAA8088291E844F34AE84CE4A93721B4F262E0BFE50BC17184D4A2A469FFA94 +8671A565C708A79A8DA61041C5F60B1D82A50C52A6E145FEBDBC69CD0F32D81382EAB87FE7EA +2EBAB016E169E5092C277D28A0C1197B760AE2EE5E307FE6B23D120605E03374AFA65DE773C9 +B543D6B6321732A158873823AACEDAC38B2AE5DC0DD9EC0BC159C6861C99B18722B6C84CE819 +07EA32F1D8434B6CD6C68523720859F1C1663A921B7DA0DE2A9775B181AFF992AB12E1A1F3E4 +54E7342B9947D893557DEA500F36598D00064657C8B952E299D679BA20D0583FD6869F131495 +6CF2D1D8E81A0C20556F28F8729ADC075535CF1006D8F1750E479AC6066823B31E969ACDC75F +62EF2704DB581A7B4FBCD22ED0A794B52494A69F4D57816E604BEDB0C1CEECCD3F80B6B50C76 +065503F13C1DD3834D7DB2BF297B0C8B4875985310DDF076F0D6721FC205C9C0957E43E07EE2 +CFE21647A2BFBAB8136866C9C4EC51706D04E2408E72B6106F02085E5213C5D88BA0B90E0078 +FCD4A4214120820F0809736F4E3C06C6E0E6B4468A4089236565AD25A85730BFC3E476E5F0A4 +DE180BE7A504ED02596543DF24359B7EAB8E5CB1AF98528D4F0FA8DF2EDF90C2C6D75600BC94 +61924029635FA8E2BF07BE105288333A93A0A70A6C4A7F6D8D5F3EE677A017478747CAC65A57 +A0FAE14371CB16FD6C39BAAFEC9AEA1CEED0E66F30E5F4B5D0E8D9D56DAC6D552163270CEDDA +49E5272BC389831BF07FCE638F7299F5C0FE332B7E29089D77B0140604B8AC0377C10C002046 +8F250B3F03BBB37DC29F5B1CB2189063B8BB0F278AFF414A86A2F8A18FF13EBEFF00B4D723E4 +90B2947195648367E0A7DFBCED6EFAA53EF849C79DEE21E5665409A44422C3A36FFB74FDFD10 +17D31C32F9E269640AC36C3A519DB5F76198F1AF12F71ABBDF8CE85E7E6C2ADABE4B47897CF2 +4A1C7B5934494F07790965C18296B977E332BD853232F2E2BE755F36AB8B1773964A689E1BA8 +48F9F7F01BC585E125F00B90576FF82BB1BF90557D064D38079520D19DAE87A298514BAF1ED0 +0B89467F5FD445762B80F1EE8E67FEBE8B5B2558B32CE738201712612A56D824983EB5403A70 +6383D135BA5F1EDCE9833B81465B34244901802B7684AB914548C88C32FE91DFB0917751D843 +5058ACBF0BB78D11118F14A0B9411BAA1A6E04088543E99B70130884BA971F4DD03F1AA3F9DE +4B1935663AAC294C9597AE21EB145DB431FFFDBF163B23F3C2675662C37CA63569A818D47B85 +3B59983C8B6EE24560B2C7D426283995D86A7DFEC4B6558BCDED8A74D214BB6C86CFB902CEAD +F6C5FEFFCD06777DD761F9F9EEF09E9A510E0DA31C3B847130961459642DB3E533407A19AE36 +00973E4F70EF0912C462769AE399EC9861AE5D2A243CA6538943520DCDB2A86633F3D95F1F14 +E6D63126FF361FD287539C686CA9A6E4B46154467CE9CF10EAA3DE0EFEFDD09BF305A5584C29 +DAC82DF9418734B01CCCB57666E0EB5E5617EFFA3059FBEC27D3DFF8DAAD45EEBDADBD272AE7 +9909A4CD3476F9E1275298429DDA620C15B1E229135A472B013F5457269B9682A3D41E20C66E +EB7B874F26FA9CE0B2C8658937711366BD4BEC4F30A14BB1FECA238CE9476D66D1BF4259941F +61A7DE0FEBA45E5002A9AC44A7587FB206277C01F479D7CFCE8809687AAED92F7D148432CE8B +AC0AD62DFF7640554D59E88CD83022A8A42D2CAD6EC197BEFB73669DB969D468E7519943F53D +D324F2E9795526537393C3E5298B9F4E9961A182A324DE0D8109539FD483E1C6B0588584A30C +B5052487BA59B78E2959B3A2BF30DB1374D585BDDA52E088AA672AF40A933C94CE9B9F63FC83 +ED72B19AB818CBF269FC03F38DD982A48B8206307A10E6833B3CD33869526F10FE1C92F7D0DD +56C163CE8F04442CB0DF0E496F2A1DCCBA88D0BF260C0EB856E081EED167C6EC1D8105B2D3F1 +73D367CC27D0F26FD89995A2EDC6D1A215F57847F7236753FBEAB4954510CA68688E51034121 +F2CD0D46C7B8E89E138FC4EE229245D537F8F5009B76D6117403E10DB46109C7B58A67E0C14E +6347DDE8242030734D02A5C3986148528BF20973DF3D17DA67E53334B678643F09B7F887CD90 +87A6F635FA5FAD0A2EE43668A8B1973A42866A399B280787809820D0AB51787DF2A3907A564D +10FACA4D9B6349C60852C06444FA49F8E2563ADBB0EFE7B8250142BB06FC4C93C81BD8B51F85 +86AFCE9678D4373ECF051908E3435470C360935180B80B2C03B5033E2AE1B256B426E09FEC5F +902F7A8878B3ADE833EA39EF3D0AAC1160E1AC3FC15170DC3FAF6D17664E6292C51B268666DA +DB416E5738176D6CEF2152B529C6DBEA6E563B5F7DEBDA3E49EE6EFCB88677EA2AAD003CF528 +6B21E648EC332F0F0579EE648925B05D50261FCEC1BD57A22E58595CF326B5FDB2FFD9B8DC79 +4C5E7854EF9EA34411546D28C5112B9DE1C25B861233341B2CC117C9C310160F612AC6F13F53 +4DFAAEC92D6B2CBD9C3F3C0CED06B910260F7A2DD09B1B9D44346CC5A7D10B4D637275D505D1 +301078EC936B96BCCD9A2B783A93019C5B769C15636CD94E9D4A24BEA9521A41703FD6F4EE8E +362FE33E21EAFF8AE02DEBBE9D9B379B7AA0AA0FE94C3320CA64F41FE488FB58CCC5F13314A9 +F8A8428DD1D713C07489BB76A462E9C0E237FA5FCDFD3A0349B6B77067F055B7FB0F28953384 +537535177D190465C354DFA1280FB3E804D3FC0D6E2FA88A5F2829E9AE07E9F7844463AB695D +A17806C271E20C58939A04B5F8DF439659990D8D8F885F3A7A43A4BE49C7ABD03DAF5DC78CE6 +6ACDE634AD08C33363EB642ABA7D9C34C71C74CCCBF7F4ADF9A201E203F6540BC467DB200646 +9FCA0ED2234AB1A31E73FC05E8D8D906E40B3055B3696D72C48080934CC62E8E850350E70CB9 +558CEBAE7EDDF38DFE79FB501A6EE6676F9B7697FB4A90B84CE04808434D244ED68AE441F19F +FCB2E0E62DB832C31F7EE26D90CB6FEA5DAA44C297E51E6F9952C794562BF286BE8727262E51 +5DF58D26BD9B97A5ECB5641D517DE35941143757645D511409808347297FD5D84E4BC1595158 +9C4E272C6DB003B51628D3753DCE430C6154F4A7C5009CF5AA61D9CD61CFE3398701B65CAFC9 +372339E6642D01C461EC04840A4F37E8289A232B1C06D659AB081C25CC56DCB1B914EDF4C7F2 +3CA7598B264309A0CA15F079ACA4F69630C6AB6192EDD8A2350D3D1F239FCE30CEC5C7597971 +6E22A6B3917E8F0A05D75F8D1EFE57E71836EF46D41E4CD87F11CD8857A3821E6A7E4D596C39 +739424E37535699B423A22CB07CC47041D7B97260181794435F38CFAB11A7F571A725D084101 +07FE3E53B16CAFF56F14B35CEB1363EF20271620260552B0B9FF5ACC9E8C508A0F07A4768AD1 +77975F80D7EB3FB92B04A9AC5FCDD9738982DFE4B8DBD646D0F1035589116E961E1000B677DF +7B598EF17FB7442E07F625CC07E7B7BD4FDFED5CBA26EF286DB92F99CED631ADA9B6E4AB3654 +C549D5539A2C6B2BEF7D9685F6C5BA2AE5273D15CA66EFC6FC14B3DC2FD47B50E6FE3678531F +E11B861DA29708943D8914EC5B164EDBD2B04DA634314AA7EF8158C3F4311CE9FFD5973DA940 +22C33E3A69931930572FD8DA9DCF8AB915CFF613E7628C5773652D55C64E1DCEAE37C879FC17 +A35028F33B8D14731DC832193B35D6EAE7B2B5BBEAE7DAF05B3B34CA3235D81FA537EADC80DD +C32567E15F80BB2A484CA51AA8F3C853696A740C271E1FB34D3DFA72394B88ECABC1F4E92CDE +907A139A5B57406DAA97AEA576412937FFE4E2689853C7B86FD869270B2FED848BDB95AB3E04 +C77836021AE12BBDFB0BC68C09AA4F5B607D8B724C24CF6DCF4F54222CEE4EC643F1D4024C39 +8ABD99169DE91191911AEFA67675C21D539DB7C39462FE640C5F9C9EB684C6037315B548DD49 +F0C35252F2E9D5D4571880E66CDE49FA9653949D2F28AD44426978A2127122CD77B607E9D03C +74D9DD7D11E4A9AC2E3457FA9C79DB76AD398AD5743F6E077C36423E0DAFADD1D391EE4451D3 +F94EC65470BC74FE2D2252F0540BED609F760145914E9437D9CAAC61BE91F76C5F1979C9C6A6 +F73E690DDADE3B1295251F0E9DC3100CACBC3EC17689A8CE1AA3089A387B2727035514F69E27 +048AAC20A38EE49ABC7928D0109D3B230B37F6092388AB62CA5B382DB76922CBBDA2D61B5745 +6880763654B4D83478DB9C0F63790EA68F5C154EA4853D02B9A849FFD65684C368E68C6CEDCD +85BF1F041EBA86E9BDB490CD8CEF298DBA42ED4FAFD561C2CBA47869505575220B8E3390BA7D +411C2BB7B16578A834BB1504CFE2644713BB30F2C76D9DB397F45967B8F146E7C4782B203A97 +BE20412D4B2B6D53511525292E48896BC91D3891300E48DB9B7A650DB26FDF8992063729A8FE +4E8C6F786FF4F4BCA2018C2861DE6002A8D4954BD7EC80CEAB7DAE6CD07586E733B1E862DA8B +1D4D2B0381058A810522C303C06AE34D5EA6F05C97B4FDB3FB1DEE799511F2EA9750D53E2A1E +CB6058C9988B55BE1E6F1B682C689C996749691B6057DBCEEF6AB5EFCD604DF7420EB44763FC +30B4812891FB2B67402A24DEC15BA326BC89E6C574597178EC7CC644FBDAB6493E545D89CC86 +BDF8826284E8697D2417FBC5630CFFF686E9F8F6C5F7788E975FA9F201FFD1E99B75E69C2395 +F2EB3CD74E2E61B44049DF0B65F91195233228490EA9B9380800C1B43905B862770DD378C920 +CC3EEA51351DDD3EF6C68302F96DCBE3D740F4A3E359419599817FE10E5EE241B516A7AB852D +01B570CA085D306C75BA899A5BE0F5BD883B1A6EDFA8EA72E5F66878BFE1208151032ADE4804 +2F2C7DD0D66220F5EF66F4D3BEA1014EE7327242F8A8D948750934D22B7C36B2CBC01971D5CA +B439BB320D7831FEF3C9785645D9996615DB538084C5072F2D20F6A8909C248AA6D34DEE11C9 +1E5C41C931DD5076C9CE87398A58AB06A1AA7A07DDAC01B730957DFA34FCD86188DBCC7C8A94 +101F09209E7B123FA9D671222BB65EAB845F7787EBF82A0F59A7EAC3CCD936F54A048AA9E36C +983FA1376E1F825FE112D4FAC62BCE3DCB285C5138215EEADC3FF9504496AEB0C443DC9EB28C +1C3F27BD1C449FB7ECC661697186F9C31CCB922F2B9C9CD4AFD63BA3CD71A95A52CCCD50C9C9 +BE17A47D3123DB4898A75275D93D74EADFE72B7BE3679FDD9DAD4C885196194DBA0D297F8033 +1B1471EF61A839DFB26FFF95487496B4280D02CBD88C1DFABB04F98207ACB5E5AD8B4D4D26FC +232FE653E9B30BD50930833E2B9D72A7A3C57C9744A0992131CF0AE770788FC6376FB187EB6F +1605CAD55B40D0B9132B1799170BA18EBB01A6B92D5CE2580E5D5BC15B14113CC32643C74805 +17AC33E95FA1B318328613709D3B05296982772B4784B762103E906EABC30A8C542598B970BE +13D8F79EC2D4229118B8A71E708F049B728205008B75CC96661B1F19CB27320E6231644CABB8 +E8A3C07ADD08A88F5BD1448FAECE9C2E9E959FF42AB856C9F0C45B170D4BD63743867FF08D0B +C568D473801E2B40F9E99DA8DF577732784B52FAAD05893033ED069CC2996540E9BAE9916E13 +9276031E66E1ED34CAC0228B8C7B8E0E0A8C9CBDEDFB20E406D5C2698733F1912BE83FC517C9 +268D3287C66D5059D84F52604387E0684850DA394D1F2B4BBFBFDECD45BF88738074512A1905 +70057E2275BA2803036A91F9A32E64CD7429AAAE7DD6D28C3159694901450896D483717E9ECC +4820349ED3E5FDEA88B1F9AE1A7E9A9090DADB0DEC035EA6EA90399F3A942E3401EBE5B483CF +0779ECA7685E8D278CDF6EA2FBD2A7CBF18314F5257756CD3E342479E3AB75A6DFD4F9D7C3B3 +5AE5042A2B7FD3CF5C93ACBC3167BDC9A7F0D25D0CEC8F73D79A98EE89A769E5A41AAFE97D55 +688F39C661B575A6601ADB6399B43DC5064D54F07E8299627A114254B11F1E8DDD1E7783CC7C +ADB44A96E8E54CB72A448CD387FACC2BE66A5D9A4583EA6B1C0E4E7685739E22F50E52488EE8 +D38903E9BDF9CED151FFBAB79C1E159A06C11C70D91E114ADD520627460CAF3E57F77063FCAD +E73F05C563FB50CBF0F2913B6899926A6BFD891E986FC06001C9D8073A781F0981FE9D4C4D17 +E49D1793608913238CBE6B973F9493DF8C7123702646446944399EE25B1E5A40D3AE74728879 +203E2D5F005C3955382FA450B86A58C68BDAD3FE1793D8E184CE250070CC6F8C21E277DD506D +4C8064374CDB89D4C5EF1859FF45BCA98BB91FFF5E52BC1458991E9C296CE2F8BE62B7A34D2A +DE95004D86ABB1925B24296C39130971B68A2B1228EBA1575447FEFF25F6D887EF14B66FEB4A +377F60681A4B44F63B6A067E367E379628CD7342D80B79913F4797FEA6506A56D47DDD7E0AE0 +B06D1E9D52359EC8D1FFF0502D3D7898ED4642974DA2483F6D5F4F48FBA2862B9684DAD5F1FE +7434786F28446523FA121E0445942EA29694E03F2CE367B6EF118288033B36F87CD456F566A4 +767D31794A827595EA4E03E805A5D0255463FFA40893B34EE0107FBC6CC1D25215A70FE0F9B5 +526E65C3E50376D9555BCC9F60BDD3DDBAFAECEFE4659ABCE230EFCC3BF8BD7F7AC3F5CFEE3E +AD7E09C9F2027DD12F7D85837C9A693A330281D730982A1A2B854D5BB19879DC69A0FDD1033A +7A858BF14C949B17D26B491B123F3DC89E67100412DD9DC767EC66FB690EA83850B80DCFAE83 +EB437F5A5F4D22517DA8A21075D6A0CB1FCA94446C8138FE3F28B8BDBEEB3DCD67E4D6C9AB24 +9F3BCAABF7EFFCF8162C37F3DDB6DBEA59D74D515BF19507880F19F99EC7AF622FD9ACE7BC07 +5D853517B494438AD1B7BA2F0C696E77543EA59F951D5B8C2D364DA095F4B174C878FAB8CE90 +B0312FC2D3C62B4A9F02166FA0EABC1FDFA7839A250BF3627D3AD5ADD5BDBCF75B271157E012 +F723A51A76ECCACCCD693F81590D99FFF80B21C7FEBAAFB921C0A91AE44E8C3A870FDB69B2E7 +7A65D13626A3113B069A1382AEA90C6076D4D4B553153B3CE24D1382117307E0D1195E39AB80 +58E44DDB927058A8D71AE41B86ADD4692AF0E852F0C1C92A6B5CD4E7C49C7774BCE30E0F5256 +4437E6553B1E6486FE7F8DC97451C934C3939EB137A8EC09486F10F2A7FC4BD3ACFF77F03B1D +92F19A015FF6F515E9963C870DB70977F9B697E07CEB75B9AE87B03FD70CE2008B941924DEF6 +27DE71F750EF0F378CB2648EA07174E62FCA3FCBD6C6F1F91C9BA4EAB493E28751FBC57D6897 +8F553DBD6759FA9CCA70AE9A7372A70CC6CE35137CBE4C289575555D92083E92DAA3845FB214 +DAC0FDCB355A5C08A1F3647C85E3B747F1FEA12CF8AA1D2162E03221BDCDFDCAF4B74DC3ECE1 +657CD9819BC34ECA91FE1E7987FD75D3E434307B208F2077457E99134E108E38B99B6D1D8DBB +530D3AC7CC5811A7FA92BB080D8E2A3A09CF3F6452941D063D275E2AC849E0B35B39C63551C1 +90A43F3C3564AD6F153C44F67E6D50E311ED225861B94CD108D278A4785632CF7E47E89C8FF4 +3114044CA9D48BC15C5EB1E9D1DD3965B84A20522340F81FD0EA60D7B763BDE818B5F9522634 +7A5220F043B89DBC6A41DF825DDBBBB05736F7709B752B42A1FC78B1DC61EF6DFDE867C1EBBE +0E7F332C0BDCF86B706C2089EFCB1896B62ADBACD8E2358C75060046A54784A41F66B5DDE678 +06625477FCA24396747DB263092F82314E7440FEA9CE8630FCC10D7F4BA6821613F64A16D00E +4BD9BCBB0EBF087C2A88720504CAC249D2B2E67A823C4F34260A7672E8D6E7AD168806779B39 +ED0847E82037AF28416AD3B5C5C6823ED9D1912A6B45874E5C67B258DACDDF6BACF5D735899E +A6C62DE3BCF40145859A58C0D744588D070AB252A26E87FBBF2CE51E95E5AF46AF3EEDEB147F +75EA1F698B2D3F582B76381780E2BA8F6F2AA75A0DF480A0B5BCE7C3EF61755A4D9BFD0E9AC8 +5CF716407021CC32CB84C16A90C37E83EB5F0D6B7BEB221FDCE3F9A6701F6BA690748F767AAC +D6F886F1B2A54037AE8D8B8546E9DD0ED71C2E03B1148BC4763F95CE2A92F2E29E3820F8BC5E +610200FBCA96221AC7CE0E8DE251618EBA754542FB8EDE1632D48C0D20E882F915BE1F742ECA +7FFEE8F323B05EACF81846F87CF833E6FD877E01172686BF92B875FC6977B3D524E8D8BF0215 +C3D72182BF368C7F89506B058A2A6042CF86D8DE16BB8210321B5CB1CF42CC5DD52E29D82D9E +84C957E52BAE129068A6417FAC32427F8C1AF08E2CB44F7CBF3E8B1451DEB7B2CBC772227117 +736D41FF4A6772569A4B2C2C48908A1E36FE12D950521F269A0DCC4449DB961E101D3203E88F +7910663B7C672EB85F26562A35A26871947B14D69F7E09153F1CC980F0663644C9EBE030EA87 +1399577ECE5CFFD2B7490AC8CBC565359683207E92D072854E094E718CE9D4DF1117A46C223A +5F095DFF3C1721B52502F7366170444898620985ADD2CD198B292433C88ACF33C022AC15E910 +E56EB3B821341BF3ADC6FBCF1CB7BA72A2318D1C6D36810768674C325CEC8B2F86E19A0CEB06 +64AEC6E1F57BA2952DE44C1DC85FA8AFBA808459222C7608842D4DADE3C8D21210F366BCC222 +BA7BA907328AF3304F9AE2A542FE84DCE9B4B3E13C23E687BC3360E578F660F31F948694ECB1 +766365C13BEABAC7B589D2ECBA799491735B417532E392D56C9DE2B503C2A49CADA4280C863E +D36CDF747D1BADF31AA0F4C6AB910BFB708F2B3D763C041836C9C4792C8CCCF39519F3B80BB2 +0C7767314CFE03C5BE8FC81AEDF28ADA7C576135618BCE77ED1ED0ED1F8804D4DAFC126B4E94 +83E61917775578AEBC58EE5823CCE006610FF2108E5EC5E9F6EE0B7B09BCD064A2EFCDF71CAB +DBA10D0FE3DF95A68F85965CF756B19A9664A167263B2751A9B7CA9CD76905A9A16D070912C5 +FD49959C93601DE4998FD65F6B506B9F54A16C92BB88C6CA8751CEFE60731952B2B9550251D0 +612901121CCA0D3A8A51D7F1F5D9C771EB86BDCE40ACC8F35831C9E5ED6F5D5332275D01748F +88428E97DDD24A036CF030A8D04E3EEB7E86E6B6E6F01BBA6ECDA8B4806DB2DB9D053CA1299F +5C6D43A64ADE6A7A6F19AC608CEC86FD93407D6BD802EA487D7C46E5190B6B34266184235859 +250E09C49583F8B856EC06E4C120A0E12E4E305540AC662E171DFE00F687EECB571D2DE79473 +E7D22FE4BDB30B9A526F8D68B4129D71FB1620CB3182FAE6B55625F9C2664AAA3FFBF9B799E2 +FC92EE7A19C5E37F0EF4B3A6A902CBED35E34E86D9B7E5E41E5ECAE9876A83B2F2BFB7038EA9 +0A232AF9F300BFB6A45F55D73BCC6B9E5852395D5CD5C77819C568741A7FDBA3A2FFC81FB1B1 +EA0D4D9B450199617FFA0BA8CE26FEAA16F62CBD663798FBB3CD164D6EE6E4F505067C0EC75C +1C5F81C699DF4165633E0708F8CD2BE2280350C902890FADE818E5B31A6FDB45F7A6F8E5F924 +B4D670B9E3D4EFE00D2B04D6F433753454B3D3EFA16276577DE3F28D146907CB6C05570A6D4E +DC284093A4B2588162BE6BC867A00CA1A9254234766503FCD3A0E29D9C5676EEABBB3E26FF09 +1E21CA21FEB29365A56B6960E1E76796C097D80454261FB63D5F941B66D9DEDFF932793F1569 +75004F36E2D91D2203049E5D9DE711D832E78CFA18E2B5348B74AA8605E6425D8099C6B10EF3 +E4A299FB76F028BDCAF8ADEA2E908E3535BBA4B42A905F30D13129209DF390139E3C548087BB +BB46621E71CDE60F450A8C61B247CEBEF47B5F311B3CDC843790CA79DD6C72AE76A679AF24D3 +6D0B1B5388485F880096057CB6287845EE438CE1E6404C5BE7371EB6C060092ACC76AE336835 +1D481984240E51E33061F1D9FCE34A4C65C441F5B4E4D0781103AE0B0CF637CA2FF26182B855 +B696605FE114AB2F7DE5F016E396B5A4FEC79F05ED451EB3EA7CF718936E0CFD2F9CE7781162 +825FD98BE70C3B16123F8D9B0C970DCB545A7CF6A8CA6B4FCAA319C6C4256B10D6D7AAD98931 +40122431F2B0068C10D0398F55FB91DAF2C624A716726513EAADC369BB29FBD1B2B7DC5324D4 +08B0B02E46ACCA565D1413D1F65F545603B06E28637C326053DDD2B78DA99BF320DA2A565258 +CC9F548B2F87511C628610AA00A6C8F5CC5BA2CCB13BB9EC7F123EA7FC49EFBEAF5D7244EACA +D013A08D3FE370767128687A488302AD3D95067AF108B76886ED16B59E7345DFD143A24CBD75 +E828AE300CA7D24437D4A5F0038DD5265D82CBF39A4F8F542D491486F5BC3566931665909986 +41510AC914312D22803F242311DFBA932BBBCA9DF24B56EB52209A5A9CC8AF2688B59F348E7B +8FB08281143B2C849BDA4FBDE9D8819E97589EC110FA9F31FF85D07B6D58D58CE5DAC7F22D0F +97468FC790D913622007DC8045E2D05DCCAF592A540870FB4EBBCE3B5AB9818D49B4E40FC919 +FB8FD87617733360FCE02FDBA5E57B33461D5E085569129B5B7B657DB36D29E3F87E17E9C7B3 +8F6F1FEFD369D314E329440BD0AC26697B34D4E87048EC54F7C381E66C908A658BA83A811285 +E93E32BBC6C641BF0F2412C276B85CB18FED61F22ACA7FFDBD37B994314CE4B711B82402DD26 +632B7DC376AFD3C4D66BE5E40E282B74FB120F6E4E144D90404C7A4513F2AB180E00FD410AB9 +C10CE9B1C2A8EE695E4CEB0F1472A959E70899B1A07DCCB20546431FE6B541A05291D5DDA490 +991BD3560490CAC148A2D623903B630DE49F10DDA865A74AF0866C2FCC595F6FD0A0CDC0A146 +5398818C46554C37A4CB1E543C4760E804B39564BB853400D0E1E9DAAC58D0577AE177726D1B +9075BBC70B2AECC2F7F44D34F4C691485BBAE03E43E8BC5535CCDFB1CAD1D66F38A49001C4CE +CBD71202FCC47BBD3B224812C677F4F9E4FD523D44EFCFB05A57E45AE2078E3E16DC785125D9 +55D3B941F4FD72FF547B069EAB30BFD33E3EFF0686FC7E582CF73EEF9866D6E62C19AA005F73 +4CD8FCC0A012F41F38107E135CE4C0AD8A8B81101FE4EF8F32065B2C279A435CF5A032DDCD52 +9628509FB6773B475DC13517625705B5D3A9D9EF6995A37DD3F0D6CE5451845CF9151C40F990 +60ED58E0F2CF5D6DD71944731CC4ED0FC72641E287E295CBB53AEEFC3FF3EC0A5DBAB8C3AD31 +E5F6B339C1748A9E58851F6CDD6BF091227B2835761B7D9A10DF0242A7B61B39AEC0A0697F43 +794FBD2A51A66F860FEA136A9D7DD82B42B61710909104E0FABABE3F5485CF1474D494B97508 +DFF80A698BFA58ECB590D8C38873724BFBA60FB1150B04282AC1022A1214E9513D27C5D45DFB +C47631BB27CFA2806C2CBB130DDA940B65E75F956846F4E6438773C94E8EAED71EBA5E87A886 +DA7A846EE29A43CFC2D130A3FEB4762091B6AC357C973487573A230DFF74A29E203BD78B89E1 +729B747FF9B58BF1FE5FAE6DD70E9DA091A330078845363681AC2BA501286DDA2038A0FE2235 +C10656143783D50129A728B4EC2C64405B7C97AE562AFA240D35FD9E3A6E034683C60F32AC09 +968A76C775D5547D85D7A3168D6F19F12FE132DEEF497E90951A56CB17E543A76F8A526B1B7C +481CEEA4F5FFC637DA5CE954A742BF39837F08DFD7156A4F4E4805494C1957B2577ADACC0D3B +F9B0EFFA5860F454EC947625E70D7E4E652ACF276F57F2137F451540ADC35D501CFC1F7597A1 +502A198EA502D67E7886790A84DD9D225E83D9ECAA18FF9EFFA77AAC3AE57D034E67CBA014C5 +FE1E3403AE4277D864856FEFADD2EDDB1161E8595DB1B2CA6CCADC4253B95300ACEFFBF9C3B3 +32E1FFD71B91898CD0EF1B9F64C3969FFBA7929BAFBDCCCB943373EFDBA057003069C4ACCBBD +82DF6ED1624FB8D0D4B3E561A05B13550A7EEE9AB35E47E9A96FE49EC2716AA68224E3A65AE1 +E96D530FEE45054DDDCF949E7F3977334E3A9AE459085F366393D232B2CAA244B029F2BC602D +05B421E14C08563C4296D3E9AD328DC324EA5685E2FED03DFA3D3AFF2482EBB368484FF8D015 +53CB8D5686067F99C5617FA2A7F6F183F4BEA8C1AC39AF726341501AC8875104D11DBF241B9D +C9929A8B70ED71BD62AFAB7981E452086163DA2DE543E52D57AFD080AFE373E8E321670F8A47 +4E9DFF36441F6C1A4D2AC6DA6E5C9FFC0C4EC9CDD8614C2D65D55019378D678CF46F483FA9EA +0152D9D3A12175774B56B11BE03362D2A36BA13945979C64163A696B0A6CC760BB6111EC47D0 +A5260DFA7FD147FF35AB84DA889DCF4BA4146647D5BF8773096FAD1EC8001A6085C4F4721428 +F4D4B85F1C03C71576F497D3A5A99392C647DD42F8804DA5D33CCDCE19DF1A16C143C449F1F9 +37F6F75B05ABD0CE90E4EF696E1BCEFCD950634E414DC724B0084BCB515CD4ACD71A6CD3784A +402C3CF3ADAAFFB763C5F7E17BBBE19172E4455923BA48869B4D9D0C1EAA623D9C728D887C15 +BB8377AC74239EFEF6389EA10C7C8820AAF857BF8EF2B64EAACF096B742ADB9B666D96715364 +CF18D88AD8DA6A0CD303557F04908CD28D11ACB9A730AA3A37B6028914674816E6AC076C4559 +A84880E82D433A5F5722531B0287F11B24AB4CECC2264BAB4E6601C990E32E1C5F9AEA52CA22 +2D2698507A4B235531C3FB7E9FDF6FDA186888A74B902A0EF3457537233376E8667035C092CC +C3797AD2FDFE1CC8BD71C49B91E4520091922CE87856F1DC60A209A9BC9D97B0141D8820E1F3 +B86BFF25CD1BA07E5664D32C09CDAF569EC7815F41E0E8731E2FCE769BAFB3A751B3EB7082C4 +992A4FD8BA363D0888FF39FF986B80D5568CDFE1DEEFF98CC54F05B842694BE023E0E0507DE4 +7AC1B53BE427D31E0DC9CD5963BC3A5183C54D8C9046068BD6F300F4C0CDB8CB779E6828271D +BB9EE44B70BDD1C1B5A345AF01E5E9A74260781AA473199CEFB232EE9C60D14DA8C5D3D22291 +A33E592BB7FBE5E9B28F18EF70DD0877DBEB43EBCD12F9AC95B7D46A2E0DC88E3B7D34C6FB32 +1593E7FD7C070D44037B2EB5C5E7F40C2BFA3A282D85932C19D3C3D07F5BD37C5CAB34816E9B +008BB5988A1703DD971AC36A0F1C61DE0828A6108A1454A17E63F68FC5604101184FAF38061C +515C0439010551A933CE9701EA75A59D88310C564CA3C4D9BAB34668C6ADA1792C550D08B029 +5E6A2AC490B06A3BA9118ACA61A951BDC06EB5EA612992BAD973AD703F5B25D1007F47CD92E7 +4D824140CE1A827616DF813898FBFE32C87E692FD324FE78FE9101B1789C8C094207BF77C290 +16ECC3734E103ADE9FC7717ED2E6979BE347F72A514B943A7F1101ED25B0AFDCD6C8374182ED +E624911F458A5EA76FA982C3CEDA0195275DD50BE2AB3FA62F5545F802CE3784159E281A810B +87DACB95D4D75AE2EED997DAD39BA7346083A046660F0D63D4416EC1AFBCDBFE18966B4C4C10 +9D5C9E9DD7B1202D6AA73AFAFBC169E752DB200656FA28A29A9AEBFA1D4EAED03478778AFE82 +E0AA2DB79ED37AF8C5B940ECC6A5FBF38762505235415B285C72DA21F4FF986376E407C04843 +24B3A2ACFC6D796FF53B5412A1A73DBDAD921F402308041C18C5D7FD9705959A8C0F5EEA851B +5AB726748A6F0BAE196F879A3A1A5A87F7FC723B7A6E85189914EA451E2BE92B908AFCD4BE5D +3D2C6C1C40984D10483A9F85648CA31977A4CD0F9781CEA0EBFB97B8B07DA6FE5694C32F0B5D +23D58CB259E54C46DDABEAEC138EC1C5922337B8CB2741341E3DE7D141E7316B2F0DC75C1A62 +ECD7106141548C31F7B90C0F70106E4E788FCE549DACF492225530F427A6BDFF5ACBAE8913C0 +BBD9E3DEA41EE41FC7C13796A4A7D32AA56305F2420AA9BA5C0A0425861F97FC2B0D586678B9 +5F28A395FC340E5CB4D0DE633E406347BB83E56126872B389CBD57C359807E3AE6CE23C5F1EF +746BE92625E161BAC1584CB79940DB009844EA870326A7BB6CC8FE67084726E36EACCDD1A5E1 +87D49E1CAD01037E58EEA820171B29968A2E4A08352959052EF9CA920E736C7337D85A44A3DB +0DA96FB9BFC14177AFE17AAA27B79E1C92B4D53F4CB9C277BAB838C640EFAF3EF4D95CF7BC61 +4F3EECEED6A657E1FB361302500E5DEA28E5B5EE4F3886C23F670090FCA5D2EBA7A5E4B3ED0F +AEEA8A7E6DC041F9988D43F645BB388FBE848EE495B391FBA4C0C3939F3B5B3203A5527F397E +D758BEE1E0F0FFE9A379DE0FD8CA3DB83B767C3BAA6214BE3FB012708F1327E1C96B8FE26597 +A0B8403DE77750565067F42F1587B5EEB69D5024A807E98A3BEAF5FE5F88DECEF57F2FAD58E5 +20D282ADEBD2051F086B3B871F0839C71379E6A0F800C7022978C84EF6363B7A79B10386E38E +8C7DDF0606ED85B780145FA4428DA212AE5386205BA129AD33D28BCC36A0B6CDEE13C37A6C2B +7456F0C3402FD5B3E3DCE43B479EF0F81DC571FD102BE21029C721E4148729755F19CFF14B1E +0E30CEFCC09D175AF0811BE99498F4A8632B85879AF0E005495FEF5548F2A1F8C989140726D5 +4BA1FB448E54549A2434A1FBD152E7DF166EA70953C6595CF824CC77984DCB8F8807B7347131 +CB727A589B651697C32E0D52BFC2B36B4C050CF9A1CE072746992EA2ED9B052DE1B2B9A21A89 +682B2BE4A1328C769DBC40BD71202D0287D1F8B909AD0E95E5D80BF8314B457A042F304CA330 +14D4578D50158EECDE6821D1B672B1973393FCFCD432EEB0EB4FB362DCD9B4B280EB5EE2091F +A3853D779EDAC21A120FA7E03B339CED20115F404C3A086EED187281EC31F25A664811E2B712 +351528C4F0ABCE55D29BDBC1E067C01CB44F8A3E094F104097C5A36DCD1CC621E32747176643 +18D99F5F5D1EA11959CC751FF9F3739F735A12612629BD3346A840DADF0A61567D880597EDC2 +2C70DD8EE5DA9171AE46A8D1D78A64DD2E0F01042CA59FF7F83EC74E1CC0E786DC17A112A062 +7640B89D5F3EA4A57DAA15E9965A81021CF737E0108267C404ABED66D9CFFA22E05C351194A4 +1913A0D12931F26477A06773829D8AEFB25184755DA27F5DF42B23F493D024CF38C544257830 +1EE65AE593127DE8B9E0F19287015892DD881BBF034DF3C789470B567B7AE5130E821870E504 +F893CF1844FE400752C5CA00371433A36DE4C96938F6B7FC81D26DEDCBB7AD4F2519857A81D4 +F06F6A23A74825477C912968FC03B13DE8517BE24831C0E223A601AD7834A3CE0C7059822D1B +663094AA1D7DE8C524D1E0E5558C664655454A3AA0A5034B50429C5A2AF0C3C862C6D63C415D +92B2B720CEFCEA0D0C6CDEB5CD89EB701CB49CD568E39059E7B7DA7A85B44213F1060598CAA5 +8D8830DF46C628B18F908DE0C7360B9175F698FF66C5E4EECBCC0010F43C251001F06C45AAA3 +174C8841237E204AD5D7E1C403DFC40F9FD5F469C65625EBA0BC5DF2344228399846C285D9A9 +6E21EEBCD9EA38F25584C5D4B7893E64AF5261656E3FFA0CB1FC10CB512328E87AE3C83CA38E +9CCF96AED112B93EF8E4D5CE7BF47E8A800E00C4A0AB624DC3C03089BD5C415E8BA33DB289F0 +8E151E5E45865E9CE2EE9E160CF3646726DD25D5EABC96B72A7D2C89178FB92F0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /minus put +dup 162 /periodcentered put +dup 163 /multiply put +dup 164 /asteriskmath put +dup 165 /divide put +dup 166 /diamondmath put +dup 167 /plusminus put +dup 168 /minusplus put +dup 169 /circleplus put +dup 170 /circleminus put +dup 173 /circlemultiply put +dup 174 /circledivide put +dup 175 /circledot put +dup 176 /circlecopyrt put +dup 177 /openbullet put +dup 178 /bullet put +dup 179 /equivasymptotic put +dup 180 /equivalence put +dup 181 /reflexsubset put +dup 182 /reflexsuperset put +dup 183 /lessequal put +dup 184 /greaterequal put +dup 185 /precedesequal put +dup 186 /followsequal put +dup 187 /similar put +dup 188 /approxequal put +dup 189 /propersubset put +dup 190 /propersuperset put +dup 191 /lessmuch put +dup 192 /greatermuch put +dup 193 /precedes put +dup 194 /follows put +dup 195 /arrowleft put +dup 196 /spade put +dup 0 /minus put +dup 1 /periodcentered put +dup 2 /multiply put +dup 3 /asteriskmath put +dup 4 /divide put +dup 5 /diamondmath put +dup 6 /plusminus put +dup 7 /minusplus put +dup 8 /circleplus put +dup 9 /circleminus put +dup 10 /circlemultiply put +dup 11 /circledivide put +dup 12 /circledot put +dup 13 /circlecopyrt put +dup 14 /openbullet put +dup 15 /bullet put +dup 16 /equivasymptotic put +dup 17 /equivalence put +dup 18 /reflexsubset put +dup 19 /reflexsuperset put +dup 20 /lessequal put +dup 21 /greaterequal put +dup 22 /precedesequal put +dup 23 /followsequal put +dup 24 /similar put +dup 25 /approxequal put +dup 26 /propersubset put +dup 27 /propersuperset put +dup 28 /lessmuch put +dup 29 /greatermuch put +dup 30 /precedes put +dup 31 /follows put +dup 32 /arrowleft put +dup 33 /arrowright put +dup 34 /arrowup put +dup 35 /arrowdown put +dup 36 /arrowboth put +dup 37 /arrownortheast put +dup 38 /arrowsoutheast put +dup 39 /similarequal put +dup 40 /arrowdblleft put +dup 41 /arrowdblright put +dup 42 /arrowdblup put +dup 43 /arrowdbldown put +dup 44 /arrowdblboth put +dup 45 /arrownorthwest put +dup 46 /arrowsouthwest put +dup 47 /proportional put +dup 48 /prime put +dup 49 /infinity put +dup 50 /element put +dup 51 /owner put +dup 52 /triangle put +dup 53 /triangleinv put +dup 54 /negationslash put +dup 55 /mapsto put +dup 56 /universal put +dup 57 /existential put +dup 58 /logicalnot put +dup 59 /emptyset put +dup 60 /Rfractur put +dup 61 /Ifractur put +dup 62 /latticetop put +dup 63 /perpendicular put +dup 64 /aleph put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /union put +dup 92 /intersection put +dup 93 /unionmulti put +dup 94 /logicaland put +dup 95 /logicalor put +dup 96 /turnstileleft put +dup 97 /turnstileright put +dup 98 /floorleft put +dup 99 /floorright put +dup 100 /ceilingleft put +dup 101 /ceilingright put +dup 102 /braceleft put +dup 103 /braceright put +dup 104 /angbracketleft put +dup 105 /angbracketright put +dup 106 /bar put +dup 107 /bardbl put +dup 108 /arrowbothv put +dup 109 /arrowdblbothv put +dup 110 /backslash put +dup 111 /wreathproduct put +dup 112 /radical put +dup 113 /coproduct put +dup 114 /nabla put +dup 115 /integral put +dup 116 /unionsq put +dup 117 /intersectionsq put +dup 118 /subsetsqequal put +dup 119 /supersetsqequal put +dup 120 /section put +dup 121 /dagger put +dup 122 /daggerdbl put +dup 123 /paragraph put +dup 124 /club put +dup 125 /diamond put +dup 126 /heart put +dup 127 /spade put +dup 128 /arrowleft put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +/UniqueID 5000820 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BAC8CED9B09A275AB231194ECF82935205826F4E975D +CECEC72B2CF3A18899CCDE1FD935D09D813B096CC6B83CDF4F23B9A60DB41F9976AC333263C9 +08DCEFCDBD4C8402ED00A36E7487634D089FD45AF4A38A56A4412C3B0BAFFAEB717BF0DE9FFB +7A8460BF475A6718B0C73C571145D026957276530530A2FBEFC6C8F67052788E6703BB5EE495 +33870BCA1F113AD83750D597B842D8D96C423BA1273DDD32F3A54A912A443FCD44F7C3A6FE39 +56B0AA1E784AAEC6FCE08DAE0C76DA9D0A3EBA57B98A6233D9E9F0C3F00FCC6B2C6A9BA23AF3 +89E6DFFF4EFEC3DE05D6276C6BE417703CE508377F25960EF4ED83B49B01B873F3A639CE00F3 +56229B6477A081933FEF3BB80E2B9DFFA7F75567B1FA4D739B772F8D674E567534C6C5BBF1CF +615372BE20B18472F7AA58BE8C216DBDDF81CC0A86B6D8318CA68FE22C8AF13B54D7576FE4CA +5A7AF9005EA5CC4EDB79C0AB668E4FEC4B7F5A9EB5F0E4C088CD818ECC4FEB4B40EC8BD2981B +F2336074B64C4302807FA25AFE29D1EDFF68FBD0141698DA0A0FD3FE352AEF6618408EBA8063 +0FBCF58909B21CA4B9514EB27F9FC7B78FF460D374798DABAB857F6DD422BC7983C7CA213870 +1652B6C3901B98B43B641F905F54AFBE00822DD60E2BCEB957BCE7CABFC51F153F3DE4095395 +28E20DEE4B8C15E2AEAEA9A46FFADE11A3EBFA3456633B298DEC6DDA6D6CA41DAE03F5C6B56F +68E58C0706D3A97E34FD845F8F2C6126BB6FFB72FF4005A1385A1EF92F2BC0FE7441C157B1E4 +AFFA17A5D2057DC2BA87A77C45F8442A36BB895C4FC24FC83BE3831D0588E9D66DC2E71D11E8 +8E9F110493314AE48233D708568062829ECB94AF0441975CD8F1FDF4F626E6B0DB35683B790B +EFD89B94894C3CCC5AE9A57EDE5B4C5F71CE1A7C5F34108EF589711E2E4572D90CB501068859 +E2E333876FC9251E6A574543E1C2E7A55E186CC9A194DBDA51724FFFE506B0B754666C59F449 +3D069431CDF764DD7E62720625B3E02C1403427A93362205A4BA5AA6727E3D486795D7EA749D +AA5A46A7C3FF9EBE73DE35ED38DE2A0E9BA7FD370B5B702E21DDD6A69A6B2E2916A5A93849D9 +24B844C3A0334A0D2C95E089BF141DF55E25620BB31DA68962DD3C51A9336EB11FCB737E6906 +EABA756BF7B55EEADE38994C5FE146FDF725AC74CCACD70BBB292DAA5B1C60CD39AC60239B12 +33579444E8846826D3983B0D6A8C5BE07DFE43961897355ED8E72CC4A4257620EB7E113EE988 +D0E8F7947CC822D8563B7BD56D69F144159293E3E2CDED7068F6E3046F14AD559D712D7FED96 +740C962CD9EBA9CBDB0B45D5DD9A05C0CE28DD27D2FE6B7169B409BD1E080B32D6D9F2061BD1 +B9292D0506D482354F59DB8BD14F8D975B8A30B212F524C8664E5BD9C170BB0488CABFB0BDFD +D18BD44D443B08FB2781840ADDC9BD22376AB814B0429D7B0664B96E183A2675A28B68F1FB6F +88132C796CE2AAB0B9409396552D7C16F6ABF5B85E93B397A9E1CB74F610E81319CCDEEB6D31 +EA13F95F792841402245230868FF37BC57995ACA98FCA2DF474817BF96B0ECDD4F42DE20A007 +49A91297CB25EF1C7AD56C5D87256AB41195624F1977ECF9246D7B1DB6CDBFCC654AD428932E +5C0DEE8CBAE5D2CDA5F56C16D62BCB93B05BC6CB5E13247F59F321B3B824A73D4261C6A85609 +ABCB95C4B14FB51FA0B8826A05696617A2DB092D909FFED178BA62599012D08EE433E800B54C +77C15DCF02086B1F04935F7B79EF163384FD4137391F5E4936EC38677BFBA1B4204F5F80505F +68CAA8F538EB157E9708306A9745D2E2855EF01450E3D2F8BD3C4C5B4F3697A51038011D41F1 +6E4C7781B4EECCCFB86EE892AD6E9A2C69C1AB0B11DE2BF88964E5DAE8A3389F18DF163B375D +17895F0D91D4D52C3A5BE455196251EF12B8742CB54D14611BF5227EE52BF8F464EF8860579F +B8BB6191E9AE46F27BE34D732C2DEC814D00FB9763848F847AA9FAA73CE9053719C781C3B3A5 +F27E614187D3F00A330C2F76496BF32E924E27ECFB6C459353845D446F642061864356CCAAA2 +BF7443515645B51F4DFF4E244F8B7A556EE38389EE3BBF9E69BD72D6BC0D134E134D6FF43608 +75EB8838A885DC681004EF4383CAFEEDC688FE4735F5AAA4A11B1BE4D956AE9CBF8D8FDDBC29 +A600215C189BC812A1F441FF1CA1FD6C5F3C4013528961E676FE3C9ACA3D44B913F51DEFD42D +D4F67BE410C4152B675731F18315030FC2CA4BCFAF5C5BCADBBCBA4664FCE78984D5C8997B40 +088F68F31C8D54D44575ED23533BA3A504C1BC90794AB111F1C011BE57696786AE25551ED73C +35F6A343579DE01675DCFE26ABDE7A3CF73C121B7C33CD3D42BBCFCED99CCFEC4AE08EBF2AF4 +FADEAB53F6A2076F8189503DD57F84AE53CAD55D97D3734E706D9442FB175B5CC032EC649776 +00A369007A47B17569E32C5BCF5722AB7CE03EDC4DB3C1B3D31A73D3BD274C53359C6BE06BB9 +3D0026080B9D76F51DC69AF96C8F73B83BC8CEB5D788E69571EDC574E71C06B3504141D47179 +24EFC2CDD8D0CB9645A06922CDE8EF7B297BCFDC0C9D8C65A0D0CE542BAD98B08BF75D814CAA +C3C51877584EDD5412CAF5C69599666DB2E5571E5662B3DA510358234D553A54025C8DCE413A +CD0B4FFB252BAEE591382C0C0A293011F3649508A2C7DAC8F153B869C77D148A0A81AAE057B8 +D32CFDA1750180C98F70A8D0FC62A976F785B6F67E9665D1A54C2F591E4B9BC1B8CD0B23E6B5 +3CE5EE85995417A8199F68DF12C88173F69D45D8E6208DF7E1315CD08C9F0945FA751B9400A4 +F44F1977355C5FAE4EA84342F04AE3E785DEC832DE82B9C6D57835734080DF60C2AA44702FC5 +BEA1AF1455DA321341F3613442D63F6B547FED5707EF114B654E0DA6ED340A9372DA4A99A987 +CBE785342FA9D2E98789417B87BFAACCD46C16D11B5C6ADBD5619770810A39D74BE2620CD99E +49A9DC91E7E6D0B6AABE9AFDFA8D532FFF1310E0FCC91C0B103340E0F1371FE7801B9EEC0F67 +A7C7A26D18FDDADBEF951FCE20EF0558B9F32C560E41A87AD4A94DD0E0F1DC333F6667C22C65 +D995B27D25371579458748E078D5EDA6ED9F84ADB3D35547FED29BE03ADB683BA50A9E1CF955 +CDA99F95EC45B6B23F43A05D0607CAFDFB9E1D830613C22F1C583A65381CA5C8A736A8B34DBE +70C116699E3144AAD48CFC32405F67614FEAFDAF0106B39EE47B8902B1511665BE23981ABC5C +4E148F6685ECD9575C66DD36A22E41198227E7D7433ED856151154E478D51F5B093AB0A7A923 +197864F4FD6AFA7282DA51534B0F9BD0FF070795BF954E02204BCC3B0907CCCA5F3C478F7EA5 +402556883EDA2211C394C0D6E921F502368BA96DF89C39B9A36805BC76FA3C3FD390B0B75262 +7D8774F66D18A074BBD255B9FB2A2FE94BB30A928243B9F308BB789FA83E6BA7B94946DA5B70 +A5047B8D9BD59EEC2DE5A21A7AB0A826CF02CB675CB5C2EA3B774647962CF7DEB01554CAB8A7 +B949723EB847A544E8C839F36C10E9BAB10C3E4B05CF6CC46CC6A567D9BAC1DDA8825C726450 +68690EC820633567BB2275BD1271E284193C4402D5AE384669294AF99467162E790B3CE41F0B +BADEEE07EE77BC47CFBAA76F28DF5F7B870F95B04A8DBD85454405DFCA87B6B4DC65B3D5F125 +65BAD0D22082001D0061F10991F3E1682527EFBC3EE8F072F4BF29F3EB210E403B142B82B97D +6AB9A5CA512E448EFA90F8043495C2FC11730F67949E0F54544094592989D7A1CEB43AFD0BF5 +0EF49C81C996469F52451CA818176ED2AA6FF8276030EC931A9CA6BA331A4B463CFE77161410 +C4E8EFAF9395F51D13D1BCB2841DF7DB65FA51ECE17B5A321B37AF3215A69E72A74C4FDED676 +7930CEA4517DF9A7148A0041F4745E4E594B0219C9AFC5EE8059BA9BBF415302A9CDC48D0460 +516A270EBDA3A6997EC4335EDC0F20FF994C69A486316AEEB8584D0DDAFF255F7FFB07C77E29 +D58D32BEB7F337E28DA97B8C7C44F8452D9C629C38E03F402824B24CBCBC6B4980559921D69A +A48F593C4791B32FF0C6DB1546E37F831A82E3EC733773310157F50DB7AF0684981345E7E23A +7284029CB27BBC36D2D41EDD1CF0C3E30895D9DE0A2319A746127C37B6F08BB7F9A414FC9FCD +2C17998F7E6CE30C395E2BFC589CC0FEDFE92C659E4078DC7F83E9418B340BBEB23B52D45983 +24238EA02C94591014A4D7C12451F7BF20F3F9DD26C515877D6C33A2166A4E433A1748AA192B +C0D33F1C4FA89397E39AB886AC737440C31FAA635676A62E6D3F194A668FD0F8FE5B6A8BA3F4 +B4BA2198C837E4B9CA708754CD0804AC78C9218A770AB3EF5765E14A69D14C3367F842B72352 +3AB69E5E4FDE7893F99C88273DF486B4080089A0DA5136C59E1DDC48FC71C1E9C8C591E8BE5D +3C9426A657E65FF430EB154E2DFDF4333FCAFC588B61F8071F65CC8D1CB15E27A425ABBB0D78 +BC366BFC4F88122C66DB571555B5D6E028912BFD89CF3E0E56C464392A4D505A4F7E23CBC169 +CEEAAD218C7553668F549AF2CBF9A297805B3453B7C61112BF8E6325B7569E38F635B2E13B28 +AA8F7188E4C94E3E047B6A6ECC050ED9F3A43B131193D84B32C0FF1406B9B66E3627719A781B +676DDACC16915ED237D6B1342F3A9D981D9E96A1A8D5827BF165BB901800D6C900A53271C906 +D3D106D26636438E1B5A0C9C97CEF25F0C8B4B5C037C10A9295DA210CDD608ED6E0B77CF2EEA +C5DC2FCB7B5FD0122A3C3A03DCFF782E3C877F210425F9FF99235A969ECA67AA7AA290130D3A +64D6165CCE3AC29C5EE3B4B86EA3AB78373C664DBF6B99949EE56B0BF0F94838701D554B26BC +45C4DF406D9015CD0B2147D338D1C71F7738E3B922291C96DAB5D9230190FE3299551698D8B1 +4EF02F5948BF5B5E4BE42849C001CCDBFC06DEE4FF6B12832575D1E5863F1190BCE902A650C1 +BF869CE7082C9388A1DAC4CA0E02967E3937BA91CDE0E931BDC07DBD87BF028F46CD00E7A7C2 +D26362E0FC0BF267D6DD23E1DB2CF41C3BDCC785F2A8D12067CCF81E1F113DA147CAE6B729AD +E0F85369AD28239F35C7C5CAC87CDEBA07AB233B9321055B972A98CEF27C1B41EC063015E8D1 +A2DB01AFFBF0BE01C43DA54A86F199E68432106D252837759AE1618D7008D615AA436341DD35 +583DF423EACC1B48D568FF5985145CCC285B2803F03B5B046E7514A8024FD786D3033AF60962 +0004CBC2609766039EA8B28086019E4BDA30113CC40E854A159D86AC49E50D894595349E8B37 +97239DA96F55B565D5185E630DF0BDD44612DC4E83D31BD8A4372AFD5420F6B379EB8D7373AF +3C91C999CDBF3AD418DB84AE6629D44EB28AA5EE9583686EE4F9435DF0971A3059BEAF8651E7 +4E33E7B712174BF952795561BE53B5926CDDE509665488354D5C3E288CA7B679B9B969C9C6B0 +44AD882905663D1F5AE476951A637D4125E26575B2CAF43DFE5C6181238D78E0F41F7F798F03 +FBE9390561CFAD3F29E9DBBE20EE524344A7E3A730C529A2BD8506FEF7D571AB99A36E136C67 +897F7C38582782BD04DC799F8F66432E0D5AFCD239185E95C8B6842CFF16F2CC128B8FEFEED6 +95C85E4FD702A60553A254E9EE2AF1A0313A5D2AB5EB559064480B13412085120CB6C90B1AA0 +8AE1FBEC261077B9FE65E3FACF4DF582E89B68A4422D0460DE7A8523B51928F1416A9AE025F9 +541FB5FD5A9AB5508ACF97EA891BC25EA5FB8C7C58310720CC40B8366A806DE9E4DED30426B1 +E7E9D9C145969B2B6D27CFD7F7BB7B2265E79B4BB865B0645209728891A88C68B20E681B4472 +CD3105C2238931FD048B43400A9819425A2071367B962C69374A22A06990EA59D0FDE438D552 +2432C1BDA7A54E52B594B662740FE6923CD04DC2E7B05748A8BEC182DD5079DD44C0FDE807B6 +BF4025992BC6B6F24C2CCFF8385CCD37167BFAC7934E521BB7327D8E88B018877D690F959245 +FB26551A75A06E6AD8E5B1C2363D2493FD947431050608AB63F15D1966D6BFE4F1A5AFDE5BCE +8B08E91CF0514B4CE56E1C62BFF778159B77A5919DA5F4619F7A580D6053126AFBD8363082DC +12A405201442BA72742E26C7C8D3430263C9A0EF34E0205065977E7952CBE0FDEFB3902D7716 +7F088103CB7D4A508C867077CEEA5D1FCBBC1AEE5F26AA7A85FAD4FA3C0D9207AF49B373F70D +0FCBA87AEAFC7298793693865C156FC0E0E8E7B31AFA7C473275CD08B7BEC07BEEEE402AC272 +C666C61F5BA5C1C513DE5909D2998EF7C439ECF9926DB57E82772263979BEFB72DCCB5842BFB +BA0EB1586CFDDFEF3A63F1B4FCCE3894E981D6268A62D1D39F918D4F296381D5AB356450FB31 +CAE01FD7F36718C7A54D503EBCB479CA191D5DBBBC08723B8279F2491931D2BF54BA9A93C214 +549F66C3C314EE37B5A9951D62A6776E6C7B4989BCA05ACDEAD7DEEC09BA97A0DFDAD7429E3F +480806EB9C7A3865B5A0648530247CCB71AA31E1F8971D9649D6A430BD8753FFD295F30E4E7E +CCAEB12F4A5D9B7902FF57B08B3ECB4593C988758CED4A394E412FD5A132CAC5DD3DA61CA3A1 +3E91703702388EAAD89443E70F7D037C9FA28BE7C8261EACBB7AF473EEDB0645BAF01C5F506B +A85813FD1D5164F541E0E85D228E92E60D9BF5C108674C621D38E726D2E219411759E8063C2D +2E64120C66BB2A8F6F00289C3BFADDDFAFADC3285CD6AE1E624A59D7621276362382D2156A49 +319A5B1E2B6B6D9B9346A59E1A4E9214C66E17C3EB5A31B394EE2F030C88FEBFF5C659E29FD0 +5F57C35B8C986ED1B6FE33ABAC7334FA0653DE6A935CD0CFB4F785F80DEE2D651BE3418CC83B +18B5B4C176DE3263ED6B4F64D4395A48C2C5CF13B8D21D63D85E2228F6373BB766D288CE9D05 +AAF98D0848D1AAA42CA0629165C7417E47906AF4ACB4353CFE396B82BEE33EFCFA2531DB7237 +9E81F0389A72E0A1D423E1DF66772732EBCFF12D3F83DDF18C46A00297345166F3C3E7B11974 +D70AB02EC9629D4AF1F2857FE14D86C9B47B79AD89044CCE0AC09FFA4621608F7AABC07C0C76 +60B96C4EE1456B998F509F7D77C9C194A148C48B48738A6A0AC12E50137764914BF6696B7049 +C8F13763949F04D6A5302B9E266EB035A11FF5EAFD296F209A3FDDBEB62F1C7064CE0C449A70 +A29012E041EDFB71C9F93BEEF2A564FF2D8B248579769A81617ED8DE4F232577E0CD2CD650C2 +DD3329069017B0B427651E532CB6D7602A81BE2626EA6AB6D0C85D69BFD8772D62DF7F6C86EF +67C8FBD17F2D2DF34DC52256C72181093E4C876D86C9A66C91A8AB1E01285763EA93EA6B7A4E +6131497BFC536F69B7C02D28E4645CC6FE5D061495512429A1D3752BC565F769A4475E2C415E +8CA4985CBB329D49B8AFD45498CA630C3CE56E7E26CC0C4FA9446D3A402D66E39E3E3210644F +C9A9E0E4445180C672C32734872703910DAE90D102252EB56864F1CB6D1FB8E4A51335136989 +08C42B718DDFC4008264791D325E6633CAC13611B10672C263BACF0820F84B7134EDC9E2373A +61C9C8665B25AB7A583A4983D30386AD84EA9C7E021F64C9E54F3F9B3A3D3267EDE3787DC949 +BFB2AAFF21B6CECB88129DE3200AD2693B8B454B18CAB17134A471540C009EE8DEFFD2C70AF0 +A98320EDFD6909B0B17C3F4B857D1FE5D963EDEEDD8CD3077A2980FD1AB6DD9AF5B151BBF7CD +6B645FFC9C103E45552F43CB401BD5F084116D21C958E1C1450973C0C393F4BA75A9EB1C5438 +9CF6C840FEB5BFFF673E058D8738CE2BB8C07CF0B2B5A837948FED64FD7244D5B5C53303C50F +1187FD6B085A9BB6E5DED081B78F4E486E0E17811A552AAFC50A69CDACF0838029D3DA87BFAA +13D89DE7960E332650E5986F940C4493102DE366D8D574776E019205B25F16B6FFED5AEA7C87 +BB558497FD216D2937452B62D8A63D5EC72AF5B83E91BB72BD04CB724B4083C60D2CA9D125A6 +9DB5D2F4212BD48BAB37FCC933C471245AB99284671F9E3E7E6A9076117F5CCC8D469B929BD7 +C4B677DE5BD0272D78BC0434B4A1B4BFF267C4FB588631B1BC3DE1DCC912E3902D96F16B2A35 +0775BED06BEB2F1B7B530CE45337F744FE08822331E4D2913849A0890434088063B0307DB4EF +A561810F9C2073B890C67108A95CA581632553F76DFCE780AA175675B186D24379074DBAE021 +89DCDFE396A8FC790699C3ED4B7799B30F119D60EA3754549A3CA44CC2F17744DA59E11550D2 +B0604AB45A2FFE69ADE126FF2F92CC75EB1D8FA6CF2C2FA2DFB49C1D16F8074A7D7115339E93 +C09265B38789A6816B12C803178A72C7C51CF78557D3BEB2D3D5F0A4C53511158145EFD256E7 +89DF517BAE8DA9B9B4C494AE42712EFECAB7A7D5BF4668F1FCC23EDAC598CC414BEE707C4C33 +1F02821C296725BD4F14F5BC97A15B8ACED9CF5EEA5BAAA216EC582692F7A210BE4F6A41E96C +E3A8C65AFDDBE800E035BF0595C7AC0D12B87B4D409DD6772D125249F273108ABBA0973A7CEF +4F1ECA5C9A17FE3071E54E68507DFD8EC6B787DBC547A90C43AD42856C26324178F2E6D2CA3E +9043188372819D3F02A9125A3BFE766E7D19027CFE5980F5E1E1A7033A5BF236169FDBBFD2F7 +3EC6D56375B09FA750EB4741E101241CA191B49DE9C681E42849E23E17B81973E903F52B9AAE +B07855AD04C30DF51C9D9B54F718C7A11038F8DF63DCFE6C2728E69E33AD933A517CB08D3DCC +7681F673B2E17FC38DEF47E2A2F7FE7173C3B6922EB57CD9D7988F6D3A768E56B46AB8C7EB9C +ADDACEFC45E1E245563C0A52F719FCC81C635F159013EFFD5432C697C105CDDCDE49CB5C5696 +3CFCC2BC4506BB906910876395C8239C8E5C161471B3A85A353ECA17FC9BC12B805B05D53AB5 +BEE2625109ED742C14ED2B08C5D19E7B4D9700D6D3191358D481D2C0C74EE8BDB1B7C40C36FB +B823E5502F9ED6367AF146BC4E07B428F90B1E42E6D470958FFFB5C863E73B1904CE37B9A8E5 +90196BF43079DC61FA5BACA8F312E8E8A9B707DBF255BC5B3DC1DF58D374702DDB45265644A7 +BE315FCA2665192E5DAB08A6BEF085AC370FB81F2267D4D1E05BD8D69BD3D01A1498020A03CB +BB8BB7A095F10C9D88DA27301FBA0AFBA4D3B056D38EE6A6BBC532B464630BDDBD4CCBA50C2D +B04E49AB8E596923BA3495E7566268B226353E7DCA7B11F28E795CC39F974F426149E0C625A7 +EF0B4CEF3E3A5C0A964BEDDC2AB981E564817B963022BBBEC1BE0FAE2E05B6F5F41648FC17F7 +9A65162E31A88D0ADB71557142D8545CF2F2EA1A0362E2FDE496923A87C8578D5482C51C52BE +0852326DE3D75F2C6C3EF3024EBEA779DD63F39BB8E2726A7B49A901E3BDDF9586DE02082B13 +86FB777D9F09DE377682E14AFDDDAC3E81F485B21CB2537130EB6F69A77B87A702E24BBC2070 +6467E82621211300687F18FC809E976FD8EF3932E5213EEBDB9D184D31433B353CAC68BDE9C9 +6DA802FACDD168E79491070754E5DE227FE2DBA96C51C16D8C8F0EA9B302A398B2F9491562DF +08AA4C97324B6FF2FAC68A5D079AAC79CF77F0249A0D1C42F441BA372744951077F8DCF83A26 +575EC5A87AD6DD4F95EAA1B7F9393C27ACD5F79CE6031E808E13A55C3829D158D1E59E177FE5 +0E87F3CB39A81F14F35645FCAF56EB49F5EC78EDB848B396C72F5D928E3561240E2DEDACB37A +994154940F412456119657381B52EAEBD728B026E87FEB8D7EA1EE49067C5D6BDBC56C578728 +820D583CAC747F243F6F4A59DCD5B91CFF0232F18183E8E25C76A2C7D53E6823899D43FDAC50 +4221799C56EA08F26BD03501FABFDCF4CAFB9E7E2ECF335D8C25F99D40D91B8C93BCEC6B11ED +9671985B8BFCDACFD77CBBDEA246417FFCE021DE54FD0AE4CA7AA19A9458426161513A0F5D7D +4BE2A6DFBB4D6D060E5EFB596F76083B53EBDFBBA1EEB78137466AEC283FFD78BDB6DFFF9748 +E47A24614104CEA06D88693EF2203D8792EA5333A697E7B7CB488C01FD76AE792AF0B8F88F02 +7CD4BC3EE5D4A09B968DE6B56DC55419A716DBDDB733F1B86A27CDFB8B3AC29DA7613E6D9042 +CE9F648A058E2321DDBC10E3374366D6BC4CD910DFF41037CC909580F4650338C9CDF3EB01CA +E0D33DD1E1B41524E0F27A77337BEBB6E91542F599C9C7A1A4551D90537F985CA14DB562DC34 +A07F072202E86FCED29D1181A2B1D57CBB62BF6E5E7702A00592F8B018A12C826E569B7103B7 +8124D887F03A935B54255DCA6A01F433308A55A71B305EF69ED070CD7CDA1AED6BAB529BB506 +970B92DF62DE28C05F21C5FAB79AE4BF3A8B2865C408553CF4CC12E3DC69A0E3A683A637D2BA +187CC5C615056B1853B349A1B88EEDCD9748FCBDDAE70100551ECF0B897A0CEC97A456FCB787 +49F74B25168181B75AD5F523F4408BBCCB011D55B83A63A0D96052FE523DD891664A613652AE +3A979AF585C69FC4C34CE353AB52C5DF99D6908E1CC86D89CB6A138F42FA4D472C48E334F334 +9B2C47DBD9B6B6A92004B7D3C994EDF5B17F1FDDCAC72F8EF393838BF5280CEF41B803513605 +381637E38638004FF04BBE10C46A8135E0B5DB123C0F2F6453C0B648124CD0C7E379742950E4 +B7CF205BED93FF6C0439BB3BA0DA7B9C2C9FEC48B5E49E10F944D2F499C6FFD3250F8F7AC82C +93EE7C6B63056D1278871FED6BDDE70B1530118D556696CCD90FA33010B35AC56176D0BAF342 +AA846BF7B1A95D98FB7C05D56B4FFCE922F6DF7A09BD8802CB536ECC23C89445544F922DE501 +700910AB28C892BFB1548C48FD3D9B0BA4B5F5CA44DFE67A8E2D42FDA79F9473FC6EA646483E +CEFFFC0254E3F930C4732C8AA392E4AB4E26064CB1A185BE4CF0677CF1706C4DC8BADF32285D +6D02D2C4806B6E0E2C5C2884F30EBF9BFA16BD7BC9E2B779173208C156927D2848DE30A5B3E8 +622528D9DAA63E06D14E2E368FF5331279680849F8D9B5FEB448633D444CE06BA1F3C8831018 +FE7BB9ADB9A896AA75F9E489E9B88342E424DFFE90976E4700E6C6EEDAE9BF6280AB78CC5805 +93347841BF10EECEDB86AF0CD461336515CE50989396665CE975D1F1CB0BDC36B619F67CBDB7 +B090B04F447463F62927FCD0E1EFA73BA22063732CB8557E27969D5945D8E82F4A5ADE094068 +6AC760EA8FFD127653F954F0287C74109997F1B26328FA9556C42C7B01F0A810194A9CF0D716 +D252504BFE2C2707456A4422E84AD233F4B32DE1A825F72C45083C7D7742B6168565D48AC1D5 +2F9192ABB0D491A9A0A9416420474D9EAF1E146B2EF1F703B2B33838C4163DFCF8242CA6578F +37CDFD4144EFC3DBCE88D3754AF1765E677D670ADEB2FD2DF7882A4BBA95FDBAFCB9E09B7177 +CEF80B03DE222CB6070D7D7E09FA2297EC831D561A2069F6E95E9EEA70E41B126893ACB834B1 +778BF4CF338A63F53E4828D75ACC76E29EC822866AB6C5756BADDCE0E3181837E1F7DBAB1405 +DAA2231B88E176444594000F12C8351354F3A5722E9E4C376B983CD441D6D465F3865C8111E4 +7604C61A04CC59D185CDC89933B13B3A9A15360AAAFB18008FB2048000622905641874659693 +57164FD31ABAE5FFD1C7210275EF0198C74BD7F04BC02F9012A6BF7A8B9CCD76D4F449DFB3CE +7CAA4FDB6E04DB1099861B53FE6A8497AE454438A0099C7F14AB799B9E8337128ABF5C523F79 +49E9931D233E8466029DD3B7CE86298700771876032656034991E213CFB22FFC1DCBD88EB6CF +20EED29B983BEFC5889A4589428151A249BF85A7F38E5F70CB6F87A706A7A057F63CF366AFD6 +AA4A481FCF7F848B650CB9442EDC33673CD98F8F895F4D82DDEC9AB457CF21EBD339769292E1 +D17CA465997DCE5A6829C57392E08C8BE708ECED1A9AE4786EDA0095A05014D4AEB167C1D1E7 +83F9EBAEA78816BCD4AFE2E5D356A30828E11A5641344B3D46A3E8AADCAF22DB74FF57EBEA7B +779B7C5DB027D6FDECBE1B0DA2EDF3219CEC627E64CB3142D303027F74E694A983B16B33FF62 +D1B0E114CA59B30D2261AC4337DFFD0273ABC09B955E740E6ACB4F20969DA27883B3C162810F +194A9537F13E58865F2B4611D8B9A9C4A59586E583F9BCA6E8684C982FBB42AAFEB00F6A2428 +75A8D5246830E5D9FA8B479C36225D60C79390094C3820D9D20483BD8B28C5979DC27905528F +F829C14E346511BEFCCB0CC2DDFAAFFC69FA01F2DD592B0A554C8BB1D3DDEB53D871DE3048FB +9A816A40A5EBDC1EEF6725B59F6EFF26E4DA46360D4BFE49BF623955485875028F78DACE31A4 +B8F4771090B36B82E0E91C9F6B63DEFCA85E751F3A1E6D47FD674B6B75D34CF5D230012A2A02 +EA49017E9AE4E22440C836923450A7CBFE44FF5E90D9273FCE99A56CB0B4AE070410144DEA9C +75282AC74C8D426C20B54D48BF5E893D9AED7CCD4EDE4B3EBBF29320E9F98E36571E545C09DF +06B72ED2DFDF058446FE62D7F591326F7A0405718B97692CAC9B02D77A37662F0BB150102D5E +820309D5E1D4DBD95606111A4C5D0E606F890732383B96D58065880C679C4FCC3F4FDEB870E0 +022EAA40D367A1CEE2E43C31B0ECE28481217A77201B361541D40C4C7ECBE26EE0263FA70942 +A9C4F90B986284113943E170F7C6283447E8862701E31BB28A72DEAA7669688BEE2939086378 +99339AD8C2C1BF9558B06446864DB50526FF514EBE3122A3059BF27307F10BA5B44ADE0EDB6E +2693D7DC2B80E1A84F635126960FDD3B6110E84922D484261C92C8055314E5A2E8FB6DB0A904 +E291714B4B1D28E2F88734343E42C06ED7DFF193B1871B028E7A0AD51249B36258C0EF6A5165 +F5B7AA3061F0ABD6BE779D7E845D6606C9576314C04E98902DFC7CD027934BFE804B12F01E9B +5438301E280AE84371CC2BECAA06AAC7A65BB6B3F7B642207D730AEFFD55ABB33B8FFE0FE0C7 +B16356E092BB0360FB94F1E8A2FE7FA999CA66B6675025CA605A65540F6D5619887D7E1A6869 +2B76EF901AABC5A15D529F5BFD446E04E95A1BE213EADB545806854ED5E346813ACC82C927E9 +DD5B45DAA1C1D57A2B451FE91CCCDDACEDE657B9E37D605CD4D6001FAAA843B9EA84917602A6 +7519B99DFCD39DA8DC60A1DF52A0A0C8CD35BF9069C1B8A534B4EFAAA4B42E932BC61FF11A84 +6190E9BB2111D13F08570DD9C9934D0C1DB1EC459A3BACC8F10BCCAC2BC8270B7774BD3065C4 +D146548D1959395266F420EA71C05EF4D37ED0EC391890BAD4D686D3D0994B98B9A2629C2B66 +88E453167FC651BC70DCC608B453FEA208329E9B93BCAC1A7C9C5575B43D32708079AD2FEA25 +DB03A13440388F8A4BF9C5D9CE42281284C0A1FEBE6B7BF94B58257DA32011484398DB2C2856 +23803D4E578F30BAE73A57D039A2CDF56BC2A625CBADAF7FDDC7744E8586D8CAE909162D2A56 +1FAF91099DF981C72617F43F1E8DBC986A1944B370DDEEA5CEDEA04C704BB45227680EE2A7A9 +1D5F71C8B429D5A1E22C557932A19B669A6F7D60BE8B5A1A08538D5396492500E8A30D8F085B +9F1613E18FF8511D8F4ACEBC9DBD742C6F27AF4B62026BFCE268E3239ACF3CD0C54176F1839C +9CE2618F5680353A0D234181172DB3A14523D69A204CC7A5EA4A9CF1D78275804D60D41C364A +8725CB1B72759A30DC5E2920B76E1B486795CCFF14FE6615700ED97A1BD4CB16090CCD430640 +36FC003368B1E949D23BE8E7CCD7F4FC6F54BF25174B56B42B505E99BAD37A9868A92C29DDC3 +29F1D5A84806B9382870B3908CA87C3F840341E45731E5B7EF5B066AB120DB45D72B0E444BAA +AF4E948B34D354C244263505EF3FA995E2DC1177B8EBC01A6E2C7AA5766CEE90D3AE7273D569 +87BB665A43B4697A0EB98C120EFAB3C61684520E148FB5227939D6208E30CA72FE0D661B9792 +C8656B44986ECDF77159F0ED52F695DCE64595A243B635A3B4D328F73D248E1F8D8244B2285C +B5F6374E32B2FA7F2E29828E177F81938E2AA1C70EC9226DC45840F8F7CE4A377D32FE6C6550 +61389B70C4A5AC6D62FC03BDC16B1C15A79DBC46623501D263A948BCB2747E85EC1D0DAAC606 +206398A2FC008F369B673FE9C12A1D4D06D80D625F2412FD8912D625F182307FA2731435CDF2 +0C944C2ACD5094A89530A6CF54BA8D347B3819B31ED56C55AB6CFFA8C8C3C0D3C6034FBA9FBB +373F08C76E79F50400FCF3D1F65CEEC11C3623706EEC7ACFE84B89510867C0B2FA6F25996733 +E4CC394872726138D7456CB398052F4C03705E27BD85EE755F1992D1C6D330A95B6D208ADC76 +D4CAE80A78C75AF6AE4976E564F859429ADC4DE87D26A9A6277E14016491D69C6B9368A6DBF7 +2C68EE9B4B32CDBB6A186728B354B347DF5D5F33DB9CC2F757B113EFC0FB491ACDBCBCD70D0E +8E22322E6BD3336E642C6C48D6DD0DEC32C39D6E786A99702B83F644E3039DB0BC3BF91918E2 +41A1D20AF0CED35FBBCF8892858762FFDF4D855DC043CF348F64B9F0EC40B0D58F1A267C6567 +8609A29E8508F0F5367E0528845F666D3DEED15A880691675C9977278FE5A0C75C97F10E201E +97D255C40BE2DF023F3842ECCC0F474782716CC0697D2305D2894B2149C94ACBD4DB97A8CC49 +317773662D6533D2E3BA293FF6EC3BF29B897723B200DA0875803B40FAD899E953168BDEDEC9 +75D3461618652733F9F1AE97FA05454DA0C39B27308F81D6624E7ADD0E909A721B0B5B87C735 +A0F81402E1BDD37437951BAE5735BD2D9C5A201DCFC832893AA343A6E4C8F879BF7ABA330F71 +AD22AA121C49015A6E1B4DE63337C3C9B4BFC3E8456D25309AFB76665AF8D3558841D95E1577 +87426288F3A108CC0388A47FC77672F9F837AAB1BB03395208BC7800F59D883023DE8DE4984D +3550AC1E435A4A9EBFB9024FEBB3997847FFB5AC94EFAC7E480B15F49EDC4E1EA47CA691AF89 +E372FA1D51A68D417DF4D7011D8B129191F8CE9BFE2D80FC9391E51539A8EF2FACF34C91BCF3 +C5C81BB7A3050E0EC13E3CC2D03387335B307D3CDEC0D43A6C2F348C3820CDE916070CDCB485 +D1ED73B708BD083E4653EF4F4D1BEB104167E5C53243C72B5DA52CC360602297B86B012DAFA7 +BB0D762D78D7AC49D84DB797D4BC25A89309E3715BAC2970BB31C959221EE2656BDD93B51D43 +0644E3EE633EEDA51E1AFF403FAAF247B15DF007EEE990B21ED684D260AD6B76028F80D65884 +4D4E8BBE91DB43DF55819FC456B9402805DF67958AFD45DBE94E54968ABD3AFD2C456B785092 +7353FB25A936D9D554A21262A3CAE1692F978F58BA5DB38A55548529695BC0A455AFB4BE3128 +FE733C7234154F4BA0F00CE4ABC7C240C9283831E9A7E0BECA118792AFF6CADF3FA74A572F1D +B4789FA83E7E9881E48568814E40E4235A2ED72E8FBDE71ED0FD40D348F66D08E56256B0EA0B +46F54720DF7E39654B4B7B23CB4863AB341CB2045EF7A71A9AB550E1C14282FDA3B60D306906 +09B9A2F535670C9F7C6062684E1062BF1B1675288E002412AE17FB3D63125C4A577D3BB97C12 +F4CD925282737CE2DA3C2E11733BA9B5DCEAE115A0EDB3ACB8BDB1AC0F687C829EDA0022D654 +DC3D051BB7325CFB66F96C7ACD1A8BAEF2BF65C167DF291DF762720D39904AE50708552D754F +8F43FC2D5B91B632D2BAF70C67D3AEA5CE731C380333E66A149E46B32412163C743D128F52C1 +24CADFB65399355B4BBD4C0A3FA7C02DE323911051DA20124B77AB931989A74D584C0F6126E4 +31C6DCCE725FE72F83CCD0CB35F2AC901501411270FE902BBA4E6A4C1DFDF12E2E857221702F +F0749C495E170F01578BAB3827ABAD809BFED83F6FFB243F40DBED47F896DBD37CDB7D63FD08 +673E13DC24F4052E1551BCC080685ACE8D3184AF5A1818B4D48811F32DF210C8F36FB6A20C9E +239FA888CF0EE5BD1A87F15C3C6A3E459BD006A69D2C027A09E83541D4ADDBE98FD665AECC35 +C311871A4A67FD59EFC06B2CDAE51F00659B4C4F9F79DD824485BC073CEA94DBD45CDE541355 +F7244F5B5BCC6C76D82FCD1CAD3E2D08175A375098DD8157B3E30184658EB500E224782ABBA1 +297432CC25FB54ABC54C8CD85667DD42BFABFDE7FB7A4E83107AF3AA508F9B20650AB6D01CCD +AD374C67F31A666BC1F505A6D94C0C94E4E73EFF7D57FF69F4F145504F60A032109AD829EA90 +EC25B66869ED39434EBD3154E4CE7E044F01AB126454339B41193FA9618AD7B49CA2A9B2B595 +684A35A5534CC19A989D5F09DBE09830284F895A4876FC5F7920061B06CCDCCF168D5022CD6E +AFEE4D796BE4B9BA38C0AEABB4B195B81B621843DB7DF74790FB46F5C07426C8A4FD0D9F99B6 +C0A26AECA5F89E36FA8DB06884AC9A3ABB1AFF9C6889BAEAF13CADEE3F0CE80E00EEA152BB64 +85BFA7B5AA02BEE1905EC4F666449CADC026BA91B9ABFCC5C2002950D35ED46575004D566225 +82500274E2ABD691D0013343966037685138B76C4218BA60855DD1A35E4505273C2CEA443018 +DB1CDBAE7DBBD948C96F5DB10BCA8127CCCAB09705EEC19399F31F3F8AA774BD4EF950ABD0C9 +1975B346E7CEE612B6A4FAB61E6CDCCDA47B51D499337B98B0B6EE8973317DEC69E6F1564868 +A50EFDC5086C806759EA40BA0F036E86C8E76A6346609A7D87C6FB2FD5FCBD9B1744FED5F412 +E3DC55E519A941C4193F66E6E4656D04BDBFAE608110803F9C72BA22DBEB7AF2068A1425EC76 +E6574311E3E1200DFDFCB4A0830AFFAC7809FFE3404AC5EE8ED43BE8425C1A13904B1F9D220C +9A9A6B9295AD0B13BBD63E1AF6AEDFE6F54DA8AC585B2FD53AA94B2CB65377D10EE13460F6B3 +08BB6B3476DDA5FDC5EE7DA695EF118D79051184BBAC35EE74D6F046F17166E0F12604157979 +399734F16985182FF1BECD19131570B97A817C7467520EB148C3E2887020F8C09CEDE0A54A25 +4E0311A504A411407EA89C2E916F60F32C4BF8456EC370ABF03D1B2D95C991464EC963368441 +1664CB33186BF6F897706F7C500A9D0AAADAB811985D1B741AEBB6593FBA0E07E004E86D87CE +A653B87CAB70900D1915CE3D19BE1969312EDBA894C541F1227586721DC33555FB28E81307EC +F93F164399A58988FBECEFF7CB8D1A751B4FEE0AD6D2638B97016B2DBB034EBD0528BF06C08D +E822804EECCD4C943ABAB45490FE47DE7584C569F9789E8C1F213C1924D196C63B3D57DF4385 +FDB9BB4D584F6C4B736D32F0D533C3699E90D1E54C3F4ED914A788A0C364F7D5571EE6F61D85 +E5CDF8315FDEC93DF38BC0C7E5BA9DAF885F99DFC9262F77BCD3137289B43D2C433111E8937B +5CBF3941AED5FDF09ECD0971144E020FC64656C88A01F9B749770DA845D7F690D1C12141C7DC +8724FEFBAE909D2E5383083402BF005598FA8B67301934E98FEED22625CC852AF51E7C647385 +A14B49EAD19C2BBAF578D35943A3B8CC943A863187AA79836CB71DD8DBDE642E1813FF3C21C0 +90F3A7BC39AAA1F5242E8BF68692A567578A4795ECF926CEA68CF77CD6B6520367BA3C98CF22 +D618A2764323297D1F2E210637FB6CC84674F01C04CBAB1295558A148F7F94F64900596F834E +E0F333DF86C59200992C77DC32EB5091B7F5E1061F75EE9AC11D4F7C18D975FB2AF04245638F +02FC7475556CC1BAC14F33D0F36CD94CA20CD24AB4B587B03D968175388ADA63FFC99E11B340 +AFC6C97381612C825A4EF6201B13C813BF36F5897E6FE3D95BAE2BCE401CAF0F9D7F1D0729D5 +0D6496CC99DBA29E2300A5307420DB31875196A26DCE6B59453A810B704FA8ED0E654B02C36D +7D3D870DE8CE82532009C4E9F93921A7B088EE995060AC598E84F5E1248864269A2358FF4463 +A50134F113431776066909C2B52CE0114D3391142F298974219ECF3506BA1830359D186760DD +C7E42E376A41B17ED88E6C429768C73F52095F491784661D89815ED8B71ABEEE1922DFAAC7DC +FB2E427C480A235F533F523C7B4CCDF7D3E3E7C73BBE89CA8B04F89BF496310792B445122235 +F55AC0660CAD4476ECAB30D3FC774ECB381ABFF4BF4E50BD0954E240AA7DDF07924D53BEEC0F +F8DC680A30F8CBE921F5BCDB02BA1CAB4C15143898C5C6E9DB4B88818299C4CE29F78E88052A +A3D4F68DFD93BFDD1CD6328AB1D2C2888FAEE513E922320FF0C084E617BD1EEE5442DAE79108 +B34835214A330742AE9F99ECE561D29B09F611EEB154B1498929A4A6B3F09D63461489AD6EF3 +15AF77054026DE9F8120FDE0BA8012710C75266B9C310D06A842451C5A2B1AAC9433E08CEB23 +A872593F49C0397A1AE1A6443E4BB99C1E24AF85DFF91C97D4F400B3572BDF28174C5C358427 +ED6CF1645BDC283910C47C8C5B112802E549F1D60E96C7FB2CD6F0648F2189B7FC0FA2652152 +CDCFCB1B20367A2033AD1188576017E0F1272E701A5FC7BDEF08BC4104D728074573E40C87F1 +A2520B3D02EB8CB23CBAE6449EE78BB857E3EE7FA228F91E8007B848E309B38873EF3FE1212C +1635404DB7A0BB06E21EC03E9BB358643F9E9972015362C58BB56BAFB7FAD31C60D0DDA2A30C +5B5FA028896FAAF05A73AB8610BC521DF0226A922DA532FED3E6619E58D9F76F3693269506F9 +CAC08A56B7EBE8F9C8759D617BF44B03C2510C6235AE30109DF7DB6A7A391342AABE9D153366 +69F98D88DFB213F19140A52BD39E2E66BE39BEFE92B98D7271917610BCC240AA5EB2406570DA +33CD0B66FB032241BB148A0F200E3937ABBACC878C934BB65A41D01805285754E9A3FD0DFAE2 +2C434D1D86783EE2693D3FFDDD895F8FA00F83417BDDD173E11F9E1E4119AF293F58B5DECA41 +B5D6F4AD983F668EC561EBD5F446B84FDCA10865202528F60BC54003413AFE4FE3E89FA6609F +2F21DE8D5AE7D701FD349DFAE556D6EDBB906DCBD5B67EB59B2B22AA1C26726A069F08AE407B +6AA179E313A4856F5878007837D6771DA41AFDC5F9C341F5505661DCF8D7E14A16E9AD360685 +7F67D8E9C62E41E5A505895FD0386DA34679735DEC0E3F71385009C45C1D2B9FC124FF7844AB +CB056798CBDD336AC5462BFA9C012966FC34D9628F962285857C14FCD4FF243AA312F6177937 +3915880BB730E4F075DC14634C01317641C7E1C3994B40BB1BEB74DD2BED0D9D43DB000833A2 +ACC8A6F297DB5E7962430CC727C03462E63C2DBAB60F6221BF5DD3FFB0DDE89EF98BC1A5C6C5 +C59E6DA88A4DFA99F5DB8BAE29F26E34B421E7E74C2C05A8457F605FDB727DC1135AB363E3B3 +9CA32B2385BA24C78A1E0C83D42C513E3383B28D9554D2F5DD6F4BA1FFAEDFFB8923C183E35F +75C57CF48893E4CCA18087CCF8C84795F8A31839EF6F6CA25CC154F6CA3970F60126B252465A +76B1EAE8B240FD387AB315E1E710A25B339DC2C0706DA7B1C47AD15D5B6837F7DBF5A95E98D0 +EAEC6C121598076C6BA66E471C87F9947929E01B386BE55EFA5E6067CEDE9F54B0B278ACC43E +56987848ACD559621B05C67228622540EABE7183DBC1305FCA26654D9BBB734355ABC4AF90AD +7A7406D123A73695F77FB049B0CDD25170D8CF8F9A892D3636FB152688153F58E333849BE3E0 +45F8E18A4EEF42F191FEA6F2FB54206C981FFCF827757A22E75A7FCF21459E7C42FD5194DA16 +D0A33B32318FF5122EEF24C81D4C3B9391DC8D209EFF13FCB43FABF1FC67A712A53756EA65E8 +1AED88C0BAE56CE5DB00F2F3BBD89AB87B9D4C12F35FF1C95D8F3DBB7AAB138E3C387C135A32 +F00FED1C25B0F96895792B4F0276C3E2D702816D4A686DB2662E06451A3E1C3A5F6AE239B240 +505ACD4DCE12BFFFE205016956C6D6B986D2163AB20EF7B02F27F9E0F3518E5E51D7B8A81B6C +6C0CE8A32956C435D20CC226D0F16C91662A32D05ED7F66B995F3753D05B91B030CDE048D7C8 +2885174A896F22FCBE7625412362C5D6A664D9BA41504DF972B79C442B5232B8EB90DE4C29CF +BA9EBBDFE5B37F91A630559F797C22149AF8852C5EC4AB945C8A042E5DE43080684F4908BAD9 +69F290A1CA1FA0E916B6FB802C7B15D2A54C8AE8E4EDB91D926DC622DD5E42362B4BD9266222 +21607EB032181D92A5A0666424921456F2198580910938EBEC7902B759EC3B66A10C946E53EE +98DD1D28970D44818C30C76FE735F2BEDE5526E47C64EF7D0D74C7564DBC64298D270B264658 +6835DD7E6255EA99C66AB9817F4093FD2E219FD9E67BBACBAC0A9D3E678111BC985151D46E06 +CB7B326E767512DCE309A0B40AEBDC854EE7A3060CF8418DCDEC028CE80577FCDCE3CDAB46CA +F8A84A66E8860A034A390B444552D669C1C1BE764711367CC71152101FAF804C36E90D4E1BCA +D89392929F998314FFEFAAC52FF96439F19C20D2EB9148BC6CD80C8B5624CBA39D84ACCD5525 +23A42A4301C7DE9AA5637F717C46D0E57350BDBD4F0ECF575F19FE94D69C213777FB5ADD543D +485B47F3A76851E8C57AB9574A00E9A99641279642105707D75D97FD49E4FC53B79EEB0A8689 +E88097CCB46CF8497977406081C7EF28A2E7169589F595997348991FFBBBDD8DEE44ACCB0C98 +968A5814783927350D73DBFD9AC11A9F571AF46363E6709987C46EA207622FB319FD5519E7FC +A3DFB9F784C1ECAD5472236CC2790015D4CF9F410004EC03AA9C247483F9134E742AFF8E3D7F +62778DC6E9CC87469D083E9849490B66FBA43769044FDAD7F59EBAFD5B07A7FE75F064CBC81E +F7023AEB4162A787F1C4D4005998D969DE4C7ECB3A67861CC5E13F56F1EA7A4EB7521CF0E282 +F513803658CFF5FA93EF5B15098FC2941FF4E0D6E2DD9CC056BEEF2C4E15DC0790291D385E09 +1D2CC377FF252EBB7214C2CDC948A9FCBAC418A93CEDC58375E3DC347F872DF735D0127274DE +42F4E3709CD11CBB6A0320647CB97AE4531FDC8CE56ECA5CFE4DBB83B3C71BEF715ED3E0E001 +F497042D7D9859A0FCFFA87D37FF66BBD4C420913CF0600FA055C3CDD6379C8DAF78C8A03267 +EB381B64796CDC066833EAA949F74B0ADBE615F62C0517CE582A1DB047288C316A2B501D45A3 +62B46CC674C913B8980DED11D1462B8C03EB3D93BFD47D33661C4FC89E49ACDC09DDF08B32E1 +4F876BA1F0CE782F79DF52F10671BAE136A9B6D5120A011594F22864BC61600575D5D958678B +94D71991D55E26263141A80C091A2E356B9DFC5E718D0833309431DD80F5DC39AE470E1120E3 +0A862464C96C1957C2CAA9DDB5FC3D1873C08A7726DECB5D73711461508D4F0EE3B3D9DE4BD4 +24D60787721A2AB50ABF2F02AD9FB20E483025AFE53CCA0A54331ADE5D5859D3621820CA0E2E +3E7591BF4BC2004D0B5F7EC9A1141A36B0F1F9E32E46EA6C6730DE24D911748F83710F8A4F02 +A7F5CD663967DAFAA7BCAC3E29D900677EB2351CFAF46A773D363CB7D48943E1E245068B8F4B +9434EE8F820B79832A8DCE28E3E36DBA17ECD3DC93F38F6BB4505BA7580B186C818A251E38CD +7DC03FA7EA1AB8D290514909F1AB56E1B2C6584E86EF32741B58C79EAEBDD62F7864C19554A1 +9FFA1E73CF2C75D00C903BABA7E117E56B5EF27F53C94AE007DE0FA5726174D691F0CA7218BE +E50892C6CEBED4CCE891EFA7714804AE54761D8F0379B063B8F8037A0B488A487FA3BD0D4B16 +B34FD4B3E52646AC3509C5D4C7C191189FCEF1D1131B4DD9799DF6E8A556049E28C5ABD4216B +6CE52A1ECD99432D8316093235BE3D91885DBF346E18FA2BAFAE67B650467D23196FCEAEF414 +8A2D9BA1F44B3B43563450F006D5767D86D942710A820EEF0BF57028B1F1291C69118901B5CC +99907C205C919C81E80ECEB1BEBDE1A67CB21D3D7AA431E0D1EDBC1F4DEE88E91FDA97DC4C2D +49215DD18458B42106B452362956D407C064E29048513A2CD4A534062EB007216961ED4566D8 +CC190F990662F6C60703F35F0D8D643578E8205D1FCB0119C20D43BFD046842D885885127653 +65E7A007E770CE8E8F5B20FAF8B602E8291D93A7B56F8B2E5A952BD803C196AE98C27272BEC7 +9F806903EB3D3695782940138CCDBECFCC06B8A46907159095CCF0E792EAFC60435D33BC41C8 +A28617BD5A5228172CA784690311898BFCB7A7B22CDA56A53467E6421C413689CD41D59A3FD7 +FEFE1A8420695909716B8ED59AC6C3C83F5C0207463A369C369BCDBE4A9C35A49301C952664B +AEF8BA31541DF5C1400B708EB3653AB8F8A7DFCBA52DB26A43CBAFAAC4960E4048EA7D164BA6 +ABE831276534750D13251D9421BFBDDAC7E3A6C61948333060390FDB5DD7AB5A42CBE7B00367 +5AADF5B52D8F709E45F66593B51519A4B37F8D0408554DD87783C103C31186E170788E8E4D5C +2D1368D35C90BFC155335AA4585F371BA0D2D36C12F70CCB54DD316DF4A5B928CD36921BDCD2 +80996FF337E7AE9C4C0DA2ACB795614ACCA8BF9C5F5A270198A99B0BA923C041E65D34D346B2 +ACFABC9A68B059FB4EDB2AA741A93D768E5FF077C0CABECB321866513057B12B25613F5B1B34 +78334FC0FB18085E27A7361092F84F475BF19FC88CB9D9BA18AADC63AC383CB8266E01374F9E +A36AADC06168E4772D6EF439FB8FFF2EFDDBAEDD8149168F8525EB7D8260A1E9165511AB194A +91CF9358F1DF26499505F3F2DFE1FBDC2E28C0E5CB48BBCE6D03EAC7A02AAD6DEEC7FE18703E +6DE77A677E9C2D6D56EE24769908189E8ACE09C55979830C1DEB6D7D00F931888C2450ADDFC4 +15C25DF4787597D0E6499D3ADB097738BD599479CC4E3488524983DBE2BF7CA9DA2DF888C2A2 +4A92B597FB8CB9B285A8201AA1BD6E3073C6B4828984E3EAAA4123A0C9053813FC43CD724BCA +03CAD9E401ECD7FEBC2C9D28363BC8F058AFE54E479D1B518061EAB166EDA2B3A0BFCB5DC88E +BA7AD44AB66A74099007FBEA682E45DFE3E6F36ED2F18527AC2A3443897F6E1CE8DBEE7E03A1 +C2D78D2BE6A6E7C6F43B828AF56BD8A86EDF9BFFFF971E1A9D56EB626AA2F112324A53AD874E +1B3166EE3AECEB372893205D3F147209C9DE0BA3AADA432773E150617A6B7E4EA8E636F99BE7 +60B74902FEE6ECFFCFB1E039BFA7C15E9416CD2B5F0EE6EC50B42351B95B18BC1451F468092D +4F08477516A287D8020C67C29D0CDDFC48838C99B8166C20202D3F5B8555AD9AD5DC2CB946B6 +B97FB0072EC9165EC95ACBEB8603D7DB6760B9011A68000687ABEF5966C357EA1E0F94767E2F +601DBD9F9FC01699BB0743B4C369B7D2B009CAF12354D81F73F1B1FBA08623B38E106CB11FFD +6E7A2B88F1F5C5C9380EA7159FF41591EB7E67FA45E4C4315B4708A5842A75B1B9C1CB4AC492 +C26178CB5DA50F0E9571F9DDDC6E223B34006EBEF59549CC34548F815BED1B123B012BD2A6EF +67D97FD477B31C7F626FE9826107AA9ADEF80C1A36187E2453562217478157E3B0144158A69C +658517D4CB79600C700A2509EF75A45AD060D0294AB4BD9A5D2CD590340B79D4D8408E856958 +D0F403F696B543195888A2DC7CF4CEC3A102814BAD5C169C3C911CF7AF7858ECC33716870D2E +CCBA716B87B796159490F25C027D3F04717F355DAFD0DA4737B7F72DAB5D1CE95D11B4A8832A +E3563F41BE06ADA6F45B38EC1BBF9FE0525FD46F0112B5CB0E947A701DAEE6664FD426271BB2 +B63E4ABA8FC1037F8BBDBF97D3F1EC8C98DB89B3AAFC6D597EAD9EF2347CD5B3874138BEBEAE +BB2690B8539DBD000922A141A7A6A2A74BEFD03BC165CF3C7C3B3F49552193A9B453A37D4F4D +0D9B8DB8896B27951EA7103EF7FCD483097A7997AAAC483762FDBED0FA53FCBFC245D32740B1 +759947C74E3B19CF333F30B131A65784863F93F8DFE7B7309BD5D5887E943804C3B3B8C3C4A8 +94BC3145AB7BDA6F33A0C72D5F70BD538EB8BDFA06FFDD053E6152B10A2CA929E9572783B01D +307B50E86A189F747E690DB2D0B3AA5590FEF074A2515F9DA7635EA85771B45EDD4A5CAE324D +81877E0B6E5C2157C03188725BD5924364E0A12350855E3B39C414127A33361DAA5BADDD1D50 +5F386ED72E80CDAC8B0D9CD6A92C687F913D617A9295F75DC3C4EB08AE11047AB7041DE8EDAF +E7DE24796CCB9D44640ADA774FCDEB8244C6672A4AE9B282997C5606423E149C4553B9E3E23A +2E03501A5A8BE7AEBC3C16B079C38D2A0690ADB258C414A44C2E080FEF8198107FE7B2A75D89 +B4B097E42AA237F789EA7727B2B4BE0378D5DEC71E7062B088A76E92AB2EA36CCA35E39D8364 +70B3FB7A7A1C07F37A9F37558C058582AE3F8EB48A11F9DF0A89796785D238393580ED4D425D +B670687973E30EA79C5F778B42BAD782152CFC55E0D4E9B5F8F57E7627EEFBD9078A576A57B9 +5E676B0CBCBEACC8C685716E7A925BB69072C9C9F94724E389D723EFEA841DAC245B613A3AA0 +C6CADEE8CDC90C7881CE3D7657B16594740CC202D4E809F38F2CA4B219B928C335B51705B957 +2459489E1C176FA365D867A723B699BE25CE1B51DADBD150A5CFC7AF8F6FA901B7F32BD2758D +A52601332EDD0E1C2D334B5BA3B85CCE0F17D8ED535A8E4A9E6DB4F279F081F2BD2BCB319DDF +5E4A649EA13F6702A431E9C6509AE16F361E702BD804FEE570BD4FA7205B3B2531382FF34E8E +F8C254253584CFFC2E955CA1BEC100A9A0A42D3F1CD1DAD265F9364D1CA695DF664856D6240A +46CC6473F64BF2608E21A184A475AA145BD925B00ED5CF2D4E845B3764797F3BAEC5FAE70C5B +AA6721A0C0571F5864C8B2B2B782A4EE2DA6A91BE91F0A90C6D906103B07CE270FE326711A37 +F52D3971C7B23EFFA647A2131980D6825B3DC2E2CDA81D696F9F84793FFA99C6B732939B09D8 +11DA361B87FF76CD0F93C965E5292B7033870C44A584B2D2D5725F3C3CAA3713BEB980741DA3 +DD6BBB035F2B998D8CB26FF81E3FD3BE87DF7501730B30ED40A1328B8608E0F0C50733EDCC10 +AFFC4960B25BA762068BC7F64F878E2641D6077EA532761DE0DC35195DF0F32E410C6BD0227F +737E9167FCA17314BAF216B1A8FBA2DCEA54A863C384722376E8818D723F2EE9BF382652CE2F +635A30498688A711DBD62E9E6E40899A848BF8C35F9D5D5646510113AB8630014D640EB1937D +94654050B59DD22BF74B0C8A116EC54A108E6A6CC82E9874B0BE04191E9FA3E7F2072EB17F72 +3FAC1BC71006597B99794AD61A993C36D1E5250C996D380090366F1AE783704041FE9BE38195 +1C34150BE82DAFC805D10F73B6D0CF5103FC051DDCFC5AA91F5D7E8CE73C39EF9B7B0699CFB4 +0943BF950B5E6750C0DB54B476CEE4719AE515E40A8EBADD57F80A6DF09EDEA191B00DFF801B +2BAB79C5657588ABB23584CEDB768DA618BD0B5D295A128DE877606D49A12FA73BC9DEA32310 +0F2960C76E6E8B30401572527611119C3EE06D3B34CCA355B4B202682277464C8B6B197BECFF +0864FEB01BC53792AD1DF825A73E5F92B84AF103934A985D9C65A24FBDFA960325C7A73D2989 +ECAC24CB3F8EF1C57EF43DA81D0B64A5306837F4361D8BDD4CFFD94D6DBF7A5F5342464205F1 +B5EB6D724D9409ECC3166F3518B501750E89A9B7110FD7EFD43AF3C32E7B93BE8416B7A540DA +EE25D1497DAFBE6D30995C0643431041D5B1272BBD2CE5FEEA317B42BA7E5910F75A91525C80 +DBDD061D053815C0B251F1BEEBEDFB1567632C46D647A745A2DE0AA08EE35FCBF4D3710C8F5A +A6A9E0DB9BB0962CBB7E4177EF3FA776DCEFB988833B0CFC39C8C6B7C89A713DD018A5D35126 +4DF859AE5903A5757D5F039B3D65614F2597650BAAA3188D1AC6A8BB1DDE7DDBAD1EF9C4C980 +3A3148F3F4AEEF706A7094175DDFDAA29B5F8A012FB8CB301450B4E78B58259DE6503679955F +5509F5025E4C799C55F0CF271717A296B096F03105E61DCEBF5D24698A96BB364AF38BA20D11 +7D59E86030C17A30AEB4B1794A6D72E2B62DA0DF92047D6985DF1BC950BDFB38AE13E612E183 +6DCFEFE4003A0F3CBC1A7C3398C0EC71A8AC8DB32BF58969635E46788A3DFD65EE12523B8FC6 +70A727016094B8381403F7762D6E4329319927DC1534CDB25F620D3FDE4383943D9942F75523 +CCAD080F5B1CA86159B6956CE56B5FB8A07B33451BADD7FB9ABABB37A10F04B58559BCE193DF +AAD6A9F7763B11167E0B899B5B6E4591608E6B540A81CE22AE3C151A215F316E89D2D4F0FD87 +D0E803EF412DED542C369615852466961517B5C77DB3C39ABBDE32E1F503476A8326FBB08A4B +C9F04C202CF5A1896BD05EA8BEA583B10E5B5AD45963FC490BB9A9636381DFA47B42132D80CE +66F4BB1BF889DF9600B08038C1FC334E69A76D7FF65144B9E48D939E5497DC67D5374C4453BF +B1A9FA6C6685F43B7BF9AC97298A3320DC74BBCD9A432B5D8F8F1CDCA9DCA04380A2D7B024A9 +B0E2B4EE3E1325B3C0C4EB2B8A20C97D5DBB73AB15166DE381F7F83283F69479EEE7CD091F8E +4D6DD13C2E78E12FC59042701E7A3BEE3FBEC32693FA48EAC541B85465B9C62D21E71E463654 +1395D0EC9846F16D599B28E53BC109C34F17C2A85FAFFAEAFD20DD89D53CF5638F9978618B61 +0902E38A9E5A5D6C5B00264D30B4CBBAA2D511646B2CAEA65E716F31B1EF4F8CE618D9E61DED +2BE5D247D4E5FD9C51819F2FFBF3C6702210EE5509C942E781DB52ADB4A65F2DB3688F419447 +0F33AA11384BB47EA644E48BC508F8C4F561FDE0B5879FC642A7A9E89F94B273892DDBC44E59 +DC35EED991B4F4EBF0C9CBC525C572CCE29F3C7EB313D067885368C2EE54760A151982FDEF76 +B90F50E763271B1FB242038148631DC2BA1A3204EF1206D0AFA7B78378AB031F9069B8639FC7 +40D165EBF123F69A5F0DBEC5D7EE2016E262FA4B611C383E2BDAC77812774DE0591248C23038 +B9CCD681FCB91DA754279FE274DEF1F3810617559F2EB5EB47FEDFDE4B5E6DCD68951E685AB5 +06EFEABB70343C619507C4B78CE07D198413323BD6A4A33517EEF599D6F71BBEF63FF166D35E +9D2DBDEF74EBB3CC0A316D11167CE2F226F9F1FFDEBD612A2452934CDBC9AD1FE8FED8406FC8 +DFF39820D6F74FFE9B4B70DAC1FBB22F5ECEFBD7591DD4365CCFD300AD9544C492A899173611 +CBAEF46FFAF6F94367BA0FE02E198290BE926B80D9B626D15A0AC90D5C0B2A28D55D1323E0E7 +FB203AB131D783F6E3F878D1AD7FAD7FACE0A9A91566A636E6FC041986FC25E6D59FD6D535FA +42C1952E7C0AB503A57DFBCA3ADCACF5AC748583F112F3EE9DE553112AD7ADDD4C15DB76F3A9 +10058AEC9DFD32C233D5B9498C33E7BD33611EE3DCCE65712DEECF4670B51AE23C42E2512B62 +A38D37201AD34EA9ABE5F0B99B223DAF1F96C3C1D4B2EF67FB0CE63B4E1C6EDE64A5D30DD3E1 +0A6D4B92CE81C7DC1EEAF96F1F1DA540F94D6C4FDFCB72D408647A4877B54BCFA2626D4E110D +E46938DDD15B14A4AD6F8044B7AA6371CE2F2EA1CA4A13ED372CE415ED370F5C6B2EF218102C +1A338C8C4D6004F4962065A028E68439AB20120B5846EE1B66B4396C8F3C73B9A65754D7CDC6 +A5AA7E5B4B7A179AC0AC55346E084A7BEB4E344B817E1131C2AE566AD6115AEB56C3169DEE98 +C52EE0AD6F4DDF4B05FB7A6B4D672D1328B539DADE8945E8E39873AC6331727D144AB149BEDE +92D7CDA9FFEDC8821A61726ACD8326AE6EBE5FC4FDC885BC16B1D1C22C757B8B594B29AFFD48 +981DB54370FDA73FCFAA30DE3ED760B144404F38A4AC17817E52B0856ABE4459AA3721BDFF5D +2751CC876C1BB1FB64C380DB6181E2F3729F4AEB99C49B3D128D2661B2050DB77992E189DC35 +5BCB9D15A819D60E831038FFD66708F50B2CD66B62BB8092A13D012FC70C815923E08297C7CC +FAAC8EDEB41A52F041777881D67B19867C4B766C5BA0D18551CD1471D53489D807286A6BFAFA +46271735B699E48807BDA0C057CB88AAB5279F5E6F7ADFE5F34BDF3C81A1C5C83DF44D07CBF5 +464A1E0A8F0CAFABFDA5992B64BDB9C13E743F44C2F4AF0C9A69503B14D0BB12D467F62EF24F +8EC8BCA1A1D2E4FBDDC856104A67946D4A87C08F38AECAA481D401A98C488E622CF8CC0B3205 +1AF70DDDB4E73888FDCE173D8F5FA75062B974794E9FBD6C3499A3333DCA75C681C38345CBF0 +75F6B8F49788DB4C4DC96B93F7A166D33BBCF7BD27778ED38290A439C1974AB944D04FB6151F +DDAE7C736F1B0A21DDED2DAD0AEDDDFEEAD170E750F81B750ADDA463B2DA2693BA21197C9625 +1CA59938E82E5BE892C6C659605C1558A6FEF114E30F0FDB712BF1DC93F2F3D876CF694C9FB3 +1622FED5C30CFECAE5A637013C3036CDE5CB296A8710EA0141C47635B6758756CAFAB2A04B92 +05564C82BFE89649B1DB5D5F255F925C754A4C3E81D0D040F6A5CD9B28D071687377437A47BD +692AE6867C940BB2CBD3E93EC8BAE25406DCCC2ED43D1F3906E39FB01E1057A837F70FE104AF +10E6AF578B8F557B4522D7BA0CF1C553438B7621921D297FABBBA97103E7F6BC35E48F745AF5 +A1383F71CD46EE88A33F3989795F802F0CADD26839DF33C849032D7ADF508880B4C1252BF9D2 +3F025344BEBEBAF35333E02DB37FD3F64CA9F17B789D55C7CE6DF7512660D4033C85C44B7144 +46D9EEF2839E3D953F81BBB8CCBF7F4496E197786F43CD1CDC39602C40B402B7698E2080FB9B +217433D390BEF7A1B637EE1902D810B11BD1CA27DD4FBE2C58640A91B0229FA8F4C45D5660F4 +72F10704E9B9970CB77CB14036C4D8603098B893DD139735CB18945BE26755506995DCC27E9F +94D1B63659B8399E9EDC933DE2E3DF9D113C1410898E2E7A2E40736A7FB7E9979FB0B5FFDCDB +2BF0C4D699EEC0B3D55B26A3FAA6C9E9D06ADB9F4CC1F14B0708986DD9F86601CC4CBD392B36 +6F8B650B855919C8FA8BECC44E5B1DE3DE2453FF62E0EEC0F0CF86D2E165F1145D5E8C2EFBC0 +9D96F537505EB861BE6D21E9C054C39627C804F05966EC1DCC8FB8558696EE825C11BA95CE2A +7EB40507EA5FA7DAB4DC07BB973B935DF8ECBE10DCE441B82E982FF92264975D92C6A4C7705E +90585A308CDBEBAC9B467522015D492B0A705C10F6C195196AE3C532913ECF9BDF3389A957A1 +D6F552BFEE7B1F9648915AC3542FBB1A528CEC05370B2BDD7542685A8E4ED35BF2B8772EBC5D +A1FB2E09782EA61A2B8772939F13531140277AC633BB0AB6F2D237399C78CA8DE0E2E271BA8D +DEA24B3ECDB0F551107B3220E2C842F8082A75DFFF85DA55AA2D40518D7401179E6BC7E033C0 +92E5F71D8A48F571F7C7CA5B6D0F5E4A109F39AA559CD30EF032766F692E47BF0EA5723C7758 +A1392999A28F042005B7E667E62A09CD60F807BDADF794076F23211196024A47580DD9739FD1 +0E53D04EE4EFDDF89FFD6E07F107CCD9634874E156849CCCF624FDB9C85145CA2057FDE5CE44 +8E4510EF1B3FEF2A57E0125B37DF08CF935EE8FA0BAB7CE745C8CCFDAD35CA730A284C1DB31E +F26ED4B5C397DDBB2A741049A120AC4D8FA9A2B91D3EEA75D61B28B19FA8789DC945588F17C1 +4A81BABD6E0E5487E2BA1AAB46994D69F7E5A928CEEC73DB5317B3D58033895595A1A2188E45 +7C1C8845CD7312029093574CFE59D8C25DFB577C949A5E4E56624BF9942AE6F8970A1BAED98F +135CA7565393E6C4F80F1A81930FC3F90342EFCC0819DD02CF88343D4955670DF65B59AB5F55 +4BAFBF5A9404241A3274A7D2C90A1E49ACCFAE2FF5D9624E708A99A4C8104B76F8EFBA7A4753 +05BF47661FFB2FBE93858CC5039B3279626A7F7B9A1E210662EF101252FA4F38DF01407F143C +007DFCE4FD95CA4FF7993FEB03B7CA5A6C1B6C770D684037AB195AD689100484E7D044834519 +7D16231C3C129A3372574B1D261B458247A6604A8C3842EC7C6FEA54AE1EB01B6E7E922F28D5 +6566CA27879BD0EC14C7DF9562BF8F934321335C26C8AD8477DB8CF0E267CF8BE322758CA333 +7F010D2CF9C2C9BF88B51ED703E036B0BDBBFC3F92D7E0B4601573A0218552C5215532E9DCCA +D95BDD11A0A9ADAE050C87364075B8072F819F49464E1BFD5EAF51EA922287EE507223F017C9 +E898DF5E29F57AF38DD390F93F425BDFCA14492295773B5AAB849002C613A2B8BAF474C7FB1D +BBF6B1599EFE3EC5A49F72A3B69F1F9073A5CC06E2B29FFFA1B689BD8FDDBA766254F68B1D85 +C822EC842B897CBBE246CE8CE8BD44E718B10E0535423DE475643472152C4C607486AAF92A52 +574BF6465DD6231305CC359045D3641076DBE7D55AD508D7383E5FAE63A768AC188DE72F7F29 +4211E87A36F2F18015A3DEF4CC333A25926989AD4CBFE49FB9CF9FD2D9BD167117882F707842 +DC72B1932492BCB7062D86EE51437B696BB597F657D482CA902E779B52C727F02010A21C3D17 +F1750D4669743288DAF186CF289C59BB4E0AE268FC305ED2CD69EAC3047C1AB6A6751DC634F3 +71841623B74EFC893094EAEBF841AC1F5A160427F3D810623098C1F36E0F553E51A11B0248E3 +2E1E9B3B092FE2A6B785BFFE8BEC4F8BCFC164B5D7623C123C8C2087F256E2F9D71C363CFDA9 +D097D8CA2A02E48FBCC9BFD5DE8ACA3D8461D78FC95CF53AC18EBD48E959E44B1039E84C7426 +576CAD6FD4F07A9A328E86061E8DABECD9D87328AC532096DCDFA647DE1C049FA27EE5BC7717 +22195AAA84338E6D63507BB45B560220FB24F93DECE0FF3B043D1912B28D4D913888E424E6A1 +E139FE7A7DE79DF5DE84E31075A132179ADBEE07F794B129DE7BF93E2B45BF0100949B359CC2 +EDF8B9701B4067DA2AFB6AE00EB03B79F2C0EF420B42D9FD22AF9FA5DC68BAF29DD90BC13826 +2563BBECB07781B9A9FC1A98A53F9036B10C49123CDAD4EF342C5C0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMSL10 +%!PS-AdobeFont-1.1: CMSL10 1.0 +%%CreationDate: 1991 Aug 20 16:40:20 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMSL10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-62 -250 1123 750}readonly def +/UniqueID 5000798 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACEE583A5C939393E012707B47E0C1FA47D284A1EDC +9D01A497D772BCA8C543388E6DC0D1E2C4944740470E0914F65EFB0737B0851B2BA713A9A00B +36D07DA6BCB52920B9B59EFE587734027A3C5E6566AAD332FE6FBCCED1417802822A3B81D618 +7875263D6BBDA04BBCF6E4870FEEAD60F104BB3C5A766610DD11AEA64A6B107B0B04439FA288 +8B8CC39232BB83F7695ABA81F0260CD5248B9E649CD800BCB325468C79FFACB9CD3036F2ED7B +B65DC6F12E33DD6D45B61272314F98990D08C0F8274E999F4B46AF4B5C5DA923683C960FACE5 +0087915D2044D7211A18E0C22967EF89552662BA990E2DFB9267E09E354F41E74D44BD80A2D9 +05D2EDD60D8829E820C6AB0FDF322964C1ECB6569818A465D5266D3366D748B412446E602F0C +C52F3CAD2213FF6AD92C04F6CE8BBA94890FB44EADC41A0C42EDA4FE9722E6D4B17A3F6D35CF +755D0A1C90D0C2033B16BA76C456137ACEE0112E35EDFB7206A9CB18DD9274401C70C3039059 +A583940F44CC19FFED32940FE8203292E103D2ABCDA173DF85995AEE98BF4A1F65EAD55FB80B +C0C737589FA10CF51999C634E05D80A7DFFB61433BBDBA17EA9A7B92F763586105C8277D6A96 +1D092617C64745450B7DF4EFA70884F6017D9B0331814CF702F1140425EB8BF4C269EC042FDE +895A7F625C4832C1A143A14ABEB798E23B59F88EBD1414A66520435A4C8F5DD7A548A7D6A2FA +96F0995BC0FBCF91B1A1EB711026A99D2404B2103BB3626978385830A00A02B6AA820CF33785 +F7AA45E267E6EBE7D737DED351C1D4E944733FEB30A3E6F81C1A7B74DDC9148B46B02A525539 +C54A7EB25DEC18807557B6EA94C36DB0C91121160F61BD37CFF40BB2B11ACEB75F146BE38109 +DAEB77803D8F580F9086BC460E5C96F764C1254E36FEB59F4CC13C5324B005B6F6841413C8EA +B7B4E5B72AEAD11EA0263A0B48C3CBEF08D9B5E189B29EE33528A11EE8AF3C94A3B9FB78D072 +BC94AA937198B5AD852CBD82C786CC2716CC460BFD982F678B878C63A4D86D72358F53C5E123 +5A2B60667E258580BAA99E2EF0E686A3BEBF3DD92411AEE590232CF6883E760FA271D7009E9E +23D266E57ACF2CD8D58D980C95CCC8786F84CB36C254769FDE99B1255E27D8736B6810E047C8 +3911E082A13343E7C192E15EA50199FFC0D26AC886CC0D57E50D1EDEE1597FBD16A7AA661C7E +AAC62E09775DB8F10B7ED4BC31F714DD7F69C9229FB85CAC4591A88BDC376119D1E48C1532C2 +D2F3EE465C7F6A2F797C63AF27D967C36D99E976590EC46550A4EABE857BE0131D4805C7B6EB +9C4953881F21B921A11A53D361B992C412726746872B1AFFDF6EDB0E4C7B5E9C61A03BE7F61A +5677753C51EA6A138E77F6DADBA32D1A22B06FF8184EC811E3F345A090E832F99DB19E98C752 +69D157D54EAD3C059DF5EC1D51DD43C684D4E73DA01B24D978B906CE8300D3B0D64309FD2344 +02168967E88FC59A1E2E8C0CC7E294D3BD8AB9AEE3C53728F3FBD6091A100A06C7071A27E69E +8ACD27591A060A3C6418F863E8AC6A53A7C83109FE6B5DD44918EA83196D02A495119D8EC4AA +0BFB3D475A449BC0E6062E25AFA16F391EDD7F4E31BB41C96AEB9456055A2D0E5BB63D3FB71A +DFCE870CA8E4462F08A5302B9F456AEAFDFF6F2F0BB9F2D181BD2A33FD99500DDFEB64756308 +8235616DB75DB8DCA428B4CB1E8DC19A797958D890885F78C53D3427914899652F3ADD72D170 +68113BA323B138BE7CE35C8FAA2A96E2E31AEAAEA9589E8E7DDEE73FEF10F3506EB8483C1994 +93E879ADBB0C6F97C97179297083811FB3079150F94A2A69B8A2406641643523B8CC7F5074EE +14681D43F01993B508E6CBA6D4006E49EE526CE54F78274DD0EE40ACE068F1DEC7CAB0283809 +614950BD6CF6AD5E0B954461C0C2C55AD2125E91A8D8A8C0C57E3F43A513AF786A71EEC82BE7 +C8E2A9F54642C8E645B76B3A6D11D02AD91DDDC910FFEF08F7487E1DF05447B0B81AB31B76BA +F6067546554BAD268496252585FAACDCAEB4D2C56628F14056E88DF12584627B5896B695ECF0 +AB1F2B2C47360B758B4BB765195369BF7603166A2C4F0811F693FAD575BA2DA2E666D4EC8A99 +2197DCC4D4727C296E8F58E0D778EFF394B96EBCCE6F997369590FDF34547C52EC2049FA6781 +29108BA1369CD93133DC5ABC3CB5B600A8306283DC2D3562F6C45A5E7EB6F8E4A4B10B090322 +700653594B3AA15E50CA22A3F35319E18F25EBCB293197098C32F09F83077CC062C9D4313E1C +551D25BEAC502C9B0CF31FAB4FB7F2B24B9C3F21018DD790AD0EF161EA9856CD0286CFB8542D +12BE19704F424C0169FCE16501FB11241708E5E6BEDB8FB99134D2DA80BC08344F978739CF44 +1996A23CE6F26E7DA1C171D5D1CD866858324791108717B8FA2FBA1BCF02167B2EFD8C1C7EB3 +EE591550590A740ADEFFDB42424E5D945F852B356A2B03AFFB91FEC5B3809C4C12A3750F6BE5 +99E0E87C2168EACF28796C6B5FA4C9F5DAE8238C518BAFAFA41AD1674B787118F7FA245A8EA6 +3783F04F5377260B164D8FD9ACFE219AF8C6555939BC81B37DE0D6E8C2F34942FC608594888C +3C555C04515762E2B46AA284D0F016A7338F386D3E7A3769A6B8792D3301D46C7D95950BFCCA +C2F89B8E97ECD518445510ABFF088ACA91A42C77FC17F07E1FD29A5390E1DB91A5A18990CAD9 +D7B60E449B168B117C2409BD4344EC84AC4C2E0E9F5BE0F3A065B762987C4FBA75D3BA32033E +75D5D9EF2D2994C075639082FF92B9F13BA951B811896986961BA607A228427A4DBBC471B2C9 +6CEFBC7AB0DF918698CB8B8220CA3A361ECCC83151E510B844318F3A80E19E8DB31DB029D232 +E54EB5F6AF14A1F4C96CA565438127A7F7408C541147763AC01BD25232D5428987A996EB4BD8 +3DD25A2D94A77D258E12720F566D778297AAE5B3A2BF84434CAAC48DD4BCA5C23BA925AC17BB +C7D895FE5566590651C16CF1B7DFB661C40E5901E9A499E1E6115C50A54781038F4EE6712787 +3E572D639F8F0FE940C3CDFE4E278726AD0A351C74ECDEDD4E881E519CCB9F914F9B7BCFEBE3 +CA774E289F0B5458473F6299B295B184F412413A6F92ADC218DC39BB10C180EC7C87FFF7CE34 +0F20D31E8BDC158850A84FE07966676408B9BBCB608C36F4770BA91DC4FF282F36DD280415E5 +DFEBEB49A8B9A3E66DBB5121C041D348E26D7D5A451BA7DDC7939F027B1F23188AF16FD592A7 +85F14D5AA453345471C150D8C8D5762061AAA58C1581AE4BB20D950270EEDF7E5FB5A1CA98F0 +95102E65B059194730A0C7D857D455100DA7C5BCCD099485C7AFA4C26C192A5DC4B4913B045F +DCFEEB3D4B2F5BA9E6EFCA196F84329BAE07EDDEF71B43C19E88B579E1645B5D78CA75F6ECF8 +19BDD0ECB870736E41CB0851916CCEA25B96CA534CBBF90AD2731CA1F0DF467FC6F79C01A20E +978C0BA87E2E8AB62DB77E1DC771CC46B59FC384E65433F95A6BFA2E68BCECD8D05D55B2578D +C48386DABC11CF6BC9D0F745B6715754AF5B0A1E27B5DDC81339F7492944F1EFB27044AABBDA +DAA8F398FB93BF497178D827955849BFFC25B51E2D79C0B06C58C316DA6A161C48271A367992 +4012D2F654A24C4EE9C85C4EFC7F8CEA0B634C1BC4006EA846788223FB4520871400B115C941 +40F0C025E60DE4A6341BDDA6F2EDAD1AB9B708D7107A6072B9071CD407A2E9CC322C673E2F54 +89C93CA7F1A8C3971304860173167F57909035CA0BBD66746DC06821D14D6288F65E26A9B3EC +38F01D834E05DB50DBF1E3F495123CF41528BE7889A591C473F64A38410E64AC935FECFA03EF +A70895EBAD7A8FE077B78E4D5BDAFECC4B947E9B8673E4E421C4810ADD96EC9F234A87CF2CD4 +11FD3F5544C96F22FCA6E8BD13F504DA7B5233CB0C91CF01DEF415D05C5851D5F68A1D6533F9 +1651E236DA5FFAFB471BF904D32FCC15AB2CE83AAD14492B78DA24A8B5C7681837268FA3F568 +FD9D51F9481598D750D55B34042698D798190106E717C760FD2F01CEE2E18D7571D3444CE4AD +1AE6517CDC98B5F1E57BBAE31DC064E1D5AC5F7B4759B8D9F85501278A52FF39720E2F617731 +0B345F209D3CF1BDE450075AC8C83BB9466C2E86E5A109684BBD076030869C98885EC4B52100 +A32AF6BC9CCFE8489C804F1B27F99292897213DB6B544BC74CE47812790D2A1DE19791DD75E7 +49E1347B8327DF9811ACEE41A88C2F55C205C5E027A77C409E8953F25D5AD0BBA91F3623943C +8C8D3E154266CA313B86D1A0D7DF58292627DDC133F1CCAA287F06874B3DA26A5CF48FAFA205 +39804EFB410B639E50FA1FE22D76A78EE2B66A00DDBD1C5F58F98D9FA31A88FE37F4532AA007 +9D2D2D15A88D1AA43D95A11579D643C153B7AE0FCD7E36D3B48E2094DD252E331DB5F807DEFB +5CA4A2C11479FC64ED666C8F263225B56975B6975F97F3AB3BAF1A25383FFF31DC70D4A5C44B +FD4E04CF463DB1945429971E77D04404B68B371AED13920E4BB261002F6BD5425F96B382E2B6 +E7743F7989F5CC4DE43694A1CD0DE5E7FD32E3DC9F705594DD7FD7AEACC24E7555DFCA7FAFD1 +69EBA46FFB66DA068992EE32BBABFAA426AD3BFCA46A9336CF5C34FF58DBD2E483DF67224D6E +E510BD157617B2CEC6FD525584006C1C43A8AD7E3109DEFF944BE9B63E85C39BABB6D0A2DE79 +5BD98817C8708D801884D1151CEAF460A68AFFF88D2337F3DCCE339F9EE039B229EDE0FDC588 +E8347FC529176E97B767F7E32DDBB4BF5936C7B4010116B7BC254431EB65002CFBA9CA5F24ED +5E5CF504DD9F3855E0CCCD9E6E782F02AB663ABD3660D65F0BB8D8E5730C2223F896BECE22CB +9F12A93BF643EB1512280BDC2835C2F33C758E37D71BD43694A88F7484BE9EF538E2E22243A8 +C76CD2D8CAC7C20501BA3B3727A756E7A638F60B68081DD742E847ECF3FE02FAE9CDA962BC6C +F9A9FB5F48BF580513FA9C31B7CB6CFA0040EF6D37F7273BC120919B64CA8ED1B5C850544C46 +B633C735FCC32A777531D014D3E01893B8FBB03962D3628157E777F802D98080F97730597C0B +E2D576F1997F26EA4DB1462263429C633AEEE66579D00347DAE5DD57D2FF1AF1785271DDD2E1 +C32608F129DFAB84277C68FE2935120940252E877C1D74734C24366C136C555B8EE218F31D96 +CA92920E9C26EDEF3A2948F57973ADF8E3176A48AA4AB8DB74DD8FA7E0399FE0C1ED0E758B4C +463EF4A93F309DE86A37DB4A9B24DE503E9AA4E97615D805E62E7BCCF9DC6ED8BFE33FCF2188 +D35630EDAE6C86C4A52B41B9878A77FA17C5A0E2E096FB2EEDC4E57DD3CC868E169ADCEA2ABC +540DAD20868C386AD4F86F144D5C569830B539815A4FD5F0B429C8C0134565E5493C1E6C53FF +E60EA9DBCE84ABDB580A063B74C8E7D57C50D5CE7810362BFBC0F779762BEA1540EBC452FDE4 +9A3AFFF755AD6FB3F0598DEC964CB45D6FFF3D6C503A9EA0E36BDF33319D99D0B9D998CF023F +1FEC5FF0BF73700BE310634A48D6561C03B7727E2CCCB825205AFF0893ADFBB914E95A804ED8 +D29F8F6B32ECC2B7C2582294B39EBB9709AAA945F2AEE828825A7C8720BA676D6C91D451C0F6 +EEC82052D72855365538A8F41C01DB81AD1F5245C48DE460546322D3D63BDEEDD85F0A177193 +B8D32E6B4E92326AFB32BCCCE0F8ADE174BCE5ED5DD2E6EBF1B878EFEF452BA4C2CBDFB50F5F +3E269B0FE8C57ADD23C74A44C0479E570C5826F0EA15611D1498FCD7F24664092786A7B15F7B +3EC0AC2188F0C1A8D6F4A1B96C73D2B1B0C62E679F55712AEB7DD13265A54B8413AD426157C4 +F032334C69AB7099F50FFE35A1C8128BA054B5B87F52A21A4AA78AAAB56FCDFAE341CD1E5129 +0887F4BA8BE3E99A2E8A2C17CDB412935A77356C25C4E23758E0527E130AD3B91A2DDBCBF44C +BCDEBC69967D7BA2A1A4B24CA5EBC0E58D0D2869D1F5002CAA9F92B77CB88C8C8EC5C65E7792 +58D1C234305BD8288DD19D97011BA641333D65D6DA23BD23B932A5B449B33918CC32BE8A2C77 +043C99B20FF158BF4F62B0BD6F6E00095C54F4A69C408C3C484499870381D4731883F3477596 +A8678E6DDD8E92E0244DEF2A0529FE21D0CB1000F3E8587283D229EE7DA055A8BB235DA0248C +3949B17353FCCF81881B392A6A1FB089558A2F2CBC7EBFB334200EA31590B3E556EEBE1F9F5D +DFD668559B8AA36CE74BA5003418EF25791D89DEA9FD53DFA38955FBC6EC0DC6B201D6B39FBB +34157C9A46D6C8AE42295DC8FE150A13C63E5710612952AC0504FB52F0B6CE5BB5762E7803FA +3B5A0CD0AFB951CB9D682271783B3AC4B62B2A89E50970A5A74359F3996D6E5B835005302A6E +736716023D5FCBA51E7BE70F98AB9FE5C0234B5208B6F79B463D4FBD73CA41C69296B7F845ED +85A962783BF8FC84867404002FD380257B5D86BAD10F5A5D20718B88AE6B0E686AC47575F585 +8FB3A57FE6C65E7B7C6FE7A92CB6A00CD0056AD3BDF4AD9A05E94E875714CE8574F8C9295D3B +0C70535911368E24A0017A5B9DCC0F96132ED3939D7FE40A14BA042FDC46E9B00BE39C1BBDBF +A6CA94BCAF4B19ADD148B1ABE84DB726647C7B5EF5AA5B61A57165EF07F2A75AF1F8CB7F575A +E9586A9992DBD311C099F7B03C04625917B1F0A106124A5D31D571A1AFF6432F0CF6B2506030 +6D6628412543083BED6D43E871DFFAAE6C286581AE9EEFA415DF0F6292C92A9C93ADEB1C9428 +3288A2CCED9D52E7B2E414BBDD9C79F4C5EDD30C3617F074F5C99B93641A014ADF5D760F6930 +9674194DE107CCC21736A112E5E8AA039C5683A26DB8080B9AAE9320FF235A80FF8C1417E819 +8CFA337B543BB29B5AC738F81EF9725CFD81209C18B35E2013E5259D9E747AD2E3397137F799 +17DC36ED1238B1315021BF7365263CC8570BA647894D0816FADE8A49F953822210F74E051A41 +07F4549D8626DD1E7E752EE1C2E64D8E587BB54473A499CFDE3443575CAD85FEFF04629D8262 +1FA99C5A86F68CB526FB5F70AC5E2D46C8D2039F4CCA16CDE3ABEE0BBF251631C65858B1D4AB +AAF391296A1BBCA4D893F50ABA31C70B3D93C7CC5E5892CBD3E6B08EE368A4F800436674647E +F336279581E99D6132FE670EA6020FFAC584DAD29177105F2F27050DF6A5766916307BEDA561 +44385BA2676C990BC5C84B3BD1CB6D72C7FC78921D404EFBE0B18F79BCF997A869C6714AE509 +5B563D99FA2EBEAD37943E60DE71279F5736A3123A42608A71B417B45E0AF2439C7530E8B375 +2C9992E5B86719ABFC508A8C340ADA6616B76506FCF186B608BEA756D9302DB8B317AB46FEE0 +F1C81BFF62E0E79C35A2FC542FDA21E017EBDF74EC7983D267C4CC9CECC0C6AF8499D5ABD25E +34559C6CAA96FFA6BE9C157ABD47B08F7E9527C52A8D52379DE137891D3A9F16C157099B46A9 +595E517344B0F175B810948AC9A19E5984B0A75928417AFC6C1821116DFB702EFD72B8604A2A +618545BD8F9A8033F2C2674AE1E160C4C5966D94E99AB8DA360C6B2396238534283B0751BBB2 +1C7A33E9C988C7E686B6AF18050531FDFDF7C07FE7B2AE9F7F8B76E6314052EF15E109A98D5B +A6109CE8CE1476EED0189535B4830C30D98F4AA3A0431EFED99830A44976EF9C9D4E6D3006DB +DEECE847774EFFA556CD66269064F999C1C3FD4D04B0225B5BA9A19B6F08EFD1B897097D6B50 +3EF688C19AB39E73B73560DAE3A5665CD7C44A74E66A77207D3C628CF64688261115BA4C8ED7 +870D40C98AFE7C39985053010F7DB7548E607D4DEC5647CFB4008DAFF783844105AAF6735EE7 +302D82CB1B612DF8CC7D5E3530C2357F29E3A93C995984C2BC76E9D5A0B36D40BF0B57236C76 +826208FADBB6504492B0BC3CCA7F63736CAF950F51426D48ACBF5270C2EB11D4F0B2E827CF96 +9C76C470462AF179AD4F0B104912F668E9F013F17001BB15D81C157FFCAC211DAF3BCF800394 +0D2EBA3A5DD6F0EC53121D4F06857F612B1B163837FA52D4E066D395CB5C8D7AE2C0828765D5 +781CEE9063FF2CB77F78638C37403CD5935BB21555670A4757FB84D5E3AA14E4B9FE5AD786F2 +349E667415869AB542D3D60D69F3D9D10940AA7572CB92F7F180882CD731793955AA135BACD8 +60F03671292DDDDCC7F3178900EDED9F048EC8991C61791A7370788A18FFB35633784D40FE07 +86523EC15014AD165081AF052D7D1B8CD6876B7AC3689499D3C51EBF0CCA34AEE9E9709723A6 +D2CCFAD099A5B64E799C7CE9859BAA596B3F184B8D65DA85A2255E73CD46782D03FA37A90280 +023F4452948195EDBBE46A26412FE743505DACDC4CDEDB389441664E16A5235E48E5AD6383DD +E23E70FA58ADF16B95EAF4E753A77CCECAA67DCDF0C976187195E7BE0F12129FA9EFF7F4674A +55D18C9FD9254CCF9C49698ADE847200763206EF9189022292174137AD87BB36B9C4CC3A6FFE +57AF44ACF5C571E24F1F069C668D24DBAF04398A99E840289C183D9A7DD08BA8533D96165AA5 +69FB085C8DB0CBB4711828081EEB8C0D72982BD87BBDAD292E66C859BED989DAA18689BA75BF +1F60FADB48D5810EC175CFBD58DD3D90FD9125FF38C7EFF3F4AE259686034D835A4F346A6AB9 +AC3308E175D391E0BF085280F9F09B141D15E8B7011B4232681ACB895471AAEF96D2AD3874F4 +88860E55BE833C117A3DC75AB6C200FB4F0FE69B590268002C3ABFB161A8DC3E31546C47E2BC +5E76B11EB3DE74719A209D9BD29C21055281C72014A0345B3751A648A000C00D5EC26941233F +4AA777CBB50B32FD943CEEF3DF54B848B8A867E269C718FA9AA7953505FA23EC36FAB543EC73 +F461D0E3348F8C7428541BD5F0A783A53BF6243EF8EF9FE97265E297A4CA9C1D41A3BDBA5D11 +D90FDA33102AD81545583A56810DE6DAB59D3615700B2D61E20D54EAB41FE56E8333D5C1CE87 +8F94AC2A91A90335246A93B22F6645BB9CAAEEE67CCE6D188ECA9F006395316FE7CBBFF4A1F9 +B8587327A06A06D6AF07CD358AD81638CF842A5CDBF234E0B4AB6F91411ADC5FEC43C434CD25 +98DE0446981F0411215734ACCED6F9BFB10147921E4B1169CA68D43114E30FFC5F4F80CE4819 +45A9B7D3B7AA30357964F4468A4E330BF710B6117122D954B62B3A7F8569B04306C8427E557B +5CAB8610488EFCB37C1C9CE9D78A8BAE7B07A845D273BF728F1E8E8D14B945B66D7ACE6B5FB9 +C24470DA154183B4270D2D26C34BB4FE1F0DF5D89E7CCEEB1872B70E5F9165250B5ABF91FCF3 +DD0163D4977B5D6760A78E02D72CDE1361967A139E77171BAF154E5FB7B0A08D7C0CD1FB488F +86FD03A95E0FA713FC32D0F32EF64944E997D994F05C39A7203DC192698B9AE8853BC335FD0A +4DFDA69BD76FC3BA41A7BE7849DDD8AA2E36D50CFC3F546000546E9640E97D44350B8141DFE5 +07407BD20301B17CAD9DEB3DA9142F1D56C9D3D692A04E1B193666D134D94DD83085C58A775E +DC226D7AD940638BB1DC9242EB076369E255890EADE45DD6F8062FF43DF8484823694229B0F4 +A70F7E425EAC964B4E273E0091295067E33B84481C4127465C94E0F26CDD2E614186F2D0E327 +ACA479C3DB100439C88BC2E1CE46310EE078475CE9302ACC45A3E323147E564DFA490AC918BD +EDF874CDDD887ECD24236CF24788B267C9B52E64C39DBDB2817C92EE2E3A72706A40F0D8F9C5 +DA4B7E16963A69340E408BF251FA0C7B11ABDADB8518284420C8674ABC70123F19DF8A0D28A5 +AE3D5F4D8C2DE9161AC00EFAF1E66C2A4D2EA1A2FFB54A40F5380804E5E34BB361622E84174F +A7471F76C7330415B8574173CA3887514023D407DC43EE656C8B48093CCEBBA03747E6186681 +387A168AA48B64EB48FB2EEDF9EE0F8C95B4EE935D0E66A23E84297E7C6249E50206C3C64FDB +8E2F036DE02379B8B801F30FE90E78E36BCC805719153DB07CD4719F4EEB97D9B40004415CDB +1318194FEF144EB72B268F8CC8764BB63E7916E8DA3B9F970A71505AFB2FEEE7F286007AEA30 +AF43270BC94FD8796C2710C228589D68AB8E851D286E5B99A71A957DE219B8AA930BA8C65E97 +E0E2426B6EE723836DA8BB560CEE060E957ECEC44634C1A7F7E989D82C80D824D7FC296A9570 +0273789678DE2BA11629BA605D2A7E10C6BDC6D5A4176FD501A8E31291FE3E0A0F8B0CC0B325 +BCB55CF5A11B44E083798829E7CD392B1D256147615096B4F0B3B0C7A1EB610C4FD055E13C9E +B356985B3494695DB11EE90EB581131B5F62338D01616B61FCB2C7E457A6CCA2289912548ADB +6922BD50C5DF753B6C1CB7EEB3338B790626AD94C09CDCA2FF6D7047F6FB57E0E3BC52D06348 +E0A57A0B2B7BB6EDD2108E2A7BFFCACB01BA05C759CF36CD3D2C373CDF0EFCA0D74D6AF1422E +0D921AD574DB41DBABCDDBA2C7A8F89D4815730140FCE853D031744BFA8FDFE820858EB7DEF2 +AE75D1895FEC5B2ADA98EF794B318F03E679FA8D65F4E6587D450DA3514435620FA67392FBAC +160B8E442497294C5FF530000882890D72C614D7D0B4CE5DC1C6BD52E3CB08437EAE8D1351CF +C13021365C54E6A8B3EED4F8119FB8798D42620EC21EE29CD8FD32F8CA789EBB13189BD35EA5 +EC489A7D7B06502CEDF7C8CA52BE6CC6F56F797FC5ADAE8DC28652A02C10DEA7BC697434688C +1537A5AE5FB586403075FFA5CB19722109E26116AF7DDD935A4D7E22C1BF62F8B2456698CBBD +D8E1C2967D10FE84E07D08CAFE785C54FD380EB0AA8258369C72FD6A725A702E3DA0DB170E10 +83802C1BD4783EEB55BEDBA33078C9EBA22F445063D5E035E04040E6E7937A3C6382B107222F +7DF04035E1E212CC2308BD871E4CE3CCDCE5C9EA2A09676544D3744E2AC4F657AC0D2C178E29 +45A289A352156360A49AD007E4E0407A42F9648D8C402CAA1922D437D6B1B5D1562DEE4DE0A6 +F272D802285B2F8F525EDC420C57CFF52B3BDA863DD6E1236A0AEE3819F3AB71F30AACD9C566 +DE8BE9880A6FB83BCF75CB536D64938D5CFAD3FEC81543A5E022A4A68406566C1778D624667B +E63A7EE6940F2007B8025DCDCC4541FB1169164EFC1D57FBB5C62AC2586B575F54715AF66C00 +75B349EAAD2E9DC759A3EFC633E25704C81508F28C46D3E5A3061D23D47736455A8C881AD2FB +FEBEFCF8A943CF30548B3F33B7AE45090FA0970878459E88A029F2FFD8FDD035098D60858F9D +C8EB23F7C70A5AA9D781869FF8516F0A5D88B528F803D27D07EFBE58E9BB6639518A9B095EA5 +B41ACB21B0C9ABB17F0E4010626BDB07BA23945B60BE41967BB9DE12EB643A1B837E0C3B7CBF +93752E25E7C7ED2A2A22ADBF32F27CB7697DF3025A55334B5B5F0CD0FA786C574CF6096627ED +D630F20C107D2BDA0BC4B751C1121F2B8CC281264FA63F6503EE9EAE66C1D680DEB76A5A312A +21E84C6D40AF5ED739BAA3CB9963103BFC326CC43B5CEEFE36529597760643305F306A9C057F +477EBE0702F3C5572CFD96CCBC76210B043A4EDB6D612CD7E86315E21EC2A79C7881740C07B0 +F8B3B2ED860DEBA53BB68E4160FBB41EA13B2A013DCE531E6D824F72B7595380F025335ECA5B +EC0AABB3F3A6A40A90FDA324C844BF1DF7546A6A0E0FBD64B32BE7985E5F75922D306577A32F +6D3887EF119391DCA7F923DFDE861D637F17598CA17B80C61F44BA1FBAEA71136E0FF482814F +E30CF6AF086D087B5AACFBF7E87B3C92B6760CD836DAC9C61BBD0E9ED174D79F14BBF0611FDE +6BCF3D78B7270BD867F1E63BC8DBF31534B62F80E81471C4063F144C89A5C30964B4862289C6 +463633632C25134F82B7CB6B0C4CBA290A2B9FF27C7329ABD9C766CFCC1DC1A249272441604D +FC41515DC472C5944A7D574CD580A174FDEFCC0814E87BBD8DA55EC796510807EF8C6EF1E512 +FCC978A8A0608EECC26C89C090B2FFFAF4B6865FF253EDC5DE07F329987FC121372B0417B124 +6776D18855EC98C4E36A1A56C5F0C76B74D6C100216F52D97F17F02E32F10EC2D20FCC5BA70A +9976431CB4BDDC31D264A65E76D19DC76A837EA5B63B1B79F2855E2DF1B53037FBB31F3CC08D +26C923F1E9AE67AF79F3BA42BF854DE1B051B27F960825E1CA37EEF05C4C367A370DFA9003D7 +9556040345A7714FCFD13CFE692962510A7A695330EEB2D54D915D15863CD2DB1FFCF124722A +561B73DB6ED6317A43EC47FE0488E350CCDF7CB6BCDAA9CCCBE668F022E46F29C2BA216ED09A +0926A35CC5428F1922B8C50714776C11032FE4BB39C2BC87EBECC94BB92F6301A43A9B69C71C +E01D9FDD2154753BDD928BE4F9BE517A047882C4E5E9338B34C47D0FC97354634A5D6AFB1D15 +CD368B3AD7BCBDA8879977BE8ABD3AF0AF29A6D8CBB26E3D25FDBFCB8E4E92B6CC55838A3BDA +638FC21F10E535CF5A8688FC1CB45821AE4CE3DA53846B320E3705AE5E269D67C81E88E81633 +FD7CC9B98BA631B723568FC204B6F119A82C06825694D307912D72FDDC346396A800E9453C9C +8200CE35A34C188E484D9ED8D69F4BA2CD07C3AD340BFA518C4C9EC80652A2314766F86FD820 +33F77BCAA573E29B0BE6434DE1CA29E11629EEA6E35EAC754BAE39C4856AFB3D062947303FE4 +57D28AA34F0A562C93E5C51C6C09E07979BBA00D495C40E5BA2126091EC3B6C3551DA750CF12 +5F3B889A11E515863C90DE955617B4BEA129535E678231311D8A46DE332E674FDB9D459AFAF8 +D3267CDFC8CAF0C4A0A1ABCF87AECE388EB3625F5E36484B3B648344CCE1EB5FACC781C7DBC0 +D29AD03E7A9F6C9054055F95CAD9999BA1E256D00D32F9E3537B0DF314F873ACA8492F273732 +192F335D073B8A3EEB6656F88A8C56BCBD37ECC7F459977044C04F9FF7132B37BDC7365285A2 +D09ACA1242112DE8480D054F7F55E66F9F8454A074BE85D190058D874B10824A8ECDC4B36782 +0D43EEA8CCA3296FB5D3B507D51B05F7D40ED134F9EA7DE8160DB1759595C645114C24A4C428 +5DE1696EBF2C57F4C7EA2E6167B32AEE422C077B49795888CBE5B093E684111FBF3777A4B32E +8160AA43911E8069136D27137AA555494B8833FCD487F0CE8DAB8CEFF0565050818BA634AAE0 +7D7847DA62B1D73F33A98FFAD21CEC7FC3309BA7D048794AEEA3DFD1207E8A9F1A5F8D94E493 +DD1CD58683FCEE8EDC8B9F14B02CF1D3760601F5C04D2CBAB09A4A99572B98F0B935E925AEDF +E46B01D7BD8CFEF25820705A9550EC734C42E235887090746B74EFDC6910C2BF0B2793C7C965 +5D09BE751BB1BC35CDA8A473151A996B513D42CB889BFE8DAABE0560B4D36412064D54168066 +60CCF64F51F0C49D9134E9C9CBAF5EC6BC6CF8BF6F86D9E653CAE648EFCC920F8F69185902A3 +2D4D2EFB809888DB21F414E31DD84FF445C7BCC62B5797BC7775B3E01E90AC60AA99096A26C3 +3214C790DCE924A9912E5EB02A60AE9108540F8B6F51F360CB2891FD49BA945B3468223CAC30 +8A531F0F43892BDE186AA3C88F987C82BDC98B243150050E3A51AD335E2F3319323BD790E2D3 +28D8C5B56222B68695B2477E7B366C90394DDD9D5CB5339714F9D1FD38421272442A45FE0FB2 +017D8C79E681C19FC5274E489D2AE3C7749053DF29EC12256E42FB322C2D9BB5A3935B167D5C +B963A0252792F800C705A19DF6BB7CEFD8DF4C36C26AC08DA3DA7AAC12638A1A6E4BE489B477 +0D106A701EDBAC5B2966CC49E4676827A7E45431A76664BFF1E1F729AE3CD94BEABA0D14DD6D +70C0AA3FE63E9D3B70974E4F50A74D8F077FEF888C51E0108C25A68AEDD848356EE35362D594 +38BADCD849C84D77443D0A731B6B234D9F390658A71EB844CAEF90D668DF751FD82259879A21 +C0A88FDF718E9F45882C9EDD4E475298C9090C45DAD25385D4F5271043F6E736DF4EB0E9F30C +DF0A8D043AAF0914E1DDCACFDEA4429FB397BAE765F4E01D73133E3D263C2D1FD33DCC1FDE28 +94FE7C1C0CAA25462C6D013FA89C16163F05D137DC53B85911A4F107931C172AEE16314046F8 +22EF3B0F183658B8A5ED13F9FA9B440D19D629F50C029D4054F9C58F12B58B551174C89A69B6 +3050E4B6E6EDA5983BBA2ADDC8F80A2376640A1104BAF8C52AD460546481DE6648968A3E3F42 +6284DF5E3076DC18173B4A870FACA3D6DB770776B4972A2E32B251C4AEB1AAEF13B15E3D9E1D +63853AF48D2113422778751790983BEB11C743ED0C6EB3A7D77D2BABF651440A27F91E891124 +CF15284A64A876E3C16070D06451AF8C18553FD09A58378C05F6DED30A4048EFE67A85B50A03 +48E862B93C289A4B0E087A592EA18907118AC2617C014959C8A36E492780114F893306F715C4 +2886D33C9AE2B799B0EBA8D79D291C39CEF2E6AD5D911986D9E09CA2BC78BE64806CE49522B4 +42A201EB57652DCA969219FC92A41EBBCBB0055AB8D1A911A74DA5DE63971B44EA61CBBA0CC9 +D2135791819FB3D53E422EE1881549789A00C7F146AA676CB9A318F154837F005B18E4AAF199 +F2BA5EB992C79B6A19D065A71C28CE7372A0F35517830F9CE98A743C49D7B03B1F3723B78B09 +B6A9049FB83A2FCCEF599FBB6A0648E5C7B430B5B1B6337ABBF8584CB8BBBDC0D3D41EBC8E3B +9D5D3E3244B3CCC55B81B8895A97535DD5EE01C54748E6AA0ACF73D7E1CFD6DA3A957D68C701 +E21BED2A7CC158541033557BC8200D6E013E6F00FB892D4F02956B2A8B7711C02BF425B82507 +136AFA64715CB899A47BCBBA0023F8017EE019980F179551A854F71A7650B94FF77EF546EE55 +1EBEF478216B9555053EF8139893CB28E8AE33D4EAE9DFE01B8105DBB9179ABC0FD28A3C365E +3C24A3A78C2CACBC1211E34BE6E8C6E9719051F76733C810A5F5E81D9E536D81EB3E33221123 +EEBDFF127EEE2B66B9A3F704F5C063EE0DB831E41E663EB82FF6C59D17F64FD618C939C24D95 +8EEE16FACF394A1F9FE4E869676A9D83FE632A9E68705CAF87A93E80E3A8434321B5E37D01AA +E483A53537DC6A0D244B1BB9FA06A9B2D351AF8D4F1FB2DB78BD90DBB0744C20BB261E5E3580 +B45BD723DC96D23CD22855F7284C4B3B0FC44EDC2301ACA114D2623ED39E8B28A77C0E847B8A +D4BDE12670D4B70B7A5E058C8FAD82A5E6586F4C7EE28029DD41338C1BA13100644919F25ACD +C4982AA4B1F1ED1BE6AA731210B2A124D103CD10CC58B306C10E3BF462FA279BC89861FDBE49 +7643967800FB3FEFE0729A2C45F737F4744A7B72866D211661A189AEECF45CDF903BED916371 +E1FBD6FA0BB7B3291183ECE4795776A77D00B3F6E506836D590E5506F5DA290F58DA3AD79A94 +00013035C955019F33177A9C4DF53DA7A73E6382A34127C406456477EE517400BFD6F0EE81A4 +DC1D4F6B153ECAD3AD0977633D5F899969D3083B893562CABEA9C661217D73439F9E01A1CA3B +10A4C0ACE022AD216641169F79093F785BE5A0F3BF91FD9D83DB8775ACBDCDFE88B4DE606F78 +DDF007BD6D5AEBF3322EC3390B0582AA13F0AF2CF702AB56180B3CE019A9E0F65B710338A1F9 +2CD87FFFB0499342853F9461C98C511E9CFDB4305D86F719A124CD13445FB8AEDB9C994261F5 +3EE35076DF2DFA1A1C654F4F51FBD5CDF7864AD45A69DF8F40AA59F571B320C63BDDBBF05FCB +9490ED00D673E93703B80BDFD08F871A537979A9D4CB548E1A63887A92F63E47072693E76BE8 +BB104126C38111E542338FBD2A0AEAE441A9CBFF971E2EC82D17AC3BB65C71FAB4ED5AA611AC +6A2DFF199D29748983D46C122E3BA0341D417D0CEEFDB49452A58BD4C57E54FC84145A497246 +6861E96804CC2A792F13AE60176859887B61729EEF07A3974BB002E37713DD9E82B111F7423A +F9F4B32AAC55C39BD88FEBD23499116E6BCC300027FBDE7131F4A6955042CDCE5601ECEC093E +BE98DD6A6009CBC661CC5EA17791EE064DB5A00D307FC876527C28AC03E6922EF361726AC2AE +F9BDC6067C2601A7E4C64DCFFEB7DC6368CE4CE59413A8C41263EE47D081602074BABBEACD2E +2DACFBA4E0EB822692F74140BC3459D6F772D3FDC2DEC09579E45353E4D6687FF81CFC85DF6C +F5C1D43F8B7635A2AF85A6E853533643DA76CB9D9B8D06B14B9435A1D165E6ED695751C84F24 +B72E857C6F67A6F7FE322C473A1CC6A789A2CD7D76B116FFAE837FC7522D0824756A3403AC80 +CC1561729CDC3B74F36720BF292C53DA41F55D3D86A3187B597036025701826A02929D1D0827 +F3799DEFBA6A0331D2BE5E2C1E529FA8278A6A46DCC9551DC74582C5468CCCD9E1219BFF5AE7 +FB4D5B434C9310FB18A081CFE4DA6420A109856D37B404FCB373FE72636A8E07E5EE73A3E776 +7E71A0551DE8875D8A1DC87602F5B24EA06689D3CBC3C6528953F6608B391E04FE7AF62D39A2 +3F20003365E804089BC952E1A87F44A458E3C54228D10077B021D7E3F9D92CB235FC6CB114AB +F793950D2E33F29199F1FC39E7E9AFE0DD1629B0588F67A68FBDBFB32BB9D0D73B75D565CF1F +4EA45F275C7DA0E5A637C6E9EB93E805BFED0236913BB1FF75B2F690BD0900EDE2EF180FA760 +F43586397ED8567F35BEB11D12598FACD994EFF881F4D348FCE3AD5450C51EF9AFED4121188E +128C3DADEFEF49760E2CDAA224128CC289AA150EFB6C0F61476D2E05B1C12431867E53CE1D9A +0EC6A0E2AC5EAFF80D76BED553F71E7AD5612BF9A8988FC5662DB82B0CE0F46509527901F4DB +8ABCDCEE984035A5EC76EBD552C6F81B863368EA4095ECAC9C8E8F90184EA23096C0E5ADCFEC +2F80C9DFFB10BD5DC0B51E029AE718522957D4C85008E7BEB876511F2A7CC2FE47340678D050 +C725188A9E9E24B89CF7D0772E9DD309F9B944BCA68DE36FAFDB5114AAF7EB75B0504D6BD953 +458E3C9FFDA391FDF519F5A7A0D8E6661659663012E1656CE9D153628C7FD262C0D7A6E78560 +56D44A67B7DAF19FBD15668576E6330E4CE8A48BD6DEE0741E5DC2ADD67D67E8BCFA69A94978 +2E57BE3C1BFB75CC5A8E09672978AA5BE0F1CDD03319899D610E6B9668091F3BAD94725703BA +E6B08AE39BAB413FF3E08A3582ABDE26CE29E0908E877981BAF319830ED3E22F3D7E77E7D8B3 +08C145067B1DCEBFFB700AC401CDA58962E4D93BCE6BA28344D54E39BFEBF0C5BB4EDDBA930C +A1A1515B2CC34AC00DEF0E935F259F40B4FDBB15C48B07FF22CC9594CBA7AF7E564D64E773A5 +808BAA33050A95C6CFC1B14ACBE2FF58E2499DB21E785C5724B49CD825B901D0D2E1EC9D8BFE +5CB6E0A12E66FD0F887BF25B725C902FB37CA8DFAD8CE76AD0CF2A95496DF39E7E2ECF228611 +68C47540EED09B9653B84FA84B3363D4883FAE2478567F026976EC7C6C19756CA62D83CEF310 +130B6F230803A1052E1C59A3938D9DE010C20D578EB38F4CE3F45E37389C4989896E96EAFDDC +81D52102B05F06582C7F82964F342DA0247E9E2D20028765679B269C19E6F54B20B2B480F5ED +36C240D8755455875C6029CD7EEB170CF11125BAB8E788CA4FC21D6703DB98C91DF9F01C1296 +7F2058018E2EE87D969AEF73256185DFF11BA33864374CDEEBBD25B6845679EF849F129A1041 +FAE3E7690BF5EC50F0E39ECA3387B596CAD088A11DED7B1603A7BAC812A8EA932E774B6D4B71 +FDEBFB4331F39DBB4D612589C45804FF2149B8BD95DC818379AC0923AE6893585A026EF40E00 +2A81D4ECDCF1443D80CC34D2B18840B01271FF2C0EFB19471B875557B608451133702A9368B9 +D6526C6CD65FE6DAC861BA625D30ACCEB59BC4857968BBE7D16B59A919C27E3E6FB60DFF5609 +172B80EF520F027AD1F3977CB727F89883DF5FA39A0243CBD598C759B44D58F3A33B5DCF00F0 +A0B759C0D452F04DD62575689ABEA0ADA1E2E3DD7208708A1119CC1533748E2D704F4E552B37 +243AE84D2B8E9E42B19A7B8284FC0C58437198DA2145BA405E81A2CAC2C78A957F173A6D490B +9FB3A96F24913F25C757EA9E3C67C893D916FA4EC2C2B400FDFEEB5BDF219FDEC7787CA873FE +C1441AD6B064951836CCBB22A23B4EA90BEF32009A4D0B6B5B7CA45A9865DE0FA04985E2790A +624A35098FC987C5DF6130134E1051A71F1BF31E75A9DD48A04F807858D19C114BCF9CB9FD53 +42CA21DFA3857B3A4E8FB94392F5C73E03A6439B1BD7B413847306797F56A71192D2EB9D8FF8 +91570B816E7CFF7FC612ABA9C9BB8F6B4217F8434078B0CB6BD4CDEE9FD78472FB11D5D7A0FE +71DC21FF44FD587441E69DC98D1CF86916D6FF078EE6883F36F53892782708EC1BCA3C41D524 +FDC1B7E97CBDACEEC2DEEE2A2641979B583460D19AB369B48236A8A1065FE64BAC0ED0FCC0AD +7122CB8C3331A59392100FBC0D19C235164D2685BEECEE536FABBA39B941965EFC89C3A565E1 +7B9739E48A733167B4DF46A74F00617373D40CDA19F23B566A55F565286565BA74FD97D997A8 +E9218CC10A5FB9B6E98B7171C14955E644097A8A8737C0DB65A00A14C5513A0095B1F6961D9D +12E5FEE1F2906098458E2D1BDF059CFF4BF0209EBB3F3550423B8F7944600D78D0C0D28E35AA +C7A28020D4674A252A06AD7FB419448E96EEB3A038E6B302EAA25322B511B449FF2B310F3651 +EBEE9495FD9E5E87EE75AD8CCFA458D9EE7B2838DAB856FCD22E0253F49DBE0BE67FE42C3724 +112E653448EAF8AABED801841D8A18857A5AB461F6D8A68BF67AA424D8D3C7691580915CB870 +BEFC3B8F7954BF80FDCFA52BF3884C8CFB2BE5AFB4A367D352572D65971663A5E0F3F792FC34 +A3F489F30E463E0C777E21A333B020AE0D797097B782B7B3FB0BBA508E3C23E7283F28F752CD +207BF9F4476F525AB997505561C49F5A21DD7AC7871BBA3AFF031E7C8D5C57EB663831054345 +291D64379E56D1EB22A9DFC370B155BFF179925217C8551BFE05A05CDF4796BB33C4C56CCA99 +B0953A9857EDF711480D024F1B7D8C92DE8D45EC5223FC5EB8A8947FC60D697ADF9F26BD04CA +8059C8D094112EC6707D4F04E040B5DAF82722AB36DAC3E8C14B90BF60C709A95588B75621CD +41488E45224FE4B5AA790FEF59B40057E96DA269685D5B9833A3EB3644B5B55C05CB0BDC6093 +390CDFB650B07D8F63D8B696FBA5A5EC8C6C6C5A491861EB9DF931A8CEB34FEE8515694BF4B1 +A54D0987EC4EE3FB102269BF6F2C1B7094A28DC47B73A5BB4E9BC28AAD00BD8889FCCB0CF152 +DE16C584810572034C71B03D3CB1642D427D944766E842F0829B412C0A79A193B6D448C3ED0B +3EB0859AC2D7EACD64CB8CFE254BADE0642029AFA2DDA74A95DF07727EAFD6903CAA49A2C092 +2E070B88C71AB787D7635401C9ECF389FBEDB026BCE47874EED6AF233842985E05B6A4D91FF0 +E7EA1A203886B25D73A9DEAA231DD549ECF2A35E99F7D31555858BC1E012F248DE711E15882A +7CB3EF37DCA57F2BEB5DF90E8FBAFD429B2CF8E4F47F9C27164698C7B6967B69D32F7EFD03B3 +1D076184B8949BC34EE548C5BE0D11B4403EFED30DE46201B40473C73DBE1B651CEFDA5F79F7 +9B407BADB5C233750CA14DABE25858AB4E615336E569C01E45E071FB1DBB97866A56E1547028 +566A938A7A67F615DDB69977A1CC00774280AD10C1D49ED41A7F2770DC213D9A864AF2E6DEF3 +20DBEB30D88CCD5CD5401FDA993175738F4CE088162C2F84A79CBA23F8FD34A0C19225269F14 +03D2D0899C69625EB651B3AA2CDD2B23060FBBD616F63E3105DBADA88F185FBBFFC29D738E93 +A7A1DD3D21D56B05CF92FA8AD6BB4A18777CC8318CB216E09DB238CF7257A4647FD31CFCFBE5 +B129E2A1CA5CE3627FEE9067457B1C76A665F6C02F0B24D9851E6D1F7BC8AB716A15707DDE5B +1BE727BA6C76B7EEBC7247A68960E26F9E20923DDFCD970A1C5FBC7254A2598B4DBB8EFC7667 +FB1D5A2729BBD8CB35C5C34DCAFDA839F6B9CA0CC9D619BB97F3266B7961AFC24D794BB9A1DA +9E8193AD202A8C2818635F7BB2F40BE6CE5F89C516EFEE7930441AD73AE5789203C5CCA91C43 +6820BDCC8FD95E1368A5B2584B3FA0794B4FEEA3C6C2109AC8C49F4BADB83965720DA2A06E96 +24E3EC91B54B563369B83BC032610E8683DCFCAE0F27389A68879FB6DF81A3DDF4E3F30169A1 +F7E9391176AF7B1DEBB3BFC35D9FBC41A227111C746E112915BC4A2775D4878ACAD09FE95C8B +7A2577B9561C106CC64A41A5C9457C5B46BB627DF5FCDF40F4B560F6570ED1E8F3B74DCC08E3 +7259646714831A2D8BECED2BEE7505AE0239B6F5A66166239FAA4742DA864DF672949E01C9C2 +DB390FC6080B9C98369679FEB3CAD92794AD0F54CEF49A6C7E5CAFB8EE4979C6003EEDD89B89 +C3D01044E96B995A5BFDECE27A9BF22CC5019A26339950A9513B10691785F51551C2A3BBEAC1 +72B4727EF5B1BC2F9FAD735BC06B95D4B22D594BB35932EBFEF502DD05911FDB2C94F6A0EE2A +519F2BD7F80AEFA0510721F1C2C976875C44EA32D7F897C10EFA968375D45BD97FFD9D5040EC +0B4EFEB802102208F2E2E8378BE4BA6FAC41D670C2922FAB9A4E43CFAF45E48E0B275406C703 +625649DCB26068414005389E6666DD3F789E42A93CF4B0B6288FC46125FA21820795C8FABA70 +798BBA7F6C5CCC50F320568B81E00D980327B0DF815928BF01EC24A54ACCBED6B8249E2086E4 +93702F2CBF898EE7A7B5CDAE0862DD0F9B24DAAB1EF6103DE17FA777DE555F711B125C70BD15 +326142F638238131B77E996960D4D011E8292035364F012C3EE54C5B90FEF3C17DA4472C6471 +7274077BB2A8309A6DAD4CA45D9547E1786AD2C1552BF483D33F7E2747CD494B06D23EEAF598 +F6FCD94C50C849838006299B4E2CBE9E4FBE4537BCC78888FA324C52D231CA5D500FCB53180C +1D3E48C8D78E1C9604277E9638B79B9055A7ECB660F887907EA5DD8D06A2CBC43E1D1AFA3D56 +AECA021E3BBA63C047E7570CCE232B991BB84A2F36D9B161C79EDADD1D9CAD3C27A36B018437 +D22862314012E2F44E8BE6E9638DB84E5C35743EF2BD654E47FA1A8AA7150ECA9BB984E745B0 +ED168806F37E28BAF72D2AB872F812202C981D2CC7497D5E75888F69486A071807B03C6442AE +07ADB38426AD611FA73784B73C940D0086C57B802233B2184FEC8AA5A1168109B47DE1577A6D +7229A51029A5F9FB4AF863D3FBED56B66A7078A5ECC2096029BE79DBB55CBB13B8117E18BD4D +2FC772BE30786D29A4E1B3B67CE1B2D6F70865AF781C0E607C7B893EC859179F70F99D14C940 +A4F49A5FEBB24AA35C3DF4C5D7A4C46B7ADB4E16283C5B362E7915CE0628AEF257842EB320DE +2AA902944111ADBC1FBFE5B9C084E33FB16B72FFD3767A29B307B6048CC15AAD6573920064AE +5C4598C093AFC67002F7DE9C25D727E6EB6BDD528C95EADA166CD721EEBACC95A88EF8103F6C +096EB2078C617F7B9A26A61277DE67EA8912A2F5EE8A863E152A2EA2F8B2AA852C0A94168F70 +C5FC97F531D52C0DE9588F3A5BA28B69BBBA2770C42E3387130CB46BF84FFC85264C4C408C05 +DC30ACA6C4EA6E27041004B4E9DD1105ED7BA8E1BFC2BC5FCF60E158B202F47D69BA2AFC12E0 +E6ABA502C9256D7DF3112A91738366577D7706FB06DEA18CB0581FBE4A010B182BEA14999006 +A122AF79C8DE0A8F5AE1ADE4BAAAEB74DFF512C57487A5C55FEC2B63880E9102D2BA36A51F0B +8B7E782C01269C001A7366DDE7539DD631D158EFF62DCA40B433311A5046CAC246AA4A6E22D6 +B8C59C15838A348205C39D37A35559DD6E6A165D45519723702649991A32794D53CF3435D3BF +F8E0D7E1380C59DF125CA55CD1B50FBE5F7623BEB33CBFB6D8E06CB7F242AC0BD2EBA5B745B6 +5D8A288CD3B527E5D8CC8218CCC085B6B90D81D398BF6AC562B705E94F56545C538A22B79B91 +5CCFEB125212A7A48B509A14872FC9749906482A97586DA6376CDA4FF6B97552E2C75AE50AA7 +E651DA1140DA4B574BD8EB7C7C310DABF320FDB39374193F6E8F7FA212DE7F792C77AA5B3BC5 +C4BBD419685D7DACA2D58676828214B10FAAF8ACD7EA0061CC2C22BCFA02415800BE52DC9384 +63FAE05D6AE424A483D4FD9CF66DC9F8625FBA92F3066CE319FB0E76830A08A075D6811BE320 +F0C57D5C9656CC607E3002BC2D091282E9BEB02977B07D9AE2F05B872480C56BA9602C2A4122 +9E1A4AED07063907449E4C9DCB0C02B4D185CB74E4C7D7E3990AEA195D34A13BF4D06762B029 +9DA48AE8E44F04AFB36D88605807B108EEA5C30A270C9AC1AB34406D545ED4E496D2FCAE02F9 +AECEAEB4DAD787E2376EA5734B86CE2CF93D6F3DEF9A631DAA489427E2A4073ADD1F923DD727 +09512C911323B4BB0A946EDA609ADC6D64EC631B8416824E45C6F4D0C0BD6B542E3B05980A3F +5FB0604BCDAF3E9ABE32028A819953BBAA7EC289C1C20D52E6135EECEE37D5FAF7BD7A4FDD76 +4311911BA70632AB683D6BA7DE878217EA2A4DA8B9A7795897A1200664FBF15AAEE5EA03307E +3F1A666F54E4925ABA46820A429E6AE50531FACA7DF68EFD7393845792967D3595112E49A325 +94865B3C2041F873688ECA3914D5E23D9CB13990F25D16ECA6BA04B93073EC6034A7A3A53FC7 +5A44216CFCE89DE11B9DCBA67D01A313555761A3D95AF9CD4D71E2A69418517465DE8FA030EA +1D66E4E070DA950842A1953E54A3C7D589E2DFA503FA4CC5BC5205A9676F581764F07B99D37C +9D9700B0C99CFEAC9BDB1488107A06AD4701F385D482562D7E7773C6913FCE15C3CC5F14E670 +7520FE31833F4A80D0CFF603295B23C54E75B963F5A95F2B5FCDA65FD7230C3D57B23B81C62D +57634011CFE6DAA959941B03FF0DBA3F49149951B3863BB98185E3FDED7979E22A386289EBB0 +ECC33B30C543D40D4EAC093B2226870249B3FADD8FBC4281398153F1A62EC9CDB3794793E19F +1DA5AC996D75143D931E22FE99CAB83E0D370B755F35B1B826AAC1E473B3CE00BBEE4074DE62 +AE63435585B041854BFEE360221E566BE84BF7DBA46A1BFBC92ED015BCD1ADF1563E23FCA208 +DA7470B836B5367B317AB7EE24B41E1FE0AFB91C9A81FA37EEA89C380CC7B93D6289BACE012C +B6FF57FDA6EFB360ED7D4CE5E95DEF15060B2AB087FA6AAC0D7148C30041EDB8C2B3436D4204 +1EA6FD75A7FFB1B1E7AF1070E5AF5D4474BCA255046D2333963C92767EB7DCA9E42C67BE10C7 +CA045164B2A3DD09EC51D4F85CA0BF63CED90D007B59A9F67DE9570BBB634B977F9ACC4F1558 +018757634B990E585636ADE03E2608C32103DB38CC8E165511C6970B40395E0BCEC682D874E7 +6FE3BD73690E999C1FFEA204968498C0418D936F22FDBEED39F0B0290F612977446D2A630511 +9917DFBE4461FF46EFFAA47A3A1BEF21C26B185114F72D33E3C8F097466F1B623A7082FE976A +988071C6921518B42120E33E9099FA98BC341EFE2E48176AD0AA0F77A5EC8F822E81BFABE622 +F5926E81BA7352D39D9D6FAF87CFC07460C1B17B3301D0F75AB8AFCA17FBBBB98485E6056566 +2C32C34E091C472F4BBD5A145B4267003AFCA53418B60FD1DD836806E9E357E96D1C1C26CBCF +26A0C54EB70051CC0815C4C7ED7D2F1B24095C2A55E79D841531AEF0751A13C8BF6B01D00892 +22BA047D603D5A8694BE6A6DF54489A90C04F2B9AD1B9A79FC5DAEDA36AEC8E34CDC9FEA16D9 +5F2C510DC1151B63D4DE7A16F2C8A6095BAE51A4987174EAC75E538E4B475FC8F8AD73408A10 +7340DC598FB313ED24D5EABD8DE013C4BE0305EF5BDB33EC7929D9DDD48958D4D154E3B918B7 +4082A2D6893966A394D27EB8EB63451DCB7C7AC2F28CC496373F53C837D727BBE56852C185A6 +9530ED11783E11492AF5575566E50CAEB574D35E3DC15051E9539BDEA7EFD32DDF85142D1FA3 +E824EFF8301C6E36C4996F81846426F7EE6F327164245D84CE1842D021C729FD2B18B49D4794 +CD5AA5DC0A36BC5FD1814B82CCF33A06BBD218C6118E5AE606196E287251A9CF85B35C6DE359 +77CCBB59ECD183DB154D855DE416235736F39D355E776D8C27A01A57AB948EFB85DC4209FD11 +C7C36719C8D3140C5B60649A0558D7FE3B3CA665D10566A57C48D1642B910945C18D0E1DF3B0 +B06E56A6E260C9651010D077902637C6BC643EF05E0193BD98A84CEB16ED59FCD75E0D7CD6A6 +EB2D2DF658AE486C065CC9BCB2C846C9D86C63A57D0A5593D2F79B8813CD2DC202982D07644C +5FFB764B543DB614A454ECE810F51779C870BF526680809D0E312CE3043DF638353749A4FD7E +1FC03853A2D7B03C746F151840454A0D0ED1BC2C0D9EB6361B5CDBD4AB588FB060A77B22C671 +643F3D7022FC1795C79F949786874A070E9B22DE73612B09193E35F6C9481FBF1A521DD21C77 +7AE537994176F96C9D9386D714D7DF557C4876DDF0D0123069AB873161009D620F32A677916A +91DD4C7017B55419E679C7B76CC0D596A717205B923280F05FDAA872855D97DC601B6B0BCE14 +53669846F722C054FDC88839094D1C34E86859537C5EDC4B49C8D8DEF7D88FB23C6ED9E8D2EE +2020F9F0437B6C2CC10BF7B069EEDB3ADB29FB26ED95AA8DA3ECA644CA2DDA965E23068B40F0 +A3348C28B086E88A8E2FD5C0DD2C38DAD55A875E80C6FE2B89F02EB4ABD59864AF87D0786D05 +F44D5A70484462A3CCA42D73149BA69C3888973FE38D81F1F0BE92B358040147191ED68BA395 +993B7C750695B415F0C8D4D41919FE52554F2294D58AA8B5C8A10A5546C1FC0EC969364178A4 +5A39C7409D2D3F0D63DA29EDCACB1C842B5DE000BC656FF25A65CA7509A04C8C663E408C660A +BBC6BFC29FEC5B21797FF93FC0326E6E6949EE8A57F10FE68BF036093B3246DCA2F186AAE675 +05ED5131D21762916B9D33B28C7B005D8F1E27C7EBAEE959B90B56166D6C84881BB4ED570E89 +15F708A20D646FAB59FC6D677F29414C06FE177200B278F5C4BFA0E454F86758DAF0EE806071 +93CB1BDFA481CF62C2D03104FA17750E9308B36908D0D347750B863FB377DC07E669ED46AA3C +C6839F8D7FDF4CDD80A74529BE168B02D29B9BAA88C3D6651C4E3FB4BE09D73B30F4E9C418C1 +8568681AD8A9B1565E47C0C357D36BD7116F99B0160A26648EEE108915C44D435610285DA064 +9EB6477A76CED18D1B2953B542B5FDB47848AC07A390D8576706F3A8384ADE1660872C944BC9 +EC50CD01D6D530538933F117FBB88FA991EE92C07F59CEFD51BDC68668FB0E5FAE1010DDE5C3 +C8B8B28B257C37FE98700AE8CFD6ACD2CD1F85F1C7545382A709714A351EF0F1B852B543F86B +D4B1D894662EB0FCD74A6A582A8FD4069F0DD403C0D66909C44135B38E2566EF972CA301CF18 +2F5C101DD0DB3C77819585A3DB0D37847DFDFD113DE80A720CB0C0C42EF0776E68C4041DC248 +E01A0CCC112BB636B47712AA5A9C02FB1214BF9417B413325C36F4B20BCD7C323C84299EBF52 +D238F32EF83ED5FB9C7CE70C289BB6B28CC40ADBCD4B325EE6ACA66963244AF021253A197232 +1BE150767826C0CEAEF5D56D8C5682C71978B3E2BC078C9F9BFF661913E30CFB4B87AD2985B2 +323E7867B5C4A2060B3EDAD8C26FFA843B3EFA6DA3EFD604BCFB47AC62DBF9163FAC2CEB295E +61115BFA2A30607852385D1E4B3F6E75FCCDBA36C5BE91BED15881478E53761EB91DD8A873EA +BF48C564CD46100661A1FE1609953BFE2181C893C99137439C55B34357AECA4AE55D8CFD4313 +E61DA972FD294B99ED3B516AD025A8E91FAAF4048406245D4403B588AA9F4EE013BB7C9B3161 +0BD3F653398511039EFFCF061D09071433CEC17C29A8D31015FF9B609667D320E5D2079F30BA +0B439C45F3B0CC63661D0157D80FF7ADE609F53C2CF089559DBD44A5A715FEEFCC91641C1D2F +B5FCE0A88162EF5417C3C828CC6832EB3EF953E9A06708EEEE65C2F4E5D146BC178CF476C2A0 +FBC7B70601533535DA948773580AE24EAA9122ECA5EA7641C1FE5C5BD93E2A4B16EE0A26F68E +ADFDA9BBB488D640CC9F7BA0036614994E3AAB632C2E360A3768C6D0D5D5BCEAFB9DF338BB49 +61E5369627FF4BE3E800406E11668F13CB082E57CE2DE207B918D7B5283AF96CFE75AB736B85 +33EA8C5218715B59B987667F49B34D78ACC16D4C6134FA5AFBA0C12A7573AEB9AB3EE8B95CBA +E8EDB16D22A7EAD311CA0AA63AA5AE2FCC5659226971EA0A142D141C9414766966AC846A9121 +BC657387AB15D4DDD48BF7D3FA223A1305A31EDCF0FBFC0D064B712D9A818E6A7C793831E56A +403F06F1086E8237094116B0E50EC7F62A965EE389240109460C407FA4C0AE572A17591D10CB +6019342DA6D4935C9E9753E20B58244AE53BDA788641CEBB4922791FA9B489A8783200D713C2 +90A5ED8E216087CD37201523851D34A13F8B0D87A9B1656D9D2554FEEB638A4F53B4AF41314D +C85439FC1228AC342EF74E35014B5D00B99E1CC1255CAE3E07343645B57B5D39FCEF11DAD18C +F13361BCE148F93B2938F1D440AE4C7BABAE03AC75A6E0D259BCFE9F2AAAF45803C26BC06457 +C6F2D7C9E5ADBB2C755277526213CBFE402876596DA525596AFD668888B84562297CB3A79331 +8895C909DDC76654536109749D2E34D2D75646ED9396A8F83F91FBC985D97FCC03E523CD7C49 +CBC62CA1BADBDA4910731A553BF805560139493068EA92E961890C197FC80536DDBFA500E158 +D1D62A19450052F7F23C96865C97E683A433F19D62E8713099E6C3087500F2420EEC9AC0C5B4 +697B77E9D448CE61514CD9B77E37F25FF425630F5E225CED3A6FBFFCACC8062A501B0931EB48 +95D76DCF3F7C2E8E2CD691283D105DA62F64DAE7F4D6387AB8D9BDC49AE57A500FB53CB0A2AC +2B98B9E698B7115B7F2397E967E7FC8A5711610AB852D2A3B6FC1E367F5C32166ADD7CB15E9B +E963516439778AB4CD95854E98C9F7FCE4A260F004567C6C8C5136467CC19C6DF152D4BCC386 +3A819CE684F8696E39C7B2B0BCEFD72211E8CBE71C5C6705819C7ECF66BE32F58A01E28954FE +D3D94F2D3895B12F130827CD467F10040F9A6399B01EF2381BE48764566AE694385D06C5683A +05F4961D8F6E052E02A8433586AC2B93282F4227E6BC1D3165D613A78F6B8D05B7DC19C49684 +C76408CDC25F5A6409ABDAD97E61F03782FDC881F7F2AC03E5822E6F14BEEFF7FE8567687B3A +8B3E2A3A6C339C84F69F6F49980ED5C7719F372BC205478BD486DC4C8307BCD7E2F9B2244A8E +F9D9CEBB84C61B8D37261B5C08FE431AC682E76512C5070E155F0FCD9344F3109369CF83BEDC +17EFF3E1C0A4C3BAEF7EE4066558667D5FDAD535DE80362A9454CDA73DFF44715192303E0D8A +CF7279B9289FC09CCC90663703D680D66BCFEFE856ED7FE1BDF4409B8D560BBD053ACE898423 +72B1ECC8C7D780A8D647DC1273A22803A055B5C45F6EA5A8DE5154EBB299BC8A5A7EA4F7DE2B +4016BB22B2DC8B773E57D78556DB34F1D690E207E267794A44FCD6A64373BEA8B94BAFC7697E +C23A563399276BEB20CC51B9D395963236C2AE01376FB505B2D5DED6DB0E322A6D2CC9300990 +1000A7DC5BFAB9B18BD04307B5724CFAC9037E44FB1C66E682272DD047CD78D63646514BBE21 +86528D4260BA8AC0AEB05EE03C3B48949A298FA25BF44D60FA268864A4FBAC37DC5299BA8CDF +CCA9FDD7B64F4978FE184FE745610F2C9302D752831581C27CA4E04456E50920C9D747ECED57 +A80EF4DA1A5246E35BB607DD117BFED00684514FB6A3F4FE9139D263C4FB8A98AA314035A0A6 +73F98B1FFE5EDDCB663E762F0D97FB1EEAD0191B23B708041CB916C9DED0D069D81A356211CA +2EA678E5D94BD73689C4DBC6EAB71D658A20EEC846E847EDC852DF7A4C1EE3D24C89B34AB325 +8DE41141D81A97224661B6C386F1B1E75972E8206C1061602F50CD7B1F8C96EA70A4E2EB5E79 +C17CA7D3AF2C55987E90233C324813580D71DD23A821BF78BC557D60E19319DB3AB27896A757 +EBFF4CBA7F5823B2F32A23C1BF1A41C5D4172BE89635991C1F6DCF7E920C2DCE3154E6DEBF06 +18822875D3181CB2050F429696481CCEB775B5FD4ADF7D970590CC6E323B44BDD981AB31CE8B +FA58AA1ABC3AB05DAC977C74914CBA5620BBED4C48AF8B0D5EF351E9777B5E617E9AB7CB1483 +80A166625E7749C77B1D7F1443BAE8B3FD262F53A9A59803617BB08E4AA9B7DE89BFB1DF1AFB +3ABB679F8A6CA32233E2A2A085EBD38DB28CA197DE55CC0B0131519A57A24886DD3E6AA49D26 +7A54E686093A2F5A6C0EF360EFF07F29A027A0AB67CE26E6DD3113F443A6D9A0E7EB6CF8F7C5 +3768471FD6643A1EC3D62D0C227690575DFE773BCB38F5D1414FE450F2354D178AA2C7D6CF9B +08F7242D03FB94C28BCD1D59F2979A9C586F208D148FDA27B5C3DD441E4F0C8BD8FE309CC796 +81FB0EC929AB8DC26D4175E0FB6FC6020FD74C79290B212F14297ACBBB9EB97C6ADEACDCD2E7 +EE063CAC88B43E031E1977820CB67147DF66D94916EE9B1620D62870DABCF17D270C385F8DDC +DA288A7D1829F1D2F9885A63451118B8CE7B8BCFDB09BE6D16BC6E1B8D3112C2D667351D4DAE +2C22F5C0D05A44B305F7BE0270BBA58803D45402F637DCF0A9EC73B8F36FE1D883C318540FEF +A8CB7623CA1162B813E2D092E8DD64E6BE418E3B6C57A711D9B2598DE1D0C1CE7FE33C8D1CC3 +2062B3E2DD084A34591BC28C9C6B039ADAFA531C038C681B4C756D7F5E5640BA49C60A834F82 +CABDC7C680517457410C6AE9BA06C236764C7FA69B5C8DC15120382A5DBE48DB0C61FFFEB654 +25DE4E3FE0D483B311CB9A79B39AE091BCAE2ADA5E472C1D3B3B01DCB45880341E8AAFA7EE86 +9C1322FB9D1FB44E3E6238D22A6CC81A94AA6549D1C2E18A5E38356A95D789106A019449261B +4ADFF9537351897ACD8BE2BA22EA3962888F26760DE96E7FB40E5573503D35F73484B41A2E27 +458EE0CA07661151B3F7105057ACA6C4BE383C14EC320E5D779A05F51A8FEB66E926E12BF40C +697E411982D3F3DCAE665BD69691F7C2C757C0402A9927960C29395E7A288732311C2AE44DC4 +3EECD68CFB55168676D316FF50F7E9FCED063708EFB3094E8EB27D6BEBC23F0172B158CF5664 +0CEEB2BE322BA263C46E6415E2F680BF73CEF3091D82C6880746987EC3F0610226D904DCA8D4 +5BA3918D807D46D50124ED6A276D0AB71C55980591F3E9E457BFB239A6F301CAF977AE8BC3A9 +63CFD912A99E5380E675929FAA0398843B1C8CDB9A76CA5C32EFD17A9FAFA119295428106E59 +ED046BA23E1A086E7168F2E62CBC0C83787D55292545E2FC7765A8EB7DD6B0C4C83EFD177266 +F22CFAAC05D4EC307C8A329134ADAD218E786689C4668CBEC025130972D2ABF2BB611301415A +27CD13F2FB38A6D534491CB1B06CF3758DC3DB11B944E31BC7958DD35F7062F7E7E0B4157D10 +56A250AC96C1ABC44DA1B9A0C85A17804D124523AE28DFDEE2753B7C2323D64E933D515C98B8 +B21F83D2F1F2AB963B159850C87C3A93D2AF45582FA3B2F7E7A5ADF743D1720A55B0E9247F26 +44FE0C470B337044363E19C583E0CAE7F0D28A46F4B53AE6F411E3466919CF0D9E4844CE2405 +9081600A6E07486D3349415D42F126DA8F6350A01FDB437DE73568A6A391E9705397F46F38D4 +A07623EBAC5C6908018331477C5F51D1FE5B08DD2EA49AB4AE25C3A8764719E48CE9312689D5 +6965EF991567A46440DAF7755BE5B076683B76E0F5341D208A99A1AD21D8D88147990945B2C3 +11F81951CACBB6E1B3B85AC6E594CF79D53EEAB974F9F4AD3739AF13873E00B02E9DB9D7105B +EF02503B335DECD23913040D780996C9FE162E6B8DE40DBFB963D5539FA64B0B102D60A9F713 +3FFAB1270BD688017D5912218EEA15D5E8E010AB98F46630DB351BD27C54FEE26F611C88BB70 +93ECDCA5C704B6BF5E825F023361117F06EA28910989863FD9D7B4628887E6096F0D9E4578C8 +D2C35B67C0F378EAE5A84908CAF59095621E708F12F7E32777D45BE7B8BA9B71D1B9047729A1 +24D973AB1F0BE5A5037F5F324E0D6AA2E7A67FC9BBB684172484459BBCBD3F044F420A59943B +01FA28E8EAE00C24D22A9B1C5767E5F387172C963637BC2FC1D67048C31F6DF12CF5D2D82A3B +384AEE125CF6BD69189C8EE6DEE342B231E1CDD31837B44F8082DDF7C69D31CAD02944941CD7 +B65B574E5491AC45DD3E2245C35918C59F623270963B0A8C7324F11095BBB4B996CB46BB10DA +CFBBC13C288093649A6EFFCBF0B8FC0E599AE5FEF536B76CA82110B60A9CFE6AAE63561C8E1D +D62E82138DE27FA1C09EE6B17233A54888AEC96CB24F7102669881C5FFBA815EA2E5A6B82B28 +BE5F79707D143E57F998697E21BA3DB282FD48F60F97B8946D994532F60CE47E2EEF194F68C4 +599A625ACA9CB0053570BC6F1C9F9BC118E74DACFAE7CA5AC6F7DAF6A87DEFBE708A71F0287C +EDCC4D4636F1D29D8D2E37A59CEA504C0F4CB7574DB912B44094575D0D58BE147AEC8DA6CD08 +857153BBD101568D01B1C3113A8E07E47B18CB70BBCB01409FE4C29C82D857DF1A23BC0AB3F7 +60ED275AEEE0C77DB49E2DBFA196F05BA3B23A5D6D2E88CD35F20044A1FE077E67F1EFFB3FAB +B138BC6979EF93FD6E6C3CDADFD3C4EB6AA21C91DBEC73B25DFD2E053284DC6137960F6FA11A +CEB8D57E49D173587EAC967CD9CEA22A19A24DC75B568318077F591E12244731E8F3D088E0BE +9E7E6D5D088282C6C1FB678380A865CB4069EDDBA83821E8ED906EFA01AFE5B2DCD5ED968AAC +45E6725A45BB16487C54E2C2DB77316D4E7DF20E7EE2A673E22DEDB75BA93A7BA64558915248 +0573177EE37E91726C3F0A0184D150AB6D96B585D137494F350DD8673DF86E67E60263BC09F8 +230112B6A1C493B47B81DC9C547EB0322FB5668B524193F5DD31692E145B647979A00DC3D6DF +D1369F1AC0F3DE009AE9C4192DAC360CBC9AAEB2E8D8B2B3FEDA5C31728E9247F21A9FE38E01 +5DEDDF37922AF9B6F925FB9B2B1C4C9B2313C2F0EC9174945A992992970F703E74E730C1E064 +D46456492A01A9DEB98A812C96689EE82AC21DD35541923144C5FE63630452374AF79A8B2B30 +DDFAC7290092436E0B83AABA36F691EFC5F1A4779AA97FEFB999BDB136C544EBD586F45C9F65 +B8F86875A9E5F83C01506B87704454A709F6255A530A298B4084C614C3BF2261C270CC46F7D4 +011A9E2DA7B5E178CF82A0EFA49DA239EAFB101FDB64D7E9FF291484C2B47F8566C566C70E65 +C1DD39383A25270FADEF54DF3582F415ED1E677720398B3F0279B2ABD7DA23E436FD8FD3B0A0 +3B561140FC402F15CD911A8428B624AA72B605AD24696242D975D1A61A3D2B9BB3DBD61E2AD8 +F9B473331C9440580C7F9858A2F3AFC73A202760E922DFBE5D1CA92FA95DFEB87398B41B31E9 +C93C8D0473904520C05787DBE0F7AEB521D09E1D2A1B207AABF2569E52FEEA23645E1373305F +728A4208878F74BC0CBED5BF3A7CC248D9B9188DD63BC0514D8AACE61A1719D2FED0B54F6B49 +A5D527F72934DADCF2B526A77BB081548AC134E3AA341DFAF597E254ACAA465340B9D680E3C7 +686A6ADBA48115A2BBAD51B843C009EAFC83D9C6308F73E9FF16D9DB072C07B72AF1C5FED163 +2C2350BBC268646B44040E43E8047BD65DDC8E25173134C3A2F56ADD1A32BB7293C0F18D80B8 +6107769189163CD29DF6D7DCA78C33547386A682A562AAB6E0D586CE8E950F58997F7C1619EF +E447D3A661BB7F708FBABE63DB2DCA42771286DCD39C218F04059076BB6ACBA068BBC51BFCB6 +890A3348619F490967161F976C2F52331D8758C31F043236CF2CCA5A77D0CA769C1698E5928D +8FFA2D071A95BCACAE3E335282EF698FCC440266DB09440F8A829AE99A1CA03E8708C68436E1 +A7AF28ED12D5A55847B2E3F759BA638B5412FFE0499AA94FA2F55C2C5B1FB235D6538D060DAE +DB88A804552C92499E77AA473E1A2C51A45A328541667CE76905BB91C2A3F86F9DDF21C875B0 +FF349EEDCA2CB28C1E0DB3360742DC4780C1107EB3DF5BDE81B4600AEAC642A78A387DBEB843 +52C9614DA6856CACE1A4FA4640B487B448E63FE7E567F14AA6593C8404BF71475CC356EC6506 +C740A5537AA47BAF743412F431FDAC842286CD399855CBCE1ACA5B60A9CC771F28A31B7DEE39 +0C7B5B77DAEE9D88C39198263CCE4FD202416DC43F523B5833B964B4CF9569BDE488F15BCAEA +ECD971457867CF607213509D18AD79964E47755EC4AC3D2346E67783C75A17EFC568C994C850 +AB215821ADFED63454EFE286F217F741CE02361D79B18D977C78126F2536E3E09515188D4B73 +9E11064AF5BCD86C45265782EF88488E6066C0B71A33448E6EB442ADFEEE2BC099B044B2335F +3D547545C6E603AC52E58AD347F9012ACF774A4B6E890E35643C469F50157E781E62F2CEA726 +DD5FC10CF951DC17DBA7FB2FB6DD640B57319E247C499B7F6F075CAA26B230ED959DE657C2DA +2567C5453409ED2377D23AB36750E2063D63C14333FBDF27AE014A2CE001DAB27D22AF54573E +04C3CC0E77AC27FC21CAAB89CA0801D1AD357C3295E952954CF0A03E9D45382992AF2EA70A33 +E94681A5E405D22923B991FACFA2643FD07DE00F0B5702BE9ECDDBACA40300E49C8A00EB47F6 +15A8C6D79156B074B0AF9A67C9C34A6F18FC7E2C075DB37979A29A4ED6C5BE5E1DA15C4D7671 +FA1EA5181964CFE9B211D27B75A370C9351B95505B54FAC043092B65735FF0BD6A3698241DD7 +B516C058AF52192904C35E9BAA3D5D39D6318EF477BCE9D0CA2B55DB8E192D1A3FD3F023DB46 +245721A1EF8F03CD710000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +/UniqueID 5000790 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACDD6500ABDA5ED9835F6A016CFC8F00B6C052ED76A +87856B50F4D80DFAEB508C97F8281F3F88B17E4D3B90C0F65EC379791AACDC162A66CBBC5BE2 +F53AAD8DE72DD113B55A022FBFEE658CB95F5BB32BA0357B5E050FDDF264A07470BEF1C52119 +B6FBD5C77EBED964AC5A2BBEC9D8B3E48AE5BB003A63D545774B922B9D5FF6B0066ECE43645A +131879B032137D6D823385FE55F3402D557FD3B448685940729E6E22F4BE0E08C6505CBA868F +795093F556B64B808DD710EB936D3AC83E5783B5F7E56D363A59A026A5619A357D21C4E77BEA +121EB24B09027D1AAD93158EDF912940E91CD2F17922B358858946447773730BB19AF9E70453 +E1B78D5EDC123B273A979891D6D5E624F4A388F3897E13B045E34B4EE2F5E4FC5E996D354964 +0010C671DE14D18B0B3CD300E57DAC0322E59BFBF7B29422230870F5897FCFAAD4B50C7C1C58 +EDCD119218163D6F6E5625CCB882DB7B6D09A1586508E8CB642A11C29A46915E4A96E282079C +B21922C1C2E360B487A45302FD22EC8C5FAB63E54B5E844D4B17CA2FFF37C69C366DD72AD029 +22C14C0932F65ED03E4219C117962EDBAD2DCDEAA9C10CE8AF38A4AE52E2B377245B0BE19A77 +D6C936E7530CC4D0B78D0CC4A92698FA2870FA54F2D8503E2D17B3D52FB2FEBB09F2B2AF0C2A +1892039EBE19A690098799A858E3D39631BD6925A154D161DF3918074ADA6BD52BADDD0ADC3F +07E2D9F15E27CBF7FE8B98C407205C811121FA91E059F2F99322FED63F359AC9DA97AEC383F0 +67F23E5DE33151E80F0A88AB50FE8FDAE4A5DE93C1AE2FDCA06150B37246140C0E87CB2325A6 +0D2349162AE3AC93144EEE1E665A1289105318FDFE86B6E76251CB25ADC967D3D0B97FE5E279 +E1161736AB22B4CA510B964342383A840DEFD38F96A7280E6AC134E48D740607FF2E7804164A +16D47735864DB8456CBE4233242EB3B447F7AD444DC16CFB69AB1E515B3C3579F0E847488107 +99D7F2833DB6E76F6AD8C924532F8F5AFBCFD939544BB7DA501D8511E37090F3A56D06FBC17A +49C373426BC6D94E829A8CBFFF9A2502C915E2823AEAE70E39F00BA99F8E6094A024E3C48503 +2A061769D653CDB17A06D8EC2F407C4B9217671851529647D0B9F261E39564C79FA0D79AA7CA +F3D08556C66F08EDABC27870CAFC00F0F1828E93929116DEA5F038FBF92837E804DC9CAA7EC9 +D967715C97C6D5770B5913C4513DD239F55EDB3D6E270E8D826F6B4D0E7192BF8A1200475AC8 +E1A30A8F6B7428C8D321F93421F8A2F707548CB12C6963A2CA8C47FD7FCC6C4FE8CBB31985A8 +9A0D0617119A892A61272ED8E264418418F2DFE0F5CE71FDF732F0DBE1DDCBCE2A7B6C2068D1 +EB733FFEDB0EF64F9BAD513D3267870E0E90147C6B4BB9F60F99074CE5675F7C4FE9A4735BE7 +E6D1081203DEE5A7DF96D68B2AAC736DF07BDD5BF994EC28EBE13D2ED5FF9EA89FC822339AA4 +5DFE008523F617DAA3DB055EC593372FC2752BE8FF2FD825B13BF7A2FE7A0FBA28212C389C62 +B64E9D156842356743272461B4B56B9FD5BB19AF45607E6E3424455A2ABBF21ECE6E2EAC5849 +9533299F5A70391C4B7E9E95AC00A7593334FF183B9515F642EA934DAE6FB630EDED6B80389F +70ED5B3B96EC7C116B1124D4B6C90FE571E0A1339C714126128DBA4CAF5FC2C035579774D403 +AB3BFDC134145AD2FC303F8C1FD5ECBBE201B8C93DC26497335822455921DD3B07853CE5B859 +36F54745B3CF0AD0523D83B16C132E600FD7DC81B585E769207A4949ED024372D59254EB97AD +F5990992CE479506FBE4A8BAF5B46C8FC13C7C0CC5270D37ED08FCADAE4AF27B0E64080FACF0 +558C85048A599D567054DFB290683577296CF1613299E7354B90C2EB4512E05B3350F681BF64 +12C688BB05C110110932935913B5F888C20546BD51E414DC04255FB51EC37CD47E975F97267F +F78598952239F401E8704A903D9C8D7B3E72426FF13CDA6D912A4BAEBF04E9C2186290BD83D1 +040CF238D04CCE1A1D177529EB8A27731C81393BB96D0858277AD5D0AE1935F89638D528B1B9 +493532D7C81EA6020D0AAEDC98CC93F644EA5B5D134B8CD94A5E46B883E1F54A7A098F230C43 +7B71049C0B2CA37B72915638F7088666438DB22AAAAFB84590BD7EBE4AA544506E19E547F3CA +E50348674B3CA185B542FBFB2594A687814F0C330BED938D482F6D55DB7746AF7D052BEAA978 +2E812369AB4AE39F0A9890DD75B6159731898692B986063985AFAFD8CA08714BD415180ED6AF +DDE8D5719734C74A055FE635DB9B8908488EF1481D72A90C9E99614F973B243AE426DC24C4E8 +A9A12D6D5E73FBA4EAE1BA66CC5B5B54357095A72C84C4E5ACC4D90038BEEEEB23E058079B32 +05C0C4E0AFC015C650C4F4EB4578BF6DADC04E9228F5C304B2433F8D92FCCAFEDE671F2F1921 +8D070E622F0F5A6F3BD95BCE78DDF81FAC393757517FE2E9C02B025B151541060B87C1844B3B +C754BBD0C9F9255A9FEB28B14AFD3B71BD0A916CA17957E3B78539480868375EA6ED93BDA275 +D793344BDE7E59DDA118414AD315BC177937E056EE85E41C94C370C5F5B8CC34D334A6085544 +A3A2C0AC9245A3AD03C278B39ABE17F945E0AFABEA8F9551460C19B7E667DBF2BBDE697AE880 +2196EA5205142720E966449D85FB59B9F711ECAEAEC9103D383F58EBD19E77837C42BC90E44F +0397E073656282F8359362FFD450FA089C6911577705EFCF9537DCB916B7EFB30B4055A6DDB5 +03E2983D1BD53482600907D9160FAD04128F4DC6343242E0F33C22286E6C91819F2E760A1788 +6917A12E6346794AB66BFCF02043371E13D3F355A20C583E484C94BD407DC2266529CC993243 +D7708C22C4EE4EB9DC2AE1228961E6605299201CE90B1B0547B103C4854E186492F99623B8B2 +5264C6FEB01C3D9E86B2BF8DF607A5CB944FCFB174C233D843793E87801AAFD289B7FBA2E2D7 +0E3E08B121A872333FD4064A3BEFA3FC9DB8382F0286852E322CE17D6FB4B31858AAEAD12CBA +FF2BE948CF19C1BB140114AE65D26101457B1CD95D1C9347528B09CEF9229913D349B5FF5F51 +869A7E7D929B82F9736797F4C49DF52B2BB98BD87BC5483ADF1C1F620F70BBAEA51D554A1664 +376C9FEAC4470E145C1138F27D16CF6C325A0A44C53A0ADEACB28CAFEF2A5A09FDB2968BB229 +16F47193AB3504E23F103A993D67D48F2EFF36C306FACE6870C0216091A42531FB07605C0DFB +554E46660EB27A8503442812EA6AAE3D326A4F9EC58B6C732CCE096DD512A8BB8A8FA7CE09DE +D476B24EDECD9E39F24E0A30BE0C7F0DE109CD0E66196F3D55BA8298C569C9FC1D36FED89E1D +ACDCDD6A5E3E92D5201584982451C378F34EFA407B65F27235CDC570BB7965375902CC5E02C2 +354145FF97AC9278BFC4191A286BC58CF9351220C57FC9C4CB450AE57D46C2169999973EC040 +53F53FCBAB1681B17D6049F0F0786AEBB41B00C8CC615EB6A5FF5929283A93D22E28050D0D02 +BCD0BD18818ED6836CDDA8DCA69093E03658D26EF757319CB1E738D7AC4BE9EB6D1356D9B34B +777E4FF4F2459288500E8564EA13633EAD85E614DD9CCA149CADE40F8D1DE3EAC49B16F9D954 +953C19C66334B456260CB46C84CDD7D098D39E90920DAEC6D7A4523E54F6229231F5B5935B4B +BE67A3AB87C2C8C2E539376665FDA5E14AE5F6EC57D1340527026C7B73B99F13E7DD22FAA6CE +A155B79CBE80733A40E24B62A1FB88FDB4154283B8C5C377ED6FF43C975A01366BE13B9A1ECE +A1954C62EBF209D4A0761C6D7FF6F1BCD1196E4080030EB2A8C4DAF3C941F3CD5FDB6EE95FC9 +0824F9048296C56B3F787218F3D546BC2AFB2B2483E1ADDD112B7C892FD4BA8B158B579098EB +B44BEFB1B312E0F42F08BF77B43B438A231C1110A56F89BB1E36CE90F5A5A69138B7A8D840EF +ABBD0C63E459021227F62539C056E90C377C9563D1BAA4168EA5AABCDA5DED1BD8E58DAEC21E +20E651E0B783BF605DDF8F786928F7DDB085AF660EC41C26EB4BB70B6071F5F63D7427E3D54A +05F28178EA6A1C00EF8868D1FA78093A91D3E4BDCB4A40C814501456216D7D164C7A82B4BB5A +16220F7BBF07B9D11AFBDE09CAAB3FDBB6203C667EF450B644B7E536B1C80BAFB4B5E5295B74 +7A08C4E843DFFE087DC105C9BDD9052BC2D86BEC218F9D49E2CB9618D9D4A3422F6849CCD5B2 +41C0D0115DA98661ACFE49E8A8CEBE1ABD00E6662A2D8A9C0FF1A6808BB04D5E46467904C168 +C65B7DBDD1A0B5456AEEA445CB22C77BF3F7350B13B4E2423CD11A84AB6834C1613B09BD7984 +23F2249B32EC8290D679D14D3E0935AB5CB188D4F845ACFF621EE3E0206E6CCF2AE120114496 +636F297929EA214D6416E639B5FF5B188F38C62FF67C969E3FC492237BC7D5D6BF16604C0C94 +F2469C67A225F6CFE49EB45DB9423874BE7AC48A009D68D028245BF895C1D00C40592B68FFB7 +642386887F137353293F9D506DBE742B322A5AF5677197B8DA6DBA4829F20A02E0F8A8CD140C +76F9BD9C730097E0E140EE2EA2F3C71C714C669DCEB650E87C98EDEBBCEA6A5966D8965AC0F8 +DBBB858B77BFAC279AE094995CE9E7D78E387036652B0FB576EF90A777C664C80FD7C2C7B9FF +EB52FFAD59629217F293F54552ECBCBD6F05B326AFEDB82B079D68104CA2660B9B43EEACFBA6 +20EFE2B1CFFC84AD5F98AE71D4CE28197A7AB40EDE026A9986F73DD0213C1523112F64FF23C4 +0A474FBC44E3266EE0AECAE9A823BF787861F3F9AE1BC0726A47D8F74B70D7899A5A2E40A2D0 +B5F8E229023ECC4E5B30F914F3EFFD4481FCBAB37D8ABF4AD3759D2357BF5B7416CF9AE72A9D +0D9A10892A70FC0FA2F2C20CB2FD8D80CA9C7530CC1465D9115306EA5DD4F7D7FF60979628FD +78B6F0D429B642E44CE21929AE076BA999B78DFBAEBD38B0C261BC566C5161119CAFE5C3D0CD +02F149F5D24B241A9CEC58E9E2E9F72A2862E2103D86CE4D93E612CDB82AB33215C2AEBB8D30 +E34EDA53222FE67843FD747F9CB1D7C2B4E87D71498A1D5BA282EA5BFB3FA18719124FD46A98 +ACCE4BF97E480A13D5AB27689CEED619A8595E613201056C5E137F618E4F4B41B3B5F247D0A9 +E786904DCB1E2AF7AE330C11E4CE29B6C75CA748584E83B5621F2321B730221A0A6AE75FF564 +4FDF0FBDD7AF0627D4CA801D0EF9AD04C55C238013994B493B6E0CAA0C9EFB6A8FE46E8F120D +1CF4F60453A6858D2F49FBEB90D21CC6A67D2616A506795AD9BEDC96532336BF65679ADEE667 +2E8FF95DA69F013D64D7121307B932BF2CA4FF2623DCFA5D8ADE618868D6FDF74FA9EB4B1D81 +2C0F8596C9C14B807345EFF6534001FB3BFA4B5CF929767ADE5C5B1628A1EA2D0805E85042F1 +E31099EFECF5A542BEADD11B41F1428FB471DEAD028B55BEE01F9429DFAC0A6BD3722C7EDF43 +D73A222B883D305847A200043DCAB3CCE0ED7A22A16210700D98EC416164F8C5A8B13150308F +253797903F8515F065034EE7B5C42FA83CFFC6FFBA08BAB2969617C3D94213762C611E8DCD1A +A82F90FFB2E2C0E570295EC8F36352583CC4C9DE7D1DF3E8774EA47EC79FB35FB6EB954E5733 +32F582F2679B13E218526451AE5B5C7F0154B8769119E88A6E93BDE1655287CFA8663EAFDF09 +C332666E2A14F562C146C9F5CB18BD22B70F98D3D0917AADC376463742BF897D7B1868EFB802 +73CD69F079790DC6EA395987786A1EE6D649D725026D34F8A15FB57EABE12757E49F30D2B7DA +FA80AAE0723F905CB1D4FA4C21AA68025986A45A6FCB4812B7B2698910E5FB950F2280E3A60A +0A7930270A93EF4F7929F2ADD145CA87872B8B713FAA428B10A1F419E985E740D2649A29A3A5 +E0D691EC7EED9A5251A0D76D6A6D1F455D308BB7324B29A92CD01006ECEB1128DCDF5730DBA6 +00B5881B7C3722C09074A51C45AA8C26A3D960944FB062A7BEE0B7FB1D06B5C3F0CE9F283625 +2201E0B3121DC1813D955A3D11A3B41B1B1E74A2EE1E84364D05FA9A68405CBABDE0009B221A +BEA1146608A26B66FA93D382DA5ADF94BA248F14035AB0C03EC49458C7AF3D9867682D1B0DD0 +66136543EAD160500D49912C5EAC3B24CB12AB6504C837199186AAD6459B320D69265F230AF2 +39890F5BCD0720FE71D3CC95295982EDE49A9D4FEF248F7FC3566796769A2A4B205E93DBC034 +54162CD50442B11954667199F1C43FBBCA8C354F43DB19C1D096F9186A1B200DA03F81E08DDE +8DCB88B2FB1886D246933B5497EF4782DD56F5A54BA4D8A5227E4E5DE31B2231A26C44103F7D +556054A2D4CCB8F57D7F56DF346467CFAB794EE825F86F3C5E42339CA4415E8100715745C770 +705F3156F7C4ADC9AA98D5B72909815EB12B55DEC84724575BD716F0607DE90DADCF41ABED55 +CCA9CE2C075A851C9155523B109B6BA66A5DBBFE5159FDAA892BEB9BE909FA491B29A7395BC3 +AD8BE8605AA7B57D10BC5F96A02080F39B111CB1D23300D3B6269C3A696363156D3D0E99BDAC +071BC920DA194859865F6AAFF48AE35E558B99E0E88D62F21B7C7A3640DF076EABB7B67025FB +F9926E8C469BC5494D501DE9AA1565B428349511B5A2D3D9DDD67CC6E6F06D83B28857F46244 +5F32AF11D71946359A66C9D7E6F1EDCCC0A295688E239D18E6FBEC696C21F5B2FBF01AFDA3EC +39F0A76E4B530528E302A73A75509A1035B4D55035475C984B66D0AEB7F423E4EDAF3F78BD97 +35FE8FF17CCAEA7D245C0257650246C90BB99E1433A867237BC222BA0B96D4E332BCF48B8565 +D9F00EAFD940C10F1EC44F4BABC9E4B74919039703BEEB805991F1CC3D9D7CC4CDAD755444A8 +CFA2AA908D66B88B63551B7196413AD3614CDF428EF48CEA5396B5777C39CD7CD285E9A75ECC +5E028DD5C291E063326BE2421977DE683ECD670361645B6F4495ED0ADA49E2C3A341D1973B7E +C21AB13BB4F8BBDAD0B31EC43B0F6A3268B1E667298D95B3BDA5DAD45D2241D851543FD03F1B +26B6172B88ED6B3A1641D4125AF70CC3A4D425D7226CB034B2BC7476EF5E08A1A33626EC8B67 +6A9ED37CB0543443705BA5748BFD99EBAFE17085D1C20A85371481B1FE5F239986B5ED471B21 +5F821BEBBFB2FEBD4AF60B53A1ABA5FBBA118C0F121A1183E8D1297DA1882DFA5140469B2522 +5CDE835D18462BA08DAC0673A4FCC6172BEDE2FA38373DEBB9BBAB9CE158FBA3D831499928C4 +059C086B4CB70DC0F2E48EE03FB4887CBB0B45F8FA04D7EF316C864055D55FFA990419D9A83B +C08AF43EFC14870BB40840D12CEC93306A2355188F9367C512B4D0FC1E039AF8A85E29BD8BF1 +BFA9476A3FA2876C58933F713F0B58CCDFC6914D7134E347F2816EEF956C6171B313BA58C7DE +279178B9BFFB30972D6B8D963202E4DFC92E9DE0BAF43878FBFA9A13F30EBE1C9EFA118ACF87 +EDCA5E6DE8AD4F41C09F03465E20BE82CE8226395EAD99A8BB871D49E989E486626D73CF15BF +A569F3CE25391F477047C402493A23B55F70462870EBA3A681A8F8D99CF7C2C81C70D705C392 +ABB88587EB849662B365F85C241DD765B3C295F0B7E7EF57C7CAD259577D8BA18DF21E664888 +EEF38DD5D9F984F9DF4B51E28563B787C8BA7A96BCC3EA9E3A26E9B0A9946E642CB59170A89D +526FD1096B7C09108806EEBCF387FB03959D54B418E76A6A638407ACB5AE8FA4A7A5185F905D +C9A61FF94929D3C2BF0D92717D81B575FFE8D17E5ED3E5197CEE88521AD4F87CD5F57E87BC33 +F077C90CD13297E91C49F226AC5A085B73254D5DD3871C97F873360FA05F8F7216C867C8411A +DEB944B47BB5305C6E7B51A9E41916AACEE057976CF4BA417A67E68C4245E92953C609AF2B8F +658DCDE16D328DEFE4CF9EB05DE0ABA6F076122CAE1110EA641D1D886775B5C5908D4C32DEB6 +F8537A35F6DC6A4F0E0216E93BBF3AC1EBB21EF00BD2D7CD787C17915788D0CB4062A0766593 +1A30C43B483FA325F9F92F45CE6CB060300B818637507FC323EB5C1958FF94C7372726A7B68C +9F83B07036EF06FD57C4D174480FEEB0A6441FE2DE8243F4621B553FDAED2254E9EF5B848F63 +2CEA1A6B9F3D2E1EF7F770F5404AE0F4F3C912EE3281F9596B42E01325E8923923703CF60F76 +03B7FD89888FAD0ACAAAF1B1A6463A3E73525840E5616D5C8E7F66683F2135F3E4D0EE18FA84 +32AEFD05C3569A4CF8EFA471F0A1490B4A55093A64659B9D112EC90F42FA874F3F8188100EA2 +F157BB4F9F52A1B60C8ECEA96E222EE4AD0C6B70B2B43F367D4C933F425D49EEE4C7030EE050 +DFA7CC6D044CB9E20ACCA84A80B9F1571927E2A312E5A9991244FDB6EBAE1BFCA4820C193703 +951BACCF931B654D6BC3851324D3394A3BE41DE2523309D5FAE513F18CB65C9D135C5F8EFB7B +2622B991D8ACEB91880B22944D26909B3544578C19C1DE4A16CB7CE5FD26EDABE394AC53B2F4 +66E27ED9FD7528B6F7CBE0C4EEDB4024C76EFA6EEE427598A18CAAABD3DAF43F462C138504AA +D4517FE9A93E25D49314266CBE18585671EC97D8016DC14774CC105C2807E8D79E76613585EA +738B346C49534442BD3E36ABED00E8A6FF0C7BDC021B721E2DDC00B6C3E6F42A2F3C98DCF7DA +A873FADE66D8EE0A21A958C725026F4A439BE96A9405C808649E54177BF01D6026A6B759BAE9 +689995DE878DA4EC878A69BAF3C387CEDBD62092DEBE87A063E21D01F632C247EF3F07574282 +EC0E245DFEACFDC38AA46171D82616E121BA73B684F869908E65AF1C63A2EB7E812EEFE3C3F4 +954E10463359CC957EAEF32A49E1D341702F2DCBBF1522EDDF1DF96F8C679F752C130546594A +5759E7944CA62474D30F5373801F323747F58A04A8FA115AC67309FAFAC362D6AF9548199389 +20277628E3771A03D50A13CF80031E63CD4834D0D47C5AC75B7B22182EB95D8DBF64E531E595 +A1DC9B5D7D093698CEF3614BEE91F73E5625F425CCC3C4A364BAB995CAFE438D8961A14E67D0 +C03D8CBDDC4CC8C34D7F9C2A815CCEAB4B398D21CD45423650D0A19A0AC8654175C7E9A43FD6 +599D2875518A431517726948BD9FA0C7FBD59D0A62E979FD9254AF03D216FD75734BDA875F66 +A31AAA8F131B49188AD3AEBF2DFCBADEC488DEE91589B08297A960E21B4C472B21BCF55E1430 +E313E1BB32EA42921A240917EA08C90AF9CD982444B563C1B823104D34F64DF37742F42D75C6 +D6B9214325CB6BEB0280F79723E9A975A499784C59F44FE5C8FBFC9FF7F5643A5BF9E6E0566D +5C3134CE761811A725D9BE99CF34DC682243774E6A13B21459C2242ED68DEA64E24E8DA19F08 +99072C0CDB2A807283D5378CB7D087D1B01F92E47D1D96DB42B57FAB36CDBB73E1EBAA81D22C +521A573C18067FC8EA38713C959046C985593AED0DF31989DEB783AAA57ECF01606C675E5ADF +81D845A542D50AFD29C98CE67A38B210EE23C9A14D23043F91FBE77ED190B43EFBEEA41382FF +8DDCA4ABEE4665B67816531F07EB8043DECB836794615F3C334B8734A579FA0BFBEDDFE32A95 +389C6110D09DE30091EF2F29A29206047E8378A870D9831DE115685B34066B9B507E8DCFD6F5 +A23B5CFE5E74527B30705D010CDC71BD90DB9A9A53053F6B24E65DC4AA0F7DA29D4D66D9DE8C +11354821B14EE965F16597EDBC5BEE7D4683E20C06337CE21FD1A2A5D78FF1E945ED13ACB556 +C70F89A08202663F2622CBCF480336B8CE580275514B24430C139284EEBF9FE81CBDE98C00B2 +AB9F85BA64E2CFF0888DF49C600EBACADEEC43FC0A6E92C499416902CDF94B318AFF4F6F4923 +044EB2EF3A88D0D94CD274F40488309E2A08C10EBAEFEB2759D9DC7DBE2C0E647F36C21220F1 +1D88299117AC699EC7241EBB828A03D18A58F8C7AC0839E929F6F58CCB8613D8DDEF8FD6525E +069613D644653F6702B0B097A177A31FCED5F7131F8A3E5A420D6C7684F2BBEF5AA88FD91243 +8F7F6D22263373CC04446A640953812419A21793A204146A1296565E9103C1DAA633DBC79BA9 +E5504EE0743946C1FFFAA5357ECCD3A269B6A63CBA0C0A9C76BABDFB28B0CEBB607CFFBAA692 +360697C69E1EDDA67E12874F3F1260753249307C4572F363033B902FA48FE237A4F65736BC9D +A310CE406AB83059F02F94C8C9384F6811BF649506CAD6554912561ACEA6C1F4F1F2193643E7 +5457E7207C55D0160BF194743BA207D4431FC2159A4D593EDE6B1AA19F96ED07CA67505EA417 +C85A3AD0F87EABA0716C41BBBAF003881EE12CB4892184828BD1CDDC94AAE05C19999A6F1D2E +1DCE2A94C4C2902522E44B22131192CED3D42A3584C98C2D9301DB14EAE7474014C04AA8D2DE +A1755E5F9037D3E3821042366455AE23CAC2BE67E0A595A033E98462E1008294A00E463212A2 +6B4B941255523A3C9F39197151E388EDF193D510A23F3310E18FCD55019DE861208F9985BEDD +65AE125204A6DF7E8233A25AF7AA151C3F8BAE7F6864386FD22EC8A3F5A179D7C70FF9E71237 +EBB2217D09DDCC061D57445E8B9665E22DDDFBA4CC18B5A9DFE15224697ECBF4E797E3042AE2 +754EF1BB9D4652DA69A07F57EC6162EA26D4650FEAA52F9B39AEE8767C125BD7782D3605E19D +FD2266E7A37B58146615D5BAE6B16633D5280D2CF0234B0114A91DD87AB6987FF0BF4D8014A5 +24AE04E18813F88D00BECE288012E8A285214C8ACEB7A5EF665682D463462F04E4BA0852CDC9 +8D6982DE873D1EC644F44B7FCE18778B9D8F130584CC3F3A8D7A51035F10167B8E572BE50997 +EB738381421A763E96D785AE567981C1430CC18A79B8F57557588D3842795F2312C4D3E3DC3D +55D54A358A9C0B031E91185DFA97E0F5474CC93CC71BA796B4A842C8340360BC584A1477608B +D95481DEA6DB57D819A8F36BC70C09889E2614A2BFF7C74D0D1D09E1454C58F7CA672ADF64D0 +ACBD1F9D3AC9203D7D011658E361B499818B4BDAB372524A385E65D4882A442BF53DEF1FB2C7 +460DB0F59ECA306C74AED3E29A94796F525E2D5DF9BE7A97CE6F0013C0F39476A7BCF610F4BB +5E83D2CF1A1D515F899C81BBB60646125408922B45689BDBD82F14A2B9BBE1F27254A5D1BAF1 +3B2128846E4DD8468CDAB44B9F847D31DEE079DFE5FE51870FFE9F18CAA25A2FCB978A46D747 +544F2FE51496D04EA5478B209FBE843025BC64B1CBB0DBD43DB01744C471327ACB3C77E4CB6F +ADD41B9D4D1C0BD8CEB11AA2A239942C97D1F1594F6E4D9CC34285E4DC6F61E80CE1FEBAAD7F +9BFF9C00E0F06091EE76794F0B859B46447CD627DB60142A462A7A3E4403E839DC6D4F08BC6B +50E8300A76DE811EDD85431CCB895AF3045425F4099B1AECDEB7312E84DFDBB373309C9B1FF5 +72ADC905A41421A77699C8885879F4939E7EE8888E7CF88EA12401C1154525807F96C6F192DC +5981ABBF512EC4B4092B515A14262519A630F20DC7CEB32AF0A2A10443EF54AC376851A23F6A +AAC95DFC30D0E4CB5E14B5CC323CE4D95D3612D6B19A877973B42F32CC03EC67497E3D9AAB54 +573B36B1DD5D096618A4ADD3A1FD077C1B00C7E6BAE8A90C606C979A2523D5AFB67730416FDB +1F28EB72E6F7079B84A903C68942C9A17B1D71C30CCD288ED9781E50212CD06E5EAC59D45034 +36E3DF8ACF1F63A8B9A44C8D159C1981168E5C4BF7CD5C5069EFA0FEE41BAC93B1C0E0BD9F12 +ABDBF5C8404B53C102DCD215889A49F23C435A962CAB0C48F763245F0BA1E3B61C6A6E305D8E +D49FC181BB4E6DF8483102F70DA144937C8B5205D240D6616F1281E92C4CF018B5E26E74CA72 +9A09D355F97BD76563A4D62A3D643D5C7BA4931B5A3E3A8079286D4365DA4E4F63236E4C5E61 +F6743472B1AF5A5FC97BAD3D576865E55B3E4F214796C674C902691CF7FFFB9ADF45B6BFDE90 +964E83FAACF3C1FA70C53F3D6EF18A8E13FF85EB35843E983393C292D1C4890F83A33DCE96D8 +3C4D38B4AEB6B75B50E7EFFFFCCBEBA8EA3BDA064BDE07DC7726113C716FFA47A00D33F49115 +4228B6A20737895E365B3EAD997F7D2F9999EE6F4713DD02AF593E6C105A27B9001E1FC7C57A +C408DB6309A6AB2C3C6FC6BBE62588AABC4EC9420A72C6DE5C0554547069E15962A141C4E2DC +4B38BEAD55F8E08F14B9A455B81A5CA9191B588A5E587A1471E9F1B30A7A866B19BBADAF5AFD +8674423D799F515D2B59E289843B98E57F6D5105CF14929DE24DCD833BBD7FC14CD0AF34A8F0 +7284049AED310B36D0C8559504248BA11B4C6697D5B74353375163290F23F63B2C611031295B +2A5183036A4DFAF1DABFB1669E534A8BB28ADB16EA52EB238A242757B8BAAF53E90C258AF04F +9DD1B00B100CC6A32390E6FE91F13F675A3B78F5E23646F1448F7D6421C38A58DAB20EF56170 +BE71AA9CFC5EECBE809138A9FE8B46B8B30538174C23E6B5DC725F3A0507F944963D9FB47C82 +58C4EF8F5D4AEA6A5860A95E0B96943452529441C4C6E8E299DB6CEA80CDF2DB74AC3A89911B +55E225B3F20D3D605979045C72B672DF80FF1F78CF4992816E27D225A66CCDE49F357E2447AB +C6A570003AABF2F770E2DA3F0FA89E9A01AF0BA430C925E8F764C77B59FF767851A7D6570106 +FB852F3047CB0AA041110529072160AD8EC569C8C1C5EAC5BA56EA030D104DA9C6D530C089DF +3E37148F4B8B0A005616F946C83A391DD7E7E776FB9DD3D52F06BDBB5CAF1227C4BA74861BC3 +AA9A85055EFDBD275508DB8F68BC3CDF69DB4D1F825EED993B84FD63B237A38A4CBD9071D0CC +DAD295F3947BCD1AB385BECC35725F4F287450A49F652347C9B836A8C46A58E044853760AB10 +FA647FA9862705641B5C411A2EB69086B3488F4319068C959E5D369FF0FEC606665B6C19A567 +9A96138A966AFC86F64F803F55829C8CFC184D20D97F1B625ADF7E260EE89F20987FF29DA9E0 +5A4C12AD48B56404D0B2BFC398D5991C8CE5F81E67D71F31CC8A4A6D1EAE0DD4834EAF3F7DDD +6493DE2D1D31606241185A05EA75A6036AF2A4C60079A9E21A5F28502560FEBA1820361A4B0C +2D313742A2E6CAD252169103FBDF7590B38A60C227446E944ED13D91D5B3DCC6BC8A4737D4EB +AC8BCFBC78E243296A76639D2726D968463E03E3BBAEF4CACE746BA11DE8DE942E1AA4AA29E3 +993212FD27D3A23E55C731617AD58A98615DF3113A6537CCD5E4CA5EE7715F446C009F423622 +CAF9293D9C25EA96CDEA869C00821CCF8E0E146A6977AF4FD1D6CB46D3A96CE4559D7EF177E1 +9797615C95C51B2AC6DA1A3E700D4AAA84603E9E9B4B0F2C084CE4A17BB119B6C998045032C0 +4AA21B8B4D5A0262387F884D5B21AACC93F1FB74EBBAAC13E092A860F9875B83A4F2BD56ECE6 +B63CA3575EF0601F3D0FC09C5FE9D7B2523A88C37C3360FF2E8A3A0D6C6C9E448CA93728991E +F2BE037DE5FB059A72ADB03B1FC85C49A84B2077D6ED25DDED1D0F9DF4F137E4556A9D066927 +217488D7ED62E22313109634EC5B291842369E376F2D2302A3D9DB199F0AC48B228C8218ABE6 +BE8503502672F984C8A7A97B8B6AF3EE1C15230C5DF8FBBD04D78B28C3CA61F568E0EEC6212C +3DD622884AF4740BAE327F89485685C94503D1D86AAA538110D7C9E520FA19C129BB994E3765 +8B6F0D301C8899CB735BED20E929BA4E7B6F3592D5B945203639979C6A459BACD0B84B399828 +3F3F8CEE039A3E78C76DBB58EC4311BACB39E1AB2B8C1E65AD657CBA210CEE930CBCCE737216 +414A7CD90ABB953F27FDB0991D76A23B8122FE3A2CB26843A4DA6681ECF996E4AD7A1102F4B2 +44AC4F6E431BA1E9F0EDDDE9DB9399AA8484917776F256803BA5983A2575D9371A08F2330CC3 +44B89CBDFFC5004E00097A757C390984FDFDFFDC459EECB46A2A1C8AA6A1618C2B1B49224E76 +0AB2EAF6893219EDB7E107208D95D4D3F49E221994647667DBB63634E327C4DB6585ABB58D3E +B338F272AE572E9217D63CFA8F10C87CAB078B68F124E0537050B7DC1A0D1094B9AC9FC21F5B +B17756D65C05801D59E58AA02C509CCA118CEFD2C91D6735C1DFD01DBF1B36F267C4DB0C3651 +CC9F1B325915E23AA43EA1DA505179DC098A3DCB76DF83BE080B733DC252E0A00BD702BF57F1 +923A978FAC404F82BF4DDAD59B16883CE7C6A0F84E4A4E58A38FF675335E5CA5D59EA3DF82C9 +3BF0CDB775B533BFCE6237659D0B97476D2C14120A35BC6970EA9554FADAD6AA7EA674529B87 +603342FAEA220B9A0FFDC1236FEA243892289258940C2DE850FA7F4A14B6039EB93ABE2D6B60 +E78D92B66E53C40066138E63A10A3F5D8600A3974652D7EB79C12E16D5D83761AAEE32FBA99B +762B564374B60F3074040D30343159EFBCBC67FD1B621181DDDA4EAE32E38003E45B1A21A04E +C69A3C05EC4A7A91E5CBA3FDB856D8127D9ED6C8E23EC8887D79ABD2FC139B5CB04D181E14A7 +43AA5D5CE886607534117A5832DF964084FCE620A465CE886D1A23FF1CB0FB812117EDA34436 +5AB72AC5128FA0FBDC426672391C4B61D3E60AF0815DA6D908BC6201F800C705A18A2343FF3D +485473FCA8DEB44D821066FE148D3CA23956C99D0BA4998A3E126A685B19585D7380354E8091 +EDFC4E684AD032CB0DEFC5CB076A5AD1E9581E68B3826D09A96156E144733907A23FE62AE723 +9871B1D7B790D74D7820F9A096399D9120D5A78E2EAD9D6BACC3DF32888E072021AF81166F6F +EFF32EBAF11A8DECF4CEE3C07E9A30F175AA22C7C615ADA194480EEFF72FFF2E97BB0DCF5DC4 +85428B08F173549A0132B396E7FF53B578AE0939DC0CEF80A537B1D713B4D6BFFC987B34943E +ED13E4B723C85252F9561031F3E2144C7B8C8B5F3794435E1293E4106E8C0114A14AF6B37C7B +28F7EBE6D321C4BAB2DD04D08FF1D2EB4967092D52E8E5F1D04875FC7E00FFF8C3E9C7336CCC +8D709EA09DEEF006E5E809CFD7F377FC4BB8992DA3DF88159F1241F927E4701DAAEE33394645 +B361BE7A137454A2150394309F69F41B8EAA3274D6E4AC2E9A94770BA1463A5B774AAD448F2B +FCA1D220449D1D3D09BDE0F582E4C09E954ED577F7F9ECDC5023DDE9313D7E0AC83C496472BC +35FF3367B62F1FBA6EBBE44892F0CA9F48FB4DF1C2E6D95F030305694C91E5D2A49CECFA8A89 +61877441513E02FE7700CC536BC6FD9622093892353F0A83AE630D5EFFAF0338924E2AC575AF +4E644413C29EAD6C123FEA2ECB5B4B49CFA4042C31F3D6FF535D3F881AA9935E2B5AE265207F +94254C9DAA2E7F8BC6FDB6662722CB19E35E4E10810C43B0A46450E0FF05236C08298E02667A +7E2F4F1777DDEACB198D3E65FE34C78A3C71A542A0223828BD7B57A49337852A7E38BE96C8D6 +8B27947476892A6325597AF1607104A3AF0BD539A433B1CC09D23790DCE90812DF84BDBDD0F4 +56BE6404F2E59EB8882779554667D48C007C2B6E31FD3691E97F76C06C659FB96A417D2088FA +984981311EC3217A9BF784E579CA42B4478F6530B3E9F0FA1D701D4D8F040B4173C8E1E0CE76 +006A644DAA1611446FFAB2B218867985ED06DDF3053684F60B912AB11CE7B3425FF389107859 +0A78768D85E21BBC09E3B315CF56F6F3532F3A6B1CA10034B80CAEF1E62C2D91FA0799ADBEE3 +240BAC2A24F35015700D938DC7036245230BC3DACAB9520AA950D153AA79A0570BAAC57452F2 +C958554992B0A965CCD7BD9C0971B6EE8357E3DD18CF5E6BEF5C74DA84CEE08E597A5DF7A21C +17BED630CB74F2F21EEC8B3C2C6DF46E0FF5D571BEFA8398D3EE38E905222C8E94ACE8612170 +1195D40FCAAA271874A8E6AF62AC4D60558A485505F4301959417D3F996526A494A201C4CAF8 +4BCA877DA39E1338BFE9EE163E28993545B5B989D5E8A0BA1E1439EF7C6AC1747E272716A30C +CCE34112B67CA53ED3D2379C99E4264C37BC4BCB70118298D281B8056D809B82FEA6994952CB +5356BF3E41D19A2645A0139F44C7179B87174F4B5979B9B6E0ED55C00F4CF2299C6FB6C98010 +E01608176D6BFF74674124669EC3D9EC262BE00B9F265C1BEDAEB13895CB58CE214F2D7FE619 +762F2F1713A0829D3EB4E7FE6449A73C7C2EF52856226952B9EA375D9FE3E0FB79741ADACD2C +056BE97B93F09BE46C97E2B15B2A3C067172B90F41A8FF1952787EB93ADFB5D139B6E68ECE12 +291B23AAF9EA86585AC48C85BF29259F01C2E158750E4FB1ED1F611669EBEFEDAFA8F1E8C285 +A1068D065953207897F63C142234B79230FD7DAEC8CF3C178FF691F2D22BC2E17FD20D527954 +B08837F88BAAA2878580E49A7D3D4B3BC91A228EA3B176020A049791F50F96266FAA79AA8551 +A4DB3913346113ECBB742944417DDF2529568492D96F06360D20D644BBBB0F7136A38B813E20 +8DE581E70648686C5C5C6E92FA752D8606B56143E6784E400411E2EAD4933F168C633812B2E8 +208B964791DE0951EB3FF55BF687EC958399B4B34F70A80971D269AB955D8413B68E69821086 +C71F87C1E60D5E78E721AFDE35380B930C41B72F4E8717393A013723C81497836A6D204368E0 +2C8BBE44521C82CA5F8E3120E7ED232779C0544183865CC259A047ECC3EE5E139880FC96F6CF +ECCAC3EDE4858F312BDA343B23E19703A3C624D99361C6900DC9BD1134001F17295B0C2EB754 +4939E8572D50F04C0EB75EB20A88C91CFB5CD971A05876179FE794D4072D929423EA9CD398A8 +D31B3CB32262800CB5EE1266111E0504C14C1FC08E60441E89E4DF7C91CC5FFB4EACF83D065A +F32AB2366B0C0A844D28C803E33F1679EBDA804AFC0EF4BF320E21919959BE7B060E914F49CF +8A2CA28547DFB771DD7F78535FF95934CC749B5C7897EA9CB067F6D861064CAA233C3538F3E4 +D5EAB1E756EFAE9F305B03E70E6AC14E0355AA871DF0001FC80620160DF7D218B64AA8C12802 +CDC0CFD2E16E45FEB91D2A74E12031082E21A6CE76593E3C17A251E9B2EEE18A0E922DCEB758 +DC42DE114893C36AFD4A6E3F1370E3D66B0CF40DF7B05473DA0B2C446385870327C847A5A052 +81BAA0080C36EC65A10056619005B39D3BB17315EBE5187D1D69DBAEF5F89F280FB9F41F53C2 +EE00A400CA8EED8E74337FD737ACD8EFD0D361E4C516B11DBAE751B408CC54D49FEAEAA64523 +6FEA20CD8C326231E9131D003E74F1F8711C883E6AC50798C98758A226CA85949CE153D4F1F5 +002E5EDB1C5AFDB33A3D5E6A4FFE73FDC25AED83C1C83533A5464B5EC8C0DBF39C3785BCF147 +A4BC11648AAE5F2ABD1942B0412F5ED98A4B3A5BE1B679F66E0D0C43806A89A349F259DE095B +8538C45A1A14B320ED0C662129C881C6C70487D7EE3EADBDE833C415B992F25AB94E1F6FBB8A +FDE188FBDAE860368558C1049BCE0E400368BD094C1EA808230998645B88163F77C1DDFB63B2 +092FD1B772C7AC73B095AB8749E65C3DD040AE17206CA88B7507AB3321231CCF8B2144EA51EF +CBDA013A011E1D18ECD5780A80C262BE5D6920178D2C129F87632A39289B032FA01FD6699ED2 +E79EB18B0990B86F00C440B4A6CCCD109288A177E366D21CB16A569DEA5D20A732B10576182F +0EB68BF666B1004DC444960E579AA3FB762E529B6FE6D98E582B90EC73140BC67696DC49ED47 +64615760C58E9329C02FCA556E23B11CAB4F516E609F6044FBE97289D4269AE5F78399432A57 +5198596B1E19B201078C93D27BD18C8929F145415FE188C35DF3FD3A59A34AFA3C22CDC2757F +29AEA7B1D0D983F4D029E4071896437C8AD90459DAF4FD1FD173925A007A845844C6666CCD14 +A9B4DAB72975E36B8C0CE9A63FA38AC0D0697F46180A06EFE2618B27FAE17F16A148792346AD +9C2C55E9836845B2A33E0F03CAEF4850C440BA483230CB078A72DA8482FC959B4EDB01FE8488 +B7C5D7502F922ABF8A2195F17C2D3E974D2E5AD09E1E61FE5B723D5A4BD6336A259EA088E3E4 +4FCA4DA49E017ACBA3C0D58F16A3A00E21D44F1F26693449D5D382A12C70C7959965479CCB12 +5565DA2442641EA18B8DDD83D43F8177FD32298C0B3DA44D436C5AD9B85E47DF64BCA6898C1A +0EE73195F323D8B4B2442F15C7A73DA62009A31A45339DE6C491A04B5E4C383EF66A3749F6FE +7F53059F0A08C8DE4981D6A686B3503D0563A710D91B3D4587C3D12062ABC1210CADABC6F0BD +9C6F46C87C5B4F0445E7253145EE26BA9D839BF45E9DBF635644F412DD4B1738030CDCCC82CD +370587F4CBA6796A2727D3D4871BF0D8CCD867F2A0F32A3109F049AC032601BB5CCA0E6BA807 +50F88F1BBF77557CCAFE6FA24B5B5D8FC4941C4113C4042FAC0D2FDD50B304BF290C26ACCF79 +3E990B1A10520413679408F42399684D4ADA9CBD5C6660768DB2CE468DDF698D5BA1A73D3BBA +49E96320D04B006B5F6B0387DB59F2E20250E5DFEA9160BCBF855801BF6998D481612D82F7D8 +D6AF0B2034C9AFD9BF26E8202D9E8DB1633167D0F073A013EEBF466A4FAA74B6A5055A74932E +64AA1B75A8708C9C6825141E85714C48FAE391D02A0CC9E537A7E11D1E1E3CD08DC693355957 +7DF07821F6D6AA36154BD16E3D158DE669351A48CA71603C4CA0F364286D4A4EB1CB90CF20A9 +DD2BCD0BE17C8C04098D9720F7F7ACB02EE63EA496E690AF57B02643AE9301F23D42AB02D414 +5AFEA48D26118066FF99EF12C0EEFB4BABDCCDA95EB52AD64583C7EA5E54417C2805179F18F5 +7A0CDC2C3CB502D4A01E5149C072C732BDCE5CCFE8EC465BD66691E1841956D79BD027535412 +031A9603B1C24D3D16B0A3AA3F5E00FC84A30E28C617138828CFC30BC40AA24B94159AC5336E +F47064572B18678738240635FD1DF47722DEA61933008B1022F9A258F47FA2AE762646EBD5C8 +6B0C7F1983E306E0F42508DFD5B463E91147B198E31D30BC4A84D45C0631886D42204C196C98 +01CD982ABC5387E9288CF00F0E5810C712DB51962982E3A91CAB88110C57FEF58D16621B3D6B +34C7E3FD7FDE1177869BE84FABB95D8F054A96375CB59C4711E5830D5FD13A7F4C14E4F2912A +2A4E8E3072776ABE39D3DEF4A62BB11A3A6006242437BF307DE502BF95EB193CE32BA6BB13A1 +F219CA0F7EE76257B74C4DA5F0D7985BBA1A8750808D741C6080C024E78FC0F3BCD2E0DC8396 +D434EC98BCC467F739AAC2E9BB78129CA55B53E08B20E35FC13B9AE4762BC784D49FDE8725AA +EF34FEB464E3833F232F5D7B02BEB2D95B17949FB3624836CB344E64890D3BDCF5F459B1A1D9 +7E41798A7F5EFD69F9C5ABEADA042F4F42D3C5ED8D50123F7B92CCA9D2C5806A4486032E827A +12F6F8D21A54CBBFF57088495FD86A7956D6C56C3D5B546F69ABAC67F386357E1C524679E62B +AA462AE42B19754F8548C8F7BF74FA0192F53D408DC9C41AEDE772E28BC2D1FC39F5208257CC +05DABEC5F019D5EB9B22AA825D57D1BA2480EF6F1DE82C18106C6047A4E2342A460EE99856DD +DC84D76A3D081B2C31A7820CDF58BA8C1CA26FC6D607FA9EB0EE5D328362971EB10AED06B8FA +23F49C996A1FF7D2A2224B4BB0F7E1E7297C4B330EFADC80A590C3F0C090F532678738380920 +7DF928C685C48AF18AD3A9CE962F6F0A0723C6A84D318CBBABC8F763B47CB66E1B349E7864A7 +A0BE27796467C403F9568070BF1D1A57EC7E97F22FF181FCA31C8FBBDFE1E4EA643FB5066D17 +4381BE4131107072B59A83AF99BEF336B8F72B8658738A84F71C4D7EAD13D28B4E49FF90A96D +43B21A68979132CEADB2459B1107781A64073404D0F81A65EAC799E8E723E3C49CCA370F2A74 +572C4B755E1C4F92CB37143954BA6C748FCFD2BC5F780C745B1F0F965E63CF53400B78F84BE1 +0ACD20809DDD376D1A9B3C515D8F1781793CE9F8A4E769BB5AE25B36914932B1B0922212E4C2 +41DFE0E7C24233AF5BFDC3ECA9C81FFE34931643515273378D2190DE75A4AE5C1B8CBC4A5C76 +30008840DDA0E02E050CDFDB2BC5ED535A8E7698B4AB489313F7926AC1DEF01ED849ACEF2859 +870C7EE12DB2B0508F4E58268306E709842EAB264EDAF84C93C15FBE45CC0350571C6368DE76 +EDC307261C153B88D7605EA8F64EE7B1CAAFB5E6AA8606291D3198C1D3EC1725D7A8E97656AB +5113198CF6FC2B2515BCAD112592FB7A4BE9A281326F045A70BF02188837BD474DA9BC46D195 +19267990A6DB0673901158567CE1D87C4FE76823076DE5B2A5C0225B7DB7BA7ED41F0AAEB535 +5D6F0AB463CA0C2E8FD24ADC4DB9C32C5A0E3698FED1AF65AFB0183CC582897ECC050D288C9E +15EC7DA6C3EB200CDC2537DA19918D251D52F76E45075B02513A2DDA4548CD65AB129811EB12 +C2E0861123CAE229993E9E43346907A4C60DD7E4B73F8B0A5EDDB30CB3D9D5D63C153CA32451 +9843F9E9F22953C0916DB5E8D81DE8BC056030740772DF56F0E314D223C3B2836D34D61F77A1 +05C32B57F7F1791B119B1D98D5710D4C44977C7877DA90D37D82DD9669F81E913B8AEF9AE22E +FADC30D27FB913B94F8540022EC0554D6DA7D0C510398E1185C2441AD678ACC49485A48E6923 +1139CE1D2626A2824FC04FCD35B8E52D9D3D9305C680B9BA341646FB2FCBCCA2B7787FA5DDC5 +CC8713D431621DEACC951ED554572AB8020D7CD4A9C946BDCD2F58FE9AB0305C670E92C7E80A +079388C3FB1E85261BF22208A17E3E396D99324D215E85E282A47AEC771841BD13178FB8946B +D6CE634A00D8BE0567C8735556194EBCD2D6B6AC3D5416597840A9FE2E231C8D92E044194C6A +B8B4CA0301788FD2EE4747F48811341463DCD86F4B52F0AB5543FE931CED6D336D6DE4A2E1F9 +1878ED8D2C238296752A29201B9CB8C063454D959C8D5AEC04AD76570E9CF59650E2B44B7E48 +2B06C150C379EE272B7AF205F30CA1C2B6E30CB0D2E438DA4363A312BB1318C90EDEE938DB9F +0359B90FD6284681FD3CE99BC434616EDB354A62CE2BD42D784B742911003F05BA8BE03D1F52 +FA8F0AC9F5879BC63B7829CCC64BE921E5CF2F6240FD6AD7A69D94B6340B818EE64A68FF894D +0AF596DA0DEBE47F306F764548A450A418A1C88875B8964FA725B65C77CCB6BC5939FE0E7625 +74166CEF1839CDF76866B449AE2CFBD393E210EDD05D0526E454348059BF88B5AEED05841A10 +C894A0C49026E064E385BAF440D7B975AEA6BF1267D360308829BD81DE6DB3D5BD47B66742D5 +565607787CDB514F2C4B69FA22F053B22527B91FE4A3EBEDDA1352DBC0B4144DB5DC15AEB3C7 +8CCF0CE264C76682FC1B7D3AA2566C8DD47787092AD80185D867DB7891E0CE12A52C954EFD3B +0CE23DC59C9B073685D14FC24A666DF88FCF20D0A93B4B28F8724F46D5368F2C195DC0EAB00A +03ED7A0531408D90884792E82A8B0FFC7CC6D1C2E1AB00E466744407FB81F6B9B20B0EAF2B50 +A35EF6F78A9E9EC9D322515DDC6BF058B58CC6C036222F7434A1F27811CC551D36ED5169CF6F +0AA6D58563C8792D5B74F08BFF06189566F1D0C9E497CD116393EEEA1B853B5852F9221967EC +1DCFE14394C5A5C026093982FB19F166DC9F52053F1BC7F449E0285C1B9684D8853F587D408F +1C97BD1D082ABF41AB80F47D189DA6CAAD9F0A416CF040553DCE2A9C853A71151EC50CCC71A7 +F6E0A0A9EFF458CCDCFB0D760AC0CB9B0BCE3D0979E898E42D43A78E17FAE3C33BAC5B4056FA +D86567DBCEF75EEC322572144FC26D7F81DC9EA718D91B0892E5621BBAE940619EE3693E87FB +A6BDBCD601FCAD972556DF2E1B0587A7BC8CBEDE01B02E19268F2D31C34712E4F4F29636E3A5 +06013A7FDA0EB8C78FE7C2A561CD4F09D162C17BB69A13AA242B8E5B189010058A3005C16BE5 +DE8975DC24D778EB03C2A59948C9BF3BB333AE0650E5DF0613C77A15F510ACB08C5C74519B79 +C527B36BCE33BF023C9CAA159995F2992CC9731B6AB100604195DC5A79AC4A02D803A18683D3 +9D25EBA9E584B3F3F64DF241E43B038C0D3111347CF2B421FB78FFCC03D3ED2A0C94D228AF07 +C5FECCBC460541802660C19C05A52CD6C1CFF8CC805D43AF3D23FC9EC8408E73A49C1DFF48B8 +6CD9B3104CA1515E98E41AB6496F4CF4218996692106BF443C933DB8A8CC275F5F1602881B68 +B787738070A1B547D6EA0520CF599B4E674FE930596C8DDC4D1454B1DF79F092608FFAD0AC38 +25A8A3EDB0C97C265B35EAA4A6D80C538BA24D209884A0BAB03847600E2623508DA7D8DA777A +168150698A63F5EA4ECD54309B4989ED2C7DFF8A3940384E5FE0295840C33A078C2860B65BE8 +AA2B278185AA977110EB7B9A95BB0B52F1E124975D620E897FEBE57540103C873FDA64B37AA8 +F82C56B1AA233ADC9B8864B820A76092E2B17EBDA1876D27B49FB5A1619881935FA499EF75EA +AB18E4496BF7493420750B13D06BFBE1326406C72112F6A497459952C412535CA38D41900180 +F41A47FF6859B2B8CC20C4243511BF0386261D45BDED1F8C15E01CEBB891A07128473972DE3C +0EAF60856001E6C966FC1822C5613A8D2D3704AF91C363898BE178366FB56673B9600E2F7F2A +7CAA391181D36880A86B5ED389C7FD49D231E3E82999932075696C52BA761EA299359837E712 +BDB5761E8D5FC3E8C5051E8BC673BC050CC0172B9676943426C646EC18C222514D9F21BB37D4 +2CF66168B74E6A4EE3CDDFA12A183697A121938BA5D51AD4C57A4BD603092DC42F6E8E15E986 +D1A0153977BC89AAC6AA7C5576B3905131D1889C33E313BC29D642F84D5B5DB5D301813407D8 +ECE2DE61207F07EE2F018E7CBF6C5C3B504C37400436B711756EA09327237F743D8111C9D78C +A1186BF54B5487BED5F445857EF956C663F032EB59DFF3C4315F960E0F787F6553E11B34BAF3 +B0FB6215866C80F47F52F9B67E878024F4C3ADC4C9018428BD04C6824BB1457CD59BB16FEFE2 +AE1388FABE7B9C1C8ADA3491E64B6FABA0EB8EA80ACDA137CDEB8BCB39B5D1D038E7E664051B +76E86E4EC718D8B8EED85E5AB8CF85B6872D4E94A76D78C4358E5744023B705FE01D0B1848C9 +2235AD874B45C4646E5C393157CBBBB6F08BCE4C6EA80A9A1276D9BD58E30015E20120CE473C +AE89AD929A9AD4E6AA02F3090377853FF1190152E4D285B66B4CD78F29B18F856F460748A2F6 +D2B1454D4BB1EE72C4D90FBE896AC81690D77BDC2A0FB9655683131B97C44AD1BAF39A3D8E30 +16D847411668B1A56B8F34B40F48DE144330F7711EF447457D7FDC409D56E100D55A28CF188B +D2DD182D29D5CE0050D6CD9EF549C9FEB628E20859C7E7C8D1D0A62D90E1AC0442B0B1AE7093 +DA6797BB069D6FA94270F60D63E0CC361E9D95168DBD7F8314D5A6EB083AB1B6B4972A2E32B6 +512AA3F8F4FBF5EBBC8EE7ECD5667F0DE7307C3642955FC083119BCC959BA8FF46D7608679F6 +CCA0616825AD959761F6E1B8B77C134C33D20B98DDCC20E5A98E49CCB4EB395E6F299A411814 +606AE676871914BEA847228F323852181EC68C2BE40A19F07B0617DB7E29DFBEF4DE984CC937 +5581ACB67CB727A2FD95AD7954C77282EF61E432353555BA81F4B9E55E4E2A6E1DA1D3265856 +769DE6AB519DCF2BB108D5D7A88C6ACA9B613134EA47198BCC2746A35E35281395A8D7E45036 +51EF887F28C9FA6981BDE859B5AD042E6FCD25CAF05622B269B9DDC55832267E3276D8A605AB +8D0E690534CB1F5DDC8B22F05C2CD60D1020333CCE9F03E778E0C7F47A94DB9D692E80D19407 +E4F287A1FE21C5A507497C2589080836B31E9D0C92E29FFFC0CB3B936B9EC41F3789F900D591 +A8A7057284A64F16F5E280AF642A5257728F9667E9D977C7A9D2A4B5F0AA3DA9B8BF44D1F8CC +5FAA51234EA419D31144B7DAA62D51899A57B5F625657809065D9985664404356F107CDC6E6A +C2AAADAD1EAA1491B5196059D0826C85FC2F0CD9320ABF52960AEF7509CDBBAF288D348B84D6 +27AD28E4697D8888D5A8DDD5C3B6AE1DE6F24AF231265767089985766ACA72F5BDB495CFA767 +3A183BF5EE172AB5E6CB623074E036A315DB038F7F4FD1021C6DD6BA078AD3A374B898F90914 +E1E082C38EF669C2BEDA91F4262B350721D6AA0F6AD384ACC92A588FCB79941461FE8C336D85 +5E77CE41575CF1E7E233EB10F86A9B1666D5D2379222C5873AB2112A78F7FA5D5788017C94F5 +44152E703815C091213CB2DFB73B6D3107E708398B0B7E99E393DA14A2C5D7FBDC76B6DBB6F9 +355D1EBC6E8C27C58E0A5A0EBEDCE34B80F0276833B836C142FC8BF803331A9B442F346A3E60 +0A2BF964C6CC7ACEA399B2817DD63A886B62C7134D6725CB8D657B1F7628B013BF2BBEB523B4 +D8CD01A6D4DCACC87AD88D0FBF8565031728D473C1F56B920334F9BE3297D5D9D13BABEF159D +95D044A594B0F9A5808319C56CE0D271F3655DCBEA72AAFB6275BB036864E9F5EB129ACDE00D +BFCE57356F9C7348E6461043901A12664A19176214E442546CA0E2AD92B4A76F1D4FA8EE2E78 +2806429EFD99F730D0A0FC0B3D94146E3B8100A202D20B43EF01D2A7352B6C0D72F57FA0F9F2 +C80A84933C3233FB134E545F08F5203AD4E9A86AB08B80A78AC2E622507B6B2B7B3ED0432D6A +515757B02D6E1F3C1508F00AADC3D2EE15B5CDDAE5A3E1E45D7DC3935CF05596147BFF56A180 +7F8F6A9C4A1A4780B9EBE18711BD28FE3AFCC7107368AE8F59ECC160AB493D58CA2A2BA7F17E +8665BC548E998BF7666AC6F41D9308A60169FFCB69D4A35BEC6F95DD8322F5772B97A1450947 +44BCFBDFF1AA8C9900DB342E575ABC306CB00CF58AD5FC1640948A9659C9806DDD807331015C +F9F35B8F662969B4043C3B2803C8FBF663DC427CC5EC8A3B5D19DC6248576274745B1315179A +BB1A22BD3CD63BAA4C721F3D9E0B0851C71CD890A00B758FDCE1BA07BA757AF53A8AFC5DE21D +0BB65F1FCAA506CE41AD64933FC3DC0105BA561469A752B393354EBE44B6285B262626F0CFD3 +89EF8BF3FBC27DDFCFE529F9A158D3DE78A900A9C075B1FBA4A9463279A06E45A9B54D9217C3 +6EFF1260E6E4BA1B7FD4CE0B06E60254D5B9112D17408245988E9814B4DA07C828BBE90F846D +6926AE4133BBB22FA7A709B24A760182A3F135186AD6EEA89FC4E8E4CDD22328818C33F7B51D +3872BC59958E2D8E9FB8812597031B800416981EA2BC3D906EDACAC2C3F7DB135DEA0C089E1D +F29D3058649EF749F0615371EC5C33B236EDBCBFDC2703FBABF8AB149307CA265EA2F31020C7 +AB90FDE03717D7F9141806EB0F51D8044608ABB461363EDA2C51E2A03E4438164A1ED38BDA6A +0963D5C58B5B8160E70EF06F5BBDFA56362902D8825B7D9909267F00CBCA118D06FCFA297F96 +BD2A217741A12C15A38E2C22A6C4075DD242807EC7C8833F0FE3D2CC1D192DD6DEF423BD89D9 +4D220BE67EBDC5E051E015E89BB4975B559EC47AB22734BBA890504D2A182C565258DCD6D9AF +F99726742D7D4DCD54C8451288744684D3DEB5C16CAE4A3D5E712E64EF5462B09C2FAF1EE71E +9A9E7D59A36FFBB2F3810CB5F57AF19B803DC7DD74C232A8C16E6CC952298CB0EC833519D900 +50A2EF37221DD3C2EF17BA91D449F5585CD67A61BA5E50924B7284EB313FA38E722E40FF8C22 +B85614D35EACFE3802E09FDEAE6BD67A8C9F258944C0274E7132188CAB333DA084FC83B01FEA +6960C8523EEEACA46F8A81D5CD76018F26B29959D4586DF9F1D37B10D33C54D8993B64943300 +D58C20810D420A2FB777F989E9AF40F73F1A2FE89269BA0F8CF7028363548E20A0F09163AAC3 +110EC78996C2988BC20912BD04FE1BB3CD8516E4D1BBCDD2C258B03980C399914D9AB61E67FA +273CAA1003D22A00B732DFFB659F634E236667085830535B9FA3A6FB09DA331E8EC879E5365A +180911204568524F45E0D6777D38BED818968E664FCB5D9298BB69009EDF7D417AFF14DDBEE0 +07F23201A728B3E350825F7D30D82601908B47973995152E920E0FC4EB9C6C7F23FCC243D849 +3BBA1CC6C48C34F2BBA180D46AAC7CA557D8A470503891A08332F22CE1878AA462D32D0D5F86 +9FA4CEC032E385A311475FE853BDFA237D80A3765EDEEA4955C8AB844DBB144684EB1938B7B9 +37B6BBDB35C6A240399596AB1DA8B1F8B76E1A65A59AA53E7FE5D99EB4F53EB86B828007AE49 +1CBAAE32239ED78EC190CD7CDC81A0EC4B09E9C04DF92733DECF8984A0860D04EFFA220CD882 +D27B6E3999690179C4B102458F78F61AB29A339A79D8063F547A588C8FEE8D391A660EC06631 +FFF44042C125E6F2F2047022D78CDD3C2722B1CF366971B03CC722698D3342A6F92D39423D7B +73C60ACB78B3846B419EEF24EF6F14F6DE77DB07460D74C31B6673682884BF269FCBE690016B +C966E9A7A16DA643565E7ED417B0DFAFC844282EE2FC8EED142923B4AB007D7FB72A8CDEA682 +CF96051AA111B16579E0C9444486525F9CF12359A6BAE88E2CE869A75EBFAA6C35F5DFECC810 +B8508B7C4709EE0E8CDE730E984C199A673BA85F51ACBA7508920D5FAE52FCE5089C5439BCEE +F79EB48D8D6701333ACD8FDD10E156FB7C2FFBE0A104F7128F868B16149C7A280C2F53CBE2BF +22E3C342F11F49D2BBE5F7512BEF84FD218E97B1C0B7859F412155279BC80F1F6F1A54581496 +B77C2C713FBD5B20785C57A0F4641FC0DF448D5E79F7125EBB17918C60385B79EF4345CDD44A +4AF266AC009BE62A9A6CD0752E266A9454FC1AC6F004704BC53D6414161F40CCB4F4CC2F2DA5 +0D860E9EE2274026B0E84E110BE5D7198DB7A3330F02B913E11CA291B73CD0F9BA34B8272143 +C96D13138F99C05A24D0F6A75C71D94A10ADBB1A47813307A5EDF32102AD9D25B89A64AB3A1E +6C4B87EC7416573B5AB977D672D9F6DDB48F710D4A4C9CEC91997C655276F25A00A570728709 +2A79B33C5B79A43E44E5B175F576791ABCE72E9FCFDFD126649F8E59EC3248B15F262A00DB6E +A3327FEA2F1F9F12DD23EBD73953F8593D303518F8E37E427C122E43A87803EB749C7C9899D3 +99E98C44EB1BAB1C0D0A334EC3F5659014F2693119CA3D0FF7E78D1F263E8737175EF80596F8 +7ABA98EBBA1BA57615D71C738DF9C2059916CAB7F2916ADE2CEF7F5962D1A2973E83DC17B803 +3666CB270942CAA780D57A8ED1255C13F2EBC68F41A850A20F69FA7598E3D978C700DAAEC71B +45542712F6BCE8E043E94680BAE51345C254978AA287707499C7784EEF7212C2B6455F2C30EC +1B0637D6AF1EB17E185D2B0C756CDF6C3FDF6EB8F734012971B13A0CD95F38DFC84C965AF61E +C31CB1830445F84A252423547ECFDA493A2A9C0F75FF5B7844764864A2FA724AE3DDB141A946 +14D8B83C64F08DD9327357D58C3FB4B5AD4671866DAEAA3664514A1322D62AB645D4192112B3 +738ED3A84281447597A84E0E0D377F881E5E02445EA5652713B4326A29B99F3FD64756F4C25B +CE52A6015538BB7FC519725BE94885A5FB18359EF03D764A04F1B67ABC3567DA01FDAF7C7ECE +65A10B249BA50EA113D5B32C9B0044B01D74CCFB2638BA533E9BB53E257949FE1F29D7112A14 +0E0B766A2F3968F35CD0A6F497B2A4585E1A49D6EF91464B8A01412F4DC4D1703CCF5A9B03E1 +0B528FEE23FBAE3D419D11956B65D8E9D73298817C207981940C029C67246BD743AB4FC15EA9 +6BD451E6C1E599C554AB55BA921EA5FF370EEF85C70B5E877873B376B2734B8E5A855BF00D19 +F9B37D882840394CEB15AD2C7D8EE6F50E1DF3682BF863B7CDA4B491464E46E73BEC1BD2410C +CFCED868896E83E230D69ED8E27673E5CF7628597BE47D05139DB3CEC1083AC21347C57D27CB +8B4085CCD54D50E4E7B6F0CB07A26DBCDB7522B5197ADC31E908079961D9B2D5D3CC0EE8055A +D31DF8546E4E417F1488B6477833A5A86AB95F495665B34AE46CF8CC4C33367F462F426662D4 +99BE68D634F025D8F712FBA6A4145E8FB090FF5B61CD70E5550209C92530AFE1BAB70B715893 +BC3532B9EDD957279FD92142798BA005E3D6C0BC95EB6E451B078FC6B1ABAE3FE77855BD7354 +F02EAAC338DBA19689823399BBFF119850CB442E5B7323B356341A4AD204E8E05489CDD464E7 +FEF19C5BBF5B495D91F70525675E5591FDB276576D6DF322A1085391F89941AE1216724D6C42 +704B2C920AAB2FD78BFB5481098939A0B2C7D1D5CB8AA7AA31507A117E2E9AAE05CE84BAF157 +91DF6D594D62C3857DBE27335AA79C909E4C2C571E0C3E1E6DF11B4996B8BC9EAF76575BEBEE +A7C51B2EB327CA1BC7684FFD06919FACD345D01BC3E1FDBF8DB5CDFECF107F7F5D5BE5E7A108 +E189A0AC6DDA11749FF6EB3773DF65287E68C6F1FA8FFDBA58B9488186234E9D2B0F8A2EA96E +3C521AC756405853000FCDFCEEA528AEDD5E15FC8598F416456F52EF917DA951A0EBE9E6E863 +F6CB778E0A5BE95D26A5D47C1EF7F07C10F2376D1869E05BE6DB2553126ACBCF4870385A1B1E +2FC1625B311752431EDBEAC958BEEFC8576C0FF32A26EA29D228E4E8D3D2B926150D736F13C9 +1FABA41A9C3818775A536C2FE073D5830617559F2EAF8EAAEB3929AD970089443F934E1C937F +FAF9CC5EF69DA9E747BAF74D1279C82D37CEE291ACA600DEA23514A55A54E5ACF8805D52DC78 +C7E4D0DDC1A3D02772D731BEE16F452D9398043275A551A097670645A2A4CF093EC252192FD5 +59A780F79EF21472A10ECAD1542577C352B54256E11B93F267D11515056267DCCDA2C5AC2134 +C32798F5706223409005EEC21998752034A3CBC845885933BFDEE7D1CB32FA84797FED209590 +2E36BB359E0E79E78E9162E8F8DFBC9796423BB4B98F9A9FBBCEA1DD5DB31D431706D80C5C29 +64532ED8AF6510441BE3757F5D9B53B8D9FF2DC6CB4E1F8D1B47F553C8D6D1962E9DF2A97FBA +979FBFB52F4D4CBA08A5A268CDC5A9A6CC40738577EC1836BD04B3ACF76E899655CA496A1B9F +5C9472A90F59DDED0D4C368306F5E3824CF013A7391EFC56986E179C79343B763DA88DE7F1B5 +1E2756031154F752F7BC2A858EAA35C549CC24C932DDF0459F4CA70925ACF39065440C6B2FE4 +8018D07A0F5F1975CC52CE85F8C7511AE1043B4CB421F5095AA0E1E588412DFA0D86CA55BFFD +F223EFC18D56DC7197AA1E8E08D4BACD388719AFDA2915579868B6B756A929B928EFDA008691 +458FCA9FC5086D0FDFA6EDF122606C9ECA9C6D0163DE9F05F97E904BC6B1E0F538BDD9E1E5A3 +63969EB55B4CAF47B2A55F27E9DEB5007942D2CB6A61AF76F7E3128B918D8C561C9A0510D5DC +8A8676DEEA7B0E5605F72BBBA35A6A24D6EA143CC8900D9A6F7755501969F25C3CC0F7928AA6 +0E70FBB364CFD14531BD0B6B327A3AEAE1FB48C708CEFB4E369195ACB18A9F21177F868965E2 +CA10074FEFFB10269E43C95B3BC7EEDE5DFA60998E7FEC6C568433F06EB48AE53D26C262E7C5 +B349C64B493FFE2EE11D3D8CA4FF6B9CE4D37F4AD6765D37B3559106E3E80F2946E207523349 +5048F3425505466F32FD35255978EA5467FC8FE4F6C147084E7A46C493876F647BD882CEE359 +0D5B3EADEB5A72689DD0DB1C3A8B89771CFDF77D9637CB915DF7E0F8B1356477B35EEE547362 +E97B58190EF9B3D4F442FAE6E7305DE0356CF604516912F4787EC315071578AC3DA58AD383D0 +4840891CB3FA113EC89A2FA43E7CE250176A5DBCB516147CD09F5C11B2FA2C2B2D00D69FBF26 +6D9B2E258ABA75883D48D100E04650F17DEFF97BF4C406DFEAE8A6202F56C18310BBA393553F +9BBFB054F5939FCDB910ACC0FB10ED21D7CF7A7430CCF97BE7FC77714DC4A287544DF41DB14D +B5FBF780CF8754FA7422C3F57E62CCEEAD9AA3470000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.1: CMTT10 1.00B +%%CreationDate: 1992 Apr 26 10:42:42 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /arrowup put +dup 175 /arrowdown put +dup 176 /quotesingle put +dup 177 /exclamdown put +dup 178 /questiondown put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /visiblespace put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /arrowup put +dup 12 /arrowdown put +dup 13 /quotesingle put +dup 14 /exclamdown put +dup 15 /questiondown put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /visiblespace put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /dieresis put +dup 128 /visiblespace put +dup 160 /space put +readonly def +/FontBBox{-4 -235 731 800}readonly def +/UniqueID 5000832 def +currentdict end +currentfile eexec + +8053514D28EC28DA1630165FAB262882D3FCA78881823C5537FE6C3DDA8EE5B897E17CB027F5 +C73FDBB56B0A7C25FC3512B55FE8F3ACFBFFCC7F4A382D8299CC8FD37D3CEA49DABDCA92847A +F0560B404EF71134B0F3D99934FC9D0B4E602011B9CFB856C23F958F3C5A2FBE0EF8587D1F57 +74879C324E51FCB22888B74F241550D7401EB990D4F3A7AF635198422283CAC1B6CD446DDBCB +D915DB9BFF88844E784C6BF7389803D9450B0C21756A017306462C563D51ECEFAACD079732F1 +2C29315E4B9623A5752C6F1D8145869E120D910B2644887CEA7E30B15676A92537C29D3AA80D +C30082ABA94B40990B82FB1A877E805E0C8C48F61E9F2EDAC05B944EE4D8084EC1D5CC517AAE +EC5B3EA379DD011EEB454CECAB3AD2443C887C58278972355673E503AFFE0394FC7DB31DE364 +E4F56C24033C7DF2265C56445EC63A1D5695A6041EA1B94407E1CDB7C5635603A4FD047E6EDC +AEB2D0DA6C9E0E9396D51A4A58E8FDC1578730F992435560A6E2D3E3687703EE2F78F5896389 +AC8470BC806169EB01762E89B6DC9ADF857EAD656620E2589AAE722C37A2ED7A2941C360B067 +EE34D8D5CA3BF68DB725614D936BCB207781F4D4EC2AC67B13A5AD161F3F059ADD7B5E3D9048 +31E31C20C04546FAE83CA93A35989E65C201756888F727B97E5313C9870EC96E4CEC3901EA03 +A5C744754485E7D169BBC98BF872D0796E189D43B712950C3786257D8BE06AB6080B9D939231 +3298327549A8A41C00A2CEA3690B4A333E45AA815A64FACAE1C2B44640860B8B8687AFBEFDBD +5B4A541A72514EE7D3E0752AF3E96A88C95D31FA16D34BA2F02FDB0088B165844F02611C734A +DBCC2037BF741FDEA7E8BCDC130C70C33772F777D8BCDDF4611DB99001CCFF14D7AF2BB05DEF +C3480BDAB312A0EFF2F375AFB4E0DF2F803C594B7C93F71CA4AF861AE1711932FEF19BFE2F9B +7ADB69D68E5A70EA4D1A3D5BD85231B16993F65EFB37A0A823F0542F8C2340A073DC1BE4A834 +7F9D3068A6435CD8278B0DB1809E8AF9664C2C989B9F16873C009449B6284B85DA4DEE11C96A +05BA83292F0EDBD92CF674AAD6AC1A5FF966FFC37E88A66048DEED053565B55EF6BDB8C2F2F6 +7832F8939A32442EA54F13D003494D6350A2864B427A9126A9C26A031909FE53FA8463B80C3F +FD536C9A5DD29CEB03148DBC24C0033AEE72DDD159F2E8A6FC113F428070EB36CE5A38A72ED5 +BD94D81AB4DAF08EBD42C8E5BC695622E02AECD4004E6D4CFE72534CA56291FF5F2F83361BCD +B9489A993F663289B6DD492499DD5713227210F89370928ADA0085E2AF277F53E4CEC34D6C4B +8CD5F2E016052A04C20AAECE8B81AF9E9F33643C0FA69A5BA864D2A173221071A965F9970D72 +93DCDE8C3FF60A86A4D3706850CBC45440DCD22F307261E2F6FAA3EE156A58069DF979C9B5EA +A326C5A36B6E0FC0333D7B4046D636461CA2EF70648C37A953F96FAED6266EC9022753EBC390 +BE93C0CCB7C318C4314D9F6E54274C8046A8C5CC7EEBE625BF59A03F5405733ED120841560CB +93210EA1EAAF3402ADCF1FAB986521BDB7CBA72A2353942FBEA4A0D1B67ECDE589A65AF8E7A5 +FA4B87672AD55F57D783C66DE1D11E0A16BCF32530692380C730D12834777AC6750F85131D77 +B0F53B626635CAD3BB8E9F0454FA085CBCCB0339034F5FB2E225E62CE12E8C792F5B7E234688 +D2AA8F627A4670339E646399F91E94424263E5C12F9F3D411FA44449611EA9785A20FBA733FF +2A7892D1641F836CD42C58CCB81E41D6E2A5AE30FA18DE9846AD981923604C799B16A99779FC +CBA11044740BBCC78116E857B4B390DE0E66921376101D621E1FA003F01AE344FEA0215F2577 +E9C92C6AD07F2F4674A00FE42AC51FE5A9186C3C1956B535FF1DD64BA514534DDD73C0C61C54 +FBD6FAC3B4FD9010FC55DF2A37A111BD1402D4E90FD8B3601DD3E9FE25634D709C289E524A66 +DFC33CDA640D397269BD9ECB9D0EE84A7D7B93A97DC522A16B6965B7D5D7790A3002341ECB3E +80985371A5169B38133B13FC5C1DEBE2D90C43BA5D2CEC7D3B972D32AA1A932B750D6CC83439 +73FBB9972D84670AC5CAC5D0B5E75CE021F99493CE29AE90BCA0CB75058BB0A47DFAE6C8D075 +043BFD738991C2A0B80BE18386D7A6FAF89FEBC4AD142A1B0EEA8884EBFA87817E22C222170C +B6D04BC6DDB541284E16400028EEA275244B69B033D200AD997BE7D1DEBE13CF783BE1137278 +24006CE4B5E3F34D09FAB236749D3E72C033997A652982829376DF91ABF533F0100BF224C279 +D3515176DFD56C325B3D7A3EFE0BEFF84233B5A7EE262557F84D754F03817C900945DBD5DC59 +B46BE8847D1FBEDD70799DC42D0148841DE2F816F894ADD5EB2C0E1BF19F52558AF84DE5B693 +86020DF814DE7647FD41127459D65798B06EC5D132AC0F181BE211624E97F8096C0A22E6B216 +0878909D00A918E90B435C8C87D1033E40B56B4F15752D5A8AC019837604DB9E1AF709A2EA36 +4F174DC2EB1957F0E5F477CE06A0EB78026BD1B23D76102C6862156C47040EC259FF4E89F83A +42D8DFE53F96127C8AB4037EFEF724ED011928C2CEECB4A8A4B5A480595A2AAF93228EE37205 +2428BCCCB4685246BF3E9FFDB2845CA05DFD4902E74483626C2FEBB4E76C78B2AD6A96372D0E +AE47FDF4B8D1F068FF0D1EED01C6860C86275A2EE3C2A97AA6033AAAC489E1A540432BF92A75 +7205428AEE30CCD48DC234C521003D7EF7B88BDA8E72A12AD36C2BEAB1177CA82BB2458997A4 +B5094A9DABAAE0A83D7ACF4F7727223303D5D8ACB9B265B3326CFB1AAC4BDB80B28E828DA936 +BCA574722A73B05D447C9F7E506D78B33F582B3BBEA37BF8380CDD32B15E74ACFEA5BD635C2D +FC3A6090E7D96DB7E9127A3660024258A3A7DA06D08C4691B19F88D0BC719B1414E953B26F09 +6A0379BD71ADCE16DA6EB552A50EC318456CFDE8FBED1DD92200A9EBE83849AE3FDE58B5400E +0C173E01F5E23E883119421C7BF5F12ACAE87B3C3DF0D824A67A320273D41607306B14A63D46 +2C042A6C6A31B92D54E01D7AFEE232DDAC002D012B950A71C2F065BD478196779544093A5B61 +93247AAD7970AB5E306EDBDC24EB4C6B71A174ADC6565A99EBD7EC83E01ECEA533D364C2F07D +8A48C84C0A3941DD6B75422FCB49AE7BB79245CFE9ADC2C9B3E6B48A46867CC72F26D8C82C2B +F5E8F60763CB9B473473F521FB016CD1D07B3216C496CDC68F72C6E9AC5B8193CB3E20EA84C5 +A7CAE4905261B554D6BA006C787658463215646AE218972219EB34A5964F0A277A1D1A20CBBC +94FBE359573A672EFD0019B2C0A6A02F4B15D14B961383630F0CC578168F9DF7D33D3509CE75 +D272141AC8EAD6C708227A193A5542A213E6435AB543754A75D066C000A1FA060053A862A013 +799F762B5403BEF0E52C8208D3E690393BD3FF71C8EAA08C49C77F33BFD9A6F9370A88CDC3E5 +B1012FB13C784E637A4891503B5FFB4A0BEB105458413D3FC880B92671E786BFD03F158429E1 +E80EE252159C6B61079092C2035748A3C0D1B7C400B88666F94601D53C2EB3308AA791F66E40 +DB8CD2CD53ABE4A018A2BEFF566806C6CA7108EFE8C70C7E4058853019425AA8EE77D3E75973 +1A80FFFB59CDECD15D099E336A63A605DCCCAAD3FC55300B12402FB10A9FA4292D61F8967C21 +8E008343617BE44D29AA7DD755609EBEEF555F8291543623BE6CDAD4F46CA20063DDE0EC4F24 +B9052D6092BA0FB03EC7277643F178CFDD5314F597B93139183823C2049FA4FE0E1F7913348E +B83F151E13251C3C2ED100CB9C907969669D98C5F349FD064A677FB689671C27B658C3118B20 +6AFA9478A4F0AC3E6325139045C83C046D0F81BB002757DE25E9778A4D835E6D61E563293923 +CCF415FF132B34BA9ADC441B806151561C59662867F91CDDA7579CB77326D5C34BE9149E9629 +8787F98EAE3B5A2E2190D932581F36C547680C3266770786DF978FDFBF96D7DAD68969EFC46F +5A39567D97CCF08BD361FE650629A6CEC31DDF856640E6A2842447A87264503B7917AF46D7D5 +14BDCC09B23E7DA51C47816EF27100FA60AE3FBDC320B6E792AF15CCE9412C8C80B3A46F5E31 +E380D93EE3D17A5F674684AE28C56381892B66AA5A37B67B6E7CB9D65D359791E8EE0A36A4B6 +537315C99505BF6264B6C3BDB62A368AA4C5784409166831B36AC6241C24C9EBEE261196E7C5 +B55480CDFADA76C0F979FBFC9F3AB5A53CAC4C6DE0BC8CC9BC93221347EC17FC024CEF796410 +67DE49A3460AE6C83464CE27DB329E16605DC22D727F578F14764720F4D6BDC24E171B27EAF1 +43EB293A70525452FEE8100DBB2D7ABCC5177C7BA96CD07A8667103312BC495FD7813A5DC7BD +37C1C96B1DDD53841B9DE37C5BE008AD67706045EC1AB4F418F60A17C0786136A5B9617CAEA4 +BF319CA20636691BCA83918785CC15FA19B4E8CB5AFFA398DCB868AE139124E6DF8BC1CA29C4 +3E4F7D57AD6D625D570B498FD8D2B3FB7080E312D95DBED16A8FD3ADCFAC9FC0EDA131913647 +6EA4C0FA1B6EEAC95FFC35326124EB2DDA055EC0FF6A304EF0CBFB3DEA094810A52D5193F041 +D99872CC6A71DFE5B46ED2EFC3F45D6560276FDBA056A78F9D76EDA2467AD4C44930558DB88E +ED42F6C88B0C1E3DD5101A6590ECBF56E32BE0BF76B515235D00121CF0ADC12346997AB62DC2 +A1FC37DA89CC3992BC1C6D5380D0D5AB94551833B65A2336EBC9923E58CB1E47444BC6E49BE3 +042C94624373B1C34F593E7C8E043A6DE75A27DE4E305272EC9996499517F1577DEE3F9ADC0E +3C21B61F81D165E903E1457BF33830E5369CFED65ABC46089647B5C01CD089DDCC7CB8CBBE01 +EDD7BF01C3636CE3D274A7C59B937E4547BE0DDB0FE9616E0EBC5078ADF5D7C8984C5DC85FF5 +099A00B84E44178D78B293288F664F19C7FFB7C52C04ADCF8718DBC94021C28290E2E5808687 +5C2B23EDF938C52CF0274F8150CB577FA02A7BDDD290839B69F6D5AF1B70896ECBC07CA8F1F8 +6EA38CFC5F852A5F5249BCF04A878BB56EAB61A1F53B60697DB77FEE8327166B399D413C62B7 +42870C3D77544FBF9B63511669E778C3CB1C009D17EAA536B93EEB5D15DF014673A66B43A102 +02C424DB51D501610A59B01D5ADDB4A62B7E86688D86A3786B08F14D5BBB93C63C88D7F70D57 +4AD84DE70430799DB3C19FC1EBC35D44C8661ECC763B46445AED62F1BB25A6C7D1A7E8C685DD +1ECC9660FE97CE2CDF6D259CF0869BB93F00D98D4BF87969636FB6DDAA09FD32F6F31DA2F1B2 +47ADFE919932298D32C8C96FE9DCE6F4A75F071EEA657935F7F30C32353DC4B25819F7070F6B +518C909BE0CEE0FB262EAC59C893DCA6C2B69CB0147206BDD4ECA2C4C8A232FE1B1DDB9C9B7E +EE10FD8A0259364B697AB94D2481FF1751FA9782EB84DD7B481D0FE16D09AA95C00861F081C4 +04B638F1086D8C108953B5828960BE46BAC02B635F7E4290EDECDE73860DDB2E987467C70E20 +D93CAD40AE9BE998D64B3BD4D600EA6C8E2F5155A9264F9D090567FB7ABE1B4E2E1EC5D4E298 +66D289B5647146B7989DBAFEFB7AC0DBEC9DE8D12749113212DA3C5E9CF4224825F9AAA5ABC1 +662AE3B3FABD40D17408BBCB0FFAA37EA2C05569ADAE243114BE87B6421590A440036A071E70 +B77968A4A6C6AA4FB68D32417DA597F5396A4ACDB74BDB1FDEA82BAD3B998B8399029F0726C8 +F83C65AD45D14A1AEBC019F885BA60B0B6A260899BECA00C0F01E1AC25490DD78CF40924901F +E877E66F23C977B8754623D1D0F7ABD00753C3A0D124FC297D647F78380C139C2F82EFA9C9D6 +7600079805EA3BBB31C79716E3A4DACB2BB00A21F34220BE2A202FE29265024AAE48C23B0FCF +6142EC6587DA235577B6E57345FCDF32B83F6532023F8A3DDF97B01FBFC8B853E90536165AC9 +29DF10E253D8C4569616F297F7E09C06489E67618FD7148E6A89E249C62898E64A03D958EB88 +F6E3361F0EF2148BE4576E4D97D320B4CB7F412FEDBAABBFAE057AC533AF9CF9627BBFAED3A6 +C6CA676148B005038149259589FE227CBB4B8576810EFACA8EBFB5B52ACD96B373462336D791 +9FE2D926C0B23BAFA3024F15EA433414CEA280F1E20650F1EFDD04959A61A5C362C98B855361 +F2971287F63D512AF98695C02A5473AC45088D478509C2BA84967AEC0FC1D538654523791773 +D8A5B9D73C2EB52FEE2586333FBF6241A829811E06C2CE93EE1F0FA3CE620AD06984347CB30C +2AEC9CDB0F97CE991ADD184ABA3783B556662C833A874E5C38A64B6438CE5348ED802000631D +B9B3B33F0D90941BA80E92D4F00C64E62A7A0520D94E76F782CC734DE498ECFF23A5F24BCAA9 +7150F721064114CCA8CD690993A1274A5BD3F15A6D6EE5C237D7823E18661667B593FEFA30EC +07E974AC8C6629A8DCC41F3F02D14F620BD415841709E7296D2E606D040D29D501927F9CEE38 +A4FEEC83A2FF45814700D41437C65AE671A5A6E83964EE131D909E56926D3BE03871341FF7FB +BD19437C7A0C3FFE3D6B50479B56D774F8D2EFB59006AF71B47C7BED0DBFA8E8D95CEB3E5B1C +65111377CB66E0817B2AF45607708868976661C469D4C1A3719B90B43FAC9BD8F0FA5558DA8A +158B31D4866017BD8E144C630CB3FB547A0C6035D3D4565536D88D219D98FE96580B651FE0B6 +4FF75E13BFB841137459E93A0779616B9F67865F5F72503E60EA30AC387ECB6BBB2039582DBD +891BB344D685BD7B4A44C73B3ACAF4BFD4170B2A529E8181763CF0990EEC3310B321F4D6D5F8 +84824ACD20B409B7DAA1186B998DE184C41A1C815F09C5902EFA03BCD1AC9DB7B844353B399C +184088DA2DE7A98D789F1F7B56FD8375ECF32AC7AE6B9645C3EBD42D333061835230C4068720 +4AB8AF146DB9E945A631AFA80CD3237A27C6ADA5DF3F1E65DD74289E58048A40AB6374A4F479 +13A872042CCA0CF0BC34A30ABB0AB215BB09AA2FEF09CD664AC1F76736CB236AACB271B9783E +1A94EF666A52B5A56A0BC90DB43762B33CECA87E1C8BC43B6B1FC6F0D8D8829A1DDC6A87A8EC +8287A7D9FA52C848A76BF04EB015DC3C79DE6AACDF7316415280AFF2DFD989F8C7887253E6AD +B49D6C78C8350F6764BA14AD14ADE05C76D9BC480B394753468AE029865248C2C760E3BBF647 +178F10A294506950073262EAFF3E956E7484636D18F2F4B4AC01F7F3DBA5C647209C29CC0ECB +195764FE2AF2DB0C9086B587EC51A76AF1590D67102AD6BCEBF7B6D845FAE94D6BDF6BD0E910 +14DD679F56DA651F747FD08494A136E401A8E23772D3EC931A7524673346AC575756E278AB36 +4A1055CC920294D276373C881D8AB49CEC190A4DC921BBEB75A413CBCC503F96B862F1F446F2 +CE232E45652292A02349D7856904B46F9606D6AC8446F91B03118E28ECB7DB4BFAA9D79A12ED +57B1F9086541F1D2AD9C55834A5061B1434BDA4F001BB74A3EBC61CE7D8353B6C57A7DAD0FD2 +403CB55B1111DB56CA38D2F5BDF3FCB687B08BA9CA70380EF03E837B95CA0C7812EB9D7D0B51 +00E052493BCFCC91B26D64B3B95BEA68F7AB187F5BC4B15CD5B2182103FF8C21D7B23FE7E302 +69E19619103362EF40128B0E1A0285299853239D28EA3EAE1F32ADCC813FA4C2D2FE80D3124F +4BB2BC57F386DE387454AADAFF1CE4FE5769DB0B7A53B49DAF9E6B501834A117988081D2AF14 +56160BDF52CE6E1EEB12FD7B4C8B4C8C71D766C71A99F768B16EF1574583006FBA51963655ED +C565B7306093E356B223DBE43B25162600F4E0254F9D8BF36306ABAE55C77640A63F4F7EB19F +091F533DAEF035E5F7BFEEB59AF6A3DC336D953CDC9B527B1E6CB4E75BC0D6704AB8AFF7C511 +35EE9EC739B4DB64B145E42D7CE5C33FA78310654E0E02359BD52B49074CDE8768741ACB2922 +4EB52BABE235547A693E94D591673F5070045973D20AA8B76A525F6F3BC6E456A1BB17DB2556 +04A60A8344A7CF57411CB1626CEB4E02375AD6F549E6B21AF25C18418908ED928057525C9C84 +71F15F7EB1A471F57C314ED9EC16CA55B2D2492EF44BD9104AF9C7283FD1B192457AC32F8760 +32F204BA71A9010FF71FA0A74E6649BC382F883FA09EC0C46410E3AA49A39CD0A56F30A74233 +844F786EB37AE9E0FF1891EA5A7BA07A826D3A543462B30F5DDB9398B3618D06AEFC7221C8C5 +D1313BDD8179E2C38571CE735ED88592E1464E0A27876F40C2AC6CDC00D6B6BB2093AB39C825 +57D0DF90654D57EB09E4978BD9F5AEF16B76F80154EDC4CB61A17E2DEA5EAB9032101B259058 +4600FE5F74E288B16B41B18D42410D91E391F31FBD5B9DBC1A42BBF529F33EDA35757560AC9A +13336809D78CA855015D9B3254F54FA9047CCAC1A1DECD2359FD6C5388A54F21C009402E5E6C +5B2E4A504FCFD286EB6448E94012BF6AEA62AB724D774589B1818D2372E76200C1E13194A2B3 +4C2445AF8E6A63E7E270F54694CD71967FECB36CB10F9B7C7EB9C53B98128FA6A2D8171FB911 +20FA46D522C6682030000BB239F8BF8D1D9A923AF7104DE7DE2125425951040FB14466EC2B77 +E04DADC9CFA4E13C52CF0E75237E3CA0500857930D1B5BFF827AAAB103F5E220D1FA7FC206F3 +6967E00346C436BF3D15B0DDED15E17A33EF57991C0727C12863177BE68654EB63B242CE4D8A +B2992DDB37130156C9D380F721C6B954ED6062033A11291332F32763B7DE9A35CFD34DFE9D76 +8C5187FAB040057769D2E52AFB30F7D5372165827680E85C3BC7645AF4441B11712C9DD1935D +32C58B92709B7ECAFB1F9008582C8E0FD93FDF6BA3F93E38666F37C79DA45E8A7F0017F3A887 +A4F54923C9C107801AC9736E344693D57BA6648B44B9F6ACF6A9D940CA7960F35E0734213EBC +6745E5AB6424B0F1FADAEB69C35319266314003C80EF00DD1C373DB42EBCF5ABE5D16142B44D +BAD5C8E9E291C912F828D2BAF4965CBE826AC4D2081C8C382752C3EE0BCFD391A46B2A304187 +3BD2B28D7038EADFC4B031D06E4150801DDAC8B18264BE969DFA3C80C4FF17D29BAF3AF53F93 +6DD506C33704055B0AC76E436F2D54F4AA3CBD545FF1B67CD57325D48F28F3F7FC171548C106 +8AF2AF4414B92A014FAC72BB51A0279CB33B881DD767DFEAB867D0069273EE9DE19FF1D63A59 +AE534DA02495E0E4E5AA0B52F923228AC819E084F4E94CA631BD44B01B3025D8CAAB06F57D23 +1652FEFE73803221E39F284150DC944B0D2CD9A1F208AB552CA3C6A23D5ED3E0A350FBC963A3 +16B37D2CDB610A9FCC069B7669E2CB7505DE6D003D7F4F695DB88BC696AB9F87CCCB1EB635BB +CB1978F46F4D1EE5A5ACB380BB435E424A7FE8A20F6F3F1E8745781601D76567AD9C1076FA1A +1EFBDFF6F9969DF3C0F337B805B1AE318124274C0D7E0EC6F43299EE7DC48AFE50D428430524 +73CCA6ECA462CE40CBD2ADDCE28D3676DD125D404EB2C2706170EB35DA0FF60C1A8A9E36A659 +00C02D19219C6AF5BC3DBE759153B27658663F7C6ABA6327031A37F58F948FA4F636FA989C95 +3FA91EE86B93617C3369C51841B3FC5A533FB1754ACFB5BC80E97B002B34388D365CE95067B7 +F31DF8D6BB61DB83C0FC5C3FB54350C9B3A2F69153620AA7D2639116DB4A06166BB58FA0B9EC +87726935BC6324D503017B679F52840957DE5C018C4F02F86D2F555CBE67568AC075877B1B96 +A759556EF292881CC358114E60A1B72F589F749E64BE973B6BF41692AA93F7604AD7D8376A94 +37A13EBE498DEE73F6E22BACC58108C83791C496773240B7BCFE6702FEDB9C4A3BEC1CE45396 +C5E88A770A61BCFE8755519D7E4007CFEE9919D528C651E40E05D7D03B28839255B7182CFAAF +FEEAB7B7BD2DF6C56F52F7201351BA2B7705054B418E691276A78984A2EA2E7D991721C368BA +22A7C8B738F1A9266064FF5DC036A20C8570A2CC0BBF74B25D7A691A20A1C1A5FB1400C66AEB +CD3013C43D1328F5F5D0635631A3A21AC4884F0306623EE1C2EAE491DCB845E34D749A6CE4CC +80B2E2049C0907249284BBBDBDE08588D5D1FE1031B2A2FF3756E7E2F670FF768F638D83216A +2270902867F072D9E4E6735CEDE427730B942FA67D89494D959D0FCCB923A85C07EA3272FE4D +018F1EB2A34FA95FDB6D31650AC2D6355EC338D36DE42547A6432CB847D27C74834036DB59A9 +344F59C9F610091E2D5FA6157C8BA4232937DB379D43F922E2A7581819A4598B436C60510B95 +6450A6DD2AC04FEC337B443463B4336008DB2289A8F9B126F0A998431D8E503B1781F42443E4 +0BE700D6C47D1D65EDC74E665C0EA196767E46BB11BC0ED69199F32DA3F4398342DD22EFC529 +6CB169043C3C902DF485A8B50A94C307FC14A6274570F878C6CBF18AF910EC20B0726684ED02 +1F862FD1F9273F32826D6D9569BFCD3DAC8B6D9BEC14562E22031BD61B4CFDA7B2C95F25E78F +045E616A6090417F1DFC14A7A168B1B121C229598FDB040B336E1959BE810C03401D601A63E2 +7F8D501F830A591884EDCFED1C2A44409DAB3CFCEF74FA27D44734D071E33EC9C23A525E4612 +32135D02388D032BB8B9B8C1C8F46EDB55C98EAE149619244642D2926D3180BB66CB7D0C0146 +561E452B59FC7437D42B5F3424D5F30509EF1914E75D4B73E483701026F269169934EA1AD0EE +3D1DBD25DE247F866E6FF52999DEFE6F5D5DDE98E974FF9DB4D9B99688652D209EC49AA0E0EC +F73574CCC419039056CDD2D2EB3290D0784E295400ABE8331D978DE83A2B4001D35F51E39034 +E0BF49945B9B7C4EA6CA382684B996F12EC9438567A20C6C7713D4A6CCB3389B2934E45A1796 +42CC9E65199AD61C07769C3030D87E9F23E85469C583DB065691EE228FC2AF56632E9EF15646 +67ABFDD20776425AE23D22C16C3C005518590DED8A5DB841CE25BFB4C1BEDA4FA6575726517A +269274B1517662BDFEEC6018FF525B4604446520067198FFE83C950F3D2880B5C9FB91DAA169 +91BFE63CFB48A3EBF24B7A33F43E1C7827D81CA611DF3476CACCE15A7978271C3DE2B48E1929 +B4233CE6A62F54BAC964C9ACBD1DC4B64C5CFAD4682FFC880B8B6E14DBA2234D6CE8F0494E02 +9A2123FE0D63B39DF8DC30F65969B8A659C0C40DF04B603EDAE85E81E634E58D053FB8826603 +96B30790E8D2613B273B238365F35F21631335882693410ECFA8749E23D34371FD28F3CE9AE7 +192389D7162E3F180D161B3A46B371F27E4596209057C4EF994E2D63791F32B77F9ACCE54577 +A56B50B4FA026D6C1573F45542D9B9338BBD2D4695F124C83D489606103807B66385C5E70078 +5418C29853BEC2D18985AE0640DC7F2FEE566599EC473AB3E04052BCA6F6BB26C27D6CE87187 +A3D4C69845A242FCAD1B66F5CD67D7F70422577DF10B05CC54D9F7FB036C289948F0387CBCEA +D3A91CDEB9C2D1547BC6CB7B4A2581F39DBB75EA08A22542A723CDFFE7CFDE9D9FD926D1003B +A3137A003FEFBB9FC84B0665D5B2DA9B37A3951A3E6EE16CE6F2216575C7C53061E5D64250C0 +9E8EEA685306DD9F693CBBAFDEE2A6A188B21EC458230E078BF9C7CAFC1FD601449F647C4B59 +B37CF7DB2B3070356900B3056B9272B476277AA35B97486585983EB96361D26F6714B49E000D +16007B397175B0AC21D7064AF77144D1C0800689468351A1605E21FE5175320701DFEFBAF066 +2B93D79B0E5E7CCCCF8CEA636AB27E0A852F67B2C5F201081335D3C2B4EE9BC5D7F342B49848 +E6DBC3D2BC0F4274C2C6F54DF2EB4A23D2D736BF0823581C1EB35C8C0471AD17FD0E177F4C85 +A33522F002954E8BFB33C0ACE5DCF7B8310D71678C0EEB45A6F0014F0080B4DAF40BE2D890BD +3FD44E14F04AFF9FBA9D98466BDED50680BDFA0C95011E2026053FCF08E0C67AF107D50CE001 +C7AAAE3FE75F5C3505BE54CC683FC9660425C17C9740D27C0634F04B784F758A6947A4F69010 +8FACB2D6B08C7FAE8D40A4183CC6329F8B921660E54420E2FBC44E43724E8F30196888AECD45 +5CFF68E47E28F68A8D82E0E7FDA8CCCE35EBDE0D146D120B1044A6E0BBD91B29A38FCF4DC8BE +9158C1C698DDEE07E0BB6D0AF5DFF5C1020E8406CD1449E012EEC3A82D6CDB42F8318BDFF262 +54F3B528F01E8D09C147934DF965ECE201038EE90F5982CDA85381C2431A2BBC8DD5BA1FDB8D +9236B699215626F78172D3B4135716D592EC1DA0F30B6EFA498CC3192847C45F2019DC74F618 +A7414DE75988D8AB737EE75A0CC778B00D6A84A647105664A6D147715C2CD14B78F261C05464 +490115BEF6A00282BF422807BA6E62E5D6FDD7D838E8C39EC86970CC7D86BB6EF72E885987EC +8D919C37112C63FBE1993071D9B5B467E0917B35BBACB4ED99D4DD7E037B9AF008A5F7EB8308 +037E0E5C6862864C9F77CE7054ECED04E93A1FE549E1200368F3702A95B519D50AC654CDE6ED +297A3C6A60EF1BB36A036900D4BE955EB4D72CB719B08694DCFB3125386C7CDA2DADD0AFE974 +C974E18501F4A21AEFD4E0B4A9D2124EAD0F97C5F20F67C7100921B151E8D492B0D607D0A208 +ADD6F315FAF3F054CDBB8EB9C5D39B56752B0AF1187F076A7CB7FC79DD1D01394FA6529C309A +77F74E0614E79A84FE47A6518F74376B4E4E76A6E0BBA7043066C177BC8B979A6F5EE3EB5BC3 +16FF17BA8C4026F9BC861D524B223208CF94D89633DEDC9D80E79C0B8A620A5AF902879CEBDF +1E0EDE231BDBEF0BAB71952B8D04A1D572EC97FCA725883FB2D4CAB5572261FAC4BDF70615D1 +5A1B79B856F0B393F2A065555FD2522EA74FED08700EFA68270627E09B91ED5D02299E75B066 +C5908A5790E45376C149AD782BBC1DD01D49B555B7F3B4BE829E3D28878F575C778D26FA2CC1 +74683854E0FA65D3969A3F9200F91258F274CF60978E45534514703BD6F1B7D69B41526CB310 +2FC836D074C3FAD523CFE04EF705552C365A82E2376D208AC859E308CB61603C59C80FDBEE2D +15E1950EC314F2039B03B0FC16F45B2579CE2D45AEB8B978872E19E55CB9841859BC72AEFE96 +BC6CD048DD1F2FDAF87E31AD8292B7BFB9623B1D1DF85325B5F757206F8228A5F81BB4D93A77 +550632DDD41E61DECC1441152D3743A5074B6381F5842D8C9B5B468AF871978DA6B8A7301640 +323C65FDDB483A6F7CC512D523AC9A2F47616BB4847A61D187408664C758A79904D81DD29127 +9E8134FE1EE90AC55B2DA653FFD91E2D9D0B3594D19FF546DB593C8A699046C0F841B5F19758 +749A14CFB0AB686D7E17C58468E950255FD299DC7E6435A303B5100FF844DCDF52E3FCDA4A20 +8F42CC3BB0960E28B8ED5906AEE9C176BA5FDD3EF8BEF2A6C00E01D44AF23ED706E740ABA3D6 +FE39A0E806A2FAC4E5D7BDF53322682A8D0DC5FE490815F388223B0316592FB2DA05434BF842 +29DFB33DB898A5CC233102E29AB9C0DDEC5163E8D8E5FECF77C3D829FC98099C1F43A56161BD +DE9373A14F69D5C35FB258CB96508DDB7B35A191C49ECD2A14C1907107BFB583E7B9BFCA5C7E +E6D72F573E067990572BBC240D4C828E61F6394B4A071608637338987115F7437A65DF30ABBF +5DED1A9DD5059610EB306071E42F46A55EB396EA11832FEFD4BE1E6F8704E5124A162CF209D9 +27F725D8D528408E8CDDA8BB494EB5EF2EF90DADEAF45E8624E89FE5080A04D2625DE67AD601 +DFB2131AF164F8169239A4478434FC2C2D882FF899721938BD643A41298DF0BFE1EE3F3698C5 +128028FF6BE57E6700B20649CEB0FB3C78B2BEF03BA238615FB8AE5201B111607CBE45241AF2 +AD6473AA54E9739E20F3F84DDDE871F1C881705E2C75FD0143398D968F49BE08899FF79A6076 +B4F283588F2DB488B2B58275E6E28739D80D0B4D18EE94EA308C01EA16F856C94C95DAAAA0AC +A857F66E40498FD7CC3A8A98DB095BF04C6411A90A534E5FCFAFB3A2EAF29D2C9B24863F1D9E +12A63FEF41A06F1BA5D26962C6A12D1A73DA880AD379F14BF568C90F206CFB6D5D53FF552D15 +C261F08B12965ACC6D86C25C0D1278A0F929EB931436A24875A01CC6E793EBBE243D880F9D38 +9C96E63793DD75CECD3D86895117F3AE55D9921A1968AAC765AA2B99AA4B21B203EE68F644EC +5C1E965BE0885CEFD3FD0A2E0537BD02EB24102C8F3B365E255AEEBBC1CEDC7BC2A8DD1EAEC5 +7EC0E642A22805F2BC745A778E25A9723B420C1FFCDD3E641445E18AE18097A7A8E54E1C9DDA +53E7EBD84CE3C18D56BBDC54C180E899D4BCF87C1CED04E10C401FDB83C6F353A28688BA6317 +D51A09250E1C2C63A6F9E8707D4B578CC61CC39E60B29EC86FE27FE12CD893C0C4CE3EC5F88E +837623E202D5CF939AD560888684DF0A6C0BEBC5478F588F5234EDC52384895A564AF2145FE1 +E11228F9BF5106D900011F9A9A953B768B5CFDD595987C6F5A1F2031261C2AAB5B5CEDB11F76 +BED3147F301F821662B24D3FEED7A7A2D08F1009BD80593A7B885A4998E59683EC88DEC130BF +CA01BD0A9265D74CC75A2560280FEF13012351B99176CE25E7BBB0E3CFB46BD5D7C64494478C +87E7060C80CA5D5AC356CFE128783D6513670E1574FB06F009BB2671F0201B847460A54C669D +8059A0056B75EAA5236216911B9FF62DB67979DE3DF71977EA93B3626961CE1D174A10B675A5 +763B8126E0E7E9D862ED49D82F1CFAB85CE6C94AED40A3E28EC2C7130C1BB420AB7DB578EAF4 +D81E4FADECC7E639F154D90E1194E1FBA01F611AAF2D634CAC03A34E9E25CD247DA54A1FB27B +2888342850824E004B167D9EE44BCFB4541344E4F7884591622DB99132B1AF86A261CA17DA15 +FD4A2584681C7189FE4CE25B2986CDDED549BB0DA8C06FDEBF64C80B0B1A89D2585B9190EF58 +847BA4559EFB7C7BAAE64D37D95549061A8064637238FE3DE8AE31F06AE4E7FA588F85C45766 +EED78D8E2D9E8D96E40CD161D820C00CB0312463FEDE8441E6CD3AA8777F8D4FA553FE9A747B +416A83FA728A52AC033A2DC128EFAE88808CCC435F1FD45CBCF963B263E714CD8C11715B4BFD +8E0F5613101E11720C2EBEED9879894FC85927DD8303B990A2062198CE7F3A0A48528FE25497 +0DDBEBCA2C1A2160548C1E97EF58769EB684598ABA001EC66A278D4E353CDCFFF720AFDE2481 +B9DBCAC57EE38D9C464FC1F331A45D1CEEB585388E00B139F638BAED8F6ADF8D11FBD0677716 +AB72017C1349B72739749FFD24D00D8435AFE78805E455DAD15F6F4500A041E25E4E890DC0FB +A5E88B7354302F59D03203997948AEF1FD05116A2856CC2A44BD0C2147C7CFE5AE9A9575A49E +1EDAFB0FE0C7F18D1466946398B8099D3CD61F38950BADDAB531B2757395B3718FD42651344F +CBB9AE1783CEEBD9F1AE5260AFEE7A037D195E25C673BE0389CA160BBF2D117DDFCC409DDB63 +DCD48185ADF29955FDB42537EC1C19A0B5E51D8785F06769C0ADCC90F5632A9F58F89D333F04 +623ADC50F2C78661B84FADFC524445374F394EF24EBB0FCF338FE9F86B654F112E8C987BE7A9 +A23C0AE29841F69B6F936E22507882D1A557E36B4F9F2C3D5D054A0167CF2890EDC16E5D260F +3D48E5117E6B8758DA5CB55694862564D0060AFB15641040F1BFC982926BDD21FAEA2264C8BC +94F5E4F882DC8772C4A0E049AD5561F0F240C28F7F863AA572E1743E27C1E9C1FD00D0C501E3 +A90E9F86536B2695B38955C97095E1892ADFC6A6BE12A986F2C79F218B1F0BE6BF3364A29B20 +3FDDE896664EACA5D770C769A36BCB8AA57083B55E9A31457EA37E4B83EA4C28EAADF56256CC +630EC37F5CA96952F816EC04A3797A8DD0A33CFF1C4171AE5163D786105B0AFC689BC96336B5 +B28396E0F56193E684163234A361A57C826E805477BFA84F78BED285E64C5C0B0173A82EEC75 +A897AA2739DB136529C9CA30E67832981685D75F7B51360A97256CF5CF87E2A0CD4FCB59E64B +3B506871549892DE880F4C39D40865E1A643D72B5CF0AD4A56FF0A6E68B356E2FF10265B069E +954D2E1C5F6D0BF4633F5CA75617C42D53A35AF4EA98654303B54BF58EA419F054E4786704AB +99B67A3F293A027B6F3D6EC6ED3AAF74B7CFE18ACEFE143F65CD7774191CBB8F00B3027BA684 +194B6CBE20796A9A85E205D774C47EDD8D68D754C8EED1211044BB4DCC0E7E14A1F1EB857BB2 +5D4191E0984EEFDBB7CD70958673AD34A0D182687DADC837139F087F94F526B93189C2AD5495 +56621F38A8D492B144881C69C76E611DEEE5606E8D9A3620B946571711ABC30BD4C2BD2153D5 +E557F53B667F996199989CB477381AAF8B554E4B0D0B3B41CD2DA66E120856DDFBE6894484C8 +8EC36E804C598C9DE38490313ABFC3B2E9E67F6E304B347F537995416CF9B00CD0DA9045003D +7D3F6C7F358C00BCF66C9924D4D0ABF8BA9EAB1F37ABC4FC276D18ABCD2CF5E583004A4787A1 +0DD260923D86CD83BCB52B8E1A7643EC39F4EAAE5F4C7FA0B93177D273492F0EE0688F63A0C7 +765168619C5793BFF01FB5E65557D3452BDB63377DEA0462A0294114C125D79A59BAA2DB0B61 +0E9A5DDBA3A298AB82E721674656EBADAF525861D924DD0BE6182B74B548ED0912E6D0216F94 +D2DE6103F81C8DFEE4E771DA478E303D5A19170CC4CCE2DECDFCE2260A491DC221A04CE42EA8 +2AC34011E8DF80DDDBB11D5CD87C77EFEB80179BB5834D4D4F84CD7ED478DC2D5D6C20E9F666 +B5345B4C34DA11391C607CB413BC8C7169ACB9C2BA5CD27436B274C5342B2AF7AF334A2D6307 +6DA21B66E87F86F916C03AE2D514931A8251DF60C4E50780F4622279B8A8612377401411A808 +2EE7A7363381C053BB136FBEF76B96B3AD7D1018C9991A4D17CE2F3B626169F606787B2A54EE +FA97EDA191919F4C9511ADA863E93135BE665ADBE9C523813004175CDA72A880C72FE711ABC6 +7446CBD6DB20D7EE6C0EC8CE999A4E28B7125086B0600AB0F34C5AF47892FE3FB9403AF0EB4C +7C8E39E2229A2512A6944119F10C7136F81385372B28D39F1850E77DDF02E7A0FE4063915E12 +BCCEFA52086840D7E26B6FB8BCE852311CAD8B0FECA03DC393B896B0EF334BD4A25D80EFCFAE +9398CE495A8176810DF51AC2C7D6145DFCE312860248C802EA7373D7B1F59BAE9A8EBC594E2B +11C184AD793E8F9F0C03F2BD30EB454101EE8ED0FB66B9AE0594897F908273E591849F822285 +35D122BEAED330283C76080394C89B534029B637E895A8F1A36B01CCDA7924FE2AC9F0442520 +47D9979C77F4F52442A806A9CC723EDAFC8B9AE8AB884E9AC1309C9E55AE8B5935AB1F70F413 +41E718E995262DAA8716A2BE97F1506441317E556690684E040D23A1B83A32B747E7C44F3046 +58E9B8A364028086EA8BB8E654B4612BA44D8E39A1163E7103912B98894A79BD5EAE70815A16 +8229B8965DF0D76B20B081B527F16039AD39FE609510F68BD48D8B6CFE02A9784E282FE64DC3 +061AC3094BF3BE7E9E7F7EC1807F0EEBB0225CB37A4443CD9E4B2F25DAC8196ADA984DC31CD3 +52424CAB7FD0497A3FBF2F02435B8E661F0F73D21DA704FA37C69407AE9DF10DB5723CF9AEF4 +0D3A860F9027D0B1431CD2A92409E1E4D986D34B64DE243CA561293D0569648D5BC9CAD90581 +C666709DED4565C386907F9397C442A2C0D358701AC2AF50D5F376B384D52E395D52BF6A741D +18E6AD76914D68C7E3FE1246CEAE4BFFFFEFBD7178BD8EBD239EF6D5D59F2BD71E899E763A3B +EE734080790DE33CD9D0FE3D1289E80C3EB0C8ACAFD4F3BD4DF6537B1ACD2BBCA186CE615A9D +0F0735048268D370AE929E84D2953882F8762D3819F61C0ED85A115C6037BCB108B66C7CD1C8 +3673914FE883AE6331BF32C3E199F7235FEFF1895577D216C8ED6E77DC5708F4CBA32CF1EEB1 +3D9C0145713A954072637DB4FCC1C1FDF0B5FE965DB518500063090DA4BEB238EF9F67F92B1B +ABD56D2D82975D246E6AFA021E0C23E88A70554C2B5F0A328BE693E22400BA163AEA84453BFB +05396E1C1A90AE9EE51F5C8A98EACE0A0CCDFE699B5DD368CBC7F6FB25A237FF848C01414DE5 +63BC991CC1A0A5AE840E8EC328303206D4FDC06BC7D89EB8498B611A91DC1037378AFFBF21EE +248D15C95BC9F07A856771546E28EF1954445155DF4689527EE4B72A3F54D2F66696371B6AB5 +848A50D4A3F5534BE82FF257BF014769B253DEE02AC57A1CC3325B5DC44895D210671E7C77B3 +0C8266A1C9D9552DBEB49177A44A6F5F018C1D6DAD19F65C5ABA1F7FE55D80E93507338B0F0B +3FEFA0565E6BF4334D98AE53911433146731E6399A8E5783BDBEFA8EF739FEC5353E07E423DF +FE5CAA3DA0A486E4DA42E84618ED89E60ECC6E103BE8E61ED5C396EE9D800CC83AFB6E532BFD +DD96ADDAD7DD85146F410B40C43BF1F12BC27E07982099BC4718170D8043297DB95A571E1268 +638621D6E295CAA2739F9251E7644EEA31715A42FC9A56EC891B5366F3C4F26C77AAEBDC1BC1 +FDD5E1AF4A140D6AE1EAAF67C0C28B2B4F886F0D8674B7C0FA6E7AE7F05D56457D1A9E055C2B +30B809E3A84E706CE981107FC33D61FB6B6BBC9FE5952EFAAB183C994A2C606AEDA95E949231 +926FA1CFEFF17B86469CB504ACAB435E8CDC732380E4B887DD9E08618BB8134F4E75417EE647 +8B9BFB11DA7595E042B8D1BA639A1606441872AC2BBF7065341604565B8D266D64340B9B1810 +8B9A065E9614107C3B2A6E1E7FC4C65331D63278F113D9724A92C0AE7A1F98D5C07DD09A7802 +A77F14A551508B77316E4DF79497DA97823812A6153D81DF7F172C96E5827A5BEC3BF2401009 +E212C8AD794D49548485B72C67DB2815DDDC3055ADB819C1461DBCF71FE60F7E0D5BBFD010ED +BDB843603BF2DBF73B69A9685CB4D282B4B5CFBD47D805B9E9BF38949A59B4DBEE9FFFD200E1 +8E163866CFB2300DC446A7F7BFD22AA5474B706573FB73336840A60CD62906CACA961B801AF7 +8DE0CEF472C0B96413847AE7A911CD28638F44BD04E6D1A1F6847A50407CA9A351B914EC5906 +540B097448B4473F56E77E568DC0822CB54B312E4F9AE5742F6E61C1A5557BC04BC08F39AAA4 +2AB36A10996E1412D7B046EBE11C4131F1859178DFE84AC8CFBE05CC3B919D5BC91DF294640D +4FD5835CC5CDA37E9062634745E5F3D3C310CF73F810100EF5945725FBF38496AC8763E28B9E +69566C0F8032129D569ED8B93FB794473094700911A2090A9F6D8FC5186ED4DB8648C32BA583 +65D1DC247BA2FE69FE4A42F5423EC4A8D1B9B07A836B83201EC205D158A80A8918143CAED74A +60A4D022EFEE3C44FA24FAAFD7E0B08106AC9B851DF68C1643D9BCDDC72905440C980113BD78 +91394313840F7B4ACFD26CA6C1FC757436AE7D499801FE39594393E0FB3699AE6A7F387AAA2A +6D955739B2729CBD00BEFFE282E12D0E938D512C451E186E82703BFAC1FC85C57957B482CABD +8D3032CEC83C3F75D981129A6B5736577CF55C417D11F26BA143D197B53FD97B7766971DBDC2 +BE12F9EFA47A0DAF683F504EF5726AAFDF01FF5B5D941722C6D1973FF92DEFA5DAAE8554DD48 +B01FF2660B6A31A210F504BEF75C1E8EA6E243972114DB296D19C790F1806E58CEF7F17673EE +6254A4D8D14C3ECF591AEBBC869861604E181BC8E70E19A178F0118FA307C16778810FDBDA4B +148BA33FF3A4B38F3175267E7924E7912C52CD78352688C45644794CBB843A501F6DCB88BAB4 +6CBBD6F36E31DD0FDFE755081BF4F0168AC57D32E63BCD9E95C6C55D9E56690B7ABCBFB535C8 +0AF3825F921CF6C3953E40BAEC3795A32B04328750932DDA02B0408EB74210EAA082D7E81C04 +DEFE9E7923DBC0A175EE616161F96FEA8BC29953EC47B82951DDFD4996A6573C40220A36355A +C3E696C07F61D6C0B16D2124F2CAC8766C65BBC7B8BC8B8B0D5D766533868A1664E319719863 +F29BB802EEAEB5D384E95FB9A784F894CE477D8A41DF73E6B560447644F54EE71741AA8C3CFC +F40547426B5D397F873D38051A1C37C05DC2BF7C77F4068D01DBB0E5FC2E3CF2524774C37525 +8AB840929F058BB06B958E6C9157425C3D7A2C047272C387E92ED820C92583E3624E6E498A5C +23264DE1CD9000C7B97081E40023C071EC3968D22331DA058AB5DC1A4039B0A313D70255281A +B7CDF91FCB32A991EEB82E6AFB4313D4E236E57819ED4739863997EFBF139624F650842DCF91 +A3782B41851EDA4B45FD9E46BD4002379C66F700AFCF7B04328948841749EDC07B03277B01DC +DF1527F14E261788FBD4D326177246589B5D6003653154D8CF5B262FFEF2BC3C5A4F2C1000CF +1E22408F1C4C972969EA4156B3B0DE2905EDCC99326C3F72438C659BCFE4E420C643BF6FE226 +5CE6EC9092859A20C8A8D0BBEE2FC3FB0D14217E973E4C7B318CB7A8F6ECE8021EFBA044B1FD +CA1BB763C1E37D622F833FAC366C66CCB1C44D8EDD405087D720BAB0EC695D22D86272BFD95F +35FEBDE770C397DA6D5B212AF2DBF1A16FF5F125F3F524F53B98BA064535346D0DCDD2CC02E1 +C55EA0E0F847F766720D6A9D45B9D9776F35B65DA3D8A3C78BB235B0E5FF8819217B77B86A46 +FA0ECC6ACA8C6A053562FAFFD3350F2A056D2622A3A4D673A6A586A03042815ABA31AEAA78F1 +09410D270DDE0CC99110A420B54AD9CE4B54D4687B07EB3AF950C1D4B88B0AFC37D792407D94 +50EC4D77EE6DDFF803CFD0F67354DE749FCCBFE296924AEC3A305857E94B65E91FDD9F11B289 +CA47B191C7613DF209896366E9D07431BEA6A229652AB7FE6A210277334784C8D6627D7D8ECA +43D4B8E75E1E6AE21651E7B9942FC0E781D502D8D51D7ED6F9576A12A2CDC40F3781AB70437F +9D958EB6477833B9B85F391AA10201E89C70C0A6B053E5D95A550BD380809C3D9249602F7EFD +81EF86F7BEA0CEBEE78FF7E51FFDC2CAC7BC2692E3096A1642F40687ADC3CAB1626F7311CDC3 +B1EDBCF3BC8A56153580484B30875BD19B65F77320A26A4540C1079D23B07C48FE5D69EBD7E8 +AC5C11333D9837FD706D1C52FDCC2AE9D13B3CEAD494B7D0AF602A57E5032F872EF41C71BD1C +53896529E6050BFB85998F489CDCEFFCF9B70E5D7371422F031AC9C00D00E8C436B6EC76C9A1 +1B9F92AEF7246D46EA779C051C539A5D0B537F05ACAB9C2C22BE43EEA3D56F52CC7087EBA41A +894CF633481422F5E6270A4E6445496DD020BD3CD846F98CB64061BC16E6C7E5430EC1BBE8CA +2A9390EC2B3EBF282226EB70D5AAB4B911EF1347299FDE67868D6C1ECD96B2A8377068808629 +E2BEF81138EE0966A059BB6058CDB7D418CD5F217DE21C03C596471AD4125FF448B5DE9D50EF +DA9CCF04B3D4D74B452BD00C7AE549FD0F2F1E7919DEC06ACB53D39A38E75397296A32E61A43 +5D4554A1DB7757288ED367DC6989FAE7F428A8E28E806EF90C4CE040D1478FBE47E2CED9C3C2 +4716AB2E4A138046BF7F7C5C6ADBC75A3283CCB5F9F53E1FF05D09186C8EAD24CE641DF1844B +A76AA15586A93049EA5C279CD92F070B162F59A7023B716D9901F332C7C05DF88C27BEB76A50 +4BFB2F9DD053627942AD6F04315B51140A6DD16A9CE1A4AF46AF3EEDEB07EFF17F6BCC85BD86 +6E763C64CE25F9F9D278F04AC4B12A03EA26BE39FEC35434A1A105DD410FFFE7B99C0AADA93C +6A834BA7774BAA5C01D2A8D89812433D5AFA22507ECE5014737136641953F6B053E93500B069 +34C25D5F2E7F45B00D78A4702A086AD89A965EBFAEDE1CCB95DCB9B8F0BC376CF29EAB1288CE +A94F572383D358AA48EE8DFF88B20A78262813BC1A2849716F6FE7295CC153069E511281DE2E +1135B90F14A9AF09AB377E76A38D0A8C87AA352130228BE170E0845B1FD3C115E7BCD94A807D +0B079CF9D0A4FBA455CA2CE547F24A5AF1A58EE39CA617E2C15ADFD2AF1B6625EB8310CF7831 +EA2744FB523816373E69139B2014771C6D7C9DE12CDC486943D716B9ED76F5500455641DBC52 +D5D20D43A41D28FBD23D557AFE215ED0E7B9ABED8A5F908CC8331E3FB61C9A9E73546AF3ED88 +A024607B738849BCF80112E995BEB93433174D2FA06F12B159979743EA404625BA7448F54DE4 +46C9252A6A2769506905F8448A938EC2BF8EEF3F73BD5C7B5B5DD81416DCE2EC74AA7ED2D510 +CC6F591D0C51F2DC4B8379D06775F0C2BEF70343097C44EC7FA8F711A745F3330DF7B8BB7742 +EDE598BED07CC879A10B0B34B20335A36383A01057A53A5243363855C70AFF48F259A5B2882B +B302D320E533225326249E426BA07FBE02C76D5193DBDAA10FB23DFFEAC7E2AD096F324E86E5 +A6B76FCD07D6129338D14A893EE8D92F71A9DE75D6195F71DBB650F0AF3989A02002DC32D1EA +DCDB40CA3ADB7B50286F2618EC285B822EBE484E9AD72591F5DDB07F3A31EA9FFC3B26039676 +D1BB14983439F0E7517674C9E36D1F86FF8032E6BF2801ADA6BD004454BC61FBDF33A2788CEA +419B4BA1A0AC2E19660D6173F539E7EFE000AB18CE9F724E5CC641D6052A70F994A38E050030 +ED2CF32A037B56E9CB96C149A10F34932FEB06AAF48C2BD54D25B58412CA1FEC65891DB9064F +3CAF93D6FCC90EDCB298BCD09ED00AB7B46F5E776DB5AE0E397F8E780C4F9F19A339CFF8C9D6 +6920AC9E95B3D90F335B7B5BBEA40082EE405AFEB3397A4090BF854F0A34DDBB7D80FC30BDF6 +DA9032106C0A090004D0DAD25B27B99470796E5C4402D05D82FE0533A2FC0641E06086D5A63D +FB4C9E35A8A6ECAA9259F93B812796C4A331895EA2547ECEA1EB254B1AB777FD3EF87E583817 +4BD6919E04FA04FF349906D4AA7AD2CE33BA754276E5712F3EF752065019563446103EF6713F +E9ABEEB69D73A66FE463A37EFBD1A37A53B42F445D13DC40C1042C38B09478E35901501053E5 +6E98C2EC86B364594FA23DEB6EC3D4B16C41A5FE34A13B880066B3DDFE51D5DD7C74CAE27085 +9934A57FDE18D4BCCEA46CF0B05C2EDED63629700526B0FC9B40A3ED89A3718DDF61A554FAC0 +6F4722CBCC8FAABD7960DD7D733A73E820787F5AE1F5B0526A76FE49057AFAA7D42654C95B39 +C9294C20F36694DEE69404A8F1FAE78CD75FBF9F59AA7D9887DF8783775F26CFACBA6CB01B30 +602446E1754E2F6BC3CA692B4A6F078736F9FC74312DD87AD5974C45B386CDC5E64205AFAEED +297B40BEDD7630660FF644A7A9734113E58ED8893C3B93A73F183C1CCE12035FFEE9A515C349 +16A92220D07F065436313638617BF3780BE2C9173472B8A69E9EF800CD93709AAFECC61734D5 +DFBE4DF2AA1AF855786753A0CF176BF74CCB46D2CF239BFC37B2554F17C1DCBD693786A0B5EB +82831F9E8A4B42EFAEA6B10E7942AD1B783B1D644DBA9B5EE4B45CFC496FDA6F98881689760F +734AA938CDEA288427833C4F24999E85DC610EF3A484587266F72E1D9EC3ED7798DD3A9EFAD9 +854133875C0F42453C21287E5A4D1854CDD50DF26F572A5933CBF0944F611366C6E6E3B80D2C +4C44DD99E80FB8351C9DFBF38CA541892804DC2FBD14B1CB344555FE484BF649C9308B751AE3 +F27D7FA779B59C3D796493D14426A31C4825DAE251B80D462C98F287C5E60B782153854E29FC +3BF95B2C4B3A987909ED65D3345F947DF42A7C0249602EC342404301F2D1D1DF0CB61DDC5F38 +C3A967A0CBB707EF6D2458AC4F51388F803C2D4ABAE337F604D8508BF79A9A1BC185C5030DEF +FAC72A16CB51EA6FA8DA134DEE3EF13226FC0C5C5A00573CCC71B7F414E93442B0558A328805 +786DBAF0E9470431002F0EA58A40AC74DBD1805734CEC67FF5B8E3AD354FCF9AAA26FC636EA3 +0B026DDB98B7749DE54C37EED9B0C614C1CC5F1DBFD618BE5728772E67F85AFE1DA3E907AD8A +BF69F6CA96E5452DDE3C047E35FC55AE164729E59AE10FE733FE1B58FAB7EBAB46120ADFBE71 +3529D6B8728C772DCF0B43D42E9D7B7DE2FD45B042DABB9D573FD68BBDAFD6E26ECA6672A425 +5D591136049F9C2CD467299EEE7766880F5B174C2CD570011824C958D102EB97BDEEDADC9B07 +33BDDF99CF1C20136F34EE2461C6D5CD1A77DA5A901A66B2E3D57910CEBB30C60AB149336F2A +91A9CCD9C6771D4A48DF99FA4683DB39A8161B83CD29E70D51E2ECDA3DD5A34455585899F61E +7E4FC376111D29CAB945D3FFA57E7DB12B894948A37DCB2BA9E79537E3FF095C81CDC6A4B228 +19D7E579355B281A4F44C5F475AC8F984B78A91B20D4B11EB47BE5905059A211A6696DC066D2 +A5792F6AA667BD5AFE92C81CCE1753DD689FA80010DBC4E0BC917CD4FC8171C991D6FCBE5D42 +CCD8EA0017C0DA02CF307EF321A0F883FE33731655A5528AF87F05C406C7A05DDFD4D6889654 +99A3ACA7E82F3F2D85941653AC8E45C3956CFFDAF91CEF1F1AEBA26EE5495A3A28073D190A38 +1DF5F2384D12C1FDE082378B6FCEED74831C12A54337D64A6352E2EA85E67DE10B4CB5E09E5A +B6A356F2345EB68EDE34CCCBFA9AA7DE38B5FBFDC6973531B20F85D127EAA05DF03AD933D546 +0C50933F551493AE28544F62D126F2964E834DAA0C652C2EB4DE3B0FEF10C974FCC7C10F0196 +AB56D47E268AF927A96EAFADA234F1030E58A257163B72793D8340957515D2E7FF6153923E5E +3EE290B6284960967479B4D81BAEB242B327D6B2D0FF46F77E43B4A0F820F66204D507E7C1E7 +BBAF0927478F9F9F7121E11CA789C0E0418217CDAF10875F96FD05D49913091B920DCA3BB373 +99A1D88109D834742524CDA2FEC84E86F232E5DD433F924E9E01BF6E446A63DC40741D349420 +26DBFC8D3888A3A834BD4AEF3F5D38000FE075AFD4CB3DEC0415EFE16FA1820341A48EC4B3A1 +086BBF729E68EC9DA96296A4C9D551E099E3D3BD8F464FAA5735B99963DE4C2AC96BD0FAEC57 +E61C59133EF494085A9DD295B45B5B86307C7FA720F7170DEE2728CC31C58BA1360EF0733918 +D1663BD355295CB8363E9C53B1F271D5CAA6D53B80D8DAA29E9B834271422637CCBE92D7D9F2 +7B3D3BFB8B3FDE5C6959CD831B09948F92943A455E911801BB69CDC4AF15ED67529D529B9915 +2AB50B8ADA7690135C54465F46AA2D6E17FBC36E92E3C9A2EE01CA9693646DDBCCB439F3405E +A6C6FB477B56BEF0FA5C5EBCC067C959C4453046959C4A9F1B166AACE020CA94F082899CD9B0 +FEC62E8B60851D872E56D48C6CD9D69D5540D1B3F1102E0B641BC40E17FD99A9FCF1048E44F6 +ABF60352446E3C8520273DED902ED39EB7BAE21995A6F48D89A74A31C40E585D6206D90434DF +E9E3FD3DAF501AA292BDAE3040FCE06586D10B19612590DF6D9D60C086C9BE4D2467DFC042D3 +4BC7C37C93E58924BDF35C5380B84B5BB19F3658696D32AD3E48F95A0EBD2005E50423C9E3F5 +DF1DF53F001CF6A914D3F7545531E578422D99F9D914C7D83FAB83424C583F4A78C51B194E0C +5A80BD051BB9C62553EC3443315DED169EA666119BF3C5730391FC08EBFE0F2B8D6B18EF38FE +726E9EB4C41E11C9A22351C374341AB728D0224582689A104A8B3E7DE0FCAE31EE8BD13397DF +DFD04211B18938BCA715A66A1C7AEC553A14C20C909AFD757241C62DCA34D6CF7ABA262066C6 +3BDA13D3ED508F90AC4CC8F34A3C7B8596A47A24B0C048898CA14D7DBE9C48B8D1DF2057BF83 +1C0C89C470F3E526DCC94D247E54757DE9AB8516A1EDE99EA0902025818A06C68064AA4A7706 +3908CCFFE4751E161EBB1F5BF09AB351D39D0FC2CB8021B73A8CBFC7BE80FF63577CD226554F +A9DB429B058B02314ADC063D859740747B54961512B3160EA441AD31F6DC6A0D8AE9BA50B0DB +545870A451690DADBE35FD8BF54D32C06BAC67C886516BDC7FC91CB9B6435525073E37CF4670 +708805243C6F9809C610CCA49C7D53A638B04B15FE1FDC4F6C2C6C274D18DE17284A4A6E871C +22D1D525C23FFD924AAD6367E6F3E576667A2766102BA4754E6E3BF0F854B328874BEAE2065B +5984E0FD540F228BC854E6DDE07788975FA64CB562656490CD30C95D4DDBD8171E4FB1A2B5C6 +D50755375446CDD0B405B47143538D4FDBDA098AF40A06B1CF7A0565009458CD116069C86746 +DAD2C0E2F24AF45B40BE740E7485BAA6B776D99ABA9BB0A25C53E3AA56EDAAC25BCA78BA2A7D +0AE5DC30D2D80493F95AE152DC0C07946BC5B5EEC417E1903B3ADA7D1738A3EFCD223F743CDB +75F34A83E3EE70339BE05C352D8A8C3D3BB7B3F934A43C26EB2A849A2B390D779C9989E57006 +AE913F406998391013A463175E9E4C8DFA17ADD0A743322734CE5BEA82CD7A4CC1115FB00D1B +212C8A340B0AFE77568219B9A3C523090ECE0515CA21C05264BF1934F557AA0197934B8D27DC +634A30C5C325309E6E7704E97BA8C06A8200B041FCBD0D539D972FFC6B1250F047C4D6C5D549 +7B3FDDC7DFC0AE135AF47C31446D8EBB91190847F870897CD034F87F76C4AB03901B37B18746 +0A32360B86D753C9FA87EFA92B79919BC2D181A81CEA92C438E05EB257839443FDB5E96A4CC9 +898801D4D69EABCE3B92AB3427930C462290300E334EC1DBC9E54453F466B9CE2374CAB66535 +DCF6312784A708A25165D6667088BEC143F05A827EBA0A9F6AB536B69F8EECC44CA548F7072D +B51B6A189B4260ABF269B0A1869763ADA330A595CEBE655FAAD08D62415ED6587B393360DD36 +6E5350EBBBC3098317B97581BE36742DCC36CCDBB3B42420C791A20CD92FE82947EE6144787C +4C3A6EAE1B13EB6BCF4D0BFDCF25DC941B47FEEBDF2D49293DAADE949AE1CE74037676E01A39 +C2AAC54ECE35A8630A1756AB03059A7456E1048033C7F1248324643395FA6FACAB5E915F76D4 +40CBF009E1AB1F39E87D9D5F2B5F6BEB9034A987A18F05A558C173B145BB865FBD5EEEAC935C +70E207BFCD63C514FFEA2250B6EBB33EAFCDA4CCFD0503E5842D6B1E27E546BE5FBED519603A +EE73CBF5B83C51C1BAE439A559477FD7BABE6B33AFF69EBBA394355679A1518928FBEED5A751 +6488EDC265BE1C1BAED666E33FC9CFFC35347FF8834489A916F048B25E96AD4E8DEE3AE05C75 +D3AECEB30547329D9FFC69BA98E2FBB7D1D78FB6355CCDA87826AACCE1AD13C39D718AE32310 +14EEEA3A5C79309FF453C8461A4C66C3751F1CBC06CB25B9DC60BF3583B142AFB8334EE23DF3 +C69F8AC7C2CBEE75CD7F4A33DAB9C8481B6282FC58ED195F1780E493541C208686B71EAAD9F5 +358C0DE284D54F0B6341807BE697E3D737BA6D7796529FC73843722507DFC1598C1B808BDC6B +12A4259862FE387617B2E189B194D96AC95DA4DE3663FBB4770341BCEEF13C75D76C655B40FF +EBC66713A3416E7BE641F5F8875D36495DE4E94A8B6508E6F3EDABAB9FF52829CC674340DB57 +B248864BB9365AEA3A6C84B6A1D0D6928D275B5A79ECADBC1836F4768A715556B98FAF6AB81B +289831B71AAD06F5217610CD7BF4F92B48F7681EEC635B26E9DA602962E4BB9B3FC4E561E629 +767C0816DDF8073E7E387A125FD81592A714B58A03768A8309BFFE17F7BF45FC0C0820F0137B +398E2DFA6376F9A7808E9F7987F7E8D4898CC8D16500BF4BBD6BE2B9A166DF05DA84AAA132EC +B88A11BE7929811EAEA87299F26CCC439A374173B6AB3CACC2645781F787F3EEEDCE87427F6F +FDCE837946A0D5171769FB3F150A51E16448C08B8F8D78CFAE3A98D5F18F26E745CF9DC64403 +91AECB0B61C713978EA17623CC5ECCD22F4BFA6E655BD0A3212B9E2ED3BA6E85D61F099983AA +1EA8CF1D1D852C03B2BD92F0F51E09C154DA9EC5C879CF489BF99923DB4D9B68A6EC66EF1D37 +B8A1B27D50CB931B87E74B65A9130423C162E66AF90B61A32C63B1C92F9A01C4A3917407FE69 +A2F64FA60C808EEDD1825A02C9AC689641B6AD379D64F153D063CF3664751B06FAE88D17014E +5E0B0DB0D41A5817149DF3773F81541EBA95093B338EA9CA58ADEE6578A540B59927384F0F08 +536A57686AAB0AD877E29AB626E9B14FA7B1C4710300583DD5AF73098E1CF1B807D647149523 +E1B64427E7E5D1CE78EE1E7025A34041E87D9F6A97CD1B37BE324571FF184EF3DB86EBF77894 +5F7277D0C194419CCE2546727552660115002034E6DA52BDF3FA669EA30318BEDDA7E7C02588 +8C1DEC52925AF96697919C162167E3746FDA83CBFEB79DF4D2E8576C8F186C31ED02BB428817 +B0F8BDA82D74DB4903CC1F7B18872EBE75C7EEF577BE9309DEA7ADA7565B6943A28BAB624C0E +7FD1783314A82C41097031886D8D70FDF368E95BAD9CED5F620A11031ED312FFC1C2A587BB5A +6570AD89CC3FFF6F5AF56C361BA367A5FAF9C1E4D9F2F799479730FAD7DDE0F1557225054646 +9C9C64EA50DD1071701D2E0CF69F227C2400F01B5ADBD34887C95CE68F26A6879CD224D2B1C1 +8F11E02E3CD42E35D3C3D30084688F798FF91EB3D0A82F11AC9212B2F7D9E135BD3411CC7188 +76775573497F2E5D97F5FD3D0C8AD2FEF53654D0E016A39D4E5717D09CCC87367E1F3193A4ED +5714F783794436403209E50D8B96533F76CC66151CC6124CD63F33BD572D25FF824AD44D5163 +7BBB017453E4B3B37C0140075422BCAC441047654119577EC6ECFF0B580655C21772F99DE072 +503A7688E22BDD7723AE7E7537ABEDA2064A1C48424B0BFCE52607CAC741B762622E6BDE5B27 +794B4989FFE55F4F2EBF290B0FFB53C62A2BF670946C8CFD089242341637B237C37269FC32B3 +E61A27DDEDDAF2897844A3AAC99E2E23AD7EF3010D2AD92EA14FCA6D68448E961212AD79962F +1608F0193E7C301F5117C3B7CA92DCD9613F4F90FE4235916F17598AE3CBD144CCFE9F2937FB +44CE9CEA13CB7298B02621DDCDF2CCEAC48D2A22177E244592FDB96BC75B0D4D9C2108DE86A0 +1D197E13FDF277FEC5D59A04380AAEE76ED736324239FE2103240000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMB10 +%!PS-AdobeFont-1.1: CMB10 1.0 +%%CreationDate: 1991 Aug 20 16:34:36 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMB10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMB10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-62 -250 1011 750}readonly def +/UniqueID 5000761 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACDD6500ABDA5ED9835F6A016CFC8F00B6C052ED76A +87856B50F4D80DFAEB508C97F8281F3F88B17E4D3B90C0F65EC379791AACDC162A66CBBC5BE2 +F53AAD8DE72DD113B55A022FBFEE658CB95F5BB32BA0357B5E050FDDF264A07470BEF1C52119 +B6FBD5C77EBED964AC5A2BBEC9D8B3E48AE5BB003A63D545774B922B9D5FF6B0066ECE43645A +131879B032137D6D823385FE55F3402D557FD3B4486BE465959B1181175594F3BBFC526ABC7A +95A48F4E45DF29A78557D1CC46FDA2C0D024CEDBE04C560079BD8615FD46A199497826365FA0 +436CBCE0FE5287256A41670CA367BAA013574D44C3DCFF12E410BD5754C4341CDAC18F915ACC +8F074C37A0AAE3E7C0E58D0FB87B20321828B5739795F435FE2C16253EA0EBB9904F872B9DFF +5E8B0F4226853511BBDB01A9D81EE0933F60B26CA73A60901A24A00720B6005C93FA1833BDFE +B017817136018A458409C7C54E08353C9D3645CA4C327E9CE40828B2A03371BB4356D068F5E8 +4575ABD9C3FB9A6A5D08B506C342517C47FBBA8D6027DB20BC86787CD4754D14E230A3A29B0A +8B73A0927A61A7713DCC295792291C17DE3B2BEAFFE0E6C574B1AABA41B2B569EFFF86290EFA +113EA954E7BD0CC1CC576328BDE5BFD94AECF662B00923D5FA939B3B0B81D8749C5DA255FBA7 +E0C96F4D4B732ADEA5D8901BF7B97D4C8C164F0A67ADBF35ACD67211DA7719FF2AD12E377C78 +1409D0C339365F95874CC1FF4D1B4BD048AAC08DF41A202602CF359DE51F476E3FF82449A9C1 +1BB70D41FD7AA183D00FCA4F5C74A643C04E0A10005292752315BA6A88F61DEBAB2B5DFC8547 +FA8374BFD1043147D6A9DA1701C5BCD4C49E6A619D749840DA82AAD4D1F7291DFFD00F192A1C +445781C1906DEF367951222D39F61BC0BC8CDF669666FB7B8492B72B115C3254473F9EC2D618 +8E5B40FB30B783B6826C7F7846C915E005FC9C5EC74160CA461C0744ADBF374395A7406430F9 +B6F78C961A5DF50D45D391FA8209DCED3B7EDACF64404F49CD63B382E75F863BD0C4165279A8 +F042D7F0F028FF604D3BFDA7681055E9C0363B88C91C86124DFAB0CF0C068A8F1B551AE2C0D6 +62845F6081B53D8606930A12E9EC1CC28D8DDEBFF79A0A864BF244AA2E3BC9FECD0B8BF8E7F0 +206FF63B65DA5A482C20E145B8A345981027A433285FD018584BC1A433BE7C2A82C9E1ADFF99 +38AA89FBD7CECAAE56325CC6AB8D381247132FAAFEE4014DC45BC83DA42A621828BC5279B445 +7B627485A2758184511DEA4D44F5CB8FCEC8A173E9DABEAB568D52C825E144EF699AE0048548 +4DFEA651C0BC9CC79B542C2374CB6B2257542B39224291FA05FD2B8B9AB29F2367C4904F751F +D4E4826CC08AED0B0B37BD7D5A1BE626FA5D51E7540BC391252B466745DD92E7699EE639405E +A592BF947F464B474C3F63C986E7753ACEEBF8CEBBE300C41770ECE3035AEA6AD19745A6A5D8 +2325557E72CF394E3017E03B64395F03CC589876DD1F8975C85E2B30321F61B0F0D7F17D9852 +5CA96DBCB27F83ED98461712FEE613B3398F568B79F75C9B63E9A9895F37AB4047E258078BD8 +C5A2A6762C276582189CFBF9DED775D2617EAE6AEFBC8DB246666FBED5E87A19278DD5222D24 +D10059962E029A3CC636F936CF71A2478A69B9F9E789F809365DBBEB6EC7BA7F1A20061E3225 +CFDB05344D2EAA9D6F2786988A5DBD09851B5B376E1B6C6C28E1C6652350C7C57C61C7DE7498 +EC4A70AA6EB3BA86B36D0B582A8AF847BB0B5A4366AB38F96D17A5D8F2B2FF4CF98EC9EC8375 +C26ED3771E99E2993189819B4905FE252FAEC9964E276A31B1FFFA4ABA11F60B83386094C0A2 +713820D61F9952683437AE844D977D35839F9844A54123943E7366C4DDDA941AFCBE3125375F +9D27ED52BBCEC0F4630A9758AC9587FC60A910A4A776176BE5C7123BFDA334FF4D44DCD84A6E +02E450B4476A4FFC8E3F525759E7398AE6BC957D990DD304872D8B42D6B2F8A626835DF8FBAF +025964CC9FA015FE313FD10A0F8F67339D38EBF5C09F3BC4F65D2FA1D01BC05FFCEC7E5E5509 +F071F134885B9A9C2173C2849336F92AFD2B194FF02E24AC099566BB96598A3F54A21E11B863 +FCCA6C3A306B14E652ED45D9DDF916B2C35F79A69903AEBB16240F0112B0E2B662C8631A54E0 +B90E9CD30013F3649B732A19955B2AC56D65AC7598AE631C029F8A5804DA2917D49DBDD12806 +64DE7C11A9048B8E5A2CC39FA00D9C279A05BAC27CDDC25F36403A5FFCA7FBEF39352E828976 +CDD7B5D630F9AE0CF2D36FA9763D6DB576491F6159737CA7BE9FD51D70898787B9158F20C2CA +79FF40BEBF24ADF54AB0B7B3F37B662B812C9D08918BB46817BD75284B3870FCC1B697021417 +6E9965BBB7012DC6970D9F2256B6DE0C249C4B493009836E1DE3C439B49FCF3F30E387EEFE16 +8469190D6A2809F1BFFB21C35AF4D10FA9B8B3301CA9D3BAC7621B9059BCC45AD55982D91725 +23033AEBE8C3E4B3E214649F7DDEB44CE0AF9A01E71B5979C9D6367A9B588E753EBB61467EE6 +E710F1C154633157BBC573E1D69A095C36C7CE4C2F777E96A57E4E95B7130EB60CAE405CB889 +246D9BBEB1A458E4FF8200F82DD0D682A91F8D9D5B46B2C9E60BAAD5C0D70115B3916026BBC5 +1FDF41FC2C52E488763E124233FCB329951816A498729559F61714C3FA61B10F1B5D018CECEB +C45D3742691DDC6E3BC06CBAA3DCB833906718883ED047A3DE0EE8922BA51CFE64E9F934652A +822D6028CBCAA58B24AE43D869C99BD1B35464CEA586BF44D9C27092255911ADDADFFD10DA2C +F3C11B01324F098C56C0CAD2D9755DBCB05F646B1A5485FB0EED946D02C0781C180A6F84C868 +096CDB0857BFB5DD43C953E9CB333A335F5094FB9356207891EC4F30E081703FA383086063CF +9427FF3A91A26BC1477218D239E92C09F28DABF494897BFB9B0244D9B174433ADE59923CB9C0 +EB7C927CB788D96041A0DD68D98B72A44D5DF80BE88D056E850FBC5321A742E3FB782C5E9092 +BF8FBDB1299D9507B63C7D6CCC9C6C955AE5EA9FB4ECC324B6CA7185F8F631F32B7A29CDF049 +CC3E8BBDF23CCFEABEAAA2434A77F1272F2F4B1DB93549F5CBA34F667F72005AF2952D551846 +0C6CE69011188C6E63E8D497439DBBF74FB0D1590BEB5F7E0045C32A6F3B420413C364816B7C +8D00C91C677470C2739D16F22D1EA95785D2DC506C09B31716A2312B6083E9A0EBD8D9AF31C6 +9206B1673A4BFEA71C7F664DA7870E8354B157282699581D1127B0EE0327FF852B61EE03EF7E +4FAADFA139DC18D7569BD32CF5E6ABFDA5D4C484C2201023596D08594440A79C73AB0FFBC8B0 +26DEF11F6E9204F5428EE312E820D4E22F54A52747C8662B2C50D9F83AA9AAC471A5D8EF63F9 +34C5B7D300527B3D721113609EB0B5F21CC1D5FE1FAFACCEB4D3072CEC662798FDB71FF747A0 +2DF7C0BEF36FEE38DBF6AAE69754700C525B340DA5E780313D8C800D9BC5C10E5BA7371DCABE +94821BC33E8248E425558B3A43CC04FCFF55AE9411B1174AAA354B4B19333C4A4B6FB431C82D +7E3D8E33F634249A9514135B4EF46D82AA9D74B70B11B95E35996FC5E7867D100F4644891948 +693BC1E5334F3B9CE9058ED81C03C2B183A99BDDA1AD3228E52AF7CC5C26F04E9F6770940328 +9DE0854F5A9C918F69A47963FC96FC2D4B1C1370BC447022F578C9FE64BABC7AEEE59A7B1EDC +CDC5885768937FCD2783C605C3A11816938FB62D754C39B696358E719C5B27A36B8302579EEB +4A9A0221D67A7AB6DC4EACB097256ABCD9A30B81F22F366195B751F0CE49EB94C3768FDBE7AD +2C14C0FE132B9E0A52EEB45D5B7499DDC4C0B20602648871FC97D34E13B3FA4C1ADB821D5363 +22287A7BC5ACC0536DA21E93E74939BE88030C651A208A5CBB59B0FCA1A43BE35C9BED90FE35 +33FF53931C587BE76A209105DA871156C3509A99211208D8E21CF851D11455A873EC19B425E6 +4FC1206CE36FC6A2C1E479A89ED95E5E02A71B5438CDD4EBDF6130EC1A2BA0EE887563D00AA1 +B71221B57F93859AEF34B828B2FEF99C6CB421F430289F5687EDA7E5D310AED09A0E7A495790 +65BA2F760D959616CD8050E5D96F21BDD70CB2A195FFAA71DCF6C148E9BC80A94D869F1665C0 +F848E171E5AB5B1F57FCBE8126B765328136ED1393E49121B0E4F77A8D7C17FD65555DF46600 +39AA646A19053AA2B2E9F623F656804F6373B3CBB78D79C3C00B091150BA7F6AB72CA9E1EE45 +2A13195E33A7166AD89E3E51F67F2256BCF89193ABBB4F146A2BF5DB0BF2EDC3ABB264831C11 +F9FAC8CE77A62BDD7045AC907C00B14FF5C539DE7C875A51E9FFDCA26A669F53151847EA953B +327832CF965237325C3C02569C473B0F5754A216EE348CF053CA08D63ED54FBFFDDF3999746D +66AEC6F3548AB26F96657534FD4D27F15301DB852A23005A09A260F3E39AF725BEAF6F6ADEDE +B94C2924959562ABF3BA146571527B2B29001DED99BFE8CCD146E9C8837DA259B2D71007951A +60596CD096DA5B3F9616BB9F7C73E3E8E43E36605C80BD68BB8718AB79FD31999ADFC34D2403 +308C4B617584FA5736197B630E355C64E1512D8CE63A803ABE6B1E57C5EE8010C5E5DAEDBD64 +308878B66EFF6506879AFA9C3F073EE8EBABC41F5E70147A94E0B347751030A2E298AB667666 +F2A4EBBFD7CC666E7DFE05E7723864D215324E72C4F55D523D55755DEA0BD99024A9426D385B +3B68E6701E451790631FBF2A5D2357665386A230AAE8F89A441CACD6DB262D6BD283F0111100 +B38EAE65490743524C8F0FA1A2071AE2B5B144A620C69213648AF2AEF1241EE23B7CB34C08B3 +BF5387C97B641D405E3DB5BDCEB2742FA7F45932083959A415D26144ACCAB524BA22DD1ECE57 +89D093C50AC6B5224498A25AB41FB0A96C632698EF7AC474579FACED5A0AA48954B8E8E1372E +7E6DF22DB336A3F680EC35AF22BCD020B274F824C212D71B5AF15B5381C1BBF4EBD4400CBC89 +05887C44179F01610552FBD4F1722C580E784976FACF04A8CCCEC9A756561B9A05430D49292D +003A9F032E296F8B9CD64DF1058BF1E7F5AE17F66A3DC26C2524C69F67CA26D2A53564367700 +9FA78B53E0BA4665D86C512CED5DBB2E125D40BEDF240EC38EF8F6F26420099D175E4A7A1D17 +26B808B6298F22E1EC8D91F3449C6365C71F96195B0473A41D9A6934904A1B111A2D4478C26D +6B8831FA1DE64F1FAFBD927E8D2E1B8871CBAC6A3CAFC36149479D007F40BF244C42458BB617 +658A6CA7D22C73FDEE52ED112C2E475A6D1F9B80337417CFF95125C4DB79B4902115BD8D4D6C +9638C678A601CAC4B715DB02908E7D840023DA76A084270AB2C7785968F2737C7F35B6CD60B5 +1F81F282D91A94428957B08B3882AF75F3489207BEE2C7D68990B4A2889F8AE363D775EDE4F7 +B88D49BF932E70F909F17DB08A5821CC931C3AE51A726CAF43F045BE73F276801518B77B1FC3 +0AE6724E103259F0A627D6122AAAD309851C0F633793C77599468AFCF4DFB639558554A9B29A +1C0FB148465CF664623D18BD605173C2CD9A75336CE921313ED710970CDEA8EC92A4F07C6AB9 +94ABE2BD6E2B6F2330BD1E2B33715872EEA2DEA700F484927F0B2F7EA949281D205161DDB310 +682AD7806BA4D42CD584BAA1838F587B2214085E331BEF9CD2005C42C92DF7ABABD1D4532818 +A32DE6B455B5385DE01F502D07AA5A6EF48FAD6D11362DB0CA98E8EAC3834CBF0466AF5296F2 +A6484A6451D518CCCA37F9FAD3FEA89F4272FEB6D6FE8B1E1E928A4848C289A6CD38929A2A8A +FFB95E152D3D6ED9D6CDF26590A7E6C3B34A2D55BA3DDAFEB490360BE5EBACC477ACDE8B8478 +FFE237749E353AE81DE3579A13303ED746D65CED5E94E644F39B5BD24D008751011673AA27E4 +DB0C270B31BB54BDBF7F33D5C789D29458FD11900708844B054DA8EE2D4B1675293BAD01D6D8 +05E5F66785E786E90445B52ED84FF9C17A00C2020E06BE35E35FA105282319B3D635CF12BEDC +241A05D743A24DB068711136335C2A340B2D087ED8E8DBCB9A722782857C69A934A6D2FE37CC +3EEA458A50D138F0B1480254BE6F5ABB6A22ACB99CB920708F49936C1A8FF065D6C85B627839 +7EC73ED632D4275683B2B10F720721197117232842300021B4F707D535B6AE8FC9CCA3A3DF2E +A26A5658BDFED626563C7A76D912E871A883FE82F232F6B6CE04B70FEFF0CA8DC0F772D3D384 +28FF78C5C610DDAD79C7E99204D24F5185A893720FFE7C6C69F1E7B52C2C344E7861469324C7 +2B6CBE07F0519A8EFBDDEAE9A8441F78C55D7A4F3A7E1D27911DAF4680E94B9F1BE15550DB4C +88A4AC3530808B49E8EF1367CA52CF6531225EA7921FE130AFFFA34C5B3CC365C30321BF8C52 +20D78F98AC6F02253033E4899C3F8C5128547173723555CF99DD2CAA8D86F76FE778DE43154D +6A9A7EB141EC1F4619F61C93AE01467A0CE85B4D9521F8DCF767965B6DD5463B18C1EC8D6FEA +D51597B51C3C427F347927A361F0492E8C2837192F20E18E5ACBFBB1BC843F580B90231F86F2 +43D59861A456E90761BAB870C10FD6C918006D8E3B65BA8E6CD7E6F9980C739A7D9A878DD144 +F1869879015EFABC8BBAE19D2FED48F65A403754D0172282B156AB0842C0AE337A2989DE6F4D +1E5500211842288CDD9D6BE4F53C2937BDA88C11BFB4C19BA8B6F188EE3AFC91449A2E30900E +ACE3AD46EAC35E336E98E3A210B182DA1298B8D864DD6D5648CD6EB91BD7023DEFD3E2C4EB1B +C30373F0F9B032CF9A52B2E289F5D3D9D4A0F49C593AA07B6DE1FD28DC052C89E1B10B4C54C1 +AEE85149F50043F00B6F48209C8203675111595DAA609AD06E00E9A32F64B9E2C8481F9D5D1D +6406A46CDC8BA2D4D51E5CEA00DF5EEF30C181CE1FCB21DC1AC59678EC04443C791E57EF5B17 +AA2686693A6E53DC05B6E265B00953B9173C2691B8994944B3A30D2FF40B93FEF4B761FB4E5F +216B5F0BD12BB6B93F1FA41618099BB475C68F370D8CDB310D9CB657B45B1474CE2362221660 +C22088E5FB59419C3CB4C6A2F38958A0E04E5399D6886AFAFF808B48FE86F908765EFDF3BD83 +4D7B28ECC7DB2D29E87D72F9D3D6459B7D3DCD2BABE895EB0CD02C32A39AFBAB052E7D48380E +27121590F6B3346FB96CD3D7B2FF7C5690594EB9DDE670F9BA68508111C4441CB96CB76CDDBC +34F2F45AF951D662385319D3F2540F4F3763C36DF789ABDBED5D0E393BE5FCE6E06FDDE55BB6 +6FAC9D2FDD49BED41B04C1F86A073A594A2F71805FC28F2B1A98C65597C036FC2EB91AA73D8C +F6827E52B1ED7178630A29A9E5D3D893386F499D3482FC631766928F93D01F34AE6B0A2B4022 +C9A171FDA0C0C4D302AEE3B55B4AC015C769FDC4AAF7FA71C0D7D36C9C7E499BAC8D0FB2DF8B +505C1DF428F5C00E9F67B3569CB7D634619D8268AC77D35735331AB131EBCCA9D4D43EBB550B +94C391BB5D23B5BB84BA26F4418ED18F448BCB33730B3CD5DA61651C8E52A9CA85BA7EC29A48 +5DA0C2E33DDEE636B269558085C8C58079EBA14DCE6D9F4CE271397884821585ECFF6F8802ED +DDCE9D0A90200586B51CD7D7AC47220182CD4B4993EE7B272BA64F29705635752D28BFE4464F +04E95A22040D9960D6EF9095ABFE33229DD57534BFE677D9C6FFA73BB9F0B60A96DB8441CF82 +D31812DC389FEDAC4EB72435FCDE2A790B43A696924F916D59736F7A478E5EC7D8A44EABAF85 +D9325EA0557734A3A42C6A1D7D512CE8A4750E643939723FA0A122B3DB2547383610B0AD8F41 +D53D728D8CC03B42B159516EC729C74E01C8414D2792BCB4149B825A74D2477DB7209D387807 +861E87776CE8133E1B89864301A6202192C1B8429324C0C8C4B7ED8548DCB8AE946B6118CB2C +BDDA474B468976AF7720DF0EF25E9BDABBDFB59AE097C076807DD5C802DFC7FFD497C30600E2 +4C2851DA7C2110BDD4B2D243C790FE1BFE35F60FBD858F928969EE280D021AFDACFC623129D8 +E5AA504FAADBEB473B194B8DE7F7205B4D6AF6CFFDA9082DAAF5498B72B70EC503FB75F6CCBE +04FD3140E7F828BDFF572945935FEA13B9CA9191B3923C1289A8002BF4ABB6C61DEB0FCDDE58 +977F46C337E86AD986F6F5328AC350FFE59D511A14994F0D0FA4495CD351BBFEA2B5BE31DAB0 +8FD9EA2DA2416F0F384AA123778F550E07D3273BE32F6BBE9663D38CAD6D31E3AC1174BE8D3D +FAE9E11B511F9CCE54F0402BCD44F68418152CE9EE490FD0868C271A187800199FE22E5F2B5F +911A4CE760B8D463C6CE34A86E59C3E61221FE438D3BAF67434189BC8D78CFB477E12F26AB47 +2E04B9238B8867A5B938326B30D019874CC7E14A2F66A5E387D411A41FADB029D1385858D879 +71120F1E381E5368DF8B1F18D9005164B299AA46CE0DBFD036CFFA72914C40547D2163A7E7A8 +D9328067D672C84CCD2A92A707A5DEAC5B349067B0F120E12D1EEE2AE61D1704BE67784E8B31 +7A5F73F0AF18C4849D84079C3B6765E97CBF54201F1C0FBA53E21D372A5B11037BE5F57607A5 +771DCE1D5EE36E964F56093B5BC76B5834D3A064BCE83F912E6240C82A9D08449E30701B47C5 +8524B01514A1CF8A9921C03D228655F82A377C13D8BE360FBCB0C8A3E787A0764DD0B375B38A +964CC5B1C178C530BA2CE2A90DE4871285DABD108E4BED4266DFA416BFCE6D5462D355B17C65 +AD9AAEC28314799C08C83887C28620F90045F0A779E73101321ECF48AE18B8137F34D2B24D0E +59DBA01DEB074DEEECDAB52A43A53D8016086B7885A8FD25B956A46CD166DAFA4F93B1CBA7F6 +B77D4D6D6D7605B433A7F239BC4F26EEA99D2E37D1FBEA0D23031AFAD041563765E3365F4B6C +3540ABDA276F03C99D7F87EF0CC744A847AFA56EF095318C52453FE5824687C340A5055919E7 +4AC71066BEF309AEBA6A7C2CC0DA3EC75F299037A255224A826D5FCF3ECD63992DB237B29C72 +C3F73D9EB75EB5EAD5384B820741B196D594AA99F0C0302CE1FE4B8FE139D82101D8445A1845 +AB656E97DCB869F0F35F6E3C86B71D459D0698B340AE74B8D34CB8D52444CB3C857D628FAB4C +CF04C961BE60D3619369296F19BC28E0F6F82CC7BE941FF94C44BEC24EC011D62D8CB545805E +A143521081445CBC2632A932BF50C6C6E6F75EC00CDA72AF3DD081D9EAE6C82B5D92DF7DD12E +8AC3D94D7177851E1C8736C03ECD6A022297CE33F885CBB74A3AB77AB18929E96BE5F16BE8FC +EBA4BBA43C06F75AB36A06BC648C3EA1829C4D55B8C7F5024D7A42A5721DA4150BC50069FE6A +559EAEB6B221885DE9F68D783DFAAE9F5B71506C1BEB2431FC66D641AB49B862452129DCE771 +3025FD8FCE173C2134BC4C529F4B4DA5D927A62D2596EF34F26F4479E9F9DE866ADB38D85489 +8FE3E44C2EB14DD2D7E07D67202A9ABAB501FCC9C182E8111EFB6036190FB9E31F229B21F6C6 +F4D568ABA9FFAF00426488FFB1B55204B5F3F4988DC56502EC57A6063580AAAED2010D3CC1E8 +DC5061CCEA8469CC0B62E38F5BB3D5C11673E48B41564EEDB125D20C482ABF51811D0580D8B3 +2998A9DF9842A0969963DED90C15E9DD461A0326A29F86F8CED0AFE5F3EB27966B81B75A56E6 +CCFE4B9FE7F4DA68725CF69A174018E3965C221B3CE2DCA8451C1C1F194DE95FF30CFF77B968 +A6B016452AB799A1BF22F03FCCC4215ED929911CB76B82B5E20CB9EA4474FF13B163F0373EBD +A070830ED47C5544621B7FD89CB899B54ABFCC3011447CDD7099F07044AE3D677B32850AE270 +A54AF62EF95B99812061CAB5DF5F06E229FDD68E44B037977D0A0A4C8D9BA07C436AF9871D6D +3E71641BA6E4ED77C9E2B497194E9B5B02DC0A2EF12DCB1A79D83AACEDCAF01126253702B7E9 +FB2A2E6C12EEE305CC13101286026E0C2AB685AD906BC23A1C212663A285985D0F88F59B45A0 +38DA924CB2007B4CD809B48F61B7D17E0DC3053D117BD9593A0D488FFAD8124CDB2BF7517B19 +B83E71650F0EEA866D2139AEB9AD18F7C3BFC7EF80AC81E68ABF7EB20F68B4E2C3B27213F7F5 +21418CAC5EE29D8E304B7E0A4BFC2EFE8596E9A4DA6B1697B129C5AE7EE037A711556E3A2D62 +F19FBAE94646E3F8FD21D6F60AEBD3284692BFF747A6099190E512AD9F75A965A3C3978E1341 +B54C42F95477B06010A3E7BBA895A2621FB9DFEED56BF50EE558F19C94C72B7FD350B6C1F2D3 +A6587D19116F879C23CA538176290A1C468D194DED81D4457DF499EF2853CCDBAE5C4AE8B483 +5EDAD3948CA9BCE4AC3E4F10C9DE4852CC8E24D80D8405C3AEE294ABE333BF7AD8B6E2FB9F6B +2B2C173D089E8668A259EAB1A376861E01343F3D03E5826F9C7E14A813B80E5496F62BF9CB51 +872404B7D9351825C38F1EE3E5B05EFCF9B36D9867B36050F8162069F8E014787879C67209F4 +C0B36976083A1A5E03FD27D38CAD085B9B34345AFB1D9DC70FC092E662DDC801EBEAB369020A +B5955BFBD7D074D0BEBCA3A204B990F1F733B3A7A57D8A153A63EE5379297A63FE2C464B7ECF +6529E5D589E1053B086B99FA30E50DA3B386C2DFB119EC1F243F47481AC7CF1E69753AB849F7 +EC3590458471BCCDC943C84FD9F6EA0580BEB150C24157BE07E51C58A5B2A572F4725D23C96D +F9E6EF165016AC6B8735B782F75635AD26EB6F11BEFA7C5209FE75834D52EF5FFFF1E76F890C +46989E1479EDC97C3B0145F8AFD6648F57606818EB205358BF01DB7C26BC977F384E9563202B +4C3D96BCF3E5557B0660F3B12063D442416D7A447CF12E30264784CE7F6AE4D053AEAC8C2767 +0DEEEC37595E0A94161346B29FD7F76112EAF613DA6EFC75D4A5D0AB5491FBE4A9F2E7318C96 +0DC20EFE97461E86DDEB20CD1638BBE3A5AB7240F922CCB875F9078ABB480848E273EEF661BE +2775416925AC3F665107BA7348D2F926CB8D1CCF9DB45BDEFCB24AD1EC58A61AA46144318E67 +AF7056E16E80F5D378E137F8D090A2D4CBB694F836F926EC62018DDC1C4A1727C02BA992A11A +DF5980A2BD78877338A9B2CEE84972D5E7256FC8151B4DC253187E22A9939588E12EF5A68F08 +522488B2420050770E2F9DFCED47226054EAF1172F49D401149E989F23ADA25B5B4AF0E5598A +AF2DB36D68F900FFB3358D7198160F544041DC65A9FA8B7EB39110C5A98C84828532C94D8B5A +A65CC52DCACAB7A708E4F4C9EF3031C2590A2788CD9D0C3C9395587195F322AC38D4F7EA3D03 +483076C0C961E6EB3C362C67F77963A86DCDB4F8C88095A5411E932497586DD75329FF2B399C +23BD38B486277871FA2D973447A5319F5739788F536FB5A885E46A58C40485B4F56F4CEB1F46 +0F97D0F6D591CAABDDA6421215399FDAE71644905F8D2B9B98A1AEB002A48E5801D09F576F31 +57D1ECEA3E9E8FA51640B62897AA5DE79429DC8FD7E6F2591EE60C6085B4641CC3FFC447515E +F6F851133620C2B6C25023BD0B501C18824C0E6875F643D7C47A579A57834F81D8A5637F3A1A +ADCFF234C809985FC6C790E119BA4349B5CDD70B5BEFF6B22333B4C6C4E9BAAA3987F5493C56 +E741AFD0667AEF2CCBCF5F1075D5311D7B9799B019CB578C5C7E98B3E72481293DDE11673463 +7DCC8B597B5EEE3D3D02B909A226AC91323BE6905080470F77534037FF524756DB7FBE61CDCC +FE3E995EC86F1A30A05734A9DD54CCF57F468D635E2C89A5F7CC9E757FD65A1C428B0B80E150 +4A78DB015D1E15DCCDE3AC3B07157F1FFC3662ED674533617162B423C0D3A7CF7BD03A9B5623 +AC8CF5ACDE0965B94C4B82412342A0BB2F3B5CB53CD1AC18A8D2CD83AE2D3870C1242642FF78 +CDFD2D3B7CAB2D0DF10287D0D4EBE5F0B5F60CD7A618E07228D914CF4ECA60AB175305B51FE2 +C9B6CC001D51DA9290CDB11CE21A3EF77CA912F1E1E85FFAAA37284A7F61FF46E3D2FD9335AF +77828BA5CDDDB641A69ACEE641C27753D795ACE0D585C1414376B76B8D969EB54BB83BA7EEF7 +F187A768FCBFE785740F8D2A47906F9AD830B07F338AE6FFFEC18A10431ED07147A4DA373D89 +F3636757FA02B426BE401CC55024ADCF9CB5526AF5752A2D925B517E97C8516D6ABB3A517CDB +9A7AE60E0EEE0BA5D2D055A8FB44A66DFD01DCD490E70B6641ED415B6712E8BF3E020992805C +5AA212E4B4C1F4F9D22AAA8E74DCEC13199DA44515C9655D78894B71B7C42BCAE18E547D4162 +AD7B4A5CAAE7829391D493A4B1AAE29C123116680C025FDD1CC1A144570391926DD557B6D930 +521ABF592AE0972075CE0F689215B9D706CC31390260B1F7C9EF0869ECE816C45B92F2EE2E7E +0379CED53A3F3C781DD5D65BA96578C27489762A071FA448D92C1E0E382A86C1A8BBD83D4E0F +F890717570ABEC6A1632F7F7614628F9322AE019F7AFB775F7F3B4192EC187440CBA1BEA20F4 +0C3797B870BD4E332C20D30E22C136BD46FB060C89751D5FD51A52BF07EBE289E66BDE8A9031 +24B3E9AA569A1B487D69964E48CE57884C55410FA04DD8AD820B03A46F95DCF8134EA2EAD5BC +2219D44A080C417DEA15603586025C561397C5012F59D4FECF2FF49647E9D955FAFBA57AC23A +DBF8C5F824DC5D7F658A9E29AAAE766DAA0687CE4A78EE40AC64430EE4BC2279F1A673CC7390 +DC21876E9453A1124B90897C3AF764D7DB68237C4CD3DF88B76AA3F5D7EF29388476B8BACA34 +130813BAC0AC3D1CCF824D8A8CA57C054DDB72E619091C9B890F9723D45802C6E597B4C383C0 +B5FFF4A9FA0210B71FED71815714ABDCF724A8F6B308963E81472BA0BBEAE32E15D76E111424 +AD26BE744A26BBF993B67F04E3CD48144063CCDACD346AE10609AAA456576DC45EF87629C422 +A44F652505205999CE8F9FA985FB1F04D43BA7E8F8941BF73911027892536258F203A24EFFD4 +39FD6D0D5116617BF3CCEAB57EC3F7AF0AF261DE952AC2673B3D6638573B4336029F8472B26A +CAA451BCC930DABD1E8CF439BE74517DBE609A662412B2F923A582EABC45545564BB6299FE05 +FAEA78F17B2092DD97624C4F6A11ACA7C3904E17C870709EE987CBEC90471443EAA8AC235847 +0FAF0228F6C32E287A4C914FFDA16BA8BCF8A9DF79B957BAB3482C8CD97CDC16A88FA642FDFE +17F99F0678E627E8B146974373B8267B8A28AD57CA35FDF48A9052BF682C60A54E8C6DF073BE +E10A740D31D6E7F15E134052F533F0EABDCE4C76B63AF599BA2F080E4A4BF784D786A7AD7453 +FE02185EF4AE16B43B82AA5F37EE5F02DCCF5C477E55CD3EADC2DB73129846ABC0D5AE3B2975 +E31EA9BD26C638EB9144DC38B3D34FA57FCBEB39052F986FB3AE5162E6C313A8C0460861491C +1C62820EAC6B17CA347CF9ADD938805CE7376D43802639A17AFB5F3961FF93CBED0B54148777 +0652504F8E1B7233B506904B94546F9B748C94E2FABB5A5A36D3EC634017028213130797203C +7547BCC0BAE3021F1CCCC503EE7A21F0553B7831173BB65E2591AFFB0C513402E095658EAACA +68EB3C9C6A5B1896C9335E01383415CB3D3CC76F35E199A7A44EADDB49240A8EA155FF9A8ACD +B4C7D0F8D40870FFC3035CAFEA6F669627EEEFD0DBD054E3BF6D7A80C061694726FDCF268389 +09E4BD53FF9F8A7499197DFB427FDC10BEB9C07BC2147E46AE8A5DBC3CCE425B91D264CBB80F +F5C6371C329541A4784FCE715441CA9C1CF8A5473EF6D7BE08C37F1BF6F52454A683EB743F25 +EB8F487807ADDAA19CCA6D887A25DB51A95BB4EE82CC0BB14E689F5DA373E05F359D72FB72A9 +0A92FDBEEB580BFEFF0D6AB42EC3E338031E292C036B60334C79F7647978F6389A5E4F95F84A +4EA446B83EA299E9FF0CEEAA04F7A424CF8BC3B101988D0BF1A6EC16E9576E25882AB1E95BD1 +202DDEE5781ED939502982C16298F03552F96D93AB7F0D496D036AFFFC079A7163A38FE83CAA +27D0CCFC0CD5398320F74F137AE311AAFFDF2C3A7A6C38F50A54227391E6CB1B566792E5B251 +5E4082622B08EDE96DF5E8050DE06BC565E46C8343ED52A68F4C20025EC43FC7F3DF806262BB +5AA1DCF5E22572242A829F67C274BE5213A600485268D5743538B57E51219610B59EA512131F +82EFB668A1EA0FC3FF976F6A2E5EA29696DCAB399929D66628140551CF9A1C1585F3C1DAC70B +B34D7084B5AA8BF27B6A79B517331F6651C18D8484556E15FC68B7679CB879F6AF88C24A5E5A +360B711756BFB7913E874AD5A5747C92032983B230D06117DD0F82D4BE82B053245E067D5EE0 +6FCAF533CAD69AAFCE561111206CB1C73887F3743A6AB26AF88497F20F0BAAA1F107272BE1B7 +E73DD51EB19E6A3FA68D34A694E7E07D63CC008DDE8E84EFB58D1899A01A06B4213B029225B9 +E11C93A680ACF74716BA0ABC95F36C789AEB6C6DA913486ED24FB4D5FFDA94DA7B66197A9844 +59EF87C79CD01A3D730D561D27C69B1A1CB8F637B2611FA639598C59EE060C3659AC8B7FC899 +909CBC2B0C0CCABAD298E1B43B1CA852E28933636408DF16F09023EB37073BC894D6AC94C868 +D1C9E44C4BFFF564E8529A035025D89452488B3EF8240E5FFE64CA28835FE15E1801C8A283BB +4136BD3B95C5CF99E7333A7EA35B818496DBF38AFDCB48DD9FDAFC29E5BD47B23B36725FA2D5 +6A17FC61DAC3A50AAD29DF2D6106D07557948309D792A84B7AA738E1F80BCBA03771900D09A6 +0DE58BB4F3588AE0BDFE5E8F643AD77944C6046AC3E44BC168D619E54C2F13128800915CCFA7 +3E495A67E3AE4E580B65289A2497161616762CD76E5821976973FD510E37782B2DF52BD73B16 +7D2B8AD37E2F4102D43CEADABA06BB039785EBFA141581C491D156C4669DF2B24EE001BC1BBD +86D60C84FA26B99D5A7E6ED761166143B8E52494933B4AF29464E96EE2B0E4664A8A4421102B +43CB223DF56E1486C791873E438FBF73608CED3228A4DADB6E486FCD120D9FDB14515373D7A1 +AB96DCBEA6DE745CE1E78A0FB0EFA97269231F068C21448F5E5E9D86C9186EADD41D5130E793 +E0FD750E6DC9DF6A7F37356B74AAE6594EE19352DAD474E9DC88C77D5DC1E9BAF4C78F3572C6 +7C3B86A112D6B595A85FFD59C0AB001D9E6DE4B7E35BD3B89EB1C4E1829DC64540BB61D448AC +6EF114F1FDF4B970128AF7011ACEF85B8D018BC25F767CE90FE8A408060AB810BD06862EF2AE +7AB42508806FB4225EA8FF85CCCD31388053B0A926E249ABDE8686E25C333FC89742413B6B7F +22BEEF5BC8FE463F3A6459CAE04903149B9BEC115D1536856BDE80740C29D568699779E57731 +33862208FD955FFD323C980FDD908D897238164BB35EF2EC3ADF978920CF96D943D82BCF243A +1DDC438196FF5A852A3380B3062FB29ED2F523AB48DF397C8427C02CAF456BF96993BEF8E592 +618A23F1C7304B5A4D75938A5F957CBBCD4FD3207E04FBDC83AA8D26A3989D5573CC140E2A2A +C003E79770A20BC23D8F757B2110D157E689DC2703E501E57C51D8FFE30CEDC5D8253FE2A627 +9B25C12CBC8DC89B2B303CF3C611D42CCD797BEB38B82ED3BFBE099B800872E290E64FA1E0E6 +349D0A2CD4DBF35D04ADF63A5A082052FB066E5DB0FFF0EC9625A5E3FDCF00C421C82DAA3445 +755050121D0C9F9DB6B810D571206E6EC178B3C32D3B9AE76B02B425056C714DC6A93CA79B82 +3F372B1E1BC0609D7D88E7085081A47B4164C22F4B351710B79FAAA71E976942B0291DD57797 +A702EB129302C45C1EC09BB13CEC4486B237DB03B58C01870C570192328599541A71CF57E402 +F70CEE327D87E43945D9AD923FB5B1B40D580DD28D593F97916BB06BB94A52FA0DCCFB78C1CB +27A53509C42170C652C1E60EF93B2EF5E66C9C17A59662872C99168A7C90BF229E28513A475D +034745680CE803029D21A20E89C1730342AC6137647117040DC70080457212C4F1709765F229 +D780B172576D615496144A3155A8D45E2EE43CB3EF26DEC58B1CF0B237B7623417593ECDBD10 +196726D5FB5AF786910FEF839F99FED7FE9123E92573C17B18B6ABBD96FBDB00219977A0DE92 +FD294F555DAB7E1BAB62838D18D563A5C99531DFEACEA5168374A542E39577421F053E02FAF1 +C98FDC5787020BE747E6E7F0097A26F79F0FBF7227D53788F43BD60E20554670F489CFF76BF0 +AB9F976A67382DDFABD596A01E70D7C6025BD806967AD6902BA247BB479500B3E8550D0EA326 +2ADCBFC7D7C5B303947AD32BE2AA8448ED3018D0D1AB6547D90BB5056ACFCDDA81B68577FF7E +6183BAB4129D68BC991069C39DEA5F0EE94E97EA0028227FEB455B2D53FC51E5894F924BF726 +E5804B7109D992C83173673BA9A65FEAEC8F4B61A08595E702E17503FE7128C270D8266D5881 +C41BC91DE73B0C1FBA76EFCB699F064581002FD2359B347DE2C158CD116C973381A227EAD490 +FD622FEAF2DFB2F7A62EF0908893B9E86F37AF05A818AA423926E8BBFB994478F2ECCF708F6C +4C0C286A857DE2F70BA8F02E05E8101489CC0E47007AAC6B1737279BE653B3E3911B6395B60F +DA916603EE5030D849D9321441EBE9362B583A2BEDF1BA14578B9E56F6D5DCE8994AD8B152C9 +E7B95DA9EFE15E553C01A6203EC89BCD126CA4AFD8C8640DC645519FF530916D6D8BC60C4670 +DE14944D2E863D0E65EB7E447822F73EBD463FA948BDAC90B6FCE086838C789AAB2F6E7D78E9 +EB87D925AEE6FAC5D96D0F5807B3C24E0774C78F73D696B6272337F9EBA0F23CC3F47703E454 +2FC2480E668458B0435D83D90D6B26B6E85356A5E8EDD02BEEC97E12CE13177A7DEA81E28217 +F52E858E33748322824C9427A34C5FFD884A4EB1A8A485C590D57A1C5D151E9AB2BBD498229A +B2910119EADB0403F3AFA382646556D6ED44A9F7A21DDC1EC6DDC16FD154F3289CA8A98124BE +463AB4A7E0E3AF082709383A52BD6128B5368556B2BA6A41AA51B30A8CE12C10AB1B9D8ED7E8 +0C570A9C2CFE9FE711B55DE6D6EE0B1BD43A0B3B577B8CB094203EABE42AB39FC3B5D209FF13 +AC830AFBD009E4F45634378D3BB4BB5407E462BA08AF090E4CCABF2D4953ACBE5A0A2C097A62 +7EB06DCBF984BDB82AACF686203991AB82A4C10798F924B3FF5D0A4D0B5F2173ED2E37D7022A +B603536E7047C90706C72EE083E36D13BE70F9565BD8503AF3F93464AFE4920A890F0FEF7F36 +FDDC8E716A85EB3A7731A9446C702F2D252ACD76DE8EA1C1FF0BD67440FAAC6EB5CB7D0FED41 +C245F8CACBBC73C81802883CFD8719F4C88374A9B5DFDEA2B72A7E0324C2A99A1DA8936E0558 +B80E0FC883896AD68CF0F94A2ECB88F9B07FD4C23CD9FF0E20D50AD1D91D04AD50FABF796CAF +C14663A59E499915C720C871AEEFDC12CF468F97142769AFF8BE64EE9D95AEAAAA4AB05C40ED +E6BB158F9BE2D64065EA03FE2B3784DEFB7C94C4FE7F3D8F57ECA8B5CF4A5E2B462EFB26CBA6 +51A247915603E42848CC070CFEB6751D6B9E02837B30264664B81F4691564EF5A3239F5A7DFE +913A6496B76F85085F313BEC0FACBE292256A8D8D97B91666AE51CD22D587D22565B73FCB06A +B37F23AD125829AC72029FBED5BC86E9E1E5E3147EE9837F68F67344F129AD26C6E9AD6247D6 +6C9238BE9387CDDDDB44FDA32E08AE937CF0D4B83A3B31E11554A2BE8CC6C911B8E7DFF1A160 +1E98BB3C7DE56725F35EE4A1D6C651CEDF5E90CAE2897D5F9617B9FD83F4E6DB184B0532437C +2C9D0BC533A1883CF88D13CFDF7A37F4D5A89BC84FC4260B1485E28DE344E990D60C1718DA37 +E02B19F5CF7299AD9E41DA21917159E287F8332170FB7291F99E60DEE760BA8F6C173620C21B +637C775AAE461DBE273ECEB12E4E13054638E103F47EE12EF5B4D00294E38B54BE24EB7B77BB +7F2096986A627E059BDB32649765B5C232183A5F5D0FFEAB789EEC826D6F66E6EF2704B8D0F7 +F9406A38E95F0AC4A2072E18F9542CCAEDA3AFB2D5EE6FDAF2DCF1CB6CDD2267C101B7546015 +E26639A77D12A98C3CDCC7B5DC379C674DE513D9E274040BE7E023B9D9858A55B53355C153E1 +ECBCF588EFDF1869AE865DAD98DE61AB3567A3E9759E5A6D14F474479D526FCE794D06B33DB8 +32817E3988834D80818BA23831212C00E8A0E9C53E4AE62A5AAEEE2E546A19F018BC2F79621E +854229D4AC8C1C45E3282C09C7117E1E40CAA37AF81579AC17FF006A6899380FFBA68594A0E3 +944FA8B85EECF2E83531266CA3C8C198B14D0258DBEB6ADADF6870FA2C3E1A4D5976EC8365EF +5CC5A17C383C8C0DE10E2AFBD5CE8962840DF00726CBB981EDED93D760A9AFB58BDEEF4C4F0E +36EE3FF2B6AD4154BD31C3FE971F2845E384E8561E0403C0686F4291683A94F185004BB1084D +0FBE72FB75CE1B3955B12472AF4DC0A8F961D6DC130F75A42A92E9141E8A85433E66E640C944 +76B074ACF2831306ED8BBEC2B4D667D7A6CA517D6534A5A03778540E7E6B04F6663403BA66AF +E57D243217EEDB2925C3BDF89459C383D63325759EE4C898DE9F8B7B3B337D7CD20C8EA00A96 +9D03FC1FE1E6158F3285386F7B519FAEBF2F692D2839A4AF2F4118945DF89D2754B6508E0141 +9ABD7654803E8BC824B4B8346E9A01D9917C84457BE9612FE01989B157349B1CC7DAF161C0A6 +3FCE2BBDC995F556DA6D2F4F51BCA69B11C3E4FAB5EB8F6BAF852AA43417B860D927AB49D958 +BFAFD8400140435CE18CD535F416ADA05390CDB75FC322F9A3E0920881EE2BD9F7EB996C18E6 +5EFC13275E932FF9A386BF72FE824E53E9F895CC928D8D9D6C4138F8B77285C4D684F9F2A437 +576FFED04A9A354B7C311BD3F46C67DF0ABFC3E037102C36B7638C6B724ACAC317CCE0EC0799 +144F393985E8FC09D8C3F635291EDDCBDFB7D2ACCA22A21F88CD704068E9A347D76CD239E864 +B2CF9BF8B9A84312CBD90C44728AA1E0D17D82D120602E3CFD314359BAAFB606C260897E4DA6 +0070750CA8BB6E8F4DDEDA9AB3D4197AFBE5F1CD5851894DD51EFE72E7ED4CD0042031241426 +834A2810D8B9166E9C575210C645CC50FE200991932070C3AB5C395E1392E32CCA6D620D0B5F +79C42F5328675BE8DB56243C515E3B586F351B3F545C34F6C1434C5F26CF8FED5219181D82D3 +3F710150CCCE130CBD08819D9339BD6E60232B07FF8398B7406008AB74186CE720D14D5C58B5 +A8B14B545A685D96C1A665A7CEFE2BB313906C4445B85D56AA9EE0A5460573AC8AF2B9CAB476 +B4E7FE6CF37C942E8CBA96F54C9A8B90904878832E243395EC330FDCFA87CB231AC190C16540 +537E3C5CCB497E20C47C1CA09C3DE884AC8C694EA9718042079B821BA687BA134692263C29BC +DF592671ECFEBE13DA77C9A28D739089C96A145F6D82ED11E59D154BF1831209323AC4B2210A +3DBB132C24F7E9A45730F729496DB04F31E7137D5EC31DBFAA54A5F9E73F1D0F2FE10FDB7409 +2409FF9E299EBFC5A4BF43D95853D6928C3B9F6812385A6611BCA1621EA030F563B2841A67F2 +316F9E658785E5B0B7AE0643F4F7F142ED16C8812A0F3202A777D7F5C8920A90F47F2215E0C0 +C9019F1B038A564CEB9105E8FABC190526C3F0AFC23A71BDC579E694EC0B3A400D92BB0059F6 +AF4B76C7DBD89642444377629BF74068EA154984E4ECC5628EB47DB2B280872E28C504A1E1FF +EF64B398FE4721707ABC9E5288906A1F1B3DC7F7E0C62772F2A4489F6451FF5C40E0146E723F +40A4EF4353B21582EC742754AD6FA9531A2A4000977104A8088484CB5FDA804555A87E6539F2 +BE95FB7775F4FE54268AAD903EC58F231D65E208AD910806B76817CDAD03AB1389660AACCCAC +67EDFF0DA461FB79B3A42EE523C71DA8BEE8FAE3D0B5FBBABAA385CCCD2992590061B1A1EAEE +1354E1CD2A62F9F8791F9C1034A1E50DAECBDB422BF2FE4EEAADF0D9DF9A2C631B6C72968402 +8C0A84B9C8588BECAA78C6D1FA23F5ADC83E1E23907F69232AAC0C2E0070D50BE0A53629AD8B +03E33EB598CFCC88CC520D5EC2FCAB20DEAF9494D0AC6E42178B0C1A9EB93AFEE76C79DDDB55 +81FA85708A4A3FADADF957FF18523B0AB0CAD8735AFD7C5FF20030E31CB5F541C8182C40FD57 +35F00955BC242F8048B0840089F34DD738C846247136E2F5A78D10EEF9D01D77663345263FDA +DD0AF438DEF1252E9BEECCCDE2D77A7BF900062841D1ED29BB0FB66CD2BF06AD3BF201F405AB +3133E2E8D58B741D243A99554AC8E61E00DFF16188A5587FE9A2ABEA2F95DED43D4D8C7FA399 +97E0E18CFB81B54E758322A3AC20619321A7D9F13AB763446BC9394B630A1A27C7A1DC69A96E +D1C376C6E603AB72085EB6B8AA7FBE7FBC5C667E2130C5486D55D46FFF82570B62868F72C02F +976185CED1E5654F18AF3285C5D441E3C0C3691A48112C63F5DA58CC4697EA22D3FC62C09C2F +0C13D3F937AFF5FAAEDCC15F233D75BD044F0528E9F1F4BD9A20F3E404B837D2F5482188E8AE +AC7E244AC7C403150735865DECAD94405F17B13D51AAB124A5FE57C436A346DABF3F195A6509 +CFE0B10CD4B9D41AB422FAD359BC2580D5E53ADD8B6E651A786532A44B682FC066B4DDBACFB5 +489F02F2DF0D6993374242676CFFBE737A893EAE0140A3A9B90F8B17B81DA64CB8855973C9A0 +4B71B15D9849636FC4C2023769920D09EEB6AFCBBFE33BA25A8FB3317C38CCD2A9FE04AFDCEA +CEE9B41E724EC350738A987DDEBE3DAE187AE91F2AD0314D1B85FEC2CB8599CEFA813223C353 +0EF7E4BF2164090F908F8B5496465DB762EADD8504DCD2A1816F14605CD48C1340BC91690BCF +C058AE38C8EABD75E0C35A1FE4BDBAE7DF3E6FD7B1DC5799F1A3C4A02088677AA8157B44069C +DAE1057E6A1B0C88510A6DBE47686801B932F95575DCD19400B9DDA843B5AC373534B5E932EB +4BBA3CF6202D575A49820FD6692394AADF29D5B1D85F5D54223F085A08E9AF51E14A6B9AA71A +2E4F0BDB84ABAAADC36E5CBA72845E2D0AE52F7FC3ADE8B3DE667F42E0FBD525FA6D63283E8C +A2B58578FE1D1E75D0F8AE4A916007140CBF4FA4E5041417163B93A45CF2C1DD6F2BBB7AD8BD +13E08761B9D01956FC5D32D47F9EDD7E614B8664116BA3AEEA465B8671A014BA047CFC0ADF88 +E022044914D71887AEA1057C40790E67A047899DC02682F7B2A0743F00940460DCCB6567A075 +25F5E01F8A32A7800B16FD00C3BB2E492F124F769CE4A9F8A1D7F0749B65F87CECB3A75791EC +D4BEFD86B6112DB9797B93A4C232D75CCF6579127F1E9598EF4304DA6AEE837B27981795033C +8ADB2B80A559A35DC781B651C48FD42094D82EC47EA39CE80559977FFD94F1232B4064EC378B +A89456CAECAB8F2920172795A1984704A913CFDE1F1CE8C7068AEEE62EA15A9B7E77293B76CB +6B0CC4D3191DB831891CB16D05860A4E26F2F061F0F32F1C259C4C8DD955F168BA5C85757827 +F8C1F65548ABD3E553ED02D02D70A77B0B64A40FA88547CB016F801D77DCC7FBECF52C1F8234 +EF7D9B79978BDCB134706F2426C487E3232939BE57B0530E5A419A0C1C3B6ACC53639383BF9B +864A75EEA32E6BE47E24639C24021423632A8D81209A6255AE099195ECC3C30FCE09FF500CA4 +E9B537531F1063A34CB190FCDCD2615DD47CCEFD82CF2F53BC9B493898692CE7426E8BD4447D +24E1544B570EFABACC455ADC0A452894325161D64A9A834C5943E54124BB8857B2BDC7E62F2E +A63036EF5C754B6C5338A64681C6397F1D3339027AF8733521BD12EB29811069A74EF8B4D38A +3F8DD957E94CED693F0548269F48A6DBDF3C1D6F208E7943D7D71E0B629ED26EBCEABDEC8DA5 +60BC182C4CB9EC25579BF0F416B54559DAA4967818FEDB1FEC483CE879BCFD9E950398D5B787 +8053038C3510F72DDE1BE0CACF1E4A2538633992494A18146D4C8D2D3251813E7252161EC3BE +AEB6EC795E49F6541C18531FA64976A606CCB30CCA0238EC9B49703766A21B1CBD98909449BD +D7185A597BE64832C6112E0CA3071BD14C0643CE0FBEF76E41BF50DF95AFE49855428616829B +D9D364B6F8F02E33F2DB42E0E82D60AE777F63F55A333B870C1B3C7528314C0A20BDB5679C65 +4FDE4CFD056B5722058471CF5376F0F57FE73244088BDC8FF83EE901E68B9D1AEC3A139D1E91 +883F41868E3BC343AA65419D05346D99650A7903398A7525DC749462784736EFC9B8DEF6E77E +978019B1527A502AA4D25175D4D9DA238088753B8CBC0DB56C33E9AC25E54B5DAEDC1266993A +0980699C3F10567A73C05FDA77A939DF1824BD8431E486184268DEA26BFDBD32C11CF67B9EEF +394729AB8C50E514F09A19B37FDA0BF0C281C44966ED33073DC6855C4975B5587B8E77856D1E +F89C1A9D67AE6D44EADFE7050BEDA4333E05770926EBA47C8B4C45437977EEB2F0D5D5371859 +045D4DB56F2C0EF52CF640271CF5054D8BCE5CFCFC425444DEF2BBFEA260B3E921514FC73D74 +47A016BC4F34416221A8581DF39EE9D820F1C06819874F692E178883980367F395D9B3C23266 +21A3AE1CDD858682A07DEE3F87351A5A7F219D3D98B000D0E588A9855D03419AF81225080A03 +B3D8BA92F81371A18F8C3537641E9F2223B4FFECC061B456EA13ED27CC5A6ADA62CB03AD9559 +DC2F0A48CB42693D99413B4CAFAA0C2E945AAD54B8968216D0768E26B5CD1049315EC5769FC9 +056C2270D60D8E9F3DA034F473F15701A20616B8C769B5C9A4C8B7BA9FEB48084599761E4209 +CAB227A2F09ADB5ECC95B8567AD27F09C6BFC9A74EC4E70E9DA1E8448DD0BF743C2A5887EAE7 +5ABD51C0CCF34A81CE3CC5DF2604E9707858CCDE9D95E1435DBE0F863CFF4152643B2CAD38EA +35A1609B675CACE1E9AAA1C52DF01C69877EC2A56C87FF54AFDAB4DA74DAF795F92610398C1D +0B6FF98CE3598EC37177D3084E7C3B11DC23032DA4B048D3267BD450233CE69A4C6F7012486C +E56B399A95D9BBA5CA38CD5BC8F4DA4A292E7AD7E5A62CBBAF117682626AB1BD9EDA22D551EC +265DAF3A690CF1FE150468ACBB2AA9A8113E1AB49DB5FCDFE4EF23195A67B1BACC2F89DD3823 +73FE7E6A270C79E86E4BA24B26CF66FFD954570E335CD8914D6CFE08CA27852FD9FE133CFD88 +FA4108C3075CBBB298209FC0617056FE31F7986E98A8B733B23A1652894C24B725392B37B5F0 +FDC6B3E67E70A550398261F2E3FCE5B8634A219BCF49FC02C5F4AF2568C3D51FAE22380D0A38 +FF7F5FB75173DFB43DD97BB597700E86C1FC0C026FD81C5AD4E25A1155A3D5FF5B1264B26992 +9C63B040AC5F8DF0C0F498A0A69A7ABCFF4302B81AD5FC53D2B656EACF4DAD3789CD403FDB54 +3B6C7B9F9DBE57E10F59F4BF7AB004C87FE75F889AA611194B1BF9209C2F90026F2294DB6880 +6A82B6AAC8EFDBB1417F621DCDB8CA15CDBB5C23E8F290F3A0FA9EAE9F460B7F902000A07C6E +5B43046EA145D6208EC0A94D5702C1F8902189D6E6F43F03BBEEB41D424BADFBE36D64BAA0BF +D679A3490CB84070D4BEFE69D9E485139A911BD7AB3774D14A08DACEF76E9AF2ED5E09B693F4 +5C61C8249C30CD4A9CF0584C2F5B0FF5D0203DFE13C583034E6526AB1936F419955DFEE4D473 +41F3B8782352F9A303EDEA8259D8EA80B9449050707FE51A40CBFFD07B2E90D6DA4C702CF526 +49CB7B783BFC85E4B14724FF5AC5E0A45EA837135ECB97D2B68264230DFDD3A927397102CD24 +2E29CDFB1AA6C4E5CE18F6A19B9AE4426A5A237A83C0CD8589C2FBD338DD30BDB5CE8253C8A8 +089F7F3E6D07436C2DD9BFADAD45DE62D5CE10CCECB17750D86E0E4C0AB0447E3345E918B7F5 +FFCA751C8607528CBA4194DD932FCEA33A6DB1F327B0D30DE77C6D032379F4E6BC69785DD6D8 +AC4466D569615B9572C435E735DEFAE492C7DDE4683C88F95BFC1F282731C6A869687DB04903 +0988E6A2B56294665429821F4C7FB843FDD1C4A9091E829AF4948DC4ACBFBF6BBB5E796C9148 +30A71E7943DCD57B3235B7CCA7ECCEF812646DD512DB3436CEB0D482495E05072961ECAC2CC6 +0A91DC73CB2B7B6F6E2ADA4EB4406009501928E4F9FBC465C09489157783772C4FAC7E68765B +E97D928120F40DE62860BBE108944F38421211EE9B3E89E6D2303BC7D3F17C8D88A6DF644796 +C57F913D2AA6F67B834D464344E74A848655808695E17576066AB8C02449B49D42795D8D6BAF +1966C54CA3BBF76BD2BAB9AC391D0834C78AC4A8C6B3F083E95E32FF50452CF2BCC096F824CC +40E5C9FAECA6A3AB9072BCBEDF5EB743AEF6BCC213EA830268F78C8ADD2F8C92BD0255E51C25 +BDF0A0975C11279FB6DC99AAC0BB55C8F2228C2F198CC2166A15C7A3AA72D3950B42B33A1970 +0D7B19E9AF6EEC6855276F4BB78C422E36BB6963C3A77B2A71BC41A35589D88E2ABAD51E7EE8 +E6035C71605512DC6340A352EB2F9C4AB9A80874F090A39AED84FBA9FC899A8EB4567773BF07 +47BF318450A07D296125F154B02D0D7A5B4DBB8CF340B9B0556B27347E7E3F603B9224DA9536 +49A4BC0D2CACE52E1F8206B401558037F2DB3DFB7F6E9D883AABA291186B665D983901513F8B +FEB36AC358DC769DFB94919DE787B83D42B7C8E9CACF3CAFB7B7D115967FCB10F02DB2F442FA +03B14A8D3251ACA969BFE151C0BB9343CF1190FA2E91CC95EA3175BD9C17BEC330E53880DE00 +883E2BD5D43A68523B1AE5B9E570BC5B06A5979A12232A815B84D36CD926FF57FA3BD92C2079 +F2C7D190E73160D812263A0B11A152C23CC47C318BEE3A4CCFDA67F6090270661C2FD3A28416 +2BEE9D02E3DDDA3CB23FB6B4FAFED873B0B6D3D4A2E52152E40A202EFF2F146A9F9BC21EEA75 +757CD14123EFF94B7EDEFB3FE3DEC95D18B9E7E83112AE84027797333F99A9169CD75CC3C55F +7F84296F24D8D24C539ECA92991C2746A9872270516DCAF0A46ECD73626389681674E0B9A69C +6B377935B683A0376619A09CC0F16F249D04F674597C67400F14E747A4D12A026AF20B36047B +3B888682003ED054E0653679978970D73431916BD6808F957B61491BE3080F2B7257545E2E43 +C634F21EA7CA84CB13D241C8F6F9E776246F9DF3AFBE6EDFB2A38CAD0976025E809361F783F2 +66D814F757D0D09EA0147603B3D770315F23596DEE879557BFCB0FAD6A85AEA565362890D97E +0394C94CE88E97CF90DE3657567B8AE0F435DF4CE7A701EEF338A925C04B5B2BE4E14E0F683A +DEE89FDF4CCA100316374BB921CAAF9D810609F4ED0CF9DBB8EF2D3788B94E0B38809615592F +28A3940F4D3E770D4F8A57FDE433E51AB052EBEDB69626B017354AAA29FBAFB97A0A51E05928 +AE684E8BA5C7A6EED603C14ADB88E51F9B5910E06E0ED3F4B5D2AF7BAE61678C5C428F541EB7 +B4C4358E66787268DA589322A3AD91EBEF430065D3B77973FAA0C0997C48C887C64ED6E9C8BF +C5D559FC1D07B396E59E464A7488E24AAE210A80E8FE953B0DCBCD1A7F5CA47271A440ED22A3 +366991724C3BE3EFA548A94AEF5CEE84400CC11FB5FF12D8F3BBFC5B9443795B9DBA8FEED4FB +62309220CACE8312554047C93FACB1D8B3CE68F5C660FB59A3A3E074E6242887210D6E19D0AC +B8570AEEC3D1A135C90EB50A72E78ABE7B74D99020A1AB6424883CDC9EEC1D9BB1B2D7D59203 +AFA768DED2B572BE1AD1F378FEE88A56090CFA720BDA691E0973D76332394DF6E2DA5285FCA4 +81EB3F62ECF93888F63747187A67B2ED8C9915F192F79530B93D466B67371C18985ED167D02C +5A0A154FD77F48448A7FB1774AD0FB5C1EA913A6C2F3B9133E7930FCDCA57BF8B5F972D8BF9E +BD7B797EE20A4D2A07FF73CD010FCD45C5F70FDC55238BFA1D734AC6CC162F8FC1C415F7187A +F1E2DAE85D84CBA277CA4E905D017CE819768556638B48FF668291AD93CF76DD073B8793DEFE +2A8A930A101D2609021691C73499AAD7F24B7210595EF2948EB939B3852E3ED9A60AB5DA491B +A1ACBA284F530FF3810FD22F8A0F3BFA1321F2BA6517A2B306712852F38B517C0CB43AC41606 +BC58CE1B2D816983D5E2FE05BDE1FD1B1BA1358C58F030E210421BB3B1E38A141776F8C10C16 +163D9EEC679F4D1533C5EDCF1F30CCE53BDAFC1C85E334FC83B7CB3A45B39A4A702880CBDA25 +988C008948C321958555A63F005953D028D34E26EED4376FCF3B54FC6E9A831895D60DE0A6E9 +075123393E30E576D8E22E419A9FB49922CCE6C3D483A719D81F58FBF9CC8ABA28D7F47F823F +7954CD0F9DF05C6497354EF22E4BE9CDEF8B8B138D9F5F10E25D2002A4C5AAA5A201CADCE2D7 +4FBEFE77661CBCE89BB92BE8006CED49BCFB3ECC154C37F8D756C5CD3E8F0F3981B6FFE669B2 +405794A78236280D1C71DF79D2E89893430C639DC0D3A88CC8F6CE63B573D115E82A74877B9E +DF3825D68F25971ABA55BB4BA1D201F1DC86776F4903E822BEF3BEA21BF387C7BE59E18526B0 +555EE0A35C06E86F9B36AFE0C20F6503CE465A970CC74AA5C7880538ECD12B9D8A7CDFC12E6F +1B61B925B5D57B70D1EB4F4317247485596BD13CFFA7B9E2F43CD727CC9334D21E1C6377B586 +56C86123E6090DD0652EF29134AB28F9477139D3FC6E6C544721C322188D4B3942D47DC53291 +5B6B1BEC14099FE1DCB2CC8EE5E0EA6660BB06BBE7864DC11B637BB25F9772C55824E5AB4D36 +1EAC74BB467E6C5005E28CD497B9050A08FC2F009C770D1F98D8C1172571EE5DEAF1DDA84C20 +29FC3C7CBB54D063DAC5DB45CB750BDB7709A5D31174FF3CBF74D86DA563356A9E2074B9A22D +08ABDF3DAB44EA589456002D0022CDC6F67AA5A758889CFFA2B4C88BA809DEEB7BCB492CE353 +52981FA080EF8A5C34C68823DADE7095B35C8548B3B6160B7AA57A0609B270651AF9AA886724 +72D4A8067E93E0C594CA3258DB1A8307C6C26C87E4A23DD89F7E626FCAD5EC3E3A201026585C +8527E64EFC97FA722DB6135558314214917C35B4F79A7A0F0FE547F97043AF46A6CC772C70D3 +FB72B94B160BCF2925C19C621BBD52D5CB407673CE5E9D14C3CB661EA444127D2590984D75DC +3497E72EF16E79DAA0C276BEA678669A8B967D0DDB2910844F5D0902F1D3578D73F16E35EEE1 +A338589A0382062C0594228E53401E2861E6A13F244164FAC7AF3290644B78305B7E4BCB91C7 +70A9DE4CE035EDAC884785BA99154287E0A7C41741FBE3859878B8580BFA36BFBC18122E3A54 +5326DD069459266108F06B9EC0B1755B684739E560D3B511788A9C48C34CB2CB2F342473540C +8DEB154B7448139B86C35AEF9B6FD97C079DD9E51465A07EFDE868535481124E25708CD54285 +914ED2AC81E328382E14539FA65F32EBF9DB1B22293572014F2980D37B9D5689BD98549041F5 +F178BD86A75C38F2F29C5606DA803A3B9618F94B5236BE1A38D12A596CBE14D0FAF88498EA64 +3A1C7FA56F5074D3F6C175FA4F7AF11FA361858D132A38092A0FC3B6C2D6C9914A285E454143 +EB9600A29F21CADDA1C0BA0877D18270DC0464E84C3119A56CC60E3CCFE9A9796C57D5CDF4B7 +32AF982717B2148A67B83E565C2D28805202FBBBD7BBE3920A919409C364D436F2B222094ADA +731A4A8F3A1CB2DD2041C4A87F6FD5B1F185A8752782167702D29CA1C91358D76D87F70269B6 +5D92181FD52916C4623E4AB4B39479F22DA39657EC69A06B77E74EFBCA39ACCC3B8DECC6533E +250999538C03ACA0FF2F636B7D851FB41798BE76ADF8D614191795FC7A0E0FCDD273F949C196 +2DCA0F07A3B6A364F24D918166080E038D33E32941978EC16A9E6DC6FB8F7C11B065E786B153 +E1645FA7D30168C709BE95350BB76AA79B64318D6453020E108B5C8EDC4A7F6B6A41CCB43BC5 +EB174D3E5F333673FCA1369229B56F7B25023C3A9B517A1A9D2518A1687F6FD037AE52F9CCBE +FB1F77DFE310B7F0F3E99B8D43344C38B7DA4D38FEE24479F0919A11E83E5BC6870836E2AC25 +8AD31C50510C31D6F6644FFAFF4263581C1C40E7354E178EB07F9E245A3CC4685785E1E8162E +7D138BBC4F9596EA4734C43AD5E9951C62808C3FD7ACB8B5FF112C2EABF16630CBFABD5E376A +7F9912AE59F68CD9584CFF17E73EA6B3ABEAB36F29071B66D4AE0ED54E2A1251A0E98BC74BAF +6DD30AAD8CE5E19EC755C562E5FA345A12ACF84BA47F440588630B8D765F0B158B472DD282CB +7F5CB5424430585B4D4039B235582BAFE6E9407A20FEE8726ACA103A464FA2BF30F8B9332895 +239B1DF31E3F9DEF09D073CF9A1AD45B32ED7AEDB944E2B024A2ED263F3280FFBC5A51F369C7 +27064E6FEC61FE2A293A8F8D8611E285C6CD3070F06C81913D38C5F2235A792B6950D3C27A00 +8CE1404384CB1F50E8F526EEBAF3B87EFFC9E8A52D107ECDEAE4403811B0D1E58CF8100B13C1 +6136194D4560F0800D8A63A360B3D9D0322F64FFD30F7C13B07D2341720DC1C10517B69B646B +8C559D3AA24DF591CE601A9C2F8857B762F78D6DA84B4A341FA965403DB7B8669828117A3284 +91E30DC2C2D9C37A4548BAE8F5C98F13B55F5781AD13AD00CC6B588BF99E77E7353AC90000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /alpha put +dup 175 /beta put +dup 176 /gamma put +dup 177 /delta put +dup 178 /epsilon1 put +dup 179 /zeta put +dup 180 /eta put +dup 181 /theta put +dup 182 /iota put +dup 183 /kappa put +dup 184 /lambda put +dup 185 /mu put +dup 186 /nu put +dup 187 /xi put +dup 188 /pi put +dup 189 /rho put +dup 190 /sigma put +dup 191 /tau put +dup 192 /upsilon put +dup 193 /phi put +dup 194 /chi put +dup 195 /psi put +dup 196 /tie put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /alpha put +dup 12 /beta put +dup 13 /gamma put +dup 14 /delta put +dup 15 /epsilon1 put +dup 16 /zeta put +dup 17 /eta put +dup 18 /theta put +dup 19 /iota put +dup 20 /kappa put +dup 21 /lambda put +dup 22 /mu put +dup 23 /nu put +dup 24 /xi put +dup 25 /pi put +dup 26 /rho put +dup 27 /sigma put +dup 28 /tau put +dup 29 /upsilon put +dup 30 /phi put +dup 31 /chi put +dup 32 /psi put +dup 33 /omega put +dup 34 /epsilon put +dup 35 /theta1 put +dup 36 /pi1 put +dup 37 /rho1 put +dup 38 /sigma1 put +dup 39 /phi1 put +dup 40 /arrowlefttophalf put +dup 41 /arrowleftbothalf put +dup 42 /arrowrighttophalf put +dup 43 /arrowrightbothalf put +dup 44 /arrowhookleft put +dup 45 /arrowhookright put +dup 46 /triangleright put +dup 47 /triangleleft put +dup 48 /zerooldstyle put +dup 49 /oneoldstyle put +dup 50 /twooldstyle put +dup 51 /threeoldstyle put +dup 52 /fouroldstyle put +dup 53 /fiveoldstyle put +dup 54 /sixoldstyle put +dup 55 /sevenoldstyle put +dup 56 /eightoldstyle put +dup 57 /nineoldstyle put +dup 58 /period put +dup 59 /comma put +dup 60 /less put +dup 61 /slash put +dup 62 /greater put +dup 63 /star put +dup 64 /partialdiff put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /flat put +dup 92 /natural put +dup 93 /sharp put +dup 94 /slurbelow put +dup 95 /slurabove put +dup 96 /lscript put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /dotlessi put +dup 124 /dotlessj put +dup 125 /weierstrass put +dup 126 /vector put +dup 127 /tie put +dup 128 /psi put +dup 160 /space put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec + +80347982AB3942D930E069A70D0D48311D725E830D1C76FBA12E12486E989C9874C2B527F092 +5722787027F44470D484262C360CDFDDDF3657533A57BB16F73048BFBBFCB73A650484015441 +FDC837ADD94AC8FBD2022E3EC8F115D4B4BB7B7F15388F22CC6198EFE768BD9FCEB3446EE4A8 +DC27D6CD152485384EF5F59381FFDA43F2D20C8FB08AA27AB2015B774DB10DACFDCD33E60F17 +8C461553146AB427BDD7DA12534BA078AD3D780414930DA4F8D58ABEFD45DB119B10EB409DD8 +97923C6E705479464A4B310B58348C4B42393988FEF4925CF984423AAF65FEA9F0E64629953B +CF50B919D968D99BD185F83112B2759CC411764E9BDE677F57C5EE5AC555448D5F81A16259DE +D1E11BF4119D53E8AB07A802DF900D3A2D5CCC1C6876D29C5E9EFFB7AF3EF83400B0910C0787 +3A8C56FA7B1EB1BA426043B00CC95DBEDC6E136CBBBCB3F67509964F9F281EBF81FE5B018122 +EAF66C4A838487E82E186E006093042848A903EFB3469AB6B4049767AADB95C30408DFD58D8A +10F4CB22168DECD9F3EE100F07B49AA44C92139B669CC312BA20192454EB2375BE6284B02665 +9D964B96AE82D4942E758027FCF23C25ED01115AF27CE7F20EFE2A822BB684004F20243A49C9 +E93301FC21B80815C033C3E2BA58EF53DA2157D524B395F2B37ABCA13BC6A2F42E824AB7E471 +06176B0D6DB267FBB795AC7425582DF2E3DC55863468A9200742BD7B552C48F8CF58BC21343B +D3B95ABFA140F33F37C6F3F78B0D8A5154EB7C1F62EC598267F13E841A3E64172663935AC8B6 +65D86540D316DDECE329C008049C5E74B27D59022C5515059BC3B89370B1BC6A169C888BB325 +E0B74282D6F053A50DA4024ED1E433271A32AB8C17D41C632B41CF9F3ECD5FE124DAF7AEA7CE +8A63047B245822930D517DF7BAAAFA69D2D17F7D93CEBD47DEB85405D720DE0BB4DCAE731A8E +27BDBB6E6BE38D168B7DAFF815ACFC32CE367374BF9FD98C0AE5BA1BCCDB84D94B5C173ABC92 +F7D18E19A68F64A2241A0A1639108DC46B8A04EAD17662B7BBFF3D3D9A95D5937698573BFAC6 +4973DC8D8B8D9F68C52D0C133119ECA4FAE72F7553D276C817003234A98337D7C037C0F1BCE8 +A80457113BCD97515C002D20F836FA086A3277727873EC2B64A92BEDB01193491134B6692A08 +DE4A201A3F11DBE070D797F7629AD487D2B8DBF89A0631956C93864A4460AA3BCC8EC6B98DB7 +5209AA1B4A2E2B1B9866CC7F3BEE4E0EB0DD68627A97A3FE6141FAF10A2CE00391796C5438DB +AD93FBD065D1ED7E8B7879E0D1BE9AC145B9AA91756EB6EB81146048072303229CB8DCEB133E +572EC8E2BC954BADCE75356EC8EA0C7F76CA08533E874BBAEAADB89D86CEB974A52DE0F9A434 +80E5076265AA6EE49ECC896182E6091EB30B7DA8CD0E3A26AE7FC03BA5C0D56526ECC6F2D6F6 +91D84DC9E7DF306863FE0B6DAB3CBC588C28292DF3F7A47D9C4E3652C72F6BBFB3F4983CAF59 +C7D877103DE7AD73F95A100AE860B4E55814F00A7026C306E85B8A48F8F69CA48AE710950A2A +1F2892F31A3849CF917002086DCA5F66B84EFEECADAACEB33A0932E394A5E17628D52E725FC0 +C69E8B00C9DF81DFA32B2970756D947A9F56831B19FA3A2F2795017381C05919032FC19A6B8E +D2D0188DC35923F486A62C8AE61E0A5BC681A57DC20223629C0339F67D689B63D842909188E2 +CB82A4E0471B9F17CB8FDC6A6D2C3AA6FEA17A756B4D4860FB72B50CC39CC7E5329DC202A5D9 +0160DCECB7ED07B9CFAEB7E766887C9B93727E5DF348FD2F5158A2424F443A8C72811CFC9CD9 +E2CE8219667D7364E85BB01D8CBD63CC11533CB0D14B793D5E1DA99278E636CFE6A34AB61D46 +44DFB5939746F67C71EA1632A43F457583D3478D159400E04CB7BFD0011048ECFE912EA5B72F +6C01F941C78CE1FDFE23370848D6DB1C88D27C9118B3C8C8CF0BBF33FF12B509D3594E187F52 +05B9E96F9854002E8944B8126A8B2B41BD572E7FE727B10441F3B4B303FB576084008DF04128 +F28A3BA5BF987BDD3AD278F316615D70634C47E6C924A9CC634A249D1D57DF395AFFD6B0C524 +68061B62CCB46EC8CF95AE99EFA5DEAADC48F433ACE21B45CB502F37F06EF95B4D8880FCE2EA +E511E2F7130A96097066127391923616B95EB7E3D70CAED613BAE4F2D65E6AB1F81D63745FCF +A57A9BC5788BD1288607539A0EB5D7C139FCAC70436ABE12B7D57C1D915C3AE1575CC7EEDC26 +297231B8A510CEECD3F0B291782BB1C342BD44219F004AC2F1A869F1448354BE54DD59CC8CC8 +DEB38E3B8F4899845DA13CCB707CC10D715B01CF3D7D3BD1246A449F90E96D40BC79F879B7AF +43B7A09D9DD4884F7563910E4CDA099284CF094D1D0246583B01F1E687F0A365B463E7C7B4F3 +70E924900712B02B20792D0DB404E08ED5ABBCA0F1F447292857A96F3F73CCCBC73F223C7FFB +BC96E095E349CC72D2A37DC40D196FB55782050E83C7097617FE0D2C663D32A7F03460EBF9E1 +904A12877EE0D4A4053BD5B673B3B65BDBAF76D7BE76E4F49A0C0912A87BF7BFEE30BC1E91A9 +55729D55B0691D2E573B7CA693ADA3E865E87F4C48122AB163919CEDEEAB29E83020E4391D59 +00AE2FF0F086AB51FEA2FBE72549C4CD3A674C8EEC28AF24EE314876F4ECB7F161CB9F55A2FD +8611C48F3E8396DF873D8EFD9141474A86B8906CC01736588436A3636933ED22C8B8D97611D6 +26BA7667B33BBB0DDD4EE1FDA2E89A3F03A18516456C029B96AB181F945C6C81990E19A732E9 +ADE2DC846D19386E874ECF08F33C48C812BD31E6056FB1ECB4049E6C66A5FC814A77709745E6 +9A645627D45362E798F3336BD9996C42B37134CCBD6A4BBE9D938DAF6EC6240A4C4F4DBD4E68 +1C77127B4D3DCBC7D770AF6FE20529F19FB6B332D0B6CC01B4E4B2ECFA05F2F768775B311574 +F662C4487683A979D3A65E824E55EECBF4789664EE971B374F62F34918524BF9671A57C8A7BE +A7518A1D5FD3B27A5D116A6B0F9E3A9E4CE276A5D103FE6A4FA0E28B6F68F5A4D89C032B298C +B03ECBB2E1D94A4199C6255D93BB029AFAA00B7D6E658713FAF433F2777FA3A0AF6F898D88A4 +D32FC6C3E0D8BFC67CA1AD7B9D6FEC4A2A99325D83CBF1F6165842FA8D033D7682EE635A5DC1 +185DE824BDB8EA5BC7F3BC046E83527228F17459BA440F783D08F1DD156DC0BEE9E8EAB6F8B9 +950C39DC03000F0488EA4071047ED99C550FB8AB843AA639B6289B7284EA8E69AC785AA88066 +D9F3D4090D01878D960DEAE07C2A13B8015556AB50AEF2BB8FA969764D3CB40AD44D5A9E548D +E2BD511FB8E38AD40181ED288C8FF88B04120295677DC6228939DFC33B7764BA80C32D4664B6 +61D7407309CDDC605428A7F4CED1F86708466E0BA2F05D4DD7244A803341D0B0D86E48DECC59 +25A75DC331472BBF13E3D024B85ECF438073303ABCA65B8309BC57E64AA97C244F6B89E82B17 +F68D520E28182F101116F48A34E349107DCC6ADD53F2084CD42720E35946F520E56669BD5EAF +BB02185D6EADF788D2AAF54D2E2C2ECACDFC7C91765BAF663BE838114B333687A1B7DBCD498C +8A28876426B354E6B5556EA862DE3C0305645B75235A32A2AD5DA5C9B9CA573D6C88A3CB4CA8 +847F60F731454F264150DE6EFDB9BE02E6F5B868DEDC1E7C55F2C46F99F80AFE84260B4D94FC +5947754F7D98E96D932DD3D13E78ADF22B9A06360B38E7395B7E2339C07FEA445F16C2022C0E +B8CEA6EF469AEFBA3A398FBF747F271C26E1870A86732E4D23B9BD9A564CAB079620105583FA +E5EEDA2B5395E39DAA46FE5865D29ECDBCAB4D5FFF236CA8834777B0D1CD347DEEA5EFA2F387 +006125E46AF358867E7CCA258AD4A5222373749041225381D44BDB3BFB3661FC5CB3EF365444 +B2D19559411E3861C3468AD08A3330D842F16439E1C7CC62F639EACE059BAD656B292C9D8C3F +F72FB53CBFC7F942A57C78A9B4EE3C531413D57C2EBAABF4F32956626AFCE2BA1F7FECF1D36B +B77BFA4DEC303C0F3B0B011BF3A079A32DE973D5198F82771ABE8017F9D0D40473B996CFAD73 +A36D4DC52BB211880E1924CF30E191C1BBA6FE59F54E0F0DC2471BF45830ECD99893A96E136B +1A45EC4EA86E357A5A8BB49B2161AC9A7472454D5BF9748F34177036D448D14BE4171F0B81DA +E7008F0C3ED828FEB647F0D06661ECD3997B3D87648CA02D3B6BC5AF94CBCFA12EA2B41DDE42 +B61DA7C83CD97B66C7C0EE10EF0A4EC5E063A24B5AE434C55753E6A8245A0F745669801755DE +324CE91D1CEE35E5B44CA4D6CE8DC88E15057A20B14035DB0B84B4E9D938F68236992C1A5F3F +7620D04972807F8C4FBB3A610B5E3C5295E2A34C14504E2DD400019A770A8F28344B981DC493 +976B115228E575B89406EAEB7FAE63933FD79FD29A1A489DC4B5C516F09830CF7DF23889ED50 +2457176F21D1D3D192EC42A5C39E7D301D4BD47CD9B56191C5CB0D1923AE941B336451EC95B9 +519326AC3014798A56C22A9CB24FDDC6C46184F14B6068854D0FDA7192F97F7B783B7F51053B +3DCFF411F4C965649F7E61880B194037C6C69CB15907E7989F4188B1B1FA92CCB2EC1F43DD09 +6B3B1D991DE5882F43AF1E023F2A4437F684757EAFAA011EE65F1D9507E79C44873366253EB7 +84CDE128401BCFFCCCFC56DC8900376552F45397EF8F5D40D5D1BEE737C6C307A475819A5D33 +7F4B02BF28461EA571CDD79F39F9491B37108525EC550E9D8A90AE63D56A1A733CCA38407505 +C1A7690C67529EF6E51E117ED62274135F8744241CF456F827E15D512E78DFF679A117FCD7EB +45D7818BFE675607F002E8902B6A179B4210296EB19A6B5BC646371784FF5137220B6FB81DE4 +5FCD8901A4A0FCEBFCED40F456F6F09D59C66B0BDE0EDFF2070D64B1EEEAB48C1885A939463C +4ED7E10D194A31F9859D58F160C881C7E7679052EF3D0BD0037088C5BE74CF9CD8B441655AC4 +C21C063D5CF157E63D154E2A3C0FA0A1B796B7EE86207252EAB2A8F6BCED4901CFD178EF5B0C +BF5EE7CD9270AD1B1055025C14AAA045A9C2D6F01A9AA133870EFE0A7FC63104EC2B4AFBC027 +7013E787E82B9581B38E70F585F4F2E01E4E7804ABE534F97D8F92C460A609492ABAE7D236E2 +70CA04C2E5ADAEC2BFF1F219208B2F8BF5CFB5F13EE94D3B9A601DCC6D9AB03EF624DDF287A3 +A950856F44B3A31E54D64468BF8BF92F4432937DE368FD31D7A2E0710CAAB3D479B52105E910 +787A4C6A97C11496550971442CD159755924C31ABDCEA68A874A9C6529DB2563BE8880576C07 +7C4C5A20262C89FF4391ABB2DFCF24500708D191BDE0FE49FF456AF3D8355E56B0729BFDEC11 +884ECCC7CC061B44F48766D6C2F31793A5898A8F5900587995A2A19FF4619131F5E665C98C19 +1C2D6F9511DA129C471823E78138C038B17314B37FED7AD3190C938F040BA89E65EA6DF47460 +6138937EB395AFFD6CCB55FC0371F8BA2650CF2846015A912D67A848D29B06563A76A65B5CDD +EF34D1B76DDDB801B3CC0B910B8487BE26DAC3695DDDEFDED0347228D046AE30B64637C3DB66 +35E697493A0E72AE1C2CFC611BB42F9138F608DB7DE51CDE8520CAEBBEB05A29F7578395CBBA +7B01DCF6AE7664EEA3DC1554A62028DBB478A18F6EB6EC084917427CF6D40689468406C923BE +93E0A8DFC250DE798B7211E91855FF7CD3DFDC9D0F67E52DF1AC3C2020B593C77E8A5E6FC3D5 +7AF2957B4F876A90A9493941F316AC9C1CD05F73C1301537574A7EF78D73D23C31C1D4689387 +A2D4396185442858A745B98D81F2580586C88D6CF54AEE1517549241B59292C8DA1F6FAFC3F6 +1F2E82315ECF37E5E8306F4FD0FB4B4D0BBDEDD2BA55ACA3EA3EB02705571DBCDF339F326842 +0DA8A59DDBF5CF721D9BAC5A1BE8CB3C0B4FF98D6B15A2DF24215EF121CC06F4700F2609C817 +C7C4A0659AEF7C646DDF125E9ACE18348DA6770D3DFA3B9486D9971834A7EA6881368A9612F5 +293601FAE200974434D1C24354AC8E9335D5DCFC27D447CCAE4B0923CF15178484B24C944FBD +847A64B146D0F77DEB7665247E855C600237B1E311FAAAB4E80A2B8058F6F26054D111E94142 +1A2A143F3C4106A506F844DCB8EEEE5ABB05C2D0B4563C1D1080B42EC330D3DEBE87B65D9FE0 +A684FB5D125F7EC7ADD81FA8D82E938BD2AD25E1DF6E473BFD81659317C91BD2256FB4164888 +73DD9D67CA6D52BD2C5524903C68989C3F5132F029EF0A078B8C2DB830186A2DC9CC47B9E6AD +6AAC42FC7A12BF5FB5386C558A73DD4AD02D7DD4FDAB2152B138326D968EF837B79A3BA3C0FC +A3A629D8143DD8B974F8326851AFE08BAEC65344751A2B076D71EF4F49148E6FC9F3CD520645 +604726239FCB202117EE1CAA906E37AD6CADB6AB92B1D31D277FA27F6930ACB68D128CD0AD70 +60C4960C4B409664C8580F1C5F3B93E673A74B8094284837117A644F0CA9398FDAE7CBB29DB6 +AAD38CE5CDF855E84B3794DEB9362E1DAFFF74ED1E87561A4D33A7B6C93D18F231ED180B0D11 +2D789C9E7B35B31EEF4D5FE50329D6AE3E9324DCD038EDF01F1B10E249CE33E8BC8E77E84483 +96FB9B74B316EE1A78F2463AF742CC468215923BFC5477A74A353A3CB7286AF8D782111B09CC +436ED7E7126E5C70122E81142DA5F1056694F2CE5D5706C6C3DD6384CC42563E5BEA094392D2 +876486F313B8409A2A03CE6718B7F5A58A6BDC7D7E3967D6F7D2F2A1652D578C0C43438B67F2 +E67AFCEFE2F1A031330A1337D7442AA8D15A4B1B0DDF56AE3477599A1C04370BB06C5075A9CD +D5D9A6BD26B3901F46D90B45098E5940B44BD1485840CB585B8B8BA7CD45625803FC1420C850 +F434E84DF2CDB1C6E2B48716DC287BDBDE64CF54C9EF6C3DF4BC3452798A72DF4C2AEA80415C +9521648EBE5B65ED763B5A393AAAAC1227C1E017DF5FF4F2428423373BD6D5FD39D90599D30F +8D39740D6255FB22ADECA70C5EC3A8F87A59EF93EBE91BFD0C9AA2BEE6B3748B3914752F0E5A +34D2624FAABCD7EAE3D4051B088C9AE1105B541DC62EEBFB0161D05818A73DE9606A3BE82B2A +37D1F7F22CA33F57AA00A40F3189FB57BB46658710E278833C08F3C5D428BCA99ED499E1B3AE +16892C9ABAAF45E29C7036D1B0EF9F17FC51399EE7E7BD85EC424EC4AC17275D980FFD2EB1BB +92E78B2B38868AE908740E0CC26F414334CEF4E8CF5222F46E1AA40E0032E59FFCBB395B4ECA +2573730D1965B2D4939F24A154B6E44334BC0C465360BC2827B14E03E0F428DF065E9F36D256 +E9A76F41C0F81747DE63134EFC9CEE6DDFF528FD0FE979237FDDA7782127B2A44B2F97A2611E +FB1B03BC3846CC19C86330F9D2B4B557D47B5367D597E4964257C0109A26DEB44CCA07186DF2 +D26769BBCD6BC499B3717D6DEC05675016943C69EF60BE9E2A004340202288D22D6476A05A27 +FFB9A4C7A2AB606619ADF733C05C38C80B1E2300CF34A1E32213B83735EF20991D4C487472B0 +571AF8F33EAC2B12E0F302C63371A42F1F27DF2027211D6ED6EF86766E35151B67AAABBA4B46 +9F5F2164CECB46FB0866EEA5480B615D6F9BEC31CFC9A898148363C039BA8DD87FE65F1F9C8F +754A1D38B643BDED590D7E4B45DA77B64FDC835CB412C5CBA906DC46A7C9D3584B4EA5F7701F +257DF04B12274B3833957D2869D52433EBD119E69278D93D7423C0AC9AF9DE81B6CB125C02E5 +723C495492060D6CC6B4BCBA6033601A6BB3131A474BB29FF433A1F3FA9EDADAB29F591F029F +ECBFC5CBD578BF738D57F8AC962C6C4196FECD4CCE3B8679A2B805E736ED48F01E027151421D +1AC18D5473F299FD612542DF45DF5E8CDE582D236BA5A3A7554C7111BD2D9AE4BFD5D53C025B +BB737716686C68645C01327F7E91AAAC5FB9B31EC344CD1BE4427C612F3E397C8C9756C7B30C +D4A31FFC6EA5C0BBB2453D2FC5AF8CECC5BF27F3D22E919E9B4C70BDE1E55A39461821B30266 +B8DD029B63683997CE276A28EB79E52DB38E3E00FC6C9F0C98A2ADE2A3FCCF651329F33E754A +A2637EE13D8F0275BD9E3670E9B6DF5E5C7B60FF2E9BC284895179A6B54A6501B09C90CE1F53 +7B181DB63CFA3502B27699C0FA32BFAEF33560EAF17035A22B24AD1A92204835506F9AB0636C +7E1C4B9BDE7B1E3C85A6746574082D5A66DD35BF0925B91BC10F973B607D990EA83AFE2B43D0 +D12B61D5246A4B2E6399C626A2215C6B477B33355DB9977D26F0F4E0E750EFD66855852780E4 +70DAE19BE56CCAD5DA484E8A1405860F582219BD238F18084A13DBA3BB6673190846660FD16F +243A0188B6626FBE383F47C9D115AC75810B9FC34F56F4B223D6ECEC3CC04A64D56CC48029DB +AD5CB5723F037904AA357A377635B0693F08BE60F7AE5E4825C939A53D481553C1E5A5D57DF6 +073D9E94E402AEC39387B6534B10D27E16A85F20F20D17627EE9CFBF60CE0B42C6472C7A21ED +5FB251748D454C7B7FC51C447C6AEE85E84FD3112EAFB348EC75D99D8FE3F1942C261D1D8FE2 +1CF2D4A7350F05B983594E1F47BE21E1BA9A263273ED14B9161B494D50B9B9EB5FFBDFB088CC +1CFE9A639A8E405BED650531A96D1C3313617FE5E0DAB14A2E3E95CD4A0B018A08AFFF8C5E0B +9728642B9BB9905689CC6FEBD1072CC9881DB5BD7F102BD4CEAC2D861F3AEF8F1E24DEB48A0D +E5C10011828BF7F0EFDA8992F6EC5C053F050790739D0D9D04272FE9FAC41B86562075AB2030 +C9329A89224DE27FA74F61FD49D8CF7F13F0A5E69600E075A6090AECB2DB740A6507AA28A7F1 +57B20558FFA64A4DE9DEC8F877EB9DF61ECE54E3281AE89C207005EA3C9F5E64F2966BAE9DB2 +21365367B95AD4107A842FA8AEDA660FE530D0B37E5B8E46A2956E7DAF0A5231E33FB6D96395 +CFC427B7F6866C1730BD33BF55A4C43A769585D54699B5B956751B6E441ADD82A2E5ABD2B9D3 +3608E9333F408B931E77D48258415A789435EAFB9A164E651162F587565CC912731A5F840D03 +9CB7EA0D281A34BBAB93238A449D8E8DDCF9B36DF3D8DD2DFDC5278B98F0BC3E070E3C354A3A +39F9A97A92397D6D0F618F522A600035529518D6D90420A8D79AA2AA712CADAFBF5DCAB8E183 +D4AB84232717D60DA8C9711DD697F2F46A2223DC3E48008DCFC18618C35D237FC2D7A84F709F +D570BAD4BA6D5BB74835E3540746B0535F04EAC2EF06A74134742AC32E0C4D2A726EB4155C23 +3275C7348BBA01064F695ADFC933B502006D654C2B21213918E177D3E4751908A3A6FEB3E612 +268DBF27A6C253738D34396F50EE834F075AA4AEF14FF3A3BD5CB25DF06253212F75ABFC9BDF +7F480D66719C3A5619DABBE3EAD77F6AD80A6B7A6D83AF722BACC170293F9A5E51BF9B4152E6 +4DA40806AF4417E4FD9308A4D8EA2645EFAA35B30A6214DCAA83E2F531DBB02AFF7015EA1149 +A333CD619B7B614BA3B5069ACFD80C2D4DD5D19BAD17C3AC5FCDA1818719A9CAD9913E187027 +7B6383290E27702BD87E10AB54B531B0A7662398585F7B67CFA1EB1E252E5C477025D77AD4D9 +D7D943C3B5F6127EF5BF7F422CA9AF4A648E4213E1D6A9B6F02AE5119F91385B93F00C438A27 +ABA9D0D1E52AF1CAC6A56C9E2FE7D5D37B9EFC4BAC853C23D07531F8F7879313247F9A978468 +5048DB25AF1CC60602089DBA16F25E9AB0855D83BA874C00E28ED5633EB234EA457467BFC887 +27A17C570FFB595ED41AA2EAD4D68703D0D70EF899E43E3ABFAF95447349DC61EE1F070E8F5F +580D691D80913A1DE2EED591859D684670E5CB9E3CD6354DBB51F66B5DB8469364E709033D02 +C5F13179E5400C71A9A82FD4FDCB5DC94E53B116506B41EBA9B34741D3B5BAC7468FC68527A1 +E51C12A45DC6A61C55B21CD9F8C3FCDBCD037044833BEF5B8EFEAE27A1C406DF2DF775BDBA2B +055C86BDD754577C83632A70D63023D3A80ACFCF501D3407CD7B880D7BF5C9A6EF55F643AEFC +6306BD9080505AB7395F809BA5BDC8CF5BF56BFF4D2F2DA56425FE88211CA111426425D4BD5D +1D606C1377C2EB7014A6EC0392D74A059E5CA21BB6C505DF776AAC0704488DADC008DC89843F +73806262ECB38180595CEAFC29311113C41E8FEC8A6BC75A4CD616A02607B1B0C3F4C2423C98 +F45B76ABB69CA4E43F37E2F3CBE32A0947B8FABB8664C0070D72B4A464381DCBAF741319E659 +7D5E648BA2A11F5B7CE3A45A83E094A1537E7E7DE0150210A675EA77F9B563423F71B2221AD3 +FFF529649172CCE6F6493AFA7D2FBCC812C269309C426E8570C6992255BB8CA8157C9F2958E4 +C63FC2CDCCA1A3EC1AF935CC9C35B71CF779E87B51A16DC602BFDB4C9CA1653E1BD1AA6DACB8 +C038276107AD61D6E33D65B6B98E28091D4568B49DEDB9E9023F2977B4FE952FECCB1ADE607E +3C60D74DE8662C1A08C6C4F6A8E50F91C62D104A7812DFC67EAADB90E674686585680A0F2EB9 +8CC92A793F13DF552E6C695623CD5F161A15807FB396DE2C4B32E0E168D765EC0AC448089A24 +5B65FEE72EB77E1593EF910B1750BD29BD0DCF35890311254BE990D9E4B558753B34600C67F2 +6B24E701287462CF8A7CCBDA97CFE5060A8C36F8CFFC8A50555C576B443D6556E14541F7C5EF +1B6E11CE520946F91918E10E90BA750FAEB158A82317039AB53ABFBE65B0D3989FE4128FCC22 +124E162D559F03AB07E2FF289087B48582428CB9B124BAEF00A16D4678C0708BB70F692F8ECD +4D417B8DA0371716D3B5939D56D8AEC084CC07D0FF21A5F69C1EFCCE09FEE5466D7944B1598A +8152EA86FD11F3FD1FFC2D0BE04EC6C36CFC39CD29DF6F32E4A030548333EC9C9ED69471A989 +368488364FA7C8D83992D35E01868114852B9BC5E66B43BDA19F82102261426FFA730C327C16 +A92C2D840BC951183A666C4761B2383EA8698B5740671142E07B5161B7988D39239AA04934A1 +928EE775D311C59F12D3BEEF3CE7EC9BF6DBC9DBBFFA124AD23568747DEE4AFE3310D19FD2F0 +31D782E4FC8980D315FED5BE69715AE90F45A26D5DEF008316DB5237B6254EC881F5F42B22A7 +70A9998430DFC54E223E1CB1F2C3CC21CC968C3A9CAD2F935699129A0B05E76D7850FA8F630A +6A76B6B428F022C17F7E72A0AD107F044CE76574ECDE1F674DEB9DFCFA5C860F199490958B06 +18F599CFDAC6B2FC5040C32D1632428D250F97A5E5C686C2767808C71A3D6E86F619D651EE5F +BEE3F6EBB220CF2E34E3D0B7B9EC38F2B0FC78085867579D98DFF2DEE6ED400B19E34237FCD7 +5BCB901F2E6A3DE5D721A239BFB003CB4F5C58DE63E8F7F8A6647C06275236ACB4C1199EF950 +EE7CC5FA7B0CBD4852B3062C1CB39137C29289A42CBAD2BEFB0116F948EFA5637F75C0325848 +86F85008300C3B12E01D9B15E5EFF2D44FBB3C6FF28694298FD8F8DFA6817138DD586FA00D0A +D7EBF5CD8A63949B54AC4D90FC8863490561EACA5207259A76E3EF1890A2B59099C14BD58F42 +CF224C34F1305F4E30E9F12E7AF0519E80938035A2728D433D75211C73B9740EBA4926B9676D +874E41953C4E59A48579D3ACC872952A65ADE2ABEDD6128CE9C40B058D126C68EA0D40B0A081 +CE1604CDD5EEA12AC901CC12AF8771E39B66487A9C94B35D882D46C5F3C43BE6AF8654CB09EA +74A24A58CBFF5A25EBF7D98E08DB4CAE7D71F112503FE689A27D75DE94B94D7F0A8F6F4F9CC8 +29C1A441EBF4A22A85FF6479AFBB1A4252AFD7FABA9B1CAF518F1A2C67392B44FF9E173A6621 +8C1DA8CED86B17861052E3F9B758D06CF8864B7B8B7B55322A5E50629229FB515754697C0269 +41F7AAA8C6D0AD6682440A4908BDFF03C4D413C3A7353F6C9275788610F8C8340EA671506F17 +4EC79EB0EBEC7BE8E62470601B32ABAC9AA3E2678367063A57CD950349635726DB14DE55B488 +8E481DE009CCE2676EBC510CD94A12ACDA187D096ED6417AA1E8B781299CED175C4243EE8D51 +E1AC2382FFCBA41F49D19F60761052E59B75A2D0D4CD2EA45B1859CF449B7DB95FA7311F52EC +28A8D028D2343A958DD54500756D2CC13BA81E72B69F01DBFB636C9299A2F0D3A147740AED1F +D12C59B2D7D8F0761A86B140D3545F38A21A8D6205A57CB7160FD7C5971266FB21A518CFC331 +39AFB70DA7485350EE8FB0134762604617AF0ED255F06616DE76569F48A2474D7F56A1829DF3 +0034F290B30E3F2B34C433C11C1DBA265059490AD1704DA42526125EB03298F86C56495FF67E +63B06416A7B4FA2C2D086FB7E9A7EC218DE891051219E566566FC1B9C16EDE9FD2293183CD29 +16E3572B0D770356EB2BDD7FD92794C270D364D12D14DB02C65A6E6D636C8DC0150372FAA09E +488E28525048EE8A866FE1ECC868F6059597225BB1C588A12349996BFAD2F6D0131F04185E1E +FD125A2B4C4B8F2C32B6A307874B0D94DAA68CCBBF71D8427FBE1ACC6B3B279A52AA66CD6F5A +5B1E3DE70523ABA543F44074A6491ACEFBC6DAC617F805F99CFDC01BB5DD8500265878FEB2D4 +E75BC616D30F63D11EBAAB94EA65A4BF64A484210A08C0604BF0BC0275899F5AF6D217B914F6 +AC9AA108F921309F9580701530CA11E8B5AF77D22767151FC64BE8AA6E4EA7B595E7AD726ADF +A2872D007EBBC41EDB3380CED9743A88424A665E37B941DE405DB5BDFCF89D4F8BFA6A636C97 +3254709C81BC54570266EE5FC66FE4717CCBCA5CC309755E8AA8915E16E4C3D032E2D295A2E3 +9F81AA5E712A29DF3D6F1DA12B51D414E60FFDA3499CBB74847210196C06FDC32A42E3417319 +8ED7A9EEE1CB52E97C221C79D0BE506C6C8B493EADA00E172112B0B525E9EBE24A081518432A +F7BE557EF7F37D1CC2DF1E86AF4EF353E8DFD731EEA986E5C203B343320BC3D35F4FA4423FBF +CBEEB1BC75F27A40F4D9F5F5282828E9545EF54F5BDED9915385E400BA937594325973069070 +71E72887D2C648989B7A4183FA3E750FECF13B04FDB5FFADA6DAC6DEFDF7CBEEA85EB154EBAC +F8758A185B3EDE6F3BCC0CCF0A878DEC6D1121198361FEBE57819539E575A6E0CD675A3535A1 +A245CCE669B1C31D3E87998A956EE116369CAB04EF8506ACF9E8BD2E4E43BEBDC9A067C4F1AD +A019503E9725E1C44BDCC4BE132F5BA29B56B7E281400019A9122D02D49C768346D1B7E30BDE +6E184E0107507C10C132939A052E6084B66B3A30B6F4E855D489F12C9AFCE7714E68869683A5 +C74A5697CF1B4D4B9BFF4E9098E98FBBA712E4E717EBFE6BA439CECD1A99F6C372D264A4A255 +C3B99A41A2F04DFF796C9EECCC20AD43B5002E8E3CFD9F09831F4F02F9327E23F291C755D3A6 +E57D012F519FA46A63B32FF9A98C3640517D077EE1A472CD000A80467B28027AFFBC9904D19C +EBA6FAC4F1EA359AF2F3142FCBD6C28C1F2B2DDFB1D6799888DAADFFAA52EDFEEEDA38F3F94A +79C79507BDB7782C779374A9BF2B0CB7FC5A216CCE50B8446FE894E9419E3EC6F37817CFA6AD +52434F2415369128209778A9BB1A81EE08E4F0842BC8CE8890636D6144E9BBB416344D9DEA5E +65719B332F66F9CFEDA829FC0AEF7919253ED138C92C0FF7BA23BA9EE1841A4491ECC983B1C1 +162B30B75F8DB608CD41FB8FA402AC96CE57D6E27060CB88BCB47FFF9132B63814964E162EDC +F06A2F9452EEE25E1DD7340FBB273F1759BF9FAA1B2D252563A97ADFB26412C605C2C87F5725 +753497293A53FE3B708D2394E19BC998AAE5580A62BA5924A00C90EEF883A69C3310C64E52BB +C41B70B89DFEEF80B73556FAD1D947A079E8D0BE5BBDBBCC689E6C379F5F6430E44D937696CF +99C6F3A226E27E567D945BAB4997BA2A7C04FE4D9C2CA4691B687B2EABE5188E302493326FAB +C6B5876541C4666A26B3B65C228AADCAC6BC98760F3D3735B89B2A2E3D43FC4CF6ACD11C96FC +6C3610ABDAAEB5FD4C7FEC50474BEAF06684A49B6B245956FC2936A68551DF931353C2939326 +36FDF56F0DA797EC113DCCFF2E3409557028151EEF5AC29077BB032800F10E47F79CCA5C6F5D +D75FA56638FA4E59A085532C7D830808B122DCA20D9FE537A04F5279E6F96AF0F0D180EC5243 +0438E8CD1A7C79CA9340C0639367FB2AF768F36637D67F7DC6C71B14DB7A35C567A66E460EC7 +0B91357D13AC281D18617A861AC04A6B73608467999B1DB7D06A52832482FB4153D95E6AD9A9 +885137C837BCB0D9F2AF4BBAD66C9AD04265A9BFD47DF89D6E2E990DA21CAA3883B815F541A5 +9FCCD6DC47830E5E32AC631EB16E1784D94F5A31523D31509B4FDA3F13CB6D0535C7B9D5FC50 +EAE72B74C5596E271CFDFACCCBB66735C67C32560667A2AF34EC48F09C574B30D4510E8BEF41 +E6EC0DF52C2B26344B9EB25501BC1207C24B8844DB1852366A48A991C345A8B1484A19E7AC52 +BF541D2F95EFC749AAEB3859E9030FB12EA35ECE6739FFDFF7A6809848FE1C04A6046CADB0A1 +2F541366B97451BB8D3AE48E96B7E97B5BBE5ABA1B460820B24115A03DC01721F7A423650DAC +1E6C305FA5178FCAB92386687B1D1ED0B07ABE6E80A7A46143C05D8A9C8976FE3D1761C05766 +12CB9AACB370ABB8352694514954D538CA0F19197EBB5A93A2BB940FC8B5256B183C769D382F +61B0AF9C9A98FDE7BA8BF56C4F4882E0209FE14108BBBECBB8338A768692CE2499F2B612B6DE +3D617D16B5AA3BF42ED95A2B2BBC438461FF8136420417E2CD2B1A8FF07F1FFE31A9DC926D59 +B968CDA1E6946260224CB22E598B1452AD408C56E8D085F90404DEE4FC07062C72BB12564162 +33385EEB99F2B67C5A0D6B1044D29D972567AB47FC55BC918A704DDC2F30F12A148E660CB724 +0A412C6FCDA1A34B7B8AC1025F384C41CBD2773FA11A868349DB8EB97AB311220261493A57E2 +D48A2492A23F0DD6DE1F1A3D84F4F665EED8A7163C7A339D669ABE07A854E4B614C126CFB10A +E94E76E20C0B855AF9E96C46BE1DCEDAD02CA27692F792AD423135E4BB034395C71C6A87BB23 +A549D63823FA513320AA22C24CB1EB499F150BE279199BDBE09FA0E5D2B0394FED0CD68E13AB +B329304424D14D1BF7C2DB7D5D78F7A857FF6FE7A9E121D3BC71D3E178779FEDB2F966A92EEB +6CEAE29A21461DA66535E418972DA8337358AC715E50562508CD7330FFB465FCB613BF5AFEAA +2D2E13CEF53DCCFEC3D7029CE1088E73174A9D226E174AC7A80EAF60CFADD4BC51F934F794BF +24AEED2FDA5486D883BD597EC42D4201B49BA0F89401129B0094188B698D09B1E82E2898E1E1 +3FAFDE14F40E3F7B8E5CC25FBC45F123F48FA0D0A7846D4F94C27CD4635C8EB988C92C03F824 +FC4C0E7DF36F0E01D36B4349FEAF75EB5D8C23E513E65F247F0CB86709944007B62313F4BFD4 +E3499B67CD55A3DE0A1E030B74BC3A97B7D9AF2EDFA06A41BF4BBBA292BFB500255247026812 +4B13EF6135E45E213C46AB4BC40EC5F57FDFFC62233A1D294EF1A0984F4399C925B42A2F597A +64044943D0DC84247E98D231C2D35986C58A0C62006C1E4C0D6FDC531BDF7FFF5183DF316D61 +185BF17326E745C5B533E0B7A51433FF5691D84DF17AFEBF80303F9D5F05C797B3E767D788A3 +BDD1191D7A6D576FE079784263E782CC6B284AE0D59EA5D60842BF0A7F55CE33067076597578 +60AB8F0609E46E9B4036DDD034F5AB39D1B0A639BC8BD55FD4C800CF360014D16BFD3828ECBF +97409AF47EA32B61F162BFB3C58DCE3039692C566BF70B2A8B6F2CED7479DB7C0FE286EAE554 +B601025D57AA3F26F1F6E85D17FA279899FB61BE82B59F6C70E0ACC2E600652304FFEF3E6771 +C348E2C088F7837A7CF37CD1C74CF0B78299D26B5EC1AE192471FBD996FA3FFE6169087957C9 +50B70C7BD174722FA2EBB27F6542F526D3D0842F17449389F3E6CE0B5712CDC5B1CEAE6C7776 +0B8B41E8444FB992928844B224F4FFBE0A4EB44027E0A75E74DFADFAAF1566F957C1999F768C +AC8A735F17DF653F58BB9BA4AF0985A0CB32FABBE787B9A133B8AE7D68C1B41FD3E138DD26AC +083DFE79A8C879256E5BBBD14E7B31478E3DE8ABA60893ED06F2C6479445644E795F46A9C95F +308867AFE83D0CB1DDA4C68E8634DA9E30694ACE6EA93AF1D1E9670616A7AD444F9B6CE89978 +062B81346D81DC0C058F3740FBD591408A8A4F6EEBAFB5D7772FEE8F467B83713448DBDDB5D0 +90E6481BBD8636BA2FD30B79E9AAE4A98E673094FA6A597A8F0DF0B74C9BB69AF42F5FD4DB7A +0468409A39EA5CF8D4882B9606E881A59A729EECF60339D5225090157843A69CEE675AA56785 +8B49FAA306D8A8D6BD630D7E38C54E88CCD548F96B22E93F780CCC6FBAD75976AA2D966FD300 +429B03F166E241C575A0469C17E427ED8502CE6A49A8CE1AFA36D2BB914A2E0F2BE4B2794D3A +E15C8E5914B36BF9880B575D65B86C1D620B3BD6F9587EEB090CCF1AC48C73930D76614BDB37 +BE7FF457AD7E07D812D10C2E425334E0E66F83F024F2FBC764F7E9C9D07A35EB9297BC7AA519 +14BAA5055D2034DDC15AEC3EAC9311D99A0B9DA9DF9642FC4D5CE51ACCFF41402B227B0528A3 +4B6FBBB1F9AFDCE1706BEACC566F054B3BFEF75D735D5C92656AA780E9F78D3D67933C74BB7B +7E1A3BA96BC716BEFB31099771D1348611184BF76E78E0B75655C18C42DFD2B39F3377633FF4 +CBE887574EC8AF654E91294504A59D04417F01E8C6C0EC71802D74F55020B6D15AD0333F5F50 +4EAEE5C47BDA9E373C09581B8DE96B4E6FDC76A8DD8F7B4FDF62DC852973B828F2F4FCD97C90 +17EDC5E0A6BDF87511A896327E39267E86C851C08317E13B413C7FA7C4B180244D1A26524368 +621142189D70F26DCE33CE009EFCC33BC35B211C67C9FFD68DE3AFDE61BF54A485312D6D66E1 +6BA9022B97C73D77ED530E606F54ABE858F2210821328018168BC89B5D1F0EFA0C02E4C2CA7C +C4B2BB366131DDC427504AD454F6E8A314D9A5A4994F21607A2991083331F559B29930DDF0E7 +CC86A2DA421AB5E26341F26B5C9B9F1772F0B244B62C4686A2813DE622267588C0E5DB3CB458 +D2C490768FD6A0AD83DF55504C3E791554FA56A474C44A26256BA539416ED3BDB54EDC8A3AC8 +61CE565A334ABC80B8DB73490595E01986B45B0D82693C41DA5BFAF12B9EFEE509F25EC7678C +C1E4EF735FFEF5158E0AB72DC3939E4F361ECA40DA40368D5516A55444957866029259BC233F +C3F000F54CA33E2B82C999674B22725990A9BA8DDDA889F8DCA18A64EE31C4C82DB2BD653E55 +5B147536E03C8D550CCDAE2E891D81772E10A1FC43DF9A600E025E028704D40AAF27750C81D3 +F0A8E2BA60FAA0F3F4F5BD7F66C690944EA6254A33DF2A503715510772F9D8822EB0DCD03FF9 +2500374920E0AB941100569ECC2C26C393DD56EE48BC914794696A4211212E8A77B1A653EE24 +A02BFC350E7E8577FFA1FF9F11B587E61C08EAE8D88B073B780F5FC2FA97F6B5DC9F7439D84D +3ECC2C67B8100EAB30D6CD8F07F2F2426749A47C7EE77541FB716463F8703B6BCB80F5BD066E +94CA265473CF95D4ACEE36D05CB22C83DCC8B27C7B6BCDAB943C899937C29FE456D9D71B748F +1B57625597D7EF30813823DF79B8E368D864FFBB72251DF04F862AB1D808E25B506804443959 +3BC6A7DABE86E0793C0186D7DF54BBC6012FDE7E30C4FE5DC9FAC9171D62CE801C5B77540930 +F5604850AEB85A13E06620150AA55137F66E6DFC97EB36A16A9311A97039EFFBF3E5080760CC +EB073475C1E9B07E1E23FE1F65ADD9F68EAE159984DC1BE07365EA94A90E2305A90D33C46245 +6CB031BB031F0D34B570F42507560AB26AE4B64772CDFF3034681B7E3CC6B610FCAA65187436 +00CD4889AC7551F101B927F16188792AA47EA95BB05E2EBE5C96E92CBD487106FBF63CC9DF2D +D0E0C2339402875887CBF2DFB17C3E32E1DA3EABEEA3EE9CB461A7898A1AFE29609E67AD6DD5 +7C91964296FBC5F09F4DB2C8315B1F7D9D324A8F745BDFE3EC7903279D78DE6E129D81CFFC2E +674714666791C5A6DA8484577531BED634A6F7EA50448E68D959F743279B9A80C8885CFEE79F +47DF6B9196F79FA4383B8681ED4754F901BD36C5A63FB1582857254DF71516F53D04F8617898 +1F3E9D10558C4C7E613754D3CF26957E0AEE795F9DEE25EFA913D3623D98C1F96E0AF34F67B4 +306BF5F593A96ED074700673DBECDC9B2BB27558525BA7544029DD9DB5828C6D8E563B5BE801 +3E96131B9E2B11D67DAF49A1ADFAE1FC536F4DEC7C75DCBE0D6741697FCFB8EC8D2D3DC85FBE +8225A86EAB86652E0D32A00E59985E495D975EFF48812495EFD19DD9CCD93141D361B0D1DEE4 +8ADC0611D1DE2E8EECD62FE9A162542BCAD738167AC417A156212A8229EF17605EE9A3E2AF8B +5795784CB576C5D2C8688A849E2F04B7A2310958CEF0380AB87E39F1D0270E002A11B97F866E +77C1CF7AAFAE209A57AD12DB90DB20026D92F123F3293ECA4AB07B86CE5A9EE650D3D1491156 +A6199132B271607782E30F03E4A333E5E0960F798EAA25418313DF13C5D4BB186C37DFBD0392 +459885CAC59FE71D22B1BA70083CC6D81F800F1033FE0A250DAF09E03CDE1865FBA52D2AF2D1 +FD4072AE40706C969C1BB778CC4EEB3FCF993DADCA323BA2C6B72FC9B2C4679B9868B19A7E58 +40041BAA7629877B130A05D1594C855B4853E70C8A1D1F58A20438C39C1E3800FDBEA47EC323 +831783457FB0BAF72C02F0EF8BECC7D5940CFDB008CD258C094980C358471A2C6102C83EAA60 +5523C535EDF3A96E699AC6627C5DABBBEDC9D06FA6906A3E524C2103CAE0E2DB5F926A1FB5A9 +ADEDF9AA8663B026115791B810FE0EF2CC1E1BE6E7FFF7DDDBD27CDA85A34B3548B2129A5DCD +9071BCF917D9C6BFAE79F41DF7FFD4303525FCEE0F8D47179ACF13FF109E748B83584AE2C8C5 +7FE3392653DE7EC742918F68F86E4694A8C9C3115A9E459DC45557A492DAEBBC306B73DFBE5D +27DE382E17AB54A77475A79E38BBC97FA60C738C9B017BFA6AB85960F34632C6010E321668EF +6647698D00DA3407DE9599736E3106D8C30A13C63D8B447506768A6771A3C18C7028C1E28983 +1DBADBDDC8BABF7F5D2FE992594CE0F01ED186A4226F8B312329D30431148743E29A1C4E81B8 +DC2290CCCB1B1781A397D4510DD2D08C81862C66353CB95DC06C67F2D783F0826CE879CE8BB7 +6C93F57A64CA5EF9A563470B1143DB3ABEF694645337284C1EED1B94A8EB67F62AF99CCF1263 +EE69F09109AA7AAF5F39A9488C7F0A1B3B59CCCF641B0789305B3E27B6DBC105C385B06EEAB8 +CF7BB5A6A514BD597A401590DD3D8DA4E0C291621D9F2D9964A408FF77025134020215A605D7 +77D1E509789DDBB548DD22A7C5A0C9FC6F2B84F9B94067AFD956AFCA3DF219F51671692A7EB4 +8B0E91741BA2D2F3F533AA458F7C373ED76A155C18094E372F8C4766C93C33B142C87068E00F +9CB93ABAE9291F33D1AF2560892C50A3EE480BC84C46DBAED662A4BD34774E36310D91BFC3ED +B9BFF3D0061C5FB6207042680713CA4C272126A4D40352320CF87AA4C0AAB5B77E2B53792F62 +6048BDB646480C5FDC25725FB6A11424D3F521D72730490ACD0DB15B91E94B11CDB8350BE714 +1209FAFE5222129CA80113D1CAAFC9E5F84269080AD8ADD155BA2307F82D8DA59AF65A328A81 +EEABA59183F6F12B9AD4EC9A10EF0732ED2F05A3BEE8C396B3663E993B02D145A5EE5F66E30E +CEAD5A7FEBC39BF46EC8F6C4CF2B31129084A58664C4A4B413F99B831807561415A15E5EEC49 +585CE724128F53C19786921430DD793960103153BC86F58C760132356E51BB62F093B97A4ECC +7DEDD70427F00B45C644C523EFE1597912C4D9F53FA7E8FC6C3608338BAA4637D6EF1EEE30D1 +CFE8DF2545A07388D8376499566AEEA76CB191E8DB5FE05C9D91622F262BF5564ADC064A5B3C +AA5569EC5233DE0A488CB544533FBAAF602CE67E0B09F9BBE7E0BADA637D26A7085E80BF5DF2 +E06690306186F13A400B726A9BC0021A34BA050079520CBA61CC3D3C61DB0E5909C2FCC82E31 +4DAEDD2228D3D4173163FAABFCCE8C4ED96829B0289799755C4484CBA8FEC61C3F53D2319010 +62677888699BDB42672629733D4FB910C73B307E8DCB837F53346759455702F04A42CC42325C +29D16F4ADEC550CA0CF5C9B7EC60038D7F444883FEE1A93EE0673F67798AAA71AB3B1EDF95BA +0DFF0F45DC9D6E0588089553A091962BDB39B2D19B9395380DE4D8615F054AE7A1D8B26A16B3 +A0611469ADA90C9A3818D08C89A7CA26B0CF98DEF23C8C123977F2087107A1550AC33C50F076 +A30B84519EB46669EDA19728C6F4455D41DE791CAC6DEDA07A108670972C428438719F847BD6 +FBA1CE8E7101E972A7D5924E749A2916FBED44BCDB2954510BA71142D7708B38DB6DF559823C +AD34881594717BE8D205679137747AF78A8AFB389175B5826903CD5819726980A7981098B02B +2F4B47DCDFD89653538327E431B843B4FBE0F0703BC3E211BA7BBD965B0407E31946757D1009 +BB2EFF7E611654857FC11756351C0E2732BC8B99B20EC5E520AC9CC638010215CD5D7AAC58C8 +BC907B6010F6CB74396B7486C0906F9B879B67814A23FA9E89C79F2019A935125EBCFBC931BB +9EEAE79ED464065D458E49AA025660B1543B0588B97C0D755430EFB05154814F5FCF0E58F03D +3DCF0C01197A4D4B1D94B0357CFCC6B6D9BED2F84C084AC953B3B247B46706C71E8BD717B93D +602241B21096C3E6B271B758CC50F2657481ABFB0A80B54B0D2F0AC2B14D0F552815885B2EE6 +399ED0A9A2D3C133305339D97E44CA08D52C9071B8F34D06B2DEAD4549C591719BEF6194DEBF +8E7064C18B15DF49A73FBD1B32C1F16413F462857A76345A462419B74DA65FFCFDA65075CF3C +6201C6710BECB92696653C0B927000B26F5289CA6FDEE0EC2C39945ADFEAAFE397907A92D266 +EC4568635EC21FB10C18BB9FF8B975ECC778C77B7E8E66C9D508E23E136F7B1C2E6E03AAFF8C +E77008005B13217B9293CE534416FBA358F1CD5CF26314E4E6880641D8B987DC504CD4F3E384 +06E63B8EC62CDF13D0C739F60799AE269706761BDC78A9F80F726739DB2C211949BF1CB2F947 +7E17227E18D43A875FE5ACE8446A887A14C77D01B5C9FF11C3AFCCD91C2411072632375C3F99 +8343651BC7F583ABE03439CEBD67BBB3335B94193CB3CF36210C431A202B12EBD03D1AF9C6DB +B1F255D8C101BC17E301B4D37C8EC7DA0F797767C6EA0166C74411F7A5D54B7E7AA4CD62C856 +99F314E11014CEC46FD5BB0C0B69A397A60D4DFEDA87B095341DF659CE1BC3A151376C2E7BE1 +1A548D84F0F5777FA0C07DF33068C2EDB144719CEE27D1F6DB1FD83F254BE273BBA9CC1FB51D +B3ACA31D8BBE5AEA00F61C23BA566415E9A0E1ABC230F46E40065C0D9F2F7245C138149BE9FE +0FB69C0B945DC165176EDFFCABF56B9FAB33DFBE78966064DA91DB7706BB6C6F04AD34E042F4 +C6FA48B0B9F96BF5CF68253F9AF738CF671AB6B553E23F34B6771E4BF150E6B6B0B170DD494A +8D1ACB6786CEF859F934CC7736A170BBA986EC19430D19B9F090ABADF9AC0943F36685966113 +9C7645141E8A7A2DFE554F8397FB10064996783310500165171D8420D1ED8BCE593C42805A2F +9EFCB4B88D09AC7E6A4B23C21A84B94F823CB3AFE754E79B9C77D2C3E29D5D4BB0F29569875D +71D142362E1FAD2AD2186258D1DF52692311F53A608A276F70AAFAB6E301FC586B0F4C6D364B +C2F1815FDEE94EEE51BB72236F3D4B64DCECE6C7B21176CC09E6904DCC1FBDAB59260507D488 +5F24270FE2A6F133D47CC2AF2AB27637ECF40EF51D8CC1352EBA3EF27C745663350C4EE97B0C +D24ED09A5BB618024436FAD4BC458A6B259BAE107DA6FDD814B646E95B1F39CA2C7E9EA5B156 +A44FCF514EF96C5865DA6D96FA8876325A9F83B75C5D156ACDA42A69ACDAA7BB306A5807B013 +38297F76D0CA3CA851F9178168CC5B1ED97E4723201DA85D59FA9E3EC837297AB2759B02F921 +CA65072573A35A942DA915675DE04A02E5221B62D9EF635444A37E1686A816BC71F496678378 +0A328F17D3F8D3754AD2606524C0FABD57F1D02676154BCE181F8B97CE2B0C0E0F06988F5AEB +5AA15E7B3A5F2080F7347D950D3B005E462336AAFF1504378DEF84AA51AA528C2CD232EF2382 +63BFD3388D0FD290DC4558EAF24F56B0F74A674A3CB2E61A88F5F4E97CB9997B380B68572043 +4CFC4362BA7B23C804C22793341388502F4AA4ADABE34DE967FCB82E12616A22067947F4CD26 +AB2762ACE46046E73FAE30959005EB576A10FEAC6F307233BAC38DE2D70D037F56C0B0ECA2F3 +A48D4C0CF69CAE3CE44B08E5B10D3F938131F5F5E6F4A9E211312B04709E73B246639938CDAC +FE24396907B7C5677335988E9D6EA7BE4D7F6850AD924E44D85D494023EF0AF57918EA99A779 +34F389A5EBCC42E26B85E47EF7BCC2375DF221BB5E0294E3FFA8A51838D9ED322FB0979FEB0D +26D4E36244F5B0557EF0101B5C3D6241A1EFAB943FD5ADE870AF75E24F25772BB65B26CA14A7 +034C1F69CCD38DE4AC79A8D0311978A8134810437E5A04B3363F16D4EE6D23853BC1298853AA +FD9C619279AB747475BD433D2186040A934A0F05B294D28FE45801A802DBD20AF0887B9B00BA +5C4D885643B7A645E990A49A8111E6ABDDBFF944070678E003591249551C1FD79B40795C8CE6 +1F8FCF78D1BE0A44A2D32C199E46DF4A734206BD97A0954BB778C0BCA6EC76162FC4222AFEF0 +4DB282A73412FFC5EF9BAB16CFFA50A8A259BA0FA1BABDA8BBDE95A321AB4196D58C12D8AF91 +89EEDE485B3C951AFE3230189BADAF0652535CFEF04777F0C183489D90CADF9A6553473A18A9 +A36EAE70ACD5E815C03E9964703BDDC7706FD7D14B668EA1176E438E49350DC8807A6E4EE528 +33C6D110475AE6F96B6318A989B6BDC1D88D28C26606E3D71380CF186C2997E8194513D3F43F +9F570BF9C3CBF688060A12885355038E9754F89DBBD90C25FCC2922F11FF1934AAFB0EA11F8B +DB6C3257D7BA0F8E2AC7365A9FC76D3029325506AE25D8DE203D295617F85EBFA351FBCD7956 +11D6FDA7F3BF6E34DF41B13138ADAF0F570BEF6784FFB896388ECC95087E0B7F425B6758D8A5 +98D41A87B3F0075508B708675C56726022F450D6DAA8B60134BAD5328A36424C609E99B31480 +01DBC05881FD423B95EC9772B9AD22A992062736432C390F55D692C90AC64A1272F3414C537D +FDEAF1BDBF157726C59083DD303A6E1DED50C6F5B94C61E81F9F138FD8AC67B673AB38E5CA16 +6611C6726DECC1C0647D6188085056CB939E2B1D66E25BEBEAECE4B97DD342078BAB4867B7E3 +CDBD2C68B9E7D88BE56D90573085C9DF10E10B19EBE83C8A1C41F58BE78B93040C928FED3B1E +98F354823619ECF7C5764F2D98E958A375A5F0CA5D884389DE854F91A766295B01FF8CDD420B +D2A52A41A0759ECED87DEAE73D27A1DACB0D0F7E4658FB724BCCEFA08B0C3D5BDC9CDD6A9463 +6F8B7B4EB66971E8C599D5F15BAFEB89258185E3E935C15CE57AA6CF4F2CF79BACD605747AC4 +EB081FC98BBF61D2623350375B860155B90EE6A159DEDCF7A33604D7E83C50AE7804E9A43462 +2239C5A7D891859D31CF7A37DF61BAB489D857E93D5C2C8CAEE4C61E7F4E3316DC35FF616189 +7D5529EB2656ABC3367ADAC4EA3342C2EF308DA183C6F40402E231586A37198970612951B383 +FBA8E8C375123429CEC97A52B455CA8B384913E1527E77EC48AE423B6BE28F3F8E0FE77F8D19 +7BC6FE350D817C8858CE5BABB5A6BC1276F905BA942A1601784CE8E8ED96DDEEE65D9EDE4FC7 +D5BC5BFF2FC3A966FD25961A430A063DF3D8766631774C9625F1CAC03C135B6B122D4B5F68C0 +659B1B2CB634D067218E127A589F87FD1EC9715443A08284837ED2BBDDE3325B7EC288992F1B +5166EA175EFA6FDA164E8391DE99E4A88F43199C3DBD617667D6FCC2561A1642F45D76564EA5 +B0E925BC960CFCA1194F67743B854899EF834404C8596279150CC61909F367EB17924CA9FCEF +E89FCB940710E470A5E7C9CFEBBB8B8EBB2CA8CABD973EC4D8F32DF8A39E6ED4C520BF932FD6 +7BA02EADA63CF55F33EC75216F75E29E2D6937379D61EFA2C7F83A187FF93E4F17A66CA3ECEB +26B9199E1915922667CD1793FD0842E6648FF80150D7A0A447F5FFA2B8C36507F7DECDE7EB99 +2FEE6E9C8E32D9BD971771ED9D0B3E95190550058FF0E6F80576ECCE287AD895AD56DC8F78D1 +9FD04ED854529719471333B1C313A002D8166BB91B2983E99A09812E9BEB52F5EDA7391DA5A2 +FECE694761350B089DE41343F04DC45E1B4231F265844CBCD770EF5BE05B2F97434CAF711D61 +6613108312D08A9B4D3A55B2DEDAF47CD5BBC2718DA7D18A7079FAC6A7D4F7CB4F09D4B027E0 +5629C14EE77663D8B29EC009924B41F873E4024E092DF7343A1864C80B6EB8E4FABFAA90F5D3 +9154FC4D14438A502E60B5AF432A90C7A48C523B4267534F171FDC02E57B9EF3867758A97BBF +9CDB99DC41758BAD49A7D780FA0BF66851B52D46BFA8B96E60BE89E4A5E78BAAB8736ABBE338 +C1283CC1D2BC3A07F982122A3289E35CB097BE9C27274BDF3ED19EE8628BDB48FD587159E7E4 +84F6F5005F22E636719F9327173693810F978816F739574DB0382222B9B717E394DA21A4F80D +5A95C552264DFA0727FED213EEF886C149D392E900DC4DDD0CCEC84C5DE5DFA3DD5F903B93FC +649FD661BF20618BCDAAEFBF9C71CFC11B8C68143068B78FCB3354FF5555A9774FAAE88328BE +D4C4996679E9285A00C12B32757C74E8FEF1ED1EEACCEA315D56DF2E814F2C8D75E80D3836DB +71C5D1CF0055A01C1EF725AB4858D73CD089B3A66968C2604F97C861A7484BE84BF95DBBA43E +A6EA2C455574B715825DBCA643BB023B77D3CEC870FD30899E7788986813915FCD3F909E3D59 +6281B4D858A29465DBFA76EBA156B0761180BEBE2A6C218A51A67D400DCE29A3F19538DC28F2 +9971A8B01B4C27A42FD9AD8A89B7FA5F188D3135B5567C8E0B87912EEF813FB15C63BC9260EC +3D7A6909D2295C0C31DC77B0A468CA4B7F801BB06A0486470201437ED678AFEC280DBF80C771 +823FB23A5AF549CFF74620AB2EE1EFC50EE09F4A0BB4AB05579670940D20F01C61C7461F08DD +8560F5C1E0C73E0DBFC8532155A5F92162F05D19E6634446EEFFB764B9BF4B5E695E9B4D8037 +8EC8406C588C3EB7C919BF154BDA4A878B45479F6111798DD6FAE11A29EA1E44934C82E6A68B +0025491A69037808D3FCBDCC7C80ED848EBEC3F7CA954CEC873F4E404A699A7A980BD66E9E81 +2BF39C85C55A010D95B9AA147E5826D0DC8EFFAC979ED602F7414DD64CBF2518A5B71AF4B6FF +0F59657D2412B47391921252D0A723DCF2EEE67AB89F8C12D3EC1089DA75F364E4E6E1041007 +2144CB14352C56F9D8D180E45861FDD26B68A02B5A86560F3EADF5367D8B06876ED8F79BC79C +3602569AECED48BE6423888D86C3DCD811CC26C29239210EAF574CE8730016A3AABF2BAA31F4 +8CE3BCC43DDC31DF81883CA92F2CD4A7B1E136AF70037AD22207F8F5E5EC06ECA4C9EE9B199E +15590E9F59D11688D22CF11060E87423F3E01EF613FC230FDDF599D1277CB7FE6AAE4312282C +4BA8A28D794628136FA0C5EEE83CC6ACFD043AE7FD985D226AE4D91D00218964C161C4A0B147 +E58A4D143917A592A8FBBA3215D1E3AF1CB952BF418C9B07A5ECA3457B591A0E9C49234DB043 +99EFCF129AEA7A96694BED7073AE4502979F2F0286085B799669DC8EC22ADCA51E92EB0E2633 +651E822F4910B716DE01CF09B631187A6B9935D43DCD1C68111B850B7F21EE142A7A48836D8D +E7F4E63D72B515728D9AFA7B11118DAE383ADF97CDB92C17075F437FA0BDF5250C251013B612 +C593D93E8F9ADDEB8C03E1D38F56E6EC42C7FDE744866D4B873B725074754CDC10CB0262403B +9740596A661A2DBF057144991F0A1A4FE3E316095978A88CF38BB1B5DD0FF4E8BCCF1C7D5636 +9CAD0C2EC29D56A6CD2535EF610026AD120B4BBD5151EDDC7F385B229E79B22121416E74463C +4D5246501C7B6632ADD04F8C460C7D5A505F29BB3F45343ED5D576302FF9D8EC1F400B190922 +BBE646CD809A6BF2E0EB9E7AC66422EACFFA93876695B8E88ECA149CE738586A0CAF105CA587 +8572E58ACF6D523F2BF3D410A8E79507A0E480AF8C618FBB459AC768CFD240F32B0B69265332 +20552D8325D058C2D30B5A437AAC867CB5BB6C007717FF089C65FFA92C5C8D159E0833C54C53 +040D448B93FB48B5FF2395E4774BA3764B6EDFA7EEECDB2B9736E5D7E427CE883C67AAB05B08 +26CD91AF342E32F2179CB109F2228138978ABB9C8EB9B555C1269FBD12975929E91AEECF0915 +D6B2068C7B2DF726FEC9DA54ACBD64AA808FCE20A34EE78463C4A831E33F94A268C5454A1CD2 +E05A662786E7392B24EF94B7EDCF28428B52FD85DD03F7B38000F38C4C80BDBDA46F62B9A964 +FD0B5B33F3B8FABE28538632F1B229418E1AFD6FE9263CC220BAD30170816AAE06D54541F854 +B68CF72E08DFD272021DCE628962A7BD962564C054C0E6AB2742846899F9D0DC9424D820FB28 +9EC582BF3B56C48D32DB2768406491C837B125B62AEF198E85D6D579899EE59B53271EC329B2 +83DD4C498294A27DF14A783C517288E3B6B4CDEFD2489398B71A712AB154E55499E016D7862A +14BFBCEE308D95509CCFFCED78FF3C55510CF91DA90F10D3203706F0592400847639F47C8A70 +D98F48339A3D7017A8C8462D6316BAC13DF9E12A49805E695A1C632C63E223A2799C84DAD656 +DA6ED692520DB379C727B8375DF9D548F693BFD9509B3028B1EA529AA6EB737380A4FDE879A6 +CC623AE8F5F992523E167791F3D33BFDDE0A516C6901A202A5C154A0E69CC5FECC0B75E61B9E +D91834B659805E8B7BF32FBDC4DAF5520A27D508689F692F1D69D4E0B00DD7AA134C1357DE1B +F8804FD534600ADA4790738325759F35D9DC3B077FE48817AA57CAF862713E617BF7BF09344A +74BD13F118D26D30C1511B20327C460D270E5475371AA26BEFFEF03B66564E0E669724E38959 +73D98C7150F035FB52D8D328EEDB5C85E7EA7BE5373E514BCF881C4147DA0C1656523A95B63F +86B3017B93AF76536DC19979B9F617CC855DC3B8FAF171780D352F93AA78C3F25A0AF51FAE91 +878FDA9DA3B094876526BF6D68A650008DC13D0F17F8445236FDCE4F725A82AA5403B568F65A +087169993A3E81684234620F58568D2801F344F5667140F9DAF63DED0AE4AE391F717AAE8B56 +6347257987D49186C82B911A98F94DF8292DF7ECD76FF09EAC1400B6C34658B9025AC42B7DBC +EFA9173258680D929ECBFAD99CE071C35DD8D34126A036DAB27B3F2A0F4B79A509433784D317 +7324A8DBD271401AC904E072ED118331DACC31CF4EE21D1A9D805971DBE8D17AD377FAB5450D +1C0448C6C65FE4E8EC9B4BC1FFA74D7D0CDC6D0CBF0C1F905DB3F02B944281CCC10165CDD730 +2F4DDF57865D32D47C8C26FBD0D410E4DEC820B5D6EA0DD6B1769AC0550F15AE88C0EFEDBEE8 +4B75949453669DCF1B447821480ACFE750D13F8A3E574F7687949B525B278DB75C3102FD4706 +6AFC56C4588A258813C3C53DF147FA5F225E901A297E5E322920F131093304BB9B2895E46DBB +1D020EE684B08C64E1A159A6829DE9510E5E985F53454EC367507D4B84B80E28133254B7B60A +C194C776F734D6E8837CE23EDC94531AD2E46DC6BDC1E921CAB4FF785DCAE7B556706FDED6AB +4763153EC5F4B2E10491E5E427DC327C21B26DB2AC272588FC41FC5490A102ED1C2AD82B0811 +C34CC8DB42CE97B4B24E194CAF230E58A04943934351805A9A0C5975E98C0F11CB0AE28C5ED9 +8E52CF035F823FD449436B20CC0A913B7606A6FB2CCF4C7A12714C99B60940CCFE9CE26B22D5 +DC1FFFA01C8E4A04AF28C9CA3F2A7CB2B33A725C456EFF23BB62B69878F8FB185F653F41C596 +C9BB7C7A17CD9B5A07FC405AE7E182567621FA75FFBCFEF42E7373B2B15CAE76D7C07BE16A23 +086500A789CCE988CAB9B321CF969A79132544B7D9503C7D30A4C86D8601743449D619A5CA87 +879AFCEDA5D16FE6B31E17529D17A95C027D481B6C11FE9477412DED852C15A026E36735239B +F5063B7FDA776C1282B9F50F602526F355AC3516E5DF327C227EDD44E453B27D7074E0F9D9C1 +9FAA49D3DE5138498B0569B4FCFF2041977F69484CCB916856DF1F07E40B450C250BE68FFCF4 +D159FB8F1208EA8904567BD552116A28A95425CDA95D4FDC06E59449065B65DD2B7047BDACDC +29A66C8FAC9BF2EFD6886FD859BB0F256B21EF2AA03E6EFA6A614B222B84B7E6BBF2824713CF +D214DA92F04543AE0011D51A50FD08C4FE4BDFDB9E184EB32C399D3A2FA71059CFB9F6AE1CCC +DB4CAADBAE20AE4F65BC58334164F127DE5C476EA5BBA3644F2F24F0DBADD3D1E80DA16A6483 +64C1BF86D0A76523317C7D4F46C419FA31BF86D5B700CFA640273BBB9D6C8AF13E7CAF3A2510 +01F06DC2D4C8F57AAE5A8B4E4379163D732756D3A7B97C778DC8637D06EC36A951DAC426C14A +58DF97D2777E7B45EF2C3F9D35202015E420C5E35301AF195403F3ACE5FD4040ECAE467282C5 +1E7A6AFC69936F6D81216FB0B2E3B3DD942DB10D9BBCE24E186AD3D46B49414CE148AFAB9C95 +8E7339664510E2CC5624DB80A708A040C0EB2E48E8CC67EAEE7856DD36BA948C8A8AEB120BC3 +28BCA0A629FEAEC6419D70CB8469D82931C1B08B8EF46865819F4D6E3D2A9BA5EA2ED7E7221A +ADB2660B474E576DA104AE298ABAD60F6607D9D03C9AF768707D5F2F299927D14BE80E258469 +066AD3C2BD0ECE20975A061977CD4A1246E6B545E7E9788BD51E04DFD285F9636C663D7C6AF3 +64ADDFD0336C6CD6A46A43EB252D2B72DF3B52050D4C2B20DA4F6CCCB1C1CA85EE1C9A5501FB +22EB7FDFBFD0838F0359E295D3176EC8F0A2A7A262155DD2F20CD2632FFC30E4F274AF926570 +85147A75942D1611D5B0407504708CF782398C366A02AD6A8B103DF8E615126B33DA380BC2AA +1160FA63665B883A5A4A7CE7514DDDAF8E65508B2B6FC341A00DE2E976C07A499BC758ADDA72 +B65780DD06133027E1D7FAFBD4CF7085091ED9DD98D91E4EB4BC0BD4DFBEBC947544A96F47C6 +4E1CA2BEA3E739A65BECDE6B2CF0713743B881F403AA40AEE5A726A8B54659852EA518675CAE +5089758C77C82EFBA56DF329AB46166154F0780319347A050002319438096D4EF7F851876CE4 +07D436299F7D3A0FB6E8816C37A028D62426BC615FD635060F1C69E3E7FF6D9262E06679E415 +088687B4E65813C86D481C41B5D74E0C208882B13EF4EEAE0C60850DC1BF54075F41763705E3 +CFF0B9FFACB9E2922B40AA7209970FA5F3563D7E6E4D3D2249E7E946E97B5FA40291742EF9BF +A2DC7D4E5EE1A25F6D0D930A50262F17F38744D7A07FA9B6DB3C4D7CC96DDA023AE2F3DDC571 +FF48135434E354979EAFDF625460CBEA8B65B63BC612E44D05CC3C3FB186403F994FD1919A62 +44E728857A54DF535AE149D405CE6C83C96A6DC117BF178E088556E12D3FD88017FD2C031059 +1A89077E0D6455E76A3C8AE37B8DF495083B9EDAFAC2E3322C07209A21B5C33AC6AF3DBB527D +C1AE916CBA52E68C2A851EB073D09CDECF8C3AEC94F5728F202BEF1083215895FB76B791CA26 +6B925512AD89EBDB53AC81DCA3EF1796D1E91AE23E5C60DF72549D625AD1BA68D4B7B5C338B2 +1496653F61F735A9D60C437A6397899304B3EA36BA2AE138A700681EABB177D32CD0DCC8B226 +982EC3BB7EC84A831569BB9A3BF30FB4A56D947464B1F7B49DDA4621907F605A238D6C5A1F21 +439FB67080A3AA1864CDACED6A37D1FDA3E95EB8E70CB3B78D2CA77BAB36D6FBFF8CE6AB6EA9 +78C1C8FCA06C3112FA831E693BE7562B859AAE3AAFDBBD0B119392037F1658D9FF7473B2D4EC +D67B80F2EC39CB32391E41E2F8466B9BDBE8E134186312F0C97F2ACD4EB52F835D00880928EE +1DCA94DC6A6E25ECC61B5E549D1B8A2C130D61EA7A42465F0EF3E3AB242799D2639AE4B2CD23 +6F195D3EE06665DC3674C8CD681E0B49C7E5B95E4DDFBA0FC01DFEC2E17A77F16116AD14296C +0825E9859CE22241EFC60ECDC3F4C56D22EE448F8263394CA1848F95AE78D46DA9FE03328476 +8058CC5A4CE269EBD36B01D04B772864E136FB076154A52C165A9A0ED6A9415474890E85738F +C1E112B733B2CB78D73A294367C4A6B33D15CCAF851135BEABDA0AE764091A3EA5B65D0BFB32 +36760AB084F8C9C16F1E93A7531EAF2130CDB62A8DB7B42040D0A92F2B20DA2FA00A73738BF8 +AA9DB2581B00857BD6D781A2C78D83792012C83D4908012347ED651A2FDF54C70D53910D6DC6 +D2D278872C6E7D58019E8D04407A1A720FEFDDD6EBD79B98B77A4FAEE6EEE00F2985F8B674C6 +A27D04C992B7E8B53A1E621F9D3C66DEE950E1F705D02DDB78A081CFB94006AAC8105F5D3E46 +5796D2C10018F65869FF73D7A9ADB035FB37EDFFEB469D7670A13A43DF3CE14D277AEABA3833 +83D36460880D924138C8A8374AF1031AFA2654D5A118A82149072BCC38F87096D240B55679D8 +221041F2F7934C27D3F1B543B6761CD2D2D42BC27D7C16317D651C2E041ABFC027D3472514ED +04642E58C1E729945761DE2758A438569DDB55505284045153837A29D3BFA889C6AABB26C108 +F27571D832CD930D39CFE96814370B2EA5A39376975E378B752E6E14FF1322942114E4119A30 +7CEF2711AF296AE3F88D550163EAD08B2B515364854990F25AABB23D975FC84DA81CF63A416B +32AF608508DDFF86CC694A6B668B3F382E3E3AF223623A65AAB3EB16D000D86D663EC6031D2C +DE50D54A55EDF6C7E47B4903C9922BAA00D2C00798CD367613F7549D9873AC4EDD3C2E8A044B +AE53643AAE392DAC91F6D335112C2DD4B188C5F1EF1E5E42457E4C2F2D2A282EA3D2E9BCBCCC +6DDA43161DF8F8985745E86461108E080F647C09B183ED67257381C512947CE954FD786F0B86 +A62E40327AAF77C3F5265A47BFEE2F3919A7073E84C49DB01295C730AD18F45364E2F19BEE93 +8B7C92235D9E32754139E8C2F64C738A5716EE5BF2C68D09DA48166FB2490EC874C723D6E72F +AB7C597CCD0ED2398BB9D99159E2D4A3FE605ACF6F7A5D4A00BB9156FABAD02D727437448B75 +E6F08F1C5F17B251412C2E698CA1FD7D8D7A80AC6C7343CC7CEA23245812247F35F0F4480E10 +A1D8F9D8446EE41E435166DBA0CA3B29155146C96C05FF1FD2661DBFD9AD2A7341362BF8C2A6 +C10B91541D2E4CB6F8AA01F1C90E118E0DB81FC03048F54677CF96075EDA05B928E200E1620D +EFCACFC777BC76E3C911229C64699560D630BADFFB00206E4DE61E3D06959B2C4486FF5DC7BB +B22C634D8B136077E5062096D3C99B142E2D1AA6C26E58AFECDC55A8B90441C0459140363FFE +8928C20BF64C8BCE4DD15EC806A2AC7CB1DD58E67B69A34B28C4164BB0262FF9267544A6A905 +AC3290DDA8F97CCAFC12083485AF20B6875B355D98CB5E45DFBAFD80FD63DD590A2EBE0B0429 +2A1D37C906FF3042E608B3D983DE1D829FAA8B658584600E5EEEE90FB0CB13EC9633B148B696 +30B8A4617527B0049E107F4F7E14BF421DF26B08BF193EF2650E7930F567BF3A05CF55F3BE9E +651C2273F5DB3C4D08D9100CBF5F5672C702696D823A43082A79B159DFD315278DEDA56458D0 +B8208C7FE90808E0D0566CC2A176131AFCA80DC312C9F7E4C25A0E949AA384CE254B885CFD9F +E74E88B40862238868C3F7D1B435DAA876B5875563C3C5BB3B962BAE3F9909BBB96997A76533 +95C7CBB41D74347B78547085368A5B2D18CFC3AC56DCD1D9D5A53EA63F4241F1B35C15913F4F +773A48F42B4D04B594F33FF14C0B16989C4354C2DB18EFB3132AC64D02C86EA8198461F700B9 +8BE371A968C0865BEE44E8DF5A7AE98B738C034CCF07E1CAE4FBFB8A50C9C31362845BFB67E0 +0732FC33378066D3B8F1D69224E627103CB706AA5B6F3E4DEC74445625CB052F5AC48681CD3B +204574A1041CEDB74A51D4D21B37D465593A7E8F7AC1184C5EC7AB9875852D88E15AA1C5203B +BD9DA15C25BF2E908C97678DE40D9A8226BE09A735156D1AA028955ABFF46DA51C07E8E1234C +9FD06F9B54C0E8ABB2AC28721F5CE5473077BC6A4AFD0EC98F4FC29BCFB29BDFE99D931BA28E +200F5D58136F63C5D18B4917F79F9650343873C44F8F9F699A0F5495237E2E748B3E5C3DCCC5 +9DDAF98E1C4F5252F0C52D2BC4399510496E4844A6392F984204282ED84398E7C8862D9462FB +AD609A8C85945B758B88E37A2A412380B6DC884BCE142DDEA569227FE306C6B4274C07CDCAB4 +B48EC1806E45A27109D0B142FB3C84019F4C1C275E8309696F966705B06292C8F8622FE8DE52 +6C591659D7780D424E8ED1D83F59A0289DC59556A84B5EE4BB34DAD12A92974CEF6901517285 +42E222B0C32B05B2C3D819A40C4BFAD0E080E60AA633D91ADEB117434C58A7BBB334503FB9D6 +85166DA7425F35097878325385C28C2F1B10CE6AF452AE0FE66C89A9426D1B25196D06CB9271 +C6E973F2FD6722B1EC18162175A9C00CD155FF3EE679FFECE6889B2EF40D682FA2972EA03622 +24A1C43282A08753A5205D3BAEC16DF17AB6F6162F9A61292F32F2D9DA34A45F3DFF377848B6 +E5CAADF938BBC92D8553556817316F4F8F8D54983D8D72C2145D4D83682CA5D528867E8CE66C +050FE52B0269FDC98E5B48A185B979B45CCA3D99C870B1049461007CA15F4DBCE8A306D460D8 +F6B44A2506FD7217F11B69A0077D3B7C2F016ED954BA5E58C9B51750E4FBE8E88E4B0AD59B1B +9969BB9494CC19C030DDF9F586D80CDD03FDA4D655D90AFCD4CFC93ED8B70C13FEB1B3F052DE +FF4EAC734E8C1FA2B4AE1423E78E529443074F58E3F5D84DC1E8AF60866E49AC96210FB526F1 +B4DD10AA19C53B92973CA6E13B60D319FAD574A46301A80D69737B9F60B4466B94F4AC8DF508 +0C92A7359ECF6883D87D1BD45037F84CDFC93F9CF0B7D8D8795EA37B8A0CFDDB837D8F9A2327 +42995FF55E0C38E2CC9E57E10C5C5D6E9EC93650DC90A82F545E54C66133F9381262E21CBC52 +CD865192A781BEDB71AF318DC25239D64CF458839FC2C809EAF85AF1AD027E0BA8BC70AEB164 +8F345E7B6043BF59FE71C0B20F8BD21CC93C9A426E80D62AD487A60654EBF0E364D99B90574F +072C52775B239A0DF62F256F44870302D077D114DBF83715E4A07069104876317FBAA1F7ADF9 +F99DDFEACEDADB48B397B7EB2A37E190729F6D31474F4F6E2644C697E0FD8836DE337E05A8B1 +B8CBB7A5A6BE292FDA3FEE754C5F9FCCD6E4528349392FAC86F7E6BFC953ED5378B7C5EA0D8B +2AFA34DF6360198E5FC5ADFEB120D9FC498D8DAC8644E9643AF39DA434BDC546FD2BCAC23511 +AB1687B7943F299285D071115B4CBD650F356E75F478C5505A7FF036BEBE3682C3A00D047626 +1791CF08EAAEFA6F9333C66CCF5C9E59C14829B853A660F3FE3CCA0F1F869E3A31D089E373DD +A04D765D25FB0B6BF205A9FD881F00E99113C5DBFD2FBD7ED608C32E9D51FDF6454557DC52D7 +2EECDEF0AC2D8E89706809648515BD4037379C6057BB89AC4B6768DBBBFB672329D3C21036A4 +804682C6CFAADDAC7723C715842B25B03FA1F12A2291125F34EF7DEDF897EF4A7506F804E337 +0814F4B62612B35ACD43A33A3ADC76815D29178EF7B6D2C170FCC1AF75A9157239DDC78A5FAD +4B7B759755F63031B1A7A6F6C9FAD4CA3B4F36E065E3BC3ECE67C990411940787058AA52A00C +51E29250B624EAF70C9E236898B1E2491256E9C4399ED8ED5B19F5941E76F51B8F16EB0A96A2 +9FB928E35ECFDCA1BED3B12D5B5CA1D55BB2E4AD69FA1BCEC3876142B7A194388538F5BFB028 +402E52505302F482BFA1D6C2492FFF4C7C882B6260215B52279E25E8D797222A2E4473CB30A4 +489A6F2C566A79E9FD940BA0E15C52C8044B4C725358C667522E784194F87C543D9F77342757 +2CEF02F46AACBB4EDEECC15C3E813C67E68EC8485112A1E19054AE9B877B857D9466E69E81F6 +C24BA540A3D716F2E92659D252692C1D5DEF79BBA8C6A7BBE9EAA7CFB7721810FEC93F176E8B +9DBA3BEEEAEFDB577C14D52D2676566F0D04DE6931DC8ADCCB09022D30B84E9703CE37845966 +5946CA535D26B3094D1B493A5695DA6DCF79527B841194790AF65EA24FAB98EC08F519743248 +FC600029F2469C8FCCB2B27182928BE3F1AA4405E14C7AB842A370E45D48AB1EEEC9168825E9 +88147928854FCF974821B19B65D9FFD57333D3EC10B21588F04F652A218D8E5CEC3ED25BB6CD +5EB1789E3CFAAACD95B72455C5BE8FFAEE0636C0788A587C992E6D1FA1E2D5EC8EEA82B6F75F +413707DA0EC878352E92FBB1608506CC3A4D1F676D364524C8B72C3AD5867E03B7642F335B4E +0DD6B59957CAA5C0131C8A58E0F95EC0DC6D75837291A7C1DADBE3F92642D2CD4C0EAB79CC23 +7BCB33E4631BB90B0CE4D63A936348B7CC37AA207BCA6410F010890F23F6B3F6DA3C7A0643A4 +44D2E3D226C754C1598D72AD25C25BF5FDC1895E6D23B9632646EF4F314BDFFA94971BF6FCCF +20EC37B31520221BE10025C386A8A1B3280BB47FCE113BB4A5F29AB70059611EEAB412C0A969 +3E30993FC944B38B11211594B5AD84B0D622255A372F56A150BDA57451FCF52F3DBA2DF25BC4 +16759E32B7B19309C1FA25AE1C33D668145F2E645107CCAC86E741342CA4301685936E12234C +8D612F9314090D5C9209F5D154E678BFA3985B03CE6635AB80B8ED2630B41D7D223E6ED1625B +FCC417BBC3C9E5BCA6256260A06923EC1B9D2DA78C8B55B05CADB5785C838CFF582FE167CFFF +88167D7FB3B90B276F5D6F78E919FEBE8F9B58915129CD7AE5CCA6CA9885D22CF7084994D101 +B81A675D0314C93041B5DA1899B36DA5DB30676B5F1FC0F3A98A33916B47E0496E3DDB771098 +9AAB7642A1F77E5CF5EA22F75432DCB7DD2AEA6FC7BF8C9FA07C7F28F7D37CC13D3586D4EB49 +CF579A95DD3ADE1DE06869687639267085352DAA0A19E8F95E4A7E31FF0D17CC87373690D263 +4852D465CE0FEC652FB6D710163C738CFB030BD4935EFF80F7DE7D7F06F0FDB1F4C10B07938A +C60C74E442E1F3A6BCC8BBDC7814B6E710C41AE1E157538871AFE3518CA8834A4B4DBC59CCCB +6DA74715ECFA03E98289479C36D00DD0D125B12F63B45E112C7AA1C5E60B986E74E56CF95C80 +198381207AF0CF5F17A6635E2AA89293E67D2C549D110A2A57C02C581166747BA758DE5D5F10 +686029D7F0A82E7E4889BA7160762431E00091524EA5B12C9D4493F0CDCE0B4DD38EC792B4A9 +2B0DC4539A51FF1D613E75D981BBB9C20B3D53400AEAC4970FF843EFCE5EB250C1283AEB8315 +73AE15427928CC2A9C0C3B04B7CEF0DBAE549AE82AD2FAB68F5D7463420EAC2CBDF421BDC88F +2A6B10521913C6BFC6258598EE979570E9E555F475B1B26721F94A5462135E9705FA27259BB9 +564253D058772483B35A487ACD624B8D9FA02EE6BABD73D308EC29A30CC32BF271CF95B3B070 +160E31B8649192444A80DBEB812D1D4F4BE00FFEE6BF7E4CEA75A1142ACDC28EE252228DAD93 +7A69B3580830CA904CD6F5CD01977F6FBA3A13E89667DDFC777F48DB2736D78856BAEEFC2E41 +C82C82466D361AA2D02FE20568F584088F4038B72E10695253D8E095DE4288A48605FF431809 +8801CD4FCA473F8C3316E8FF9CEB463D3AC98EFD0E30EB743E250B974E758E86DF712E13453A +E6882333F16696A670D28AA612FB9A03D46C4A866155D21AE216E7017F06C6459708EFAA13DC +465BF43EC202C8F556945FDA8F0E06A527A368C577BD0E5857F35C0AE8D0401EC43D1FF17760 +A7D9893DBBCFFC86BE0747E7E6E07736EF0146BFF75DE5715E45F8EE823070433000BF015DD9 +44265CEE7BA9BDD434A1D78E419608A4B19C0F74CBBA354BBCCBC13D0BBE4BF95072C69762D2 +318D2E637A918ACA900ED1D59011198197E8DCD7D1CCC1F43890453AF9F70F821234C94E6F35 +5E494C38E279E28C60BCC6C4132405B8CD1523A1BD77A4CBFA12C6009F5669AE3363A405EEA2 +8E7A28044EC8B461B342654B2C24D50F43CBF0887C60C225409A289EA660B77F2286ACAFF8C4 +656D4A369D39875D0F10436857033D2C5AD5E2619557B4F2C88A753249C2DA0552BAF19916F4 +6F7F3A1F1356AD2F047B55F002D0509E266C184A77C6FD56071A28089B1082C0E80985242C8E +3169E754E5CAE6AB2EC06B5D8F1189E325485950ADA8A30F12BE6872D8393BA32C1ECD6A80DB +0FDF54919E9A7D9DA15C1BB823881033ACA8C21F3B806722F5277AACAB4A4E80222B3536E50A +2E5BEE34484310CEA6573B48F992D2B361B13F3BBD14A1E65C58B6D71CE393C3F340FF9806B5 +4D82C04076AA5A4343E53785B3BED4C8A78593988BF3432A217AB637583E2898257BE5EAA11B +84231F6C9761F74DC75FFCD351F3C4101A69C98877EE17AD11541D7F57F6F5293CB956A7633F +541EAF253262699FC79E4A396C5D3289C3CAD0C31AC6CD59E794C80617E102B306EAD89EA036 +85508781C79645ABF8BE697710D4D5821D1512467B66DB602A2DA5E46F646D685E09E0528C47 +9C6E9D6A5503B99104E0A5535E0A62683E520063BF2698701896B39D26FE9D2FF2BA0BAACA77 +A75FF905B3CAF7C7C8A5243C54469EBA42D0ECB15AFF53770C93A32B18205D2FD601F88A36F5 +3B93CDB0A247C4E5750000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMTT12 +%!PS-AdobeFont-1.1: CMTT12 1.0 +%%CreationDate: 1991 Aug 20 16:45:46 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /arrowup put +dup 175 /arrowdown put +dup 176 /quotesingle put +dup 177 /exclamdown put +dup 178 /questiondown put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /visiblespace put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /arrowup put +dup 12 /arrowdown put +dup 13 /quotesingle put +dup 14 /exclamdown put +dup 15 /questiondown put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /visiblespace put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /dieresis put +dup 128 /visiblespace put +dup 160 /space put +readonly def +/FontBBox{-1 -234 524 695}readonly def +/UniqueID 5000833 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACDD6500ABDA5ED9835F6A016CFC8F00B6C052ED76A +87856B50F4D80DFAEB508C97F8281F3F88B17E4D3B90C0F65EC379791AACDC162A66CBBC5BE2 +F53AAD8DE72DD113B55A022FBFEE658CB95F5BB32BA0357B5E050FDDF264A07470BEF1C52119 +B6FBD5C77EBED964AC5A2BBEC9D8B3E48AE5BB003A63D545774B922B9D5FF6B0066ECE43645A +131879B032137D6D823385FE55F3402D557FD3B4486BE79011D1F5B667EED85FADE30AB2EC4E +1C2F4FE750CF9A69506458071DE8896261C001B1C290937FA42A1FA87DE406E9F86A4C9C0F03 +F69FBA719114F8AE51040A4C03A58B6F3DE027F6726F32743DCE739514C2C6F3C2DE1AEDDCFA +8EED7DA56DD68DBCDE33C29FF7A694769049E4325EC961B2DF16ADD2AD46F18781FBD63EEC62 +C26F1DB41E6A666A09886382DCEBA91D8FF7CEDD64DDC8A2F15FE34076A064C46FEBD1F4DC37 +07AEDE0CE8AF161BCB8E4ADA202D0954BACA5BE71C28AB8BF32FD72029AA07F27D658A68F454 +A4BF386F6314224D16C7F0A8624F6B86319A4E2FD178F596F3B20DB032EA28C157A68A69FAD2 +BC88881658D2286C0D4EF061BC070C3145F2A37EBEC03F51DE7CDA34CD977EEEBD86B00F9758 +B3A496F41D9A74279EF3C6322DC54945F95062C5F37A1E51CF7EAF45F2B3634B2D7D01EC3B29 +8FF35B6616CD3020E096F6C6AA2BF04C4A9361C19F3C67A28D936FFC8120F1E46980B29BF540 +47C5F1FA48E67611A74FA4343384F802A4079B28B94681E119AB0C1692DE5BBF426440AD1023 +506CB80732DEC64D9061869CB34DE924D2C26E404B7DBD9BE55B9C0C5AE3095C15D278ADBB49 +12DF1484ED2D73128E5D9C1F1A3B9AC19E2CE5366C96644F5B3D3EEA589CAEDB586FD9B8F4DF +32EC910E9B7434D5BBE57E03892EB03890567DF5B811AFA0DA5E929D456AF3606092E69DD7FD +0FD505A1343C143D8CD853C485C30537C448AEA64F31F887275696A3272E00F8860E60AFB1A9 +32247B70D45FEC9B75834DA16FE9B6D1977D6CF251568EC6E1B2321F0A168FE01CABB0DB855A +3C93DB62021467C39F33BE34A345A834C0F570EFC4E6810FAD9BFD353F241BF896E600111C2F +AFA2E7CEBCF89378418F7FB54127058217A073788F37E315B5547BD1FB607460AF1C5A025B77 +222E7599F1DDCFD5A604825E440FB0A5E2C8F2337A6A3E23591A2428B5187801786BC527CEEB +07E0479F2F46050658EAA3AA39A7FEA3F3E3F54CFF92DD7E2DD80087D9B54158BF6DA0D15B85 +C7D7FC603FABFF9F14D3B9223600ECE9A913C077770B25519408B8D9A111D7A6FD94528B2EFD +4DFADA964A5060263366D3C3127C33CF0F01700942E1DAB4781962873F7E87F34B702C04EFAB +55CA34951EADA440B96837B566752ADFD20ECEFDB7E7783FB4ED521ED75E8472917DF30C394A +38B7203CE31DEFC6AD7C723E4C78239F35F1C3650F39AC87F5270132B617BA31E3ABD72E14C8 +253FC4FAFD4D76B06B2DEA10F527C246DB1C9178DAE2C626854DA20D3997AD464466268D3645 +2727FBEC29E1C15A0208DB47F4C49F6436CCB01EE8D499CEB56AEF12A2BD351ECDFA7C16DB36 +5EC4F29E84CDEEB6C69406711DF79A53CEA0C23E13793221403D887FD83ECCA853181E013793 +10D777DF4CD3085C894B27CF5573C1A39AEEA28BF9EEFE2949720B7ADDE635BE2ACF587E89AF +27F3FB94929AE2539FE9F7BC7DF6B0629F2003CB5C6E84B704B5453B2579CE0EE6A7D6B45867 +24D1E87117E0391FAA87C44EA920DE04290B2C1095D9B3173DB9718B188FF8F57E674BA27AAA +37FB45B5254204F20DD420AA84F6010F512A1CFDF837A08EC7B0F25E97328B99BDBADF1F9A8C +BA4D1FA311A416B185653ED2CEA3E77CB228AB746CEC1D1A6F46AACE75E57425A0C386BC43CC +92114FFC834F5A997549383E7BF2115532275A95815E0A1205831E90B7556E7D88CC17314CA7 +EBC2221E9E2017095B5F3743AF3C34B3767083853EA9192579BEC83BC6EDC0FE4D5DD45D69FF +096DC155019D813B9940DD336A025C715EDD62BFBFAEAF49386CE28403CF87CE9F3E6CBF6338 +EC09556303B9602B0EA318CC45E7905D43C74E88D8E6429C96D4E668A0D1F80BACF3C8ADFB81 +26857A5F30BAC745EDBEFB8D56E0DFB96473C2867F06D98C43495EB9267F2948C8A30203C5AD +85D98C04554C2212119F947BAE7D5D5485D0FEA7F2A187FCBCB6A86A08CD6C9F02137AE82CC3 +F90E175EC2F92B132D4CCBD5083F29FAE03B0A59071F9A0D947F5B1EBB91A8716E27BB0369C2 +DBB201A59D837FCED4EBD4A30991E38849C7356A8A7B73A79A0E284A391BB70368495E950791 +917BC308FF2E6A6F045592C60F3C6107A1ACAACA3BCF11269C9FCA80DDDD917FC689512F3604 +01EE3E9BEE13926D486A4C6078AC32C3E6C9574DD3E777E1B65C9C920CD6A7E9AF7D26DF1CED +8810F0F68D82F386381B9CD8CACBD3DD3199E0A2ADAA11993B2D7AB5222293F744500DDD44D3 +EB05663B97A087CD62E7726C4CE7BBBA46A43B340DA333326AC565C92E8081B6A44C272EE707 +E58951714D4F864E6CC7339A448A2FE4030C8581563CC84FEB4CEFFD10B0A04FA4CCBB49422C +949E3075CDCFBE821FAD084F7B58AF48111DE80384F7CBEA2E5AB9D75994A01489A00F71B818 +19BE8D5036476DB5CD3F63AB0BB0232F6907C7F8F90D9808BAC65B86D8C842FB4DA0963D60D4 +428918EC71E3618B6743FC95499878D73CB72E0E936344C37621D19B8C9BFEA952AED28FA90B +08EC515A69B5148EB53A9CA6983A45DA53440E73308A85568A95C2BC299682A93C913511546D +6E7E4FCCFFF1A8D0364F20270BF4B161A5FA099BD14E1147B08794EEF74AC57E8D0FA62B595E +D7CC33948FF5CBA1DF0C8E4224B98E03013D19294FC946CE648064668925C0E7E5AD39147B93 +C4CB0D13BE84F557DE1FFC50586723C843490C804A9AAA45808781F40F09FB8F9F518B40F62F +CA77C506A6DF9B6A053CE20F733155E4AB409A271BB5C7A9055A6190D044621389F3A9BC7E98 +437127BA49D45C3EFF1FB8FCA8F8D728936E17895B6D666A958B9E84C3C8CC7C720D82446AEC +140F5AC5EEFC95541B549535E59B9C0040376A7F3CBC75A51FCF1739880A982B49E08345718A +7FAC7F005B22584D8914A4590F18D9825D3926A78DCBD1FFADC03B00C8CDFA6B5BC19EEAC5A9 +4FCAE8BB23D901858C3E274D84BBE889580B65DCC75DB58536C4AB6E402BDC01DB039F692858 +462BD53456468D2ABBE829A64BC47ACAAACC19587BAC5225D2CF31B60712E5BB9D4065A03925 +639B8AC1475C5431344B4F05181E0B12C7D40AEF56DFFA7B7B3146CCDF7BD342ABD78DF93681 +34C8545E09D76C2ACB79ECAD66D05FB8D5DF83A3F36221B6A4157FE39114B4CFC20C197893DC +26D6D3BEBB079D3CAABBBFB3489D46BF65B4644C92EBE8C870B10BB4246AF3C16DEBA71C1572 +3F5DCD416FA8A35AEB2DBED7E2890DBCF327B9A1BDD8F327158F5CFA6613AC55B54BBE821CDD +2148E716BD8F1C3DA35FBDE6798B44D3973C677884376ADEEC4BB07F2FB93BC3010ECF6FC493 +02B87247EB55D7C4EA57D0892D6AE86DF45C02AA7E59B1B1DC9CF62DAB182474688FCC120836 +1EC9A586E6A212C32FC4913D1AD9D2718D879C1C57B81BFD1A24636375136BDB7A10D7C943E1 +18B8DBF145D8C5D0507E5B67E683B75B392A9CA2B9F31C5E9CAD38B46CD365D796AE5B06FE59 +3A7BEE53B7B3C5212AA5C6ECB06450E587974317197AC7C4BDBF4505A6F62FE7D28CA01D61E1 +898E11FB892C46088F174594536B2AFFB1F4C06C48835EB430A21C8B2D5126334D4118D72F67 +51011244A386C9F66901DA5C90F7F72572779934A66962B1FE168760F27030770F0BA6B55108 +4B933F76DE3E4116B5366F93F795668797A97A8A9C581B3A200573A6B9D289D773B12F3B67DF +57A2ECD9A2CCA23C4D6917F8CBC5D21C9B5B8A7B0823DF0E570FB618C787D78D2DD9E0C1EE61 +36C8DF3BF011BAE7D5909F2900AEC1EF6E0A2B51F82D402BB28FB3E745BFA92E66720FA0AD85 +51EF7447E39DFD62086E0658FC0C6ACFFEAFC55245E1E28133E53A29687459E7EFF97328DBD2 +3B85AB82EA25927299918CFB0270271307E7565BB7B077B7425681A6FE2D0B0082F62F3D461A +C1094838097918C4284C7D2AF752D89EC9E0BB6369A9E4582195B8FCD616C0B3E15E9C5D0145 +C8ADCF4175C4A55B4CAA16930059A30C533557D03264A5D255AACB9D3CE20DA2A9CE3490FAE9 +F5F12C719CE5AACC06FFABC769A2C144B469F7ECE4F056E4C66D9510CE75AD52D3D881D71D22 +C90524A566F5207EE0843A7EA235D1E7B6F5D7365785E21DEEF2B461A206A666B172F156E9C8 +30DC2A2784F5FE2C25EEF48F63708994CB54C0AF1BF790F493F44407C0AB8EEB19606A187FDD +D2D0CFE8C4B40413BAE547490BDD6A52D69B4AAD1D2676D88EA9F3E7BB389FC078B93C67BF47 +127C286C48B66CAAFF5E7E8AFC3F2FCC65FAABD66B39EE80D33FDA99C44B9A1C8F94B4F94366 +06F91150F8CAED3E6BA194D220C3FC9DAB3A42ABBA3D110045D3203B3F085C37F16FEE556F61 +402FA5DAB44191B1592F88B5FFEA31C51E1B8EF02A692AC93B0781D32BD30B9FCA7F3CF6EF94 +4AC7AE66416E97F80BE111CB0B7F5CA0BA5546EDA8F2F01E997FE0469A5EC986824055ADDBEF +C5A66CE8CF6BA59C356219CCB32D458B9DB14A34FCF0544E7148C8164F36EB0B54AFFF5D0FD8 +050233BB83DA5C0F9C30D20F41DC1A31F2BCDCB50855D0B2B171C04CB5798A4E6FD648086395 +709294B9FE74DC5593440A585A4716496E57BF688CFF9D57502961FCBCDC212D47F027EB74C1 +CBE000D139122B4675A37050A15C90F4E3C7E03539422956A2D909F53FAD6AFECF0DAF6A3AB9 +051BEB6D780935F397D9567B73F8A201C4B6688114DB7D9AB953D6DE066D926C9E028C54DBEC +37A6118501E09A49CD64C0CEE80AC726AC8F273C93E50AF97726C1F592C5C100ED8217E057AA +4CBD11B0EAEE4C58BBF5C4040CFEDACF167A5EAC9605B9AD4904B557B0A2565BA0692057B8AA +63FCA8C88C7D4D02C6343FBBE65C37B717456FFB609E79C40CBFC00A2E408BD5171D44020176 +05447F73393190287998E7C515D115B08B692A725A55C62F38EA91AFDE05404C8A2FCDA96C1A +2C94F196837DC250BABCAC9A2E242852450B5EC43CB90927AC2321866D52CF10D1AB637C929D +6C3500A405A6C9E2527B4AAE2A9043107547D69F02F652FD8160092E5926B9F556761A5AC7BA +E9FE295CCF424C65D09290F6002EDDCF671C2E79768820B3D7AAC8A93D96B570BEADD291F94B +866313B290684EB5B864CD7D0AED407934B54DBD7A0F0D42D018541D46F06023F70952FC8AE9 +C47B45A7DFFF666263CE7F844D26CCAE6662F68D82B4E61C676A3021F3B2A69BAAA7D084751F +764638E86F8191397CB55F8A50FC855375E1C27615D2313FE443B4ED59852A20656CA3FB018A +EAFA5C494CCEFA7ED73119A8B72E6FA570271F5C4F9B7E17CA967A765302B02F4572EE924F4E +D6F9E06752E4FCA351A9EDD922485487E223B4408D335F5CAA8608745D601C0CAFD4B066DF82 +7C5C32437DCD4C2F72354A5DCBD461DC358BF3B5284DBB55E5DE6673480C331C561B9A31EAC7 +D400D4B4AA714BC61EE01EF584B73762D5181760F82F31B3AF82A09418E0308B6FC0B9EBF75D +F7A0CF2DDB5D4046B6CDAAFE9FFB76D83FF26B6DBF20F07A5C63B5508BFFBAB24F098F75D5B8 +D025878AB6020591C7AB79B25693A09987307896F8EBFDC77A9C87758AF67F1DF4DD557B61DE +39661130AE6268DB29856733943C0275D0934CB512E50F436AA6B3065929D99E50C629B1BA7F +7102B41551CEEB2BDF211B27FC863F3B910CCB8886CE5C17F05D09184AABA0FE7C8A79A37DDE +680886ECFD40692FF71C6402F6A9B5B651BD53DFABB8A6B47DAA35D0B048E0D1CDD313D3A9DA +87F7E93A474D32EDECF006FD15D3C0D6CBA42DD22FAB6F546DDEBB827D89006156EF4FE9F3DB +46FFE0D128CF8537BC6744C22634A078825F5DF773CFFFD4B7A56580975A360C188AF5FB1EAF +54043C85E9F7D71D9BC7EB417EAFC6C5879878F405EF57682D7831A92AA8EA5BF71CA8363D00 +281DDF930E81C6782C322F841CC3909997738B5511FBDF47429CF5EBF33E7A4C2E372D5A52D8 +1B2EC98CCEA3B0E675CF2C3703F1A629843927766A7747E049323E2C22F85A58B927E8E41E59 +34173DEAEBC37D9F66F9F27B8B7DB0CC2110390CFDEACFE8E51F4DC3C99FF8DE54A9057EF779 +BC438CAF7B1899C01A1CF5FB2D6E572B55753C90FC41E99C5AF4B979F61211D1D32FC1DB9314 +A9FB773E5D8A556E3699C1F196F0B4727D4003278AC43CD32939368C7733BC419D26FFEBADDA +523ACF07A230F446A1BCE99FAD2709FAAE5A0E617D8EF2EAC4BC01E5C76CF5587DCFB6816CAF +6F9E390C4B8947C9CE3AD29007742B2BB6C6FFE51FC20BBC8C17694A548AA61CFF6D6F318726 +8C54E3E81F9FF3B0AEDD6EF44E1FCCBF5BF7FADE6D9252FE367931D28298923B478482713939 +52255D1A66878C4D44768EC352C83AA97B35BA388A098186DF61D8ADA96C49B7D2388160A60E +1A8FA86CD71DAB040DFC26B6A6A681D9ECFCE51C7783AB4091429731829A59B2FB5E8818AE8E +D733D1B55074D5B248F2A1A361087B4BFEDB91FAD81276EE08E6513A716E284C5AE0EFFDDDB1 +E67BA59AE6B6A833057B69A350502ECE25C8F6AB28F2F35940EBFDF4BED3A3447FB00394301E +F5B19998F1834EAF4070FADFE4B142F473FEC46D0A96E60C500D31170BC4834A0B1508FE55D9 +343906CBEECED81AF972C50B9D04A3B29EEA90B76557DC3F18A9C57C852ECCA395E51F0E77CD +CC135A6CB83AB71541D2850C85D8D4944D534F32227EA33A0E8840CD7B753D824254EE8D2829 +3C40B21FADD0B0C0125E97E9930A0C727BBE3C8D0815DE74281DCA5E38D940973930274D0D2C +EE698F578DC9C56DC080574DC3CB50787D357F8211A7A48730D033249503904659BF05D5ED5E +9190AEA4BDDCB1BE3A1A4C50B0D407A799FEE4878E5C30BFC0D9251B03CDD80D8FD4321AE249 +E530AD243C671F34A53742F3D6A07645A2409A3707EFEF4E4F35398CFCBEF2510C94D45FE636 +D80515FC13275FDFAE1D33BFE972FD44FEBB65A8C704B71DAB5E84316FD25801C35681E056A4 +D21CBD6766ACB5461C55FEF91564244C6764E7EE15BD40A04744B458C2B6E93477C9FE9CCF42 +9D4E5E98D2FDD6CB278023C682984A99979BC1A74BCC38A6D0D6C5A8683587E807D9AA7D4EDB +E01115970AC85BAEB3839015CC2D2015AFB0E6C8346884F25AD8304F08E229EF2A3BA89DAE83 +A2F22A34E861A634E9AED19BFD674A9DD3A9049172759E0D8BD4F1D79FA2F39251F099671D18 +ED9FDC960137AC05EC03E5A62965BCF0BBD0BA69C8CC6A35192225F2E58023D0330EDDC612FB +ADC69A0E9B8EF09AF0EA5AAF781C2716E8DCF253FCD750D8B5C829B2C62811F9EC9EE7A794E4 +5858D26766ACD5101BEA259B6119588EC8A652AE2AD82C5F19CBDFCD8E5268A039469F8FA2B6 +76638239737D495182ADE2E5E1069B54B0A272F173632515726A4DDCDC92FC3CAF236FEEB0D6 +1FB16199E500F9456BB4C72A88A9C8B96D50446AA691CFA8C7FF7E58B49C40B50CFF81EC491B +8EC6A89DB049CAC589ABEBE717AE25A976FF9D7A16C654B53B08DAB2B983067F3C55842DCEBD +FE839B0FB44E455A4ADEEF4B730E72FEF94A84FD26FCA4632E6D1ADE7BDEC2F107BBC6B6C476 +4853C634B8B9EBD2ADD7F097041FD14414EAE550680242BB82CEA70A98866A444280325FEBE5 +A346A103D268EE2332A08E9C7C31771CB2F9BB82D8E684A4C662C440A9591C56F84448001909 +DFE801BFD354113071814A705FE28CC88E7A019C259E0D799CE896748B10F110D30A3D4144E6 +59C7FEE3640A069C3EFAABE805826967BC07A7F625ED66C069C665F0A354CD318977F9C5F34F +1EF97C6372E94506A664E4D7ECAC7411FC8FE3A160F721A69B1C4DDEF146803821A795DA8BDA +9AF0FC130445B9F6FBAEC9FCB74DE5AF2A104A1E50E404380F20A8DE559C5458E6DA81BD5618 +AD74EB0D6FBA61589CCA81A71558CBD7B7D4DAC6886E024E917DF2D5E3E8790DFADE1FDE7BB7 +908EC62E12C3EDB23B412F1C330E89E0C18E65C675FB03366EDDEDC783CEFC84F71F7F68DCDA +94B672779C9FF82F974402A2A62CF047A5AB8D71633C457920D1B092ACC4F5795CA6D0DF2C43 +C41640776EAFF464ABA9BB73972386B53C6A71FB621AD8F98C734C262A2212126812CFB65275 +4212BC7FCA79E3B53D6C3CE762676F5880AD3DE63581A3CE3EF72A42B7E73CC6E23A6A0933D5 +F5324380F8A53E98DF6BF77233C2B0EF534D569C0B3ADFECBE402CC5034857A1CBEA655B9D45 +FFC54DB388A8141E4E6DC30270F9001603543B44C9AF54604B8AE1F2877A9A0ABF2E14015E4D +91E14A94B376F3CCA39D17AA21A07EA09D047691AA463EA1914121ED4277760D9766CE1A8C14 +EB59A8ECFDC03061C9BDBAF8FAE84540CB0AF1EFFC17348CCF5090C72CDA21007ABABB67B0C3 +EA8EE0B104046E6E77E4DC5D614DA2A5E3CF0AC6F98BD9AD8FB0486F7326DB53C89D3467F6E4 +B9007DED8415DACB451E14281A6F0E3360C8B9993365E4689B53F96386C237D56A1474406388 +35301465BBD6B3B8C943EFA7D6981902FE62EEDEDD267FBA38F1FC395EFA99342EB0FEB63521 +2D561BC01F27874613B20C640E5A82D787F45CB4395D04CC699E70378C806AF923DF381CD1A3 +7EBB28E9AECC1CDD167ADDFCDAF629403704702CD8FE167B25A4A185003A8B3B0F915EAFE06C +CD3C9B0827B5CA8C1F574A26726307FDA1217026D04F48C9E2853A9576D32DD1817B5ED74FBF +68A7FD00FE3FFE84F76918087D43E0915560C78DBD151EB0AC294356575289780295D05CEE51 +953F1C413AD2D60BC9CF2CB5724533D39B36AF05BBD15AE4066325A93EE9258D9A968CEFD692 +11184CAD62E223FFDBF979673334E584B5B52EBE7526E4859B201CC38C22AEFED2E59D6C785E +F1CBE25849BD1E7904E13B58F8B643E480BE312893276269ED4CF656D12A495941340EC5DB5E +2177B25390DE9071F34A44AC79620FDB558CC8766B4DC8111292F7757793B2A7D8DAFA9AAA57 +0BED572C4325D65EF7A41A5C533132739FC0FFBECCE7EB19D69D4249F412D3D9B383F6E6D171 +E3182BB107303AD650ABC00E1783410BF5F669EE91CBD30ED84E1E0A199A69F17204F043FF90 +DB432A505502850D743716EDE4946011113ECB45AD46DEFAF0F299A698639DF3A1F133AB75D5 +86BEFE281B8983550A3A22F239E654CDA506671D53C1E044440BF367A2C5F75C65E25419AFA6 +74585D137365D4AE7B6716D3E8AA41D7ED2DD711B4ED75B88F12CCB3A6A0F7B2785743AA4E42 +4AC7D5E8ADE9EF8F2F2B6C96A35C30F5A32575AD05FF47598B111CFA095BC77E29DA89E63D40 +72F1FEF1E617B48B82D27CBD863A8683FBC6825448752F2944D3BA7D34464942A0AD6423EACC +D2A28136FD1EA51D849667160E07A7C1CF1983AA4273D6D2CC936B18B4A43EB67678C2285246 +64AE0ADDBB4325DB098CB246D9D0AC1B49456D30F3D06113FFBD255CB7713C7970C8A5D486A7 +A42ACD0EE68939894772D6D4333B174C1B6C004F4D9AC917075DF0C10B404214C1881E531E16 +000DDB9FBB93ADCB36690D064CD1131B5ECAFA201257A74DFB7DC4FB7478916D513FE138A725 +A0545E916EE8D1C597B9AAB070C09E0539D1421FC84E1AFC9433D99F202E54F6CDA9D704566D +EBA11F79C383433EEADD4EA8DAC0512F123D447BE2BEC0B176B8E4828622B6D14FCA0BCA414E +35FC210DFCCD31207097A211E3C6596E676E39E4EEEAFC12403887FFF032B325F621367A4459 +06F4D78C7D136CA1A4B25EBE2400288DD85C70AD649B1A8E21A5666057D93F944AEDEC5C1102 +61092DB8A07566D3C4843918FC70ACEB2CF648BCD73FCC4775CA0376D16A297938D6497A2E21 +6F5FC72FAB216ABE6B00C487F65362E7FD8D61A8C99E068279A338828A119429D3B0495D12C9 +E8881455D80684344F92D0306E501AA5A2E9102A67AD77BB77A2191EA1BBEB573A2D1437A542 +A2808E5F358274308720B10447917870BD6846B2D4B2A2F9448D7F5A261A3A12267F5AAC2ECF +DF284DCC39EF73E57A0A77EBA848F1139D73AC5F3298F0A2B431458EBBED3341AE9D40F5521E +864F57154271E27DE965512C85608CC7D5ED75AAB3FD2C096C5A6C23DD1A719BBC66A0ABED8E +270230C807187EA702B36305889D8807F2F7D75ECE5AA1F3D1D1C7E60675912CF34B1E0C306C +2B62C9FA7F51FD7D17BA7021A1BBD88B0D5D8C2C347F5D2DDD2AC27B089471F3DCE65474D000 +4FFF976A6859780EC2A8E271F7CF08336E1B38D4DDAD20379E033F3F21945C0D79B46F876CDB +64DDE6B0D31BFF2D0F0EA5E37DA1BA958D3986FBF2425FD4D36ED0B07050F8631AB315619DF0 +3F1B39B30CB93BC3DCA5283CC36BF9C29EF64B3660770E915B2C4C8A4416BFCB8D3213F725C8 +4772C5F774FED4E6DB73D407972F896B05C7138539C729C2A20387AE91BC783F357CFC2FB1F1 +B035ED416854385385DA6772225010F945313D2733C24396F863AD16058412A70306CB2DBB8F +6428D7B327521C951DD1F5BC489015DB31831F93B559CCAB8B914215C3E739BB558EAA8BAD63 +C3B06F033DE0F9B6F5932C8500F00A14F974B645FE50ADF8E5246950B02E817919E7B2BC27B9 +DF8E67564EA5B0B9897B46315CB71961B76D814E29C6174CE60EF242D7DA4D1EB465F72FC26B +0DA9D3BF154527BEA86286B8BE614839827A06D7328E20B7C0751C00DBACA3B3E548E093AB8A +B726E2202E4F712B6DA77F09DC2AC9A389F9E02329680201A819D992F7D7E46F981CA81BD8BA +640F7D4EABA8A0313BBD3582FA19D6828C0B5BB4AB753422F647ED0AC4E2ED4B23ECA84B40C0 +067ABFCCBBE0E30C5BE1E50C085244A308E8494091944FEF469A3B195BFDCB80621314F276A0 +DC46A1FDA00C5F8DF059EEFB1E6DF6F2F7DCB0A52395B2DF0228464C753B3760B8AA15C297ED +FE86D42D08E40286BFAFBC98DAA4528EBE9362CCA21937DFE8A53595BB590F0AFD86F92C0FF7 +3CB21EA18D69CC3394A78AA12699A5431CC0E786DC0DFCE332D4850E8247586DC99B5A1BA337 +400AED4246D717A48327CBB14B43A2DB10338D6573770BF9C4CBBDC028DB50F6A8A3038580F7 +5F04D1849536340E3C283E8C318609FD20619C47B18022580FFA1559EB1D76CDB7683DD10933 +2AB61CD004E2EA9EFA9467734ADC9052B769ADEC5142822028C6E590644ADBAA94655CA7539F +5615D40237507E4FEA65088BF2EDC65BCD163B979D67AAED3794C0744CA1E037EC158FC4AED2 +59CD5AE2D6FE56BA985EE9FBE9CB3BEA352D7F5934F0A37655FDB297EBD9D72BAFE407ECA9CA +4AC0029C9916CE462833551A9CF7148E7045F4DBB8B868BB699BDD3D1AAC3B3BA5E8EE7274F7 +4B0BB47EAE73DEE2895BF7EF789E313A226198D85B1805E5A7B771A879CD8421D3813119FACD +797463970536F95C52D77A4FDDA562CB33CED74277435C5FFDE717AE5717FFE46B35350B22BB +F70BA6AFDC66BF0F6674BE52C9568531D36A8963CDBA1377915005443FC9374C9185C58CD25C +EB096B0F86271F99AEED8BB365FF384CBFA5E826ABD30540E1162AE030E9033E6474B15FCB0A +71C9DEEA1762479412BA28E004431CA38AD42EB71BFE5B7E172714FD081F1600D0119768014F +E219834913B26817D8BF37D51BB5C85AA3F46F06E4D78361ABCC4D2B66AB2EA51F308006E996 +228F1C2C4709B809D05C0FBFA810446D07F7A0530C7B947448E310806FF1215FB2A293DBD04D +7C2C22573962D83F65AD82D770536FD354BDA1426A0B2757F7588F793C1F84343DD122419D91 +BCABFAF04289A8A9F727BDD082D04640C1C0B4CE103D2919E53BE623F89B12D1F71363914D12 +352A6A2D0A1E4E28FA43CC3C2893B64379C098DCAC2E5FC4BAA4C2410E92D3D4C7D8FDE9E552 +330253F3F62721F69CAFF9539CE3F37984885642235F65BF484AD23C33C74A3B8DBF2C7393B2 +6640638C4F3B4617A6C12CB760EFE5ECCA312972113089E2D924982D6912ED4B68FF99028440 +226EB94D91F44C62D6878861FC7F47B8965D0C3AEE31D6F9FFFA92D63F8E7AC120B97CD905AF +68AA5119F08807E255E6AFA5EBE87CC238C0E35E133C3DB18CDB73AB421D600DC4B3CBF491FE +B931A95C2167EDFD9BCB8F7821262546F61A13994498CFA00361D23D235762B2F36E5E96A310 +F3685E61B5E4A08C1734F8D36F2F6B90E6E4FAAD352B070AA20DE71B9B829C2A9F854551182B +A086EF04BAC9C50CB65684ABE48D4A5271CB7B869DE8E8AD503E493CB1DC442239D5B86FEDD8 +8EF0C6A9729A92889CCA3BB785C5BFE760D2743B3386D3DBC41D8FD2DDA1D5BDBE2C648C118C +DAA25E1097273F05C0C01DD339D7839BC389BE0FAC354C4B23561C1529B2AD6F8D019140B2E0 +681BC9F5370D775BFB92F9E0112F1EC9F9C09B0BE4DE62D723A44C31060A507FA5A3B9068B4C +0AC83710D31DF2F161A3F5FA3E66127AF55A6419DF17976CAB2980CFB4CF5EBA41D4B16F69EE +5839AB4BD7AA2C1A8285CC2CABBD906045B6666116041D8A10ACB8B7675305A0C3F05FAF1DC4 +D3EAEFDAA67EAD720E69C86260B3A26C99AE36B2BF548746DC150DE1D79FDD3C3C8BE6329787 +F8B95F9D52D1EC3BFB87189362DBE13E4F6703C8B6615BD6D5BD610AAEAB4E4DB5A80B523362 +53E104F40CDADAC5E33BFEF07317F6E45EF27DB4115676C7407B51A4080C86D7228AA4CFF41B +3E8810458856B987064A9DBCD6EC2A2C134D1B7F86CA1992D2F177B8CCCB6DB7362EC6C505C6 +D2619D54434A03B702A5EC5D99965AD2830F3C9A6A621772EF498E5F4F34A2ACF85F8593C64D +BF44E78D439CC105978AA1B77BEAB55A2927C45C2A775D66EC84E5934D9CC6C51580F6C70FF3 +79B353F8F06C4C592268CFE979F2B171F07AE41FE6EFF0FAC3D64EC2C99D09DC32C0FF0005D6 +8B5139AB63664D1E4BFADC5E51AD14E50BB49171467C793E7C33E0C83CD8E725774642B5FB20 +284F2B4B0BD511DD99FAC6CC0662541CA12F2E97588ED5150555E7591DF2AD71990DC9D4027C +7C3922E0DD8E51B5A8A83B3F21B71A6A89C2069173A2DA9BFC5F76ACA58B3A970AC998394978 +A356873F91C265A4E121F5E149EDACC2F614E59B5A9F7A9D0BC278F5F7FF575DAEC80908AE21 +B72578A179F25A3236DAD66900AFFCD1C4DF57714243772903DBB704C5953450B0CE21F21042 +6C335845BAA8D509BB4D0025750D6D2633142FD3BC368D4054A23F218B36CBEAFAF6BC06936A +6B72B5419271FE225839BA5687E967F392B8C782647AF4A206AFE5C5EF34EE98228E4D551131 +37B10DEC2C1081AACCFA2F2916F2734C349AD7C167EB1873FF494678B0CC337073F5BF56E886 +6A795D55C7C7535293E13A7886EEF83736CC11C57F2655607A9607A5C7A5000356AA3E696DD2 +7641AC65719D7D5C0AF1F621CE70C03AC15222F7881B125EBDACCA3FD243E302904B8901EF4E +CF7F885972EEAB3999E093DE43CCABFA927D415E7703909EE028FC98E978A934AF9500628A80 +EFDEA8D72B199F12164E597FAFE7C085BF3D6CFEA62A10C5A0889E978024A45C2E4EE0B0D4EB +E332752D57B28F52C77E4B7EE7F8217DD12294CEE9807645C4C1EB833247C19A41B6395727D9 +D50708A0367DC931ADD77B4D977B0769E654DCCC17FCF05F7BA79978F9A970858EE1D1415554 +A2667C479FE0BEAC02C26DEEA7D3F19E47A59A56BC45AB52102563951B7D84E57323021B4865 +4E3C61E12E3F2FE08646BD52BBA29B61E3F9DCA9784724EED237CEF46E2E1F464EBB0B4BF694 +E13C02CF2C421416764E731844C9BD69674D9D63643CBDC9DC5446A51EF3910BE8AB674FDA64 +B52E8DE0D859650342A7B09195B41104CA58C1D8126ED46269013A99672217233B55D534C5E9 +C4B35092B5849E159DE0F26A53DF170A092A5F04DDA515347E8C36E0BDF48D6460F212195D94 +5300658B4E7F53BCF666DCFA459595E250F39B7E54C3364D18056CEC4921D86A54256750710C +E0AD4A20930A40A02186021E7B010FBD2DD62E5CF5BFCA82E90F720D04922D4BDD0F50D1D51D +1B25A80E260E0E00899A702CF0FC9EAB51EC7F4CD9301A8CEF10B6CA1AA8829A5EEAF08A69D4 +35A69BF691B7BD6CA4048725B963CEC24380063AD550BD418D8678F8289C2666404A817EF7F9 +07AFD2575932D5A72964B1C92E44403110B79DD247A0571F37D9396F806B9C57C22B744F549D +2A946D14D838B63E6FE77099D63E76BE82E7107850D914B080CE2AC1C34F6DF81DAA4E14B33A +401FF86DBA292ABB27CB8F2E4E8DEB873465EF8E29C56FE0309BAC322B37D1A3AD19404713BE +77566F12DBA2A615952CC52473CC5C7554E054D246C71A96BE19042F85E696ED0A8BB8492D2A +9D2EF7E306A608A73B0751F965CCAD6C71BE26DD75AB06F13BA014F1A795F4249FF41C87764F +A7596DFCEFD5FCEAC567EB760F7910BB19A122B27B687BE4BF8449B135D0637A5752011EE889 +8F855A3883B81E8F8A8F4D4DB59BC4306F6890C1A6393404D63857B806BBD98638D9EBC162AC +E5CE654500076639218E83407553B99844761B1B8B9E353CE111AB1A4AFA69B633C564A0A9EC +E4BCA8F6566E8F856DFD616527AFACDD5C0C2A5AFA98852F165420EB33AB9892D62A86DEEBED +34BB7A6591274844BFC17249C04955DB780937A1AC9C231A5A0FD88E94C9AAE3E5C410730E69 +26B92C63F4B13218EC7598E5640CFF74803712C681C5D01142F8D59F852ABEF10A720AC70A6B +A97B1225178E9F04B1542A7A20417CEF1783DBB501E72569EC4DD9F6AAC17A5DB49C26DE1FE5 +14F9029883DD2B5FAAB9B33D0D1B54C2EB17771D6F9CB2B3057E5644489C53C76B800B9894FE +2E9A750D11350C30BECC8DA4B15C153D3860CD5D7C65A655E9FFA4F29A109EC2AB7EE0ACF745 +0CCB1CCFA23FE3ED28D4966BA6BBF15CC94781B2F46FE4614612DF12ED408A62938A760D81EC +E1CB72DA11E59F4260CC0C1596FB1E71A8DA86D4CD2478F29DE9400314B79C5C96F465B63775 +682026FB95BF23DFAD4B5344CEF2661F412980896CB656A00AC4C85BFAE906BFD4FC8E3FC494 +251594DFCC39056F08A6CE5CAE362627AFFAF70A0DC1DC0ED201160E4F87499F94217103BA43 +C7E4CB5A8F454F802DBBDFF5E9A6B204D761999CD2A2724371412AD58D974D55DA8EEF1EAEC3 +E6E2C0A9357194295424886667382A48A7B4F1B4457E12F8B8DE868671C701E4EFF00340ED1E +F32A19228C8E09CBED8D0FEB6CFDF88A53CD1577584E06579E3DDCD7AA4E88DA92FF4193AD56 +96960D2F653667E3F120C6ABE0FFA2F6CF78645E079C46D8DCEFCD6FF61B653DDC85A49CEA8D +49F3EB111A650BDBF8F1DC379F60094E6D6DAE86FC7A6C45B0B0B62091ADF7C2FD1C68A938B9 +C4FA888756B4EC2CFD9E530747BC9A6B539BE75BFD0C95489FB6CD05EB913217B3FC6DAB2BFE +006A6F68F5FD0BA803D3D9039EDE46F76852D12A3D5C9987ABFA0D6BF0330C8488CD5A863E6C +543A31B1DA6596165F195417E45226BCAEA6CAC112D27F53B10059B8880C89E53A2B101F30C6 +356BEFC84A44A36C2138F0C96EC656DD61265DE095F6C038039397CCB2AC2B43C916AD2BB154 +5264055E22473098B61F1AB184F9821436FCB338940C9A7B3DEF162FDEDB709F7D40BE2E6D4D +831FFDE9A1D531CE1618289BC635F5D1B00F4E3E83E656302075EBDF2D24B81AB3D46FA86C45 +DE437E87233B543AB99F93C7D32DFCD9587C16BDC697614A2B049062798F0BAE90B8835E68AB +5EC7B74B8C5DFE6F2BC51E22BAE42756D4282915496C479B3352CF9DC3EB8B270ADE29DD3961 +E16E71E5A07DDD8A42FE4BCC987E6035296E13C52D931C7491628B8EF9D391A34585557877B1 +0DE2D4989C652EBB4A0AFF5FC62E63AC8861623AA84B6FB40BF1A4A379474F0245079390A211 +742F49706553BB02E7E4C720D977C661CD225334CC8F2E9FDFE542FD1CE21B7D51E1FA28A7FE +B1ED584E1ADA0B8BAA72EF99F5F7C2875C09E11A12D019EE7C51973A73791168297EEFE53A0D +A28A104963C82C1F8B0A275CFDC6D954F7A786022B143A6B5E2531AF3EE0932B8B7871D38B48 +7C23D099B484888D5799028084795326B45CC0AF0F4F38034475A04C44CCC197C0834C92CF12 +22A5AD9ED5814578EF16461CF530DB0BDAE4B013AD95E991D51EA5625886A159484E0490DE92 +C682F3BCFC84BC60F5633C98FFDF4E4DF11F9926FDEF3C5369EE89B5D0009249E33A6B5ACBBD +2CCD9B56DF174DD99671C9EC503B639D04154A0FF8B166E19AA4142DE404D2B39E95471CA353 +BEC85E73FA3184C6DFE7756BCCD79FF30C612276D149547D74E68A74060E316728248FC29898 +8C3B142B0269AF519376DC26AC896D95F1EDFB871449EADED36EC0D962D06121CD197B6C7587 +0B5C9E7C06EC2D248E02838C78AB047FF8E2A8ECE9EF55416D72E5030893E6EEF91A0A7476B0 +05FA6D276A00191FF46CE53CECB26D959E5438D07AAD9D3B5DDEF9889DD62A7C62FF5EA2F526 +E2B3ECE0EF9BB9C62CDDACBAA995F334CC6F285120B390310E09BC0664C6E5F3DDBB7038288B +DB5A3F410F53EC29A3C847DA5A290307E3C0A278B262C18FE5AB2A590F52EAE3AEC6110BA5C6 +C4284F7BFF88FE93FDB0655C36F8D29859D8D838A050B3D41FD3EE7CB981FF512548BF7FCB4E +54ADEC95788A4ED708AD836B320B91670935621119CB73DAF0068DC9E65FF632F0936481CC75 +55CAA6B2C5AD0C8EDFDB101407D4A0119E2124456E17019019FED2E098284CAB786FFB31122F +4F735776A97ED51F40D45FB280B935EA90CEB6AAAA6081CC70ECBE9F554B2BC67DC8793FFF81 +6EAFD33B53CC1D6484DB93CE057FD1C54E633A5D8A1907B75086B3D4A93ED8FF3C32FD91280C +24CA4C96B707FBAF60A238822EB716F90EDE57229D505D2AC82B0567D9668275644ED0030F08 +D76C24B3B8E927057477CA2BCF8292A8256594476511A19D1B4FF330B36F94AF99EC31A3E1C8 +1334B18A31808828E55E9D64ECB717ED7BBD62D47137A2224465C3088340399DD8AE3DC04571 +148AB3128639D9440F94A8D4F24BF84CF16A43B852EC488FB66ADD6318AAD54C6121EE0257CA +19526FD50754C2C995AA45DB5F2D20B010390B9210BBBC3E6E91B52BB606BC91E34F8C028317 +40CD62A317804768228D54205E4CF5D51598314B9A80FCD1C5635757A46C438BDAAA197EEDD1 +92D1D168ECD10EA495C1C3E095C4C6AB13C3274A64DCFF1227C31CB1765F8BE24A4CD83A1CA4 +A7FD122A0880723700F10A59257B23DA50EAD4D82FB1D9C6DD5E5527E7C267907DA539CF95A2 +65C766B7F45328F79F1813306F184568BC77CFF542C7C0876E2B437A0ACDF9FFE79E69F73AC6 +32B535E68561C5DDD1D44A4F160C81400B77EC107D03E878B80A39E180D432046E1ABE60293C +5CB3C0F838E2881311F3E18F8093370CC018CC42B2CAB90B84CA722C36D20C4D26D1C47D60AE +D7DF6CC89886C6280FA2CFA6F0190C85C312C9CF0A23D79E9DBE0C742CEEA394829D78572D81 +4461E990CB133D20103B77416AF2680EAD7A87460785B5F7A19E9CC5DFB8C4DB0D0C4B795E35 +5515CDCE324FEF9EBEA5B059FADA1C0C7AAB8D9DA95CCCEAA3D9A274592C9554B53938A39412 +6E2F640653E21015266DCB33D660F0740AAB8EBC1E12DEE7725BB0FE290C63679517FD040236 +D0976FD14B88EF81FC8643D3820B03E976DC7F09285B2DE889563FD68FBAACB52ED622669359 +EDE41DA14C1B704166D181AC4B9B62A5275BDC9EE009543F592FCF84FDA8A14AC0C18C5F52C1 +F39040C1BD4D5AA7BE0FA967B1FC460524752FC2960E7954738693FF18E31F8A8964CF8028BC +A14BC661C6FB0F24CDB663F4A52972EA64110D3BAD36817975CEEA0B80A22DC3D3BF9FFCFBC5 +DE5B22C89BDE64B240AA9BF50453C3B8F432797FCDC5BDF83F08EBDA7A10EC524C31E764CD1E +D3CC4643E7555CEB59793DDF22950DB8C8C5EF8AE42F948319B5DC93943644B8611E8E23A0FC +FA50895565DF07359A54038172A5009A41DA953CC0DC877552059038DA7E4025394BF74ED5ED +07DEFC25573809D6121C43DB5788F231CAAA92FE587569AC71C172EAA1079DD656DEE442D466 +1552D10E17BC097E33C93549815B6C7936BA7FEF189D665A1488886C1DFF0BF5645ABF24AE1E +3094DDC9D4F89EB0C706C6B546A28B66DDD89DC4458C3D6AC25675127EB251ECC5AE020674B7 +6689612418C7EFCAE5DAC7EEF8532F2744E5DBBDE4CBDA2A226FF09C9AD75D3CC16BFE4ADC78 +B86CE0EE6456986DE74E0BE3E38E07890EE1C53C07FE188264850394753EE56D0E2F7B81B0E9 +3BFA5841B2F13219A693E736D6AE8BD51A15B777FA0AE3647A538C8E081AECB737058C918085 +13F07D6BF2788E792FD414CF79C953773A489DC8C1A5AB20A9C9BDEECCB69CD6E23EF7AF9594 +8E6625DC3F0E9044AD3E786650C845DDF7A73AD8FDEBE33F68AECCF19C6DE8D792BFCE4CEB7A +F5D21052D5E3BA72E225153A58E2D5980739041D0102A47248E26CE4ECF9DCA785330D6AA804 +F8DECBF21A9A4462F74D10BC9549900721E53B1A2B1B98ABC0949B6A5EB058C682AF62D3F3E6 +3DE91F213CFC03C670E2334CCA2B3D8B41D96FF3B2A1D5AA346890467BE931A6D909ED04B1A8 +36276233C7E30002A47B35D7B6A918B2C34BCB3C225C02563FB80AB95E63F0A355C76D5BF1C4 +AD481B4604B506B9C32BA27F4DF89E7737F124F29FC2CC721A4062E90DB04140FBCDCAE1AEA7 +7EA1E679B2B963E50B238956C147970ED054C2F037F908E569ADB2CE6430A2F3F9FA788335FF +FEE802BD84AB94377B7C336427235C1EEBD78794BB4F85B4CF55419220C79AF00A964CB33E65 +E18359609628E556A84E06D60B8C781FDC356ABD98660F929F96E81FC105E41980F86F7EB877 +DC83FCDF916319B73C46B832E150B01F948F4218180617411B7E4B5052F1F511E71B976225A6 +5D79F5A8A055E7211A5120613616FF3E01B96EDC3FFC08D2AC92A3093BB6143EE4907AE5FFB3 +1B5FB5C53B2D2634D9BC7230E0EFC16F9867BD7695BA8CDBF2140AC6183CD277B5FC6A0E71A5 +327393211336D64936D43C5C922019AB4878047CAC2CEEFFE4A59D3BB0EC0F6DE845E5B175DD +DBCB74B527837DA7E292189F4303EC7282CE013B7E3AEB0E3E07E56D5D77638C3408724978E0 +7D3678F9C4EBFD2880DC4883314359833FA270B28D9116FFC3CA8F50C880A1F8602D47B9D454 +1C68644591D67FAEC5EB46840A3D9362FCC091135E66EC9D79656627075CB7ECADCD7F8EDD1A +697C7A942360B1659209AA18C04B7A283281A27EBCF1F6234E8F1F0604E65C9DE7ADEF778ED9 +E6ACFE640FDFB20C68591E8080BD1C31A09D69261EDC19A250490A51C1AF501A66FF341A708D +7AF211DA47C66C7A3161BB05CCE9E60A661896E7CD7771B1B48B2C3B795CE94A0391F1388AB9 +5DD7F2F4FBBB8CAB870120F7E898DA8E99F245CDC728FC6507C4547FCCCF5E26BF2915BB3B6A +892415753729572B5E833CE0CAFEFB6715C2AD5B00529B5526657ED81E8F5823B2F9AD402E0F +60B398457EA0C86E245659578791D92402BC267389494D2E4E18F7CB6EB37426A18D575234C0 +FD871EE805AB7886A683BEE4E05D2FA5A332D53683BA1781B00ABE05432FF548014621FC0529 +4DE73AA4B59C2BDAFFD5A981B5DF1DBEC484DBA328AA110E28CC0D865D73AFDF1D241DE5546B +10588A46BF34C9345F987C495DEBA0E06CCCAB4871585E5FD1F82C253CB9A3F12EAF2347E66A +3E6629120080593D07924D6EDA6CCDED9C97E416C1263E49B1F7D94FB7843425291C9A79615B +645E173CEA7D027EDC804B1D36D0B3DD808EDCF89C6BDD57808F73EED83A4AF6F841331A0DBF +DFB37C1AD39907683447DA9096B3FB77A3AB717BA42537B364667F114DE35A0D96D76048049F +648F610AF65E49A6E050D77AD5A3A2EDDA9BE71C110D6F5A9C5A9F3A9B8A4F25EBB0B19C63EA +7A8685314D46A0B1E2731921D38771882ACCE671450A95FCCFC13DCF5DF92D9828BC43B15AE1 +9E6183C4B9D49F6A4F24F580379EC1AB20641F2BAD6C04C1A8AC71C557CF2B6729F1855AC6EE +270B93233CCCEFA99AC4405830CBC1629FABEB9621013518C7AF03D8A613D15ECFEE25954D98 +889C90F58A39C9F724D7CBB21B622565E00B742475955B35ABFD65A02C85F3A83B60395BEAFA +86A64BB07D698798A866BAAE35EE91AB55CFA516E84213F47DBF67BB94171FFA4F9BAC54A998 +E73F11EBF323B2DE85F77E242703AA9863881A62376B434CB3939BDFE84B1F4AF1F3A92FB1B1 +102159B4356E5BD308E0CC9DFEEB78F514A005D00240BD7826F376AAFEC1D81FF6CF017A41A9 +AEE1F8DAFB9F928DD110FEFCDDDF6AFDB8BDF9FBE75603CC2833614DC893DA48F8C1343628E9 +B7021E6919167A4B263FE3600FB766606E23D8CD4A5BD3DA63148D40B0366E1B2A2E003E7A8B +64832FE3AEB64736B8FFD4A3BE9D3307AC8F0DDC61D6A391198CEE7D7F01C3C099B37635BBDC +61032CAA04EFE52113AEBB7290A9C2F5AB0C17B465C9F3956C954A3CA84587989AFFFF1D3B10 +06D86C11FA183BC11BAB5D9B62C0DC936142844766B1A412DA4D3FCD5E53E5BD343A0C4E7007 +F7A501D75DA2B9B0F29B57980FDBA557C92E6B2FD8D8DAEC867AE57C852F19BCC4B7898B34D7 +C65C297AEE64F0BD75A6E00F7AD08ED07B74AE0801F1621E25A2A3A9FE51D8E5CFBF41206E2A +67E8E994BF25333F5A05DFD069F0CB45C9FA2F8DE1C6F11389868ADAF2E96189F8D3AF33118D +4CAB32DBDEACB223424B5AED2F7FA8E30D59DB5C26504FE0914B6B729E4AE84C0C4D965359FD +1B134625B131C3699C8568CEB046855DED5725D205AB35246888A6BC5364B5F59EC7E1DE44B8 +C594E43F4785887E3691E208E7FA72080E05199B4C630AC7A3CD2C0FF0EDDFE623D2A9CC44C2 +FAD9EB435306319B62A2BC0CC08DE031092C9F41A5E35D32E8DDA95B99A627DC63EF5A44B114 +B80A1B6F824FF05DEED9F59B40FFA90EF0A9624E93828EA5013BEF7655957627480B2AEBC4F2 +484AC084F1307697790B580359A99A327CE8AA56609A934AD32DD85B27B4ADF4937A0CD140CC +E1D624D2093E751B6CF05D3268B8F9884FC64CFECA9818D2DF276279E0DB0D92485226CB1C91 +8C03D47FCA46AFD7F0483FBABB80CE4BD671CBA56A63251661F1CDDC2B9B2A656F39A2A8F18F +0466BCBC6114BDAD0165730C4BA845CFBC12A3D027E38D54ED89A157BAAA94F302C255C1DD10 +2F216AD664123117E085177B357E9648620F1A2C907169B14A87A7CAA9AE4D0B6C277F5B1431 +1247AEB10C65CE3A1703E7438FB7BE81890A5E4C5B639645E90B6C93910DE2E2FD86C0E44712 +1FE37FA66AD652989F52A257E975362C1A5EE4D4456D889F73110477347CA1AE273E45045754 +6AF55296833FD83ED186E63C591A84008D34D925DB46042C1F05BE6E429E7F2E63B627F7B2FB +9E190F2EC24F5A3BC03E1D84D7C308FB3E5D8BF6EA42E6AB84EF0C4C082837D9C2876204DE71 +ABFC4A0E580170E7338A2843F10423F784FD4141DFAA9BCADAB98169E9D874D4C6B088EBF07C +AC2DAD3D569AED109C75237E004D7D16F51A4B76F4FA2200F5932F436744D65BAEECFD0126BA +948042F1174BB210FD3467C52DEE9F1058AFD38478486A515C580421B179B64CD44AB4507985 +61B5C4A6B76253EBB04061D91323231AA4DCE16B266E9A4909CF6CFFB68E7F26BBB20894049B +8480B8BCE06D1EFF70FC5BEC4684B3E2DC0FC097DE6EFAB180673E6422ECE34C256C6E242DB9 +EA31D1E3CD36967603BC5D7C886A6E53EF6298DC8540FA56BA31F9171E89FA3B4AC527FFBC92 +9E3B32C15A05D52ACD3415C80CAF2697DE96346238603375B9AC2878AEE9652FF4BC2DBCDC2C +56C9E133F9A26790BF05744D730C2992DDD00528B52E9579E5BB7E4A6C2C4E1FD902429281A4 +9238E38E6E6F01CBA1B2235C1C21C6840204027C0AA3D4D9EDD08DB513A9584A83BC5A17FE9F +2AE7C9AF494D5DCC3FA27831E82E9604646937241DD511AD8B1A495800EA4134E4622B33D04A +0F43BAA2C22EB3CEA8AC9619F65FF6D1828622DD70C9EE73A4A3BD96DBB852674B85550645DE +F536D06FE1A819A1278724D3528E207FDA8EDE4F2BFB78534258EC4E9DDF094390DADC99B0EB +3B4CEA10A11DD8A265D4FE95062C2E38A67AA31421BD7A826A143E123E2F47B2455B5EB7E006 +08FA2B677CA8C84E225004FFE3472F73335D2EBBE348D60FC93B692B2584F4FB70AE4A03472A +DC0B22B2DAEBC1AD880AA8E42CEB861C9679B6D390E2A28762A6E17BA08E300913A7AB44F48F +52A522AC1F2D1E9B3A7241FD6C3FDE78AC147FA39F74D8CF34761398A445CFD4F76F013DC26C +040B637F86868ED89EDA4792A674ABDC27BF4CB7976BDB6EBB8760F390A87CB9A967F215738D +A8174CCC502A151FB2B76864C1097503799FE658E9CECEB0D157CD55EE1C347DCAFEDDA62ADC +04F8E2D2506688B16C7AAB33DE08A767EA004C5E172A3AF59236AC58A473A2BABB771004F965 +A617BA9DCC41678F5383067728ABF5C2B8D6631883C6793C25A040B8C6C81244A2834D27BE8F +B81345E9A37612991D9F8CAEEBAF76647003F8EE3A536CBED2F05C2D5A23CC9162BC3E2E376B +87489EB21AF59A9715FE24E40B0C2B52E7059A995621B85399A97B1E6323D027E0893C97D5AC +9204129C8259A5631D5476D6579568FC6FB0C9C9814CC14A2E37274E93B98093BD3B098CA610 +16C64B8E9955850F491A3FB44CD6D8F47B10CA825A5A41DC106136D87C40F7E94FF131F81212 +742AC8FF1DF4D8A60106ECC3151D8EB1D02ACC30AF3FA413D397DF2FE235D6266412131A2F86 +28205C407FE897724BCE54A8FE9C544970DE236EB1C9517BA5E4414FFC346754D8B8E2BD680D +F3B92661051E7E4929F842CAA53D7C947BE00C5C23A4547487C7049DE63CF966D156F0E6E888 +909FD551894A6E2A2F64933E639D8873A9F9AF7FB69431542AA6E28EA3433B50B36034936E98 +9E7E2F566041D95145A45BED860799EEBCD61D57D9853331C0CBF4D3C9B73D445AEFA6FB8C06 +82654A1C69882EAAA9EF6D95415C9FEEABE69DD6FD26FD16741A96D78270313DF0D874B5F044 +BB3074BCF1A03206A45BC425E3FEF9589975825719C6B6E866A634021CCC47206B0ABDFA13BC +9489EE0B3CCF83B268B3908CC4CB2310C02E0EA8CBF08EC2ECEDECD1E388067500B6EF25937D +D88EF68F77B34076B2AFF3BB9D3C04F811CFA309D9F824715C5B1524D1FF930C76D79119554D +6E186B6709C0EF0FBCD7921C256C42C41536C2DBC3D87800A4E0DC308251719CAFA133737CE9 +8E711A13C35BA683D79BCAB512B5A16C5277AEC7680A6B8F12E83F6AF1163BEBF3C68EF9CC54 +6D6221A5AD1C7E23E4025DC73E9E0609A51130491CECA6B4244F5F44866744A7AA6CE4A254E3 +6B0CDDB5DDE478336241D941825FC38BACE3CBA8466FF4012318AD09546C6E3DE8417A5C750C +8AB0BFB307077E56C9B3A60FA407FEBC8E2B574E11C77778D72D43BDB1327D2C7B5FCD6A17FF +E02276132214C408765440E01F2A787DBE497F4378CE47AB16BB547AEAA321E38317B1EB3A32 +C37D7C65CF4DCAA8DE9949453593435CC9F2DE5F3901BA59220C9205840F60494DA87EF62349 +4303B2A7C889A003C74E9F0DA9D2C8BCE2123F7CAED5CDA4C54A090830AD1151A0EE620983FB +B07F1F98AB5FCE07DAF258B01298778FE752AC0E70BD3F58C8E43BE1C5CA093896C1DBDFC5F3 +E117014C1FDCA8C820C605142C3C4C949D583B45B68A9B062ED9AA5E89DCDAAAEAA309503F34 +9A330C2CC45CDC9C975999764B2B7B27A05EC6B1C880129CD122A8C83B4D5B5969D16137462E +4CFD940A0972BCD78FBB298EED78225690588A32EF2554C04B5D42C9864736BA20CC08633B2D +547CE1E209A8A2A021FA83D05BC05AE6FB714D7B45A76AD1E0E07B6EC1A91F3557047E13BFB7 +E0C0E363E4AD9C583F794ECB15756D3DA1075936A33EABDE36D1213F7DFC1F2E8C92B70739AA +7E747DB7C08BC77B9E9481146977A11E98F3863F27391A0A0F63FF684DCBC957217A29CCA37E +6A1FEED928E80325B04080C2CBA0F2B4C74A8614C08D419BCE99FE4C086C758B0BA23F275412 +B4A3A16D9E2EA569A6E4656073756CE08B88A700C836B231C28E62D6A6D432AC8567C93591FB +2EECDDB2940B1C39C3D29DCEBCAF6E7CDDB61F89EA5A9E440C2E97FD04CA5E6AAE9C67A478ED +87780A8584272164C41B757220EDF415096A7349E7545E8C6F04FA7016AD4678712B7848BC77 +B3C0C7F2DCEEC77BD6BF8805B12E90E0C0A163DB0A27FEADCBB5166E8FAA4DFE237C04E2B4A9 +C69778FD43DD6B98CDF597BF0B3C35AE85A4BA48927325BC7AD59C0145F35891E9E051BC48D8 +448A5CDA8A4D7F7744A7C0D9255C32839A66E8505DA51B56C2509005DD446B2CB08B46417A58 +BAAEDCE67AA392D4C12447D021B7757262C7625C6C42A3D65BD5380E58B80FB18913DD298A94 +75A555635F7E3468B6C33851DA238AD2C6B46B86D43AD830F3ECB8B633033C6B8CDCF3CE86FB +9984AF44DC129731F4935B5052D2A69C34A74954AA899E9AC33DCA41D7F7E8728A6C815D4BEE +1DE25622AC387C4BCB86FA9A28DCADDBB8C4F783853420FDDB196C4FC5969F039CB3F2925D04 +E9BD5DFE69E812E086CC7997A675A860CDD6ADAE88966BC55FF8B76EB76F4B2B1B957A2C000B +C71B9EC5B79EF4EC9F2A2123575DD2DEB30335A85C6BF4CD4F3A0E78C5855A3CB531DC0B4AC1 +874A211B0346347ABDDF82435BCA9502454FC95BAE2F5833FBBD1C6624F1076E707235B8EE05 +B2334F208810D4382BC1430E779CE360BC622E850AA96994F12B616E3CEAFCF982884AADDB6B +6437A48280EFF0F119B016FF787CC05606411B1C086C67FCD01DA8EB3C2880C939AD143DC95B +1C164A19377B06A313D5C34D2F1365F6D7F46726105B4D76838CBE1469F9D3A33FB07AA2B387 +2859E28984006FAAD16751D619173095230483731666360933B4622080238CFB7C5B199DDBFD +8BABC9E36E23B9246ADA37DE17B6B8795E75AEE77E830A8C2C2020AF1F5B740A91042A9119EB +4555DB534F51B56FE92AE8A475B09D65C572F5FF54FD6AAA8933B4153DEC2ABA5F5C58EF7026 +A77818F5FB32DCA9D52479B009B626BE665ABB2FD01D8A1D9350615180D3B978D312722C9803 +56161A2B861D308FB89A01D92FA8E81D9DBFACCD035E936BF9EB76599C59AF3B6906ECC1BEF5 +6FD2724B2B3AD3C363AD5F20E3039CA7883DD83114DED0427BF8EE9D8B41A8E646EE9B6F949D +7C1E0230F35C5BE6DB05E6DAB7E2780C9FDEE34CDAC5EB8AEC92645ACE83F38A7C270C0DD303 +88A1CA18FDD1A38097BE733F6AA279D0861BBAFECF9EF7293518F5343D3FABB1CBB8BAF9EEEB +4EA21EBFDCFCC6191EE3FB98EBB22AC7D1FC4EBDA4337DC1F155D6B10A8DA925738C76EEF7B2 +82D0177AF7694A576AF9B186CED25823E6BB856D89AC769D68F66D23F9A5FEF24680A13DD44A +7B31D9201726D2F24FF22D48B4FCA4E3FE08862942C602217A75338470120427C05448403DBF +6B729D06336145B4C1B91E65C5EB0E9D7521D273916D5A8B17579C8F4F698B7211488A87C1D5 +4CFD50D017BA0FD348FC0F61CCC82DD98324CB3D3AB9D4F6FD396681DEC984C33778AD67E239 +46E492019E84D2FD6C7CDC1F825FFD6F4216E3C926F5B12D6E3E9FD5662B5735FD0681C932C5 +C7492153904A4CA41E94D1EA57008CD4BFFFF93F918D0C3C4ABD27DBAEA4D65527F667E4E711 +468A3EAD84935566857FC972A605379FC4B63C9C27CC73600591AD8C7BC47625C61CA69B4540 +EFAA53D37A73B028FFDD08A772FCBC499C01F5A8220D17A8AFF37D3A0DE7236EC77569D193FF +67172E449A49BCD6BBFB77F19209EF351E15D0FC9E146B84B79A7E099A255B663728E833C25C +4AB2D4D2833644EF9E3029B7AFD7736ACD3E58E794261B1CDE1490442085C4F848F6B3958AB4 +DE052674386B590AF64B66173B311402CBD30C91CA3B07DAA67DA0A057DDECBB3B19FD6B3F7A +1C232BFD49BFBB30C2BA6F48DFCE34A2FFCB911041C1FEAE5887A739A8E079ABC623529BB250 +8899AEC0F861B06056B68AC9B5C7DBE9F7A00337823D8747655497E65EC053F98FF65EF4FBC9 +09579E206C33D0178D6C2D60939BB8CD94A80AAB56B660443492CDF0CB9CC3023F00B0B39F80 +9C062027FF1CD3409673BCA5DDD3CBE7FF21C94CC7E84FFD488A99D21A703DEFEF9BAA490C59 +3B0F47BCB348D1683E02170054496E415494190D5DB20A96C3C1D2D593D3E25EA65997FC07ED +D68BA0AF1CC34320385235BA488DD44F3EE33F6A290993A387998ABC0D6D906BECA5F58FD14B +52D2DBFC847A708F8EB3712813AB23D8C85AAECC1E6F54ECD758D08CC3DBA223A5C50909B029 +ED521C20CB444A2DBBF9C8A0C4C21EB4140F7FC7E0497D5E21039CBA96876AF926E4A7565A26 +C7E203BC5A547CBCC4223F903B8FD833BE6CABB94E7E3801689B73CB037A35E2418C9F4B15BB +902FE80F463D81DDC0904ADE5CEAA569A58C88688F70223B69E8A1028A79DA63CDA3F47BE4AD +F06BF087A5B616A95A6D54D89F4C22276835E1412C89A6339F87A1E8DA230CA7985C33BEE355 +E18CE97E53030BE021DD3FB3AE2C261430996652216E74C295077660F4C3094E1F1882ED7236 +D492B7D91655C1EB5F35B10BCC14E50927D68215323C2B0680174C2376A816AE9BFB5D6ED92D +E760A9A808A4F151228BDFD462BEE8AC251DCF4286839EC0B254BE7B454012EB50A10DC9FE30 +3C28F27AA0D401F37FC59B9FC40F5C0DD5563D4B06AF82C0983B43E95483372AA545CD8E8B11 +EF00B8BC09534DA1B9E66C4E84DB2988AD3726EAFAF12699C6F1BA1CCAA51FCBFE6D45B3E95F +55D2D238AF847B1EC69F92CC536548BAF8B41241580CA88FFEBB394EBDC7C22C24FB0D470A6E +CA4AFA718E6DFB3E5FC6E21577D67A07E29BF8B7059938F86F0D877D53BEEE0A1C11356E1D07 +554770F23EB78AF92E113F1DCC916285CF8BA2BB246F8FCF76C49DCB74E2A1074ACDF7AC19F2 +2B953E49D7857750C1434A8886A151D150FD6D9DDDC5D078BA46980F3F1A7CC1E2C67276A31C +75F198B56BBF328B3B17F386AEA047233B67BC93A4F76376AA4C092694E881687E589F4E2317 +1BA3DF6BE35A16526921B16266B8BCA3545EEFFE1B9F2BA347E20C2F094632269AB26982F9D1 +C3A43238C4D973B15B896080286AB6F093446841139AB22E0FA0F4788B96C02F24123CC6ADE3 +9B02B45641A9464106804BFE9E88AD3751F11430811DD264A5E92D09E3B212825320B4AE29B6 +BC0E65C9784B68B05C4CD1648AA20DC5375E59E678038E6CB1F4C0A0393B32EBAD4E6E8913ED +C147412D3F035431E9F28902618BBDB11E9C9902F9D462A6014B5ACA9B50829EF93F5D7E45F7 +413982AAB70AC6A8313DFB9F93D8E867FB7F848DD34E497575CE012D36AE468A00F72125874B +6C4D6916EEA2117B3A1A78199EFDBE7A8944C34D835DC6005D00167A4A9FDA2019AA0FA521DC +4729DE8EF77DD4D2C4289542133C5124DF315974272178AEB8932B41203C5DE0CF2E9E79FA25 +0426B474068F9A3AA907C15E72F881C12D4A43E2B783E8DEDC4A8ECB51ACB5955B82D496689C +7AB9BCBD634DB3DA04716E240857129CAACDE83E956CD89ECE290C69D15B4F206B13B722CACD +A803E376D985CFF24E477B964BCCC6084348F01A4125585945BAFFCF31C3B30A01ECAB7FEA50 +970C3F938261608690AF59E3C42A87C085569498D6BD29C1CA59FCE1E05BABCDD02E752E42BE +145E88D703DA34D5290F8B495A4C8F9DA813454A1ED5488C067D85E98A64FF9D0ED467347BCA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMBXSL10 +%!PS-AdobeFont-1.1: CMBXSL10 1.0 +%%CreationDate: 1991 Aug 20 16:36:44 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBXSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMBXSL10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-75 -250 1278 750}readonly def +/UniqueID 5000770 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACEE583A5C939393E012707B47E0C1FA47D284A1EDC +9D01A497D772BCA8C543388E6DC0D1E2C4944740470E0914F65EFB0737B0851B2BA713A9A00B +36D07DA6BCB52920B9B59EFE587734027A3C5E6566AAD332FE6FBCCED1417802822A3B81D618 +7875263D6BBDA04BBCF6E4870FEEAD60F104BB3C5A766610DD11AEA64A6B107B0B04439FA288 +8B8CC39232BB83F7695ABA81F0260CD5248B9E649CDBAFA8977DCFA1FD1C2EBE75AE4006CCEC +7190807D60F30AEBA45B9235F893A2AD10EF90E0A872978E4C48C148B3C67D4B15DC3D88ED6F +8DBD0FB0CD2BDB0B56BBC6C668AB78B444283FD51D84BE4BE8F05DB2AEF26C4883FD71B87C49 +44DF51F282D2A8C9F9D5A8C45ACF0A64EBAAFE7DE29EB50A0446B5094E985F0008D1F5583D5E +8B062038DB2C8B3AC1D2228BDC82974771A832E63CCF336241D98FD86BAEA41C5CBC2FCB2A63 +27940E7E4897C587604649140621D387AC3662CFC171E404AC347A1A6913D18E97CDA2E5A472 +707519161CAAD1D259D047FA01761706D7E5B0F793E1FFB0F392091754F01579439FD9D99E75 +D7A4229734D66ABB806FF4CCD607D7C2BFB837953ED7425CA9B2B27EF8EF54F880FAF1923757 +77ECDB519E9CA5195A5B268F0563D8C9D2BEB5F98603D8E433D0B33939BE51774CEF3A3BE9AC +477DE44F9A4C2CD1B465C1EF4C2C0E53AD014D22702EB3CC72FBA8DB262F7DBAF8A23BCD0902 +AE12F5F9356815B756E904F02338B11185A219E6252EECB8718C02ADDA6F230A69CA02264133 +7BD36D7AEF191442F962D8A585136ED0C81A31F088E402D9E34B1D08F76CB73CD8CBC60DA42A +6F48578344FC0C786F45385C030CA63535B7BB086E337BF2A1BBC1F529404DE8E0659DAC733E +1B9DC9174DF30198DEDA4EE138FD39AE160C98E13A2F9898877C24FDD8BF70C062A4571F7B7A +8DAACFE29B4328931E2DBF4F3F8180F7D441964ECFCEBD777E6FB6065D1A2BDFAE80B92D157D +6BEF2212E84DDC2098FD5D96D213D903476D6B54D253397ECF487DED525D163B130980CE6357 +BDC8C2DB390F93A595B8CA6DFE1C12FF4026BE5A485B6BA5B8477EB7C861080ACE95A4AF3353 +FEC1BBDE6FA202914F800438DA76A0A508D8A05A737377C404114BE8A8F67C094D760F4BDB50 +ECC91C127E43F155518A35CC50D09695BBF11B9C9FB7BF1695B273A4974142B849708DD10283 +12FFCDE4F7887693869DEC87B6657DCEA84F2F7D0D9925AFD18978B45454D2CDCB0EFE130147 +A542C7684A9D21F58F2F776ED2BEC62551D2C9B68A7B3E93AF741CE391850409301D61D314DA +D0FF3ADE9B922627C890001D622CC4E92C2961B97C2FCB9BC5FB8AE1E0DE37E8FAFD27A7CF08 +2ECAA6C3B13672966696BA0BA197CFE9EA0AE2B70688125A9432878166A413262691707B1C8C +8AEA0D63B795E67534E2CC374F8312F89E60B371189245FB9B27B3833B3E04CBB5E80D123DA7 +6F858B0A6F0064ECCDF6331422E6B364AC2DEC7070C64F19BF2F9FFAF3D068BE331AB6AF564D +053384A3B1733B83C200DB4F5E23FF1C4234BB13A167763B06BB5CC4C2C295C85B8FFD21D1E5 +856E373F33E6CF023D8BBCCE5EBF413C6612EE973CB4365EA22FFA3449F372602DC98E8DFDD9 +7D1061D8381A8CB7708CFA90C55F09711D32FBEE2BE4F819FC6E75422E2395178929D9E9AB5C +124182126EA726085B8394E4F2260D61F52026F81EAC2C11E7752066CBC59897D1E70E53F9AE +9487052AB5395D7BB3EFFA620C8BEDE0390857F0D1FFBBF81C1E01FE1175E0AF875F86442CA5 +DEB920E3948A1D6A006B3E78A4530403828A0B8F2A596F8A71714F819AF3F86F69C5646FF011 +424E1121CCC35A8538F55849ED83EBDCDBB073F3AE58725FFCE78686773D4E9BD44F78631DF3 +767D153EDF4C091E9A7E24316E08AFEDB2F894D2C9EB0E31D510E5FB2DE925C0FBD85F3597B8 +BBF1EAF98C7ABFADB70FB06391BBD07BB044962264524F93F45BBF663CA8F592AF561E0AC075 +79EBC73852140846C62BF75464BF5305E6F5429F5102B261C1027DA8FE339D74C23DC1E7CF2D +623E9A51CABB0FF6006D3F0843EB73D41921FFA051449A2883D073E7EFEA8779BA5300DF8C91 +950441D130F7F2E5C13966AE5E5F35CB6FAAE2B5487A6CB99D3312F2E0BE0C01A9FB87D7A373 +35E1F83C1302B0047EA592CA5666E078E9C589DC830A00EF511384A209A4AA3F722A49FEBD00 +9FFA9250CFC53BE56BA63291C714B39C9B543792FB657FC832D33454ED6729648971566FC805 +BB825DAE4DBE6F7F3ACE44A458B7FE968442FB22872BD6307C8D4A11A60E32C3116185BB8AE9 +39B1C21F2FE6F6BE514BEB3DC71128DD81D5C632C9CD6ED4DDC92C770A9A85E0B4F2624BF051 +29E7A40DEDAE45E54318A28690A4685BB39A1B31FFFA3B0E414514A5320FF550761B39D8556B +D8C5818A57B94BA0958DC0B29741D097B4EDB7C4BF9821DDE799D7FDBC7B75FF4423EB5174BA +266EB8221F4BC851212BB281408FD9353F2F87F5D55138D7091568250F467CD91BA0431F347C +E6B835D89D59138C77312DEA6CEE4983A8F86CF0C3559E25C5D401AE09CC8BAA7D8003C5CD7F +86B29334C9916286B6BA3332FF9697C8AAEF901194F0AF4E66AFDD46DFC7796249A201EED894 +62751E2243664051B8C8B85869DD028362469257F41DC14CC2FA38C903030DF102697C0E03F5 +28020A404874D05E0FD08EDD9B23D489899998B11548E9E2D72B7FD94F76FCE46A8ADEF69AC3 +7CE974833872B2DB5AA98E5DC856DB908DF83CB0831829B0BFDDEEABD1B153C47197FE0888CC +1ABB3FC8C1DBD9C7C5959172E13908CEDF1EFDD1250FAD65052CCFBEF1317671D44D2ADC3CAA +9118F13E44D8035620E6D38B74C68FA465739986BE780D10F46C54996B79C29203A40C200475 +65C3BE199EFD5FAA817D548C9DC7664030A563F56F656F1F2DF2CB001EC01696605B1DC4B827 +B0AA3DEA9D4EFDFDC6A1DFA79FFF116EE5B433DEE5248EE4A80A88CACE665DC5F2B95920ACFA +63AC23FC29A04DB96542397029B5D977696C9A42AA24636704E8EAAE9DA34B3FE97935B4B8F9 +F06235FEE614082071536214C3C06A6AC3048EEF21B6727C216D3D59D9CA4530B1C587E73470 +2D52A9792187BC136043B0AF2FE04E5466EC163306CC73AFFE415A58B266BE469EB4BBEA5AD7 +C7C9E9FC93EF71B024F626373D90399F2C19E00AF3BBDF0D50A6D1FA0E0A212C39F1376AF516 +93360527F1362010A2B77A5C5E52A06335B2F83329ECBEBE37AA776B069D169387D175D34A31 +536149B98B7E18EE74FC7D9E7FF78E7F071B27412CCD9E7B89E18BC74EC0DA6689D767ECBB64 +033AA52EB6D273B15139CD7BE41DFFD8EE1B8AB2AC216A4A506B306A13960FA6601924C7C45F +B770895CF82944291B3E4AE0483B7DE760AEC8E83AE622CE01CC1632AAFB3E95B1D96F5866C5 +C427BF3D1CB2B2AA3EFDB71A4DDB002B10A70F8FC1869DFFD64821D60A2C88F4E20841DAF5B1 +032A75D8A02751F75ADBA7BD665129356B6286BCE9B604CC59E232324E7C7CD0CF730E1D3C1B +3429FDD2C2096A1997860D16D834E0E9AD2DD0C53708DADF1BB260600543675266A6ECD6E5BE +FBE206D5821CC918601272A47D216EE9B586DA985B9BA864141F9457811BE1A0E6CEE5554CF7 +3C261BA0250DBEF9C93CFA0E8438ED148DAF31CC5232D2E3844BA4E07A6702739859F028FFAD +9F0B23C77515A5401E1C13588FAF42669A4C1338803F72C6A286A35DB52CB82CC538D8F2A05B +88BCD401B0CEA73BEE5F9988DAD12F3847F7133DF92658DE730F4DFAB98F5893CD1CDEF10B26 +75E9F45875561B08EE67CF5E27CA094B2AB7A11D881063034A1593AC58035DA00B513EC3487E +B1D269BF3D08CE2457B85B5B825F0D35E751065448A3F8B1F9381A3B2258AAE359F6AD9AA556 +337E69A62CB9A6E0E361623B9B19C510626810CA6FC13D5CDA49C35F9B285693BC70118725E8 +88C61D8AF10692A76F7B0A4C29ECDB495762C9B9C51001FA1430A99C14C305113EC60462EE5E +9B93EB5E72A2FF88E32A770C2EB362C2D826EBEC7B2DAAD4A93D3778DB70A55F9D6CAB7352CF +694CC2BDF44F84A08A757EAE251CBCB00580690F2CAF1486F291674F7769EA655826EC1FD3CA +314A2332632D13561128C834017FBF2C1F4B78414BA201EEF225703207EC40D1E772C176D616 +3F24FB41DA506BAAB0F947260A32FE168CF19EABBF90DE59EEAF353B334709D606E5E8221535 +13306FABF4738AE3216636A7BAD4D5F1E4499F017A0BEEF84FBEABC2013F9D58DF004E25D5C6 +1B376AD96A4C2B21D2A3989E28432A2B4A2B95ED4CCA14AD00BA0D6BC576BB1D8A270151F4EA +9B2D4D706B872E98DEC7E69FF1F499CF49885982D7CA6E10251526D090B8B1C707A70B3C4659 +E07E1823850F0D693D0F9C0B2835DE3F8A0CDB3DE1F7067AAD2D04C633BDA52D439F0ECD3EE1 +DC9552C07B8F1C7E01A835967260101155C9F328B83A06F8B7FF43D73BDA0A066D0BFA3307D4 +3A509240BC88569081A767BA4ECEEF8E07260C5D83D48796FEC47AE4141637B0DCEB7EA021AA +154B4C5D085BE7B828A9F00C3B2133559479DDCDF7985AC0C96BD2724EA21681633A16CEEFCA +0A26AC4222C4916EB4F4E435980A3C36E09775A3C83DCA27ACA153700E17FA2663B0FB7376AC +FC0219672E35D7086320B0626875A37C6CE661B395A21700E468A11E61C37839D6DDB501578A +23D6C69CD92D1E3E4A978EA1DFF4B1D84D888D0C63FD6F7279BD725750A687FE63471049DC9D +A19F4E50AA69A9205A297F826C92530145E3750C7841281B3A08FF2368108D5180DF9EECA1A0 +D87A9860B282091D685D90AC0C5926222503D82C1821378E75CFF3FBC06AA072A726498DE01F +0AF7CF314CD317D382CD56226D614BC495FB3A3A69E5F98424ED02A08BCA3B243FAC4C16E933 +8F2FD1116E8BF25C288528CB318343A7DCB186FD6F509ED9D34242B3D9BB8C0A6B09A4F6EDB8 +F8CDD723DB28E16D13B2DCF754BF12AD070C18F9D7F3F226786A99B4503264075AFFE0F5FFCC +69FA8E5444783F64739B5BBC5BBFF86F844EE78021D7A7C30D44366AC7CA8691A611343A5371 +4BB3CDD671AFF9F2A7C91D5ABC48C328D93F3C331B2738FC3BE409860573D5758F8937A20C85 +4C15D81F7E250DC5863D4B9ACB5BF17E0AC9766FCAED0A29873C2C2E8D74CAC925622C19B5EB +2A927667707E2A58CDD6178C2F1ADAF3B21D6A689FAEE5BB7C5BC690A74E0EE46CCA2A9C26C0 +74315E9F70553FD6F0AE6109AFF0C29671B14FD2D351F1703878F24460029275E0C2A0749ED3 +E1A776FE5CE1EFF234BE24656C25311532D824CA97367C9E553A644A2AF0C7CFD63CD6865B50 +7F101523A840B37D35B8065009588E4BCDDE2F972E914150A00F312849D7A9FF7CC5A25DD472 +D01F28B4C48A6229672687D17E1AE06627C03CFF2B8F30752749E2E2682E881FE1538C2D26E8 +1BDA1D3970442E6FEE4BB262E18158B4D60B2D0C589B3E4696F2C804351C5D8EA7E7A823C1DA +D646C293815C7225043B11C3DC69046A7DA2895B33ED3DA1F87F33FE8BCB2FAB5BF13BB418B6 +0378441178BCDCC8B2323305A8B84E3ABE13D3D972F4F4A8F6B0D572C1CCF1488C29C0425E74 +FE827886C6B7A2F8AA93A405F5AFC32F5963DDDC00015598B991AE82045459130A556E632870 +01E93E1CBC8D7B3B76D58CBFD23BAA6ECAE2DDFF79CDEB679E4209A3D39FF9A006AD24391335 +68E9D71FDE37CD05C214A0A8698F7F27D2E7D5ACEEC553DAD0B69C8CC2D5068C4E0D790C4B33 +8B5A1C1A958FA275E51D1822C9A325FE20F3543518B7ACA96B8AAB1EAFA52FF4D4B30FBE8C6D +05DB293925768C357530252BA278B18432CDFDF0EFE245FFC3FB49A25823C23F2DACAF3A2D67 +DC3F788F6B42F15A2282C98F6C8B6DC54FC929BAC33BAC3CC2C22B1503DB9D3CE608BC2B0096 +C7E7AEC85F2F345E0E513E48AF8A71CE16C48122F8FBFF42EB038722BDA3C63F63717302CCCD +E12862798F08D41242AFF58F73120510B81B17BD68E5EDFF03AA2DD68D6EE5700DEDD7D21A1A +609CBDD2B4B375EC6775DB6319A3A9313B9CF91371A1CC468424FC29D82C550F9F6221E69B47 +3B1965E1870EF4B219C3D72207A7FFEC4140CED4C8D49C8BAF2C45ED859FAD875D92E2087A1E +E092E07AA20133C653C2F734C0F55572A9FFFB160A312B1A4E47B0AB5DDADA8DFF0751D3AE65 +019F2A27DD51BF8EBF6ED621714D302364EBAF20821B8AB6071159C41EF3822A00390D370E6B +060C77F823B8C6A456FE818854F3F8AFDC88B99BD2DDB711A5D5A6B4497D533BE0D4FA78F029 +2D0498C6CE043CE66A3550F109458A51397DF062EA0589D1A1795E530A11830FD4B9909BC154 +7F0C5AB8DF99B6180E633DCF53F71A8D458FEDE6F2953DE644B7E86AB642893A1410AF4EA959 +E967B9F62611EF264BB3755795E966E7635C470B6C5C4A9D3ED5FE515C5003E849DFB6BA783F +DC1C5E2A8C0BF4B145CC14E592C735E2807CA2950F54228E01033E14C27D6EF15EE8D2AC68AA +6DDDA508BC4E442259BE4328AD7C7F4DF4DCCD64A04DBE9E944A430671E96300E1FC9CE04E17 +47108510A17EB738B8CE3B2CFBC0CCD10D4624E377D68B288B9FAF12999BFA935511FB8C4A39 +C8DD78D780779DD509DADBF87567C47AA8E7CB9E4AC1CFFD9A67BCADE3B751E6681D4BE1102C +F81494F4A3FF60001D20CD3419D9267E527D6CC2F8062B2BA0F9FC62AB4EC43D500B05CC37BC +5273928088D7C92FFAC208D6F39C9DDF21BE94CE40D8503A94F6ADFAD9E86FC21DF1070F9EF2 +91911B85A46CEB4340EA0962985708F0305EE384B4EB13FD2141EE46D1D2FB4907DB7CA77747 +2674EE9D7A0CBFD3862A480633AF68D910027B3A054C9CB64E9EEACAE0559BBF674946A938FB +9CA40A2BE29925FED73FCB270943E5AD83CEE4D52F62F082A96614DE0AE9737C04503F4A2391 +DC043593A4B8959B0E181BE042D5139F5ABFFDD4B79B2823FA1B1CA7EE593957F864EA6366E4 +9C5DCC7B23A55B12713EB902DE47F8D3215D10AE46DE7DADCA47290C3F2C50B59C28FAF9832E +75DE7D4370AE69C1FC90AD66FA3DC38696286E27F1910550750211DE1723124EC603F303B4D3 +C29C8D0947FD9E816EAF7529BD676EE967717B6AEB1C57F92DE969A51BA81E4C1CFC577968A2 +5AC16FE921A2621DD1AE9CD30413C475936514A69A9EA23FC855F4725AC3D67B13D8E98115FC +E4CBD3C62654F44CE2E3C54E4D9012B6D01722F29562CA9B1969BF43F2717D8AA14EE6461453 +717DB2875DF15EA82321E4BE9D0725547F33F9444766A1F0510DBDACD8E68A0EDB38A67BA931 +66E1495D903CB6E856D4D97570F06D0D8C93594664FD3B58F9C33C12F4A952BAE77D84C323C2 +6BD9D7D2ECA2ACC703E5E4022E196FB2024C2E5E314973A20458072D202806B313390EA53254 +101C016EDAFC1A4FDEF030A32AF239924801FB7956E749E778493163D98F83663222A266A87E +8972A57FA61494EFB9412326A3BED5A375CCE468685A20CD9AFE8A9428B5E8558153539AF935 +27F02471E82515A639A6FA5C671DA7C8875684A8DB953C4D7D8DB852D6EB5DC9B0AA86793060 +1ABA0885BF3CA28DE0B326DAE2DC98BCEF072FCD6EA0E9B57194634907CD43F09FF314543F7F +0A1C55E20CEC7499194495E4DC9EB9093916B0B72CD4A7D97C68DF954C250692164102897828 +815537205ECEF574CA6C77C6E5EF67893E8EDA83966D25EC828D395C927BFC905B8A54B4B6E6 +E6A7405B8298A89E3258639D82AF63BE62C67CBB9B05AF0BF8E69D674D800E42C47189C8FFD9 +CE38CA431CEA75E15C556B06317BAD466C97DEB6122C3C869DCBB0DC109B679878B9EE04CAE4 +BF5CAB8FAC09E34428D5BBBFA327F0C77289466BA3519991F56DBFCBAE171A75B0CA88B763BC +95693FF829E66299C91C05230D50C3A19124E4957CD9F3C914DB64AF01C0FA72F50860862CCB +04AFB33D53EAD90DF22DBC1471626659E6E99A3EAC91A8C3FB87FC463CF461C8AA01B1281A3F +FC87C3DA71D8F5EDCF896DDD74D71880DAB9187FC385AD4F83536CD1C286D10F2C8026FD92F4 +45B86E6FD410EF897C95E6DC95107E8D76CD6EAB050D8A3C24D7A0AAB962DFF17556934268F3 +B45A1F034ADFF9BB5B66297475F44EAC83231A84D8CDC427800ACBC028C8746CAEF152A02E95 +623FD4AD8D8104E14613DCF2FE0345F52C1D075C090FA7C6362C30C1EFD0F397627308B8B13C +3942B06B8EFBFAE73FA086314481C29265C4F28CDC96E43DB4F7CFED75812993873DF719ACA6 +3CB97E5B5276126393238B5406C922D106A7E34BD1BCE19375D9FDB66C4CC00A615413F77D91 +121ABB3D1B7AF2CE188B3E86FBFF3F5811E1D1C81CB1B3D40DFF95A3AB727CA2F400B253AFE4 +8882805D2D6ED64200609A5B67C2A38B3F15359AF2FA36ABDD1B73AC026B64D8AB8A106ABB55 +DA988476CC7CEDE582F3C600F1A6808BB00CC48FAD21003F61A84143338E2C98A40D809CD625 +D523EC2573BDA8FA8461212AD989AFAE41AA016651704FFC0ACB9EBE2900A47CD2849E4D0D54 +B60EBBC736F1194D1AF32845F37A0F1335144D255704D3D7365F699B7277A2F770CA01E89D19 +EF34E12489801AD9E9FC00A3F892B0063F3F46A3A3E27CE8B8760F2F0DB8D0569CBD09DB5DAC +315E7148E45D4B9D767FEC28A4FFEE87B270B0A439EDD3A785FF04317FBBDD5E3C6D4EED1CCA +24DB9C93C8F6D30519EEEEED5652020C4F0DE227650F042EA7173763ACED3C35C47BB952FBDC +DE64430B4FAC30B1E7319274997BDA6A1BEE50C7D2546F5CE3F6C6DBE1C3C0E4B3E1E3372A10 +E95465CB088B4D53CD261B5E8487842E7C8C1EF96EB453CD4AF8CF27E6666BADE307CFF1CAEF +191E2E49BE256AC0F0A2646774691FAC635AEE47204A9BF9148F50FC874505E08837F97B547D +4F4F90B21641DA7152822BA941C64C4E4439BCA08AFE52B4BE350559BDCD16801E04765F16F8 +9FB601BDB0900D35D7010C3E4875DF660F2D1B03FB62E327533BE15E6811A5BD703034747707 +78C5D9B6EA4F41807F6B283D57E7E41D486EC88E9AA1E29416EF48368396145A0751EC6DDEED +85B93DD887C28FC8923F4A0BE392C264D7DAE40D3CC5F854645083C0AD4467E1804DEB2E5E1E +2E1026882F915081659272B7E93B69518F111FEFF0B9FBF2CE5D4F2F00BC53EC0FD39FA16E64 +875FAB2E6D9FB05D0A1C6E189820C7E0EF9BA69BC98CD2083A0EF0A49D9721E268BA1F0470E6 +020D1F082BF5977D9AFA611017F09B42233E7F594EC218230E08BB5E9EC75B08730026E2466C +F6158D62942639D69D702A981F2D598D724D9CFB307AA4A431FD1A602C898EEB374837BDEA6F +9372A3B712CBBC6619E0492C849670EB0F83DEF31FD9B80BE5DC055F9989D60BEEFEC8B87D3A +B218316481310B251D358D00FD27119A3A559F98513A11D669C21B6FB14D468C726FDB93285B +7B88B776C7CA4F83B8C677A85B014F1127BDE9275BD01DFF48E591792533A54F546F49AC5594 +A717EA5CD5F28C2DA0A6700B649C3E2A6256A13536415F2DA4C5EC5F169BE5014F895CB9DAC6 +EE9EAED87D0BE96D54D4613C033EDB520C2A6D6BA060F7437FA4674CB9C6063FB249D91455D7 +29BB4BE7FA5FCD5E7B218B543B4D7CC48EC1D172BD1D0551E8F07700E970F3263C58EC4939C8 +8DF9EB286266115454EF36367E256E986C05C61CB9BCD13368A19C155FF698F0EFFFBE250816 +98005B3ED99FF5E8A0A8353E74BD29AD79B1A3E051E29C1AB4B37FF8148E9AC63E77C2A78884 +8F5E9F6FF36DD31DDAE0EAEE984F589C079BF720FE6D744E9F9B9CEF04FF9AED6EFA9B374536 +889CCCC98ACBA86C64DD72ADD6FB9297F0E11F3780AE4CCB84113868B0BC18CA4874B62083F1 +58C7A86E5CEBE008A1EA7374FD2395B42EF0599E4C24F6476607679AEAB9D7C2CCCF326AD2F3 +1BA77C50DBBD502C86785D9FCBB183BA5A2EB1549C0FE810062C125895B0A244975AA1F9935D +5F6802EE7B19751CF8648A3F78698B2E70FBE721A6D46F26525DBD8962513947E2A0EEBF2285 +E0D124D7D0BA98D3E0A635EC1970370DED8B42F6AAB06ADC053CB5DDB2201D129CB1D817FE47 +43883E764512B210A0F697FC55AE43844ADA61BA5380D0DE28ECDA6A7CBA2FC8AB5D8F4961C2 +032DDA9D01FFA8D6A6F03839D4E70CBBC372B42713A16FBFFE35491FF48C3F270739DD20966C +68F41681B9E4D7B736755B310E1477FFE2597AEF00CA6E87278E89FA404638943D64D4BB0F2E +688D81C9A4F364CD68383688B404F6E57FF856630BE0631582D8AF6165DA8D25DB638D4006D8 +32FF6CB07BCB412A5121DB0CD2D959EF87E4E0A6FC5FCBB1310F49FEC8E233A8FF7452EE7FD4 +2433BC7B63370693F67C55FF2E00F69C480C6BCCB9EAF43997162612146A258A07DC303662A6 +8D9D45F0E0DFC2B9C5C1C1932A962B52D1398147487C08B5BCEB03FD8AC3CEFC5227B1F3DC56 +1D57838AFDF0692674DEC4A9EF2A39CD330D19136A45AD765518AEA9FF9847F9F32FD646DB69 +86B5CF0DDBAD2145605FA7B7D4385C4D9135F24612DDBFC1684C87F9672D6D2D8AD453BF39B3 +2CDB74E5415529E808DCEE506C1DE9D3FA7D530F694D157F83637286542AB370E1885339D221 +5FC7F3A9304E0B93B97AEFC2C3F88F9A74C66B4A0E21225C91FC30048EC1762798DDD440CF2B +0796A9BCBDDB53F4E5A426A6FCE260303002D9EA5601AE4E9FB301B70A53C363CFA422869CFA +C2CABECB58484581E879AC3BC130CDC2C7C6DA75F6FD4F47798252BCCE73EF58B33D5E1DBDA0 +3AE7D40DB748E9F1FC8297F1605E7A9A883C2FF0799AA501D17E660117B8E654C61343C25558 +E663E7F2ECE021E5CA01A15E18ABC19D63A06B3E73A721F15F0FE3F9D284A4FE29E9753B4B82 +CBD3C0F554CBB2CDB3174A3BD59443486F6D19A1387C6C50F3BED62A22D1B51B8A58A810B873 +5D021501E92D31BDBB48C01E31912E72835C35BE39F4BA1D790048EABEEE30662CFE3CB75367 +A0810901ABC1228BC90A7FB3BB289104244AD5F7F4843CA41A436BEB6E70B54B9F3CF3143EFA +D6CDB647DD30FBAB17D87B35D2F6D492512634BDC3564E9CE2B8E89DE5C8E9581B6A855C8AB3 +8A1175E48159E26D526FAB09C6EAB968976C40769EECA00A643B49F819B0C39224A49079C2B3 +4AA4C5361C427CA82D9620708708DFE5E737AEEC71B579187EE52BFC73808553381B0BFD8496 +DA3FFFB1D8C9DC12D95B8659465C36FD96A79AB29C16D3403976842E41B372FD8C8B770E8CF7 +BD84DB42D8B932D3C996F63CCDA092AB786EE2676F5F9574528A16758F2DF3869FF75E105DD8 +39E8A17B9F90CA5F2FCB0AA5FCBE4D4875842293DA38518A42CECF8ABC651E859DB58A9E2445 +E4C9BF5E42142BDE72C03D7DFE819E9362C90C5D0F63B581CBBFD47BAD7461EFA9970F3E5355 +A27B8A7378049A431F49921C97DEB42554062F1DCE713BF569EF0577352D905B7C981A9EAB13 +CAD7979CDD9411D1DE293226CAC4900B887390E6779322ADF56B73E740315B4EFCF188CEDEF6 +3F10477D657F9A8D6183B4817DA203DB4EF765C7258D5E406BEFA246871BC9C9FDC7D78A211B +88051125A2321909C24CDBBE40A1500572069AC18734B2CFB192976A58835D11C15C5587FD61 +129DC81FC643427743703A2E78BBED4AB1A31CA575D74D592030C3E86F4EFD6A6CF0A96FFBAC +9992806BDCB55FDDDAD7F63D4495C813CF6ED22B4085EDE3E7B4EBAB90CB25998C200FC0CB90 +42A9FFE6D44F042010117C9064C14555A48B21A846B63CAEEB3244D361C3A04B6576BCEFA47D +B8F35D397218B8CA036BE1B69AB2564F3CDAA4E0B1E23EB6F37326F7E980A4E9F94EB05E6ECE +C291C7EC33202D03681E523108E2146703879E6A1536FE237D266EF152B867631960564DC26A +CE356036F66DD51632A0C642A02CAB29E290A863C7178BEB086C0E57E1224978B5C156F65282 +F07158F5705D30045F1C1D9C10286680214DE2D6E06981498AA3A5998EE34D72E95311B672A5 +0C23B51913562EA8A07AFBBBAEED6F183A1DF71669FD2A8038AF0385E1F854CBB97A14790E20 +006B8E507652AE6DE4B4CF118275E1BEB8BC8252E486F6F448F0859D4661DA33F61FCE0E58AB +7DDD2092F1DE7C0DA05A6A4B08BC41A9ED0A44BD7123B7BE60A4ED7F5CA14CEBE4973B247C69 +C47D66C09EFB3C23EFAB36320B0D5EBF1DEC787794F7543FF962DD4AE5689FF6E11EBF69BF07 +7AFF2DE68D98E8401D31E0627F94EF1238809D5D8EE888DA0ADFA8F737B57BB3FD011E98AE8D +A7C213AF0C5BDE1405D607480588D648406FF3CBC20293F2F832CEAF321D3AC91A4DA3500240 +441998E51FFE6FB531BDB81516BF85C51D966A4514C962F1F181CF5E7316C5D453945FFCBA4E +BB465327B00C8898CE93E2B24C83CF9EBE4A83EF548FCC5C0C69AFC5947EA340B35757660A88 +EA4980EF419C8C2FD0787AB31514A8CAB7F8680D819DE79E9CEEBB7E025777D7C55B8280F068 +1653C930BEB98CD10C1E6C938E93A477752C5AB43B9776BB73A8C407F8D2CB413724F73B8A79 +C41D72906259F428BE724812AA09B1717005E4B45AA1A8F4D4D0163605B3C759724F9B1F2909 +403B7069144BC1C3D9EE26F448D674EDA0AC270637988BB5AE1B858F77077479BC5430160BCB +F6679A0BE89A272A178A78A89E86A74F669A44FB5EA2D0A9D66384D875F9254DABE4DB5C2C29 +7FAF38C043CE5962919032042F0FAB06748892FABE6BFF1C8825B93EF2C1C6D1623372A526A7 +1B44EBAE7773F853D6F4D5E4FBE9083600FD940A394447D49FDB5A08BE4F59F3CAB09660DEBF +F649A03577738D70963DAE30BA144513DB91A43BB02C8494BFB289273D031208E6B86B036148 +9BC99A4B5A0FD67F482D28E816858EBBA1F9208B67DD7C47C59817E62EEE3EA67FBD8D84DEEE +84302C0C141F83791D603E82CCBFDDBA995F7CD8A6822B6D86A760A86CC150904F315E67AD3E +E069AA20E6CF4FDA3CEC0CAEAFD29F5146EE9B31F56313389CEB04879903C4B7A1548D29C6A4 +E23C0F7D1336B794E57D90D59E822A06764540312DFF56BBF4F936299EC123272004806BB7D6 +41A3ADC2B9A8D820223FB1D59912CC14414F916E76FF1A7DE872B9BCF559C52AB01F5C107CE0 +0724A0A606C50556CE9D941FB60E0C6A244D14D159305B0D84451D5B555A105F258455755077 +689874EE6DE47B846C9B8602C415E2E3C20BAF7D1DFAFE943571D0BC41C286FD7C62665F09F9 +A2A1B38CD128CE5D3EA08AF34C5E9563D907E86491F6533E2F3413F61A746353817631C17C79 +45D36739FDCCFA38156113072BF9354FDA35028FAB29310D057E7E06EFA223832F6892AE7B59 +597DC11EEB162F4D2856C77C7883EF30B5FAEF4F8D2A1DFE656590DED7D9B4DA657D47BE1C4C +36D387F3122A5B41C797C8706FDADF4530AD3F671A450751BDD6AC4C9808F81B429636386242 +C0F7E8EC96F729185D0EF9E4E700EC89BDF891266968E008DB96C7F4FFDE6CC364D96FA34009 +5C0B6CB33727B23B07E398E5BC78460BDB1C0933CA64F0FCDBF42CD8BB434C942A4038C32C3B +CCCCF633B48956773783180270096C19077CDBD3E3E398A5E85F92E46CC3E9186299FEF678A8 +8F855EB71998A9078A48C2DA1A51674D13B392E29646740E5D6DC425DB8DE4C49F171977DF0D +AB0E5BE2028C0ED9A143FC13F5B7233024A6C0625FA6666A612EC264F063FBBDB823649082F8 +FF112A53BFC04231D76205AEA803EB4BBD707C82743BFE80158C7F3EAFEDECE5DEC96123380E +98F4C1D1515F5D9B48664DDCC65BDBE0510AFC8972B8654224E77A69AF5BF19CA5328DFE448E +8EB3FBDB155F02560B54894436BFA86056535FF3A2A79121567F30E5EBA72852665EE4372E66 +BC8776B87A55181944134781848F8DA0B5DACBD655F5F64EE2B89624FBEEB3631EFAC567134B +91FADE578ED59B5CDD21F3986D00969F628D6CA70F9374D82A7C2180C530A5D66606E0A4E428 +21896932B699494D2B2F3EF6E22AF884D5B42645866D791006DDD7D56855B5D7AF83D3341FC9 +511EDE34B1B1FE5F22AC38F870FC9741C804852FDA2892EA3994A2A70F0B043F250ECC6EA70D +942A1F9FB5DC12B2E041118DBBDF3F180350937F01C97650FB06E5E5B0A2EC4D2C3451CAAAC7 +019B939DD30C564F3ECB2CD3134B062D2698573A6C95F8DEA4C199295C1CE0B5826B129ACA6D +E82332BDF167FE969589CD15501AE93626CD3E54CA2D7D0AF7C07A48B6A639F88B97F4488F4E +6C8FB0E530288E58A018A6D169F73C05DE1E76B3E1510D9C56ECBF0ECEC05AB8BEF15B0C6BFC +8CC384827E3702F01C205CFC2DE55C6133DF90EFCB38201C14FA027B34A9FDC2D7A0A4F619F9 +30C08F5F8EF535D821DDA9CBDEDC245F2DEBA830825C0A62B686463A4DBB69F7BE39F0FE5C05 +B730EB2D288841D677E1AC988FF052B31D5582BA4454A8FD960D091E42B41C20A3268A374A87 +8B8D9BBB74DFBEC4C43B73C075B999E768F5673E38180A564362A188161452139CA139D6EC61 +99DD8D405C6249633D6617DF36ACAD7E7B2708D26C9E3E572B2A02C8F24105495E10C45C2429 +371232EF37691F6C25AD5C8288BB85DB4E20C9D03C1CD92007145D17B21E70ABBBCD2039FDE8 +F5C5DC3E24C572427F7C90FA10714C2F2641587E49D3AC73C49BF32F12ABE119C07C700D9F0F +03E7CC4E6DE6EA445A12C0242C8F490F759E329C60B93D6E2F9466B62CD50EDDDC05C5B06425 +6473176A14A6FEFF463304BCE453CEA36F24511A353CA84F6F5A5A13793412AEBC962495B9E8 +E65F2A7D3E16C7ABCCACD105CF9426EB54F689950FC204E890D45ADA38B4363EB648433E9F5A +4D9188EC9D5EFDACB6D2E1CCD23D719CB63D14EE34FA10B89AC6BAF89F3F50AF0EA117E471A6 +010FE7243CB239E7B25A2B3056F3341893C9C3A1A6B506CBB44D4AA2DF0115DE5AF79227425B +AA62CDDEFCF6B6157AFABE00268F7EA8729C52041AB1ADCF7E7CCEB3753B88F0B9D9D4F28F0E +178E07DCC176AB9CB08E195A3E920AD3A10523CE444108F410D55F10B54BD9525E20BBC448D6 +2A517DA3201151F7AB0A4382F81F6967CC7F2D3F57BAB8F552D02788350BF8A59044D3280940 +6076FD6ED1D2527EF5409EBAF1BDC26D4C63F66FE5CE903D5DA17A86F63A77E81581125AC67C +974CE3EE6F831FB0D6D1DA458FB96B007CB46EF88C3FCD68A054C69BDB7A64E7DFD7A04FC5FD +51A0BEE952A0076A55BE34785C1C6F6B91F010B15F4BC6154B737AF18DD2F3D4D85325C5F31C +6E8CBA55B3698E95919C21CC203B6A44A83A554FE3135A58E9FFCD925A7D9137FB1981A875FF +2C3E946DC91D072974E54A3E842B3A36EB8D4005CFEFA3B966177C23738071D21E39E98635AA +08175DEBC8A21FEF20328D6D46439C1B9224CA2E33C297B0D0946E91500DE0986B2E833B4374 +7B724AADAF9DAE779D98905A8AE0BDA1F9CB903F65495F60FC795BAA7D72A0A246DE900D5AFD +8C6C6A201B7DF86EEDB133CBF94BDC3FA6B946061D9666FB0C576E63F9C8C638059DB9D3CCFE +BE200A8143EA19AED3A21AFAC759264AD3EC1A74AFBC67307BC2822A5272DF0BF97F7FB09E82 +450D07E2C4BC5469D555E3B51D1CC050BD18B520C9F0EE5B39C7F3506319F197EB8B28564294 +E6A752A15E34727101DDCE2CB90C708C682DE250C8D9C86BFF8270E8E8F986B770FC6608C2B4 +140CAE385BF61BF7DAB0A30BABC8DCB45E4126542B5656FF868049EB16BCB53B62093873E96B +9DB4F39468738E2BCD61FB99E5957AAA1394EB1EE38062FB65678F74F696A08379FEFF065C7A +EC3F11DC1867B15A8FF0FDABCD3A7C9AE1665B9393A5BC2A321DB8C0CD14682D8D35CF1BAD64 +9A83C42AB6AE2AA2EAB2FDECA6E69080E8C3B8B14C7BB58B55DA36696D35F7C3DC1AE6E84F04 +BB2500ED5B2DD10C74EEC87DC0E651184A9B480ACE017A067EE1467488E2EBE41E8AFEC74F89 +76718098C9C07901904A66CBFA7E37660AAD62FA3F20B872F3813DF5B9FC84E084747119F069 +300138A3118D9FB524AE18D1D3197CA4A177A4AA1BCE9B18879C7B95A118ED00167818FCEB77 +2F3731CB7317FA448FC48063FC6C4FD396F488033CF885E288D198F129EDDB0366BBA1706DAA +C5918E9FBC74AC7C736661A07EB13BDF25A1ED40A38B769ABAE33D29E4F167AB7845A2C91C22 +9508BA68E741A7F6A5C3B36AB4B5D0E2C9466880590A2BA2783F12D41A706522F177BE0B5132 +28F24B42A3D191B534FC1B9E4DC6AAD62AB25ED3B1ED79A48CAEBE7C20CF16B186F1446022BF +A6E252A2EECF97BD53537F4185C42F812842A6E5D529192F5BD93284511203BD44014FDF6A2D +91CF78A078D4DD255045CA8DFD3C9FFE63AE862B0981EE3BB1E07F23D2574E87AA5761140949 +1992ABEE62C3B21294B1A76D593A954235160A7119174879C69E1596485354B4B189D5019FDE +B8944D9DD0455E4DDDC815DD88DACD445A8E4BF8AFE5BDA9FF5423B66E00F3CB839B2C0596DB +B34580DFC9D2CBF796135BCFD37623D38424CCD406EB41159E02B60503DFD99DDEE3A4A3F26E +A3A7541B5F8D04C8FE6E191F175DF4BF7B662AFA55D5B8A5C09CA7C9F26E95B1252954175B58 +A2E97441E1160B542BC1CE332DCCB9E43E58964790A701D2391451160F756DE605CCC9F74E25 +ACB831DEE8931F45474BA94DBDA4CC85087914457450973BF249450F23393932FA9CD5DC9402 +1855758821A9E6D92DB7155BA4FCEBAD5925C44411749C2909489227D9719245435404E1F601 +579CB812B489FC754536F1677D19B37A4CD796CCAE9C01040A8C901E97DEF41BF9E204F4B5CD +678777570D35ACEBA6790B4315DE8E7B96D42EEF13EF903C20C38B142EAAF2B2EF531720CEB6 +8C27730ABF4385FDA0CA5B563D175FB3FEA2086EA76608C5F104776F82BB6F01D0F306CAC78B +C331BC3C0D5179E85B48B1D49E22363DEA7CBC1FA44207D9969AF1C9C42AF7EFFADDD6DD2DF1 +5C3319151D41664F55F943EF9563B2BE2619B67760EEA27AEC8673B00489F871AA1A83BF025B +EA2037C6CE34A85AAA6D974E061EDC85E34ED0CB3C6AC2E6A2427DD5CECA93D26848D258992E +2010856E1ACE0F8CD1D44BDC0564FAA51301D58A88E595ED2274BD2D9FCED7A908B1850D2088 +57C244C8E5648F6A3A047F7E27CAF1106DA6D41FF3D74CA8B2FF003B9E3C04B3873438FA4E83 +82BDBD6761D04B2488993F0DC8EB327ECF40BA09BE4C3E4F0062F4E53E6F839AB13B8964FDFC +9BAB105329AAAFEE2251F850710BCF16F86EE413A03B102F3C9CBF16A67B42DA864DF678AA3A +72CED9D5522C8B58E2E273F06EDD6DCBD443111F02D5429E64B8C7C41B9F7DEADE8B827F196A +6A9176D0DD72877611896834C2EF65BBE2F5CCABF4E6EEFEA7CAA24FC2824941DA64A5C70873 +312F6E298CA387DBA02073AC2051C28BDEAAF720FDC778B4953DCA55AC8A6254C50C6700F3B8 +D73B3F4C37C49AD0B814E1C83B4E116E479A12757E1B3D39D7DEE184E9857E8A3948A2E98477 +585C536445B4173AED529B00F490FCAA92FE72A0E9BCD4336F4A157496A63465A3692DBA2FF6 +90FBBB569CEE81A1573AAE7F7BFEB2BF6F5C8724FEFBAE91AB358296178C7D5307DDD143F0F7 +28D43FB7DD114D6585E24EC314BBFE0C52B254F8F84ECCB0678B5FCB2E4199C0607A020E1468 +5AFDF401D311E60EA205B9F9DDBE7CEB049F7784B5123549A55EC4F7543FBE98E28526C748D4 +ADB18201A027C06F442E6617D6A8821909C19EDDB697DB2B6A1511F85196283FFF5EFAB41113 +6E9370B4E7F0809FBE3707FAB660372CA272F17BE33DE9CF11B9594C46F6CAF720B8AF4CF2FA +5A9D723B129F6E8B4D4D32D29EDDE44952B0C6DA0D7B2A97D1C25DE72A7EAAE69B29E9051B5F +8744BF153181157C7B8D4DA6BF24CFD7755FBD37450E98D1850EDB7943B3BA24C377CAABBDAD +7C78DAAA8009702EC6C251CBB1B3C987F2755E283FE39675EF781382E427E9A5002973197B9C +01B61058E26F8ED81937CE597B7E9C7C52DC9D13FC0FC79B45185B68B436655B8AAFBB318AE1 +A04E64DC552016C601DE426B71960E3F1D42C00D9FCC3A1A9B808D9A32CA22EAB8598B83AA75 +E42771FC44E38309B42FE4E301D5569479827AFDD2833BFF1DA6D5B9B206F4E39E62000923FC +1C67DA447AB73A69478143E917E044E1886DE49DDB76B9B8F8A879380BD2925E233952043A46 +0769A7BD0E0E8C2D17EA914C1BADA1C66BDBCA995EF603DBDF4A2BFD06556EF91CDFD7167FF6 +7B9EC5D1EB66478EB7ED69AA96D56D835AAF9F223D38963EACC7FBCEFD69DBA6E6E97BA84D62 +4D1D8EFE3EFC97B0BB5FD5C9D2A46D3CF873BEA091CE3A4524A8055493FCF581EAE00AE7B812 +BD71E7448D5E1F30D5C02F89A62D6C58E84385311E21B3EAAC033AA7EA0B753FA9F6090FD38D +889BEFDCFE44493F38B4FBE8B022BED34B2D5996955608EBF44278A11222A3949F8FEC45E9CE +7F179D02FC92DA26F82B6FE4FA67DDAEC09C3D5D1772631619D0F80C8BBE4197E9041E05B902 +0F520FCD3CD5F4ADAB62FFF4DE26A560C3587A3CEAFA5AFBC836D5AF1D7436D47B1AFFE4CB86 +6D4F89FDC131442869196BFAF63E7540803FE33FFDF3C592874CBF5F9DDF78993AA718CF7352 +2A2B5588A3FA9C2981788817E1EA36BD84A8C68E1CC39FC6ECD8648AAF24EB431B2C4DB6C6F7 +E1961E1A6FF63467AB96BBD2AB6710239A261826EA16C795F52C1F7309D6E6A9F228754783FB +5C457A0FE20EC931D61A6E17C030B4FDE0D2FB8D80648D02F61953BD6D3D44D3AC8BA4B73704 +1DFD10C6EC42945A6414F2C826BE72F320A5A43849AE268253D93F07975616FA984DF56E4CF1 +281B26325BD9D9BF467682B3E10E2E1F711DC04938545F201294DFFF014CC0B098110E3DF5FA +D51C3E94F9938A524D276E883266C55AADAE168D54D38784F2A787762220F4DC55A2B2538A52 +16854A8F34579DEA93815FE51428F5E4DC8F7F799A3C4D044E146BA6C4DE791C3A66E719B568 +A87A547D2FB16ECE52F1E0A6872F77F96C4AEADA80E999305EC3C68B95E21A9F90C48058009A +259161966FBC7EE28106268503D12C725C3291169DB64D82BAE08AAD8E810AD992EDE3C1728A +197AE889D82142AE01A413CF8E409DB3BAAE157C0532D954ED0171F8FB3DEF1ED8BF50F96B36 +DE245138825D9557AE4CC8F6B6AF0C8C1C05E7958950C7D0C0F7F7D25AA9629672D3423E1A3F +787A3B4D9FCCC5606ADAA36161D2625FFAC7CC2E7CFA68482DB11039A63A4A35445699AB6E33 +1468BCC1A780D823D9D249ACFF17E950523C123FD8BA1E395B73C768F18BFDB807E847BB986E +FB9CEAB67D0A5E9AA8F6C23C5702DD354C644FD02A151C1A812A16DACED503CB2DF927219E75 +059457CFAFD705E2B7264A6B0BE886096AE2C8BBCA691CA9AF823B2ECDABBE0EC741677C94EF +6DF4FBCDDE030C046E587300C3EBFECD20C2FC5BE3538E60BB2DE3A22DD3161D6FA081F24E43 +4A81B1A3D571F2CFE55558D0F13DE894DA009AC4FFF33F324F793167F666139ECB8D41DF5465 +1112824A9DD97591E2066DCEEDC7BCC7CF90E2943C24EA412DAA3C35010B4466DAA5F92379DD +2662897D19F48EF5E60EA6F78D3BBDD46328CD38D5A8E213794E38124B2E4242A76EF650AFC7 +666CF7E161474DDB9EA5442B577B1378D03E3CE0F74EAC5C18DEC02073961C58F6370DBEAE90 +F6D49A5A3AA684842FDE30309C2CF0B30F1E3C6F83E57E80927127193DB3420CBDBF2F973C35 +C81C8F980E4FA57F3E4F28596D044E915D065BB48C56B79A4BD65AC3A3E90411EE3B8912BA0A +9C9FCBB1CB89989D7284AC15EF2FFF28646C3984715409E9CC7ED33DAD03346A5A50DA0B809C +30A985CA543282D939B7C54B506282654EEE873448C2D04CF40668D1A317C6D4E79025BDBCB4 +245F2D21AAF604835F60F131D92E2CDF24F33CEF43A336CF1D54748C8277086E6434796A4A5D +D4E3BA6FD246C3AC838445D4437B279F7C35EB3C2694A8A88DFC155ADC24BDD00694889787C5 +0D761CF960583A0A9BD7E578974CE03428B2E8D225CE256092F3E706A6C3ECBA7FB1DC382E77 +33C3E957544A3D0EFCE73889FFEFD8A3B9ABA0B8C1B90F99C386DBE738751C2E3CAA8B8245C2 +F614AAEE7DAE695AEBF3A9C9C9591469ED31CE45BB822DFBAC6B71DDA952007C7B00C7948262 +30CF541A1D27FBEC6D0D19E2E49F46509AD3A56D19E9156509B61DB2693208DF2052C4513C13 +5707726002E0555D2497B57273A5353FE174AC60B3DA5B32B156F3108EF68DE5F0E401F15C5A +CB29D28638D5707EFDA25B9668CF66B32D37A2C2BA9CD3B153CED1643ACEC265C988219AB101 +1EBA21E27DC6FB70165517D219DAB7296C3342BC294610E013E26354CF56C6E7D66DE40C84B0 +82EFA6AABB94014FB40C8DD74579D4206C4E7F633D0DBADD01C4F76101CE082547C7D9B99486 +778F0C7381E6F7538A2E139CA67D550596BB926B3FE62E6E5E0E2E4CE2065EB13E939D66DA3A +012249BAFF174845CCD138941C713F318A65378E4C1D2D02A6966BFB6CA2EBD45F597573565A +BE9C5D982FE77DABD380F52D2D56179C9D3A665D856F371695D3264D0FF3ADCBFE1F62A5A8A5 +A3D9E5D9C4242E94CE973F52B808943D5AA5BF353F9EC1F98FA6CE1E4352295688B9A013E8F5 +7B21E016FCD4AFBE8C9A9057E9CBADCF6CA5904EDFA1AA69FC15ED89324A5EA3F3EF7E95CEB3 +1B1E64C0FDB2D6E841FAA15E7083A27952B748F87FAD1BB1689E65919815854505ACB5A123FD +A262554AC1840961F4D107DD83D868FA1CBD07B35839BCAB30F42E91987C1FD5FFB13FC19076 +39BFA22CC7C9DE0A739ADBCC88357F438F28BD2AB23AAF72621F660BB93E66B35E2CF6E58F48 +51F096E6AF058DA526F4187EDB4D2E99E4371CEAB529FF128AF6178118FA3D7A79DC823295E2 +9A225A78EED78FD569ADDD47D29BA4EE35D82E6D9CFFB0D80D5DA00B0D8A8D100FC528F6AA32 +2B7164DE238A8049773BDB5413D9E133B4D19994AFD504CBD684F0E50179F9CACBA101428D51 +D7731B987D08139F804F94C121F9A11C0090C4AEEC31E6ED1394EA959ABF880CBED9AEEA10FD +DA9D69ED2B7696AC45002240ECBD7960DE7D20004CF82B9BAC361C5E1A62856CB34D5A1A76C3 +F170F1B032B058C49752BF668E47A632CAEF26B0D3D1FB9DDCCE05ECD206DE1CB3B442CD8E61 +601AE96A7772A1B2BE037785AB7A605D7023D6DF799804521425039CB71BDE6C02FDEF5E522F +0FEB51C2D123DF55A80E9B003AE22DD692A6328E3FAE9CC527724585290E7157FF2F7B7FA362 +A4BA6B702772D2C189CB7FBBE1166C844B91AE816BFE733FC141769CD8EEEED177C44A0A2218 +DB75E1CFF9962862E4EF1B9529D5119F7A3D61288EC2CFE5F42DAACB32BD46D67567DBDAEA9E +5492BB79745F6CDE186A08FE59BCF4CD1444AF044E6A0B9AA4102DE916F7135417B5165FF2D4 +343EBC8203ABBFD91074E6F8188701C558516C38DA41C226A7DFDA45DD4245005749EB222A14 +E4406C84CBDAC42015A02727DF31819A0C5FAC588034D2B565E27FC0413348D9A47F16C79904 +0245062ECDE0A2DAD87E77DF756084B6A3E63D7B9B8E006581A14BB30B8EEF6A783BD5994FCC +25950C69697238E1A5F576C49C1D072FADC4BEE763C1A1E19E1185E6012ED89F6F78D12EABEB +B88B80BB7DF97A0A74D9B1FCE151804FB2BD61FD03FE1AE8DB1EB60509C1CC15798C13346AE7 +71AA1D990997BDE039E64E7936EDBBC14CA9AC694F399C3568F015A8768077D3EE31FBC762D6 +F4C92432786CC93CD7819052E5F71AF103D2A9883AFD23519E751BF5BC1BC7A0C1914B6B5C9A +DB773282D80CDC777666B13C2E7674005ADF2426FD3C1ABDAE697431232AC3629EF976113925 +46BB1426384CFF55BE846469BC67567DC20A1222075E27CA23899A949A0ACE357B1010753092 +145ABCDCF1DFFDCBBBE9676EA051D75AE1C76E4FED4FFFCB940B3F4FFB94315455FBD06973A9 +6ED045307E06C523819E1B3FCD14FEB10CC01B07D915352434D843C221089A8800C398AD51CF +40AB66AD519F28AA2AC4DF0CBB7FF77F611595678437D85F0CD2956030508E4747F5548A73DD +410420ADA11055B27D6840B212ACD6EE67A761B55E766255E37CD781ADD7AE72B151CA6FB2D4 +59D6432A8969200B8D6630CB3287A24B6A9A282F8103114E6178FCEF8B6C19AE4545E32D3AD9 +1A82F0FD8D9EE6E14EC755F9555A88D15FC71847A89012E9D061DCC05A302FDE4D322F095CE9 +ABF36964094323D4219661BB89354B63220D1AB539B79AB28AB179E3B0708FEDBC58AE0AE56A +6C575268D1C0D370ABB797137BA9613BDB3660117F5C5196297E1863DD3C5F4A7DE5A444BB84 +A6B0D029260ABD352157E650B8AB6A7DBD97A4748DF1B3A6D226E026C8C155CCC19F6DBB1E00 +16E5D1812A9D63CBC168BA4B4A3AC0746F06A1F10965E29FFE5E5BF0C269FE0DF20C89F2D559 +00D5D5818F4F7183DC36C7D1E3A79046311D390F456EA4AB25B044FDB36083F1B7A9FF24AAE4 +87095E5A171D142479E148CEA9971D9B890BABF85B67F58E4641ABF9EAAEBB52D0BA70733FD0 +635DE662FD23B93BDA5FB86AE7E22B4AA70D485C806BC31BEDF583CF62627865887340186449 +D0E3BAF477074965B33ACC1E0F5CC3F7508BDB736E854A81A1A38A0CC077EF125891698CB83B +D6417443BA66A899FE6A842C74B8E4C00569D4E294197824F8E80801971FB3639BDB29C3D9C7 +234CDEB51D135263D8E2289C9B442C87B5DDF02C508A97CA9B2F015277D8F4CE1AD8C895163C +67CB51761155AFB630138CE9063E08A034A19C5957749AA8FE2C3A78223C54ED7943DD4F0B88 +F9D96872002FB7895495999ED45FBA6A86655DBF1C3B6D2B627D6ABA61D6EAF281EA8598042F +CA0C8806700F74FDB4403B6B829DEB0102CD3DA56C7F1DF3DE967E1D96E9DC44C352BBB1C446 +443C30726E38757AD246F91C6BE0323C4B8A7EB4411237452FE7CC4D05096B787D1CCDF142FC +398954B0B4E50A7B51A2CBECFC3174294B7FF7CA78F1AEE32F0A69630661F8C88665C9771111 +12861A1B5E8305FAB852B48C3B10425A8307EAAFCBD2852FFF14013785779A88066639C565A2 +FA8E38AC867F561EFD709D8085BD9DED18E28B9A69C17DA3CAD2C96E1B675295E4BC220BBAC2 +FAC9EDBD5751C636584146B62C30022A81D061177E6F98877DEC71FD090FDAA38F4503B0E1DF +74E1ACE5F1DF7F2DADA1A8796E3241EA45E3C7EC8171C4A4D8D540B30D6F062B32F9E3966244 +92FF54BADA206556692F173B729CF798D8A196FF72690F98374C35B760734B7AB601B167EFC6 +C20E4EB1FC3B5ABBDD2DFFBF54D4EB3F3B1BF1AF345352929F3CC3067F8FFDF691443CD26254 +A39C0F5447D542568ABBCB9ECFA363BE2B93C90ABA369BFAFEEA697B3B84CC344B9F76AB7B6D +B6FAF3A19FF7F9365E49C853C48D46110FAEE123015079A5E1E6A45DBA23503D15CB1DCFC344 +BEB1241BAE2828CC610C41CD1BE9CBAF167727CB64D09F81474B3C3440FD4DDF4173EFFD1BEB +04A9C3F9FCF48E0E067E2A7F773268390CE9D8CEF207CF30A60FDE165FB963DFC0E5465F8187 +33BEFDC5AAF15A74DD006FD0D16D89A6766E101BDB138EB28880952B6659EBB2B9000037CFB0 +BD4C811EC100585FBC30DC5A3BDA5A8D15DD8E88F8CE7C8F9E10A72475EB2CFFD2D264A7FD51 +6C0C26EBC802AB2720055E100B0BC75726BDD52959FC3E82041F44059F21186DB9F9427D51D2 +9255C20A4D585CD7A37015A065484124DDD6FD18618DC90BD6A6AC1559A0B7F542AECB908AEF +CADC1AFCE2A0AC74AB45B73C22778B87DD4BEC30E8394300B11E58379382AE9F90B2025BAF82 +4CC5EA206CB5F937EC191A1AC514718F5A2462A25A544AD9DE7E65A8133E28A5552378B145EF +6A78A5C604D42E87D1A476C27FB88CFA7321D521362B327F1A03E8211B8631E9D00C442720DA +D05B2A036C61EE87A747C120177CD1AA996F3A648FE2CC84C09CEF014AF36AAC1E155D88D8AB +73545360383CAE56188597BE0122C2440643A858C5F9B4EB9893FDB58963BE2499C338467504 +855FE0E37176CB9F08E62143DBCEC61689C965F3550656D7FD68AF634142025EEA7071F482EC +84E5604D5406BCD447C4ABBCE5FB1C1F51975162A6AA4FD9E197C94B1AFDA12A86BC947267EC +9C9636C8E676BE4927DBFFC336B7B77CF85B2876644DB47768205858B288C0DD7A890F1322A8 +6BA3B5D603600D452DC41877DD3D7584DF875D274F533F548D6D5FFCC52D5EBF2F5E2B3931B0 +17BFFBBB9C9F8A3B01993188716BBD4EA2FA5F0BC93DB7C86A5EF827484AB5052D18398542B8 +83E2F74C5E50D11D6C3B90D198DE2EC9DE17589C4569D1B826F4A1B52369A31F2C007444702E +FE3001EA17652520D822830B9A1D4D760F048531B1D3C12980C6294FC93018ABD64B9726DF77 +92C5A3A9DCFE4F5EE0EF6B688F57AF8ADF41C5454435D1C7FF2751F16987E94F7306CFF6BEF3 +0941D9022759DAA24924FF90B53EC6EE121FDF8E97057E1B8B0ACC8DC613170D761E23402BDB +9CF32FF893455BE32C48AA8600B909A45C3731E3C7389E9E8556FEE0CB7CAB00E8914328A232 +F929D4E69D6C4BCA196884AC72E93D56F5B21D23E98163877108FD58031D371B6537F5A12DB9 +EBCB7246233A85186259A61797FA5E23F96E9301598427F31809B0A398790791E7E6396D97BF +FAD48ED8D9979DDBAF93A7C19A880BE1B40AA5BD53A311A7FCDA25AD2D0CE1BF1C8467DFBE6E +217DCF3B7A07A8CC2106CA68F27516124818BDD63A2FE08AB87A2EAD275F1F6C5339DF0C2946 +86143AB72169EC9EFB89345AEE50D1E8659AAB7431F773A0CA37DF950E69DDB9F3A5548DDA9E +8B692614FBC1B5B780A45C0C7F504D0381D9F9E72779E4F3D622AFEA61C4238C08F1AE11C13C +B0DC61920579C1D09305FB0805D9339DC5019454BC96AD5BBA8CC35C69E3A5BD7288B15ACDDD +38FF9D0CE13DFDD4691424F599FB199FDE815FACD16CDDB61F471E315E5CE93E58917736B72D +4719210037A19387078EB2397BF0055EC172C5801A426F2C6F9DD7965C76865E5ACEA298B3DE +A36D6DF8878E3EB94C74D618628440B9F5C2C79B68F750CC07B76D1177DB0A0805D7493B64D5 +9C026CCB588273258B511FE1A5F51EAB4216928F705F11EC21DB64EC61C11DCC816F7DDFCE2F +5EB42B85E8DE5CDACC1230F56601BDDA9ECF726488737A2267A579DACBB268BE4EBCAE2F6580 +ECAB4F75F4B5F0F6677814A3F219674C81686D96DFABE8A400F2A2EAC6E4F3FA49ECF1D97BE0 +F14BEFCF035C1BE21C324DDE968D472CE362E3CBF8984AB616345E3DEF91C38CF6C002A646B3 +24C9E3CEC85C3A8FD2A6E986AFF4084A4C5A41794F71312AEC972A884FFCEE1592CB19319962 +380AC690337A64262B9D594879E31269A3689258C08AB3501045EFAA4ADDC35F32FAAD47EDCB +ECA32EFB569D70462DB178D78D20484207C3EF9C80494AF8C457A2C1643AB91F12DB5C8BC059 +0835EB6591FBC7270EC2D0E57C3338B3E8FF089D7D4A68693420CC7632E4CC46F99B1EF26B79 +AA61A914F6C1D815E4EA1432C824CDA72D0999EB3C1C05D8F1411FFF32749ACBC04AEE5B0AFF +BDC19E7FD05EF2A08AA6916DD855873255C613DF638F3A32AE182AB2F7A4A819FAF5699F9908 +92A4A6EF966AD73D7AC3637A2A36BB7C0A184C5EA300617EA8D179C49CC80B5F3FF4965D09F1 +687A95FFCF89E93359302DBC572591054580BD7888F02D915967EA46334B10CC13EDDE194F88 +960AEAAC0AF1A7FB96A76D8C1C93BD79F31E4FDD63145EF0BBCFABC08DDFE7FCDAA14D1CE260 +60405777314CF86B479D2AB285685AC98EA3502A01FA89D4005039F25C0C6B1C889568C44DDC +C44F587DB7535E6A4F9A1C5F690B39B44556E7CAEEC478AF8B2FEF95DF76350058AA2F950500 +2295F99C89CF242901AB7D6422E74D3B6B043AB1ECE50DEAF8AB5A654940A0361612C3677461 +50E8E6DDF8D5AE40D90625876FEC25D14171D455018238CF08CC1E5B44778ACDBC588426BDF5 +13138AEEC02EAEECE8C5E770B7F3AE3D8A26473FF56B45AC4E4169AB86E05D8F135B405BB665 +087DD7AEF771FF35DAB01E0569FB18C9BC25487AC862EFC98076CFCE31070B91EFFF7FB96535 +74632C2D48669CC782D94A43FAA48C3DDAD1928640FAF2E29724B034897EB6C11042E155A3D3 +74E9ED31EF250FB8CAF044BD9DCB9DCAC0D94FFD3D93928AA39D11C3B81C1E00B371607AC2C1 +1E988C99D7995CC24F500B2DBC07E05650C696D8448BDD113F6269B263C22BC3E5636967647C +87707222416508E7B565D540391881CDB08A704AF46E7A3F746D2B525178408AA8B6BB384C79 +FF06F3848CEEB2FA65F9126A42D56E50858213AD34CC457EDD66832976DDCB25E0743EE75CED +E0AF45CE9D872CD4045EEE2CBF54DDFD05F9ADD3963B0808EFDFED32F5B91EDE1992474DDF28 +B63914748A0D16D2011867D5C519AC2F3CFAF378E483F4DA45BAC37F6FEF534B4FAD01029A02 +08BCB7C91113ACE46D719A500FD8C73069686CB19CCB747902AB951AAAFE61842DD24CA1B430 +0A47FED9BCA47FA136D804CDFD1BF14EA84734854AC4445AEA9E8BBA7E10E16FC7E8BAC74681 +4F69C940250FDE4FED616D36EDED2B86EC3EEF447A3DAA3BD0887A38B766A68F18BCCEFB1613 +D7EC07D0EA54DBEB3321228A2EB97CE816B68B1D548A1A59D929F600F42D48443A33754FAC28 +62125ED6AE662A9AE693FF7A4E95FD2FB12496C209DEABCAC3AB232F60AFB6051C90E3CDDA11 +15CA4052D61EA0FAB90A3973BA83DE57124C53E5922AD1443754B454DE36946BFA48A1F03727 +FE50ED632D1D5ADA56DCF9BF8212CE0B54082779F6D3DB341457ED28D980775693AE52E6457C +2B5D5CEBA5CF32FECBFA2BB48C3895D5C6BF444FE3D643EAFE47AFBBBA21F522B7E27ECE3F82 +C88DBCE44EAF1F3A255F6B7181420849F513D5C6BA7EB02BA2578E456D5BC24991BF2E02B1D0 +71069D9534A7B8A4A403BBC2B2ADE15D043E141D5A1FDDAB1D6BFB54649D66A2C5C1B6922535 +3584A95C2A23BE4D430CF6507D2DEF493875D2361E8262BFE014F918EB9FAE018C515CCFE27F +1CBD85BF19E2EDCE6A90669199B3A1D696A3BE0A4854EBEFF1D24C2065E1D1CCE20C7D5CC542 +027BC0C93F04E378ED1E06A07D0D9ABB1FD6C4C02377AA4F2FBD1EDF0B2860B84C82E853ED7B +7F8B9BCCB5610E02510DCBABA3C9B72B3DE0D15A91B3CF4789CD3F66EA502A13B41613375770 +FE8E4DB59B1F6CC3411988745E154A71DFF9D06A69CA7F615CCCC969B578DC4C20ACF82DD4C9 +8B1981DEDAB0D422C6F49E87342C5178E71E7573F1ECFAA824D75C110220D74239314AF14841 +DBDA7C7BE6EC1AA4EA2CE0A65626C38541E1FC3A971371C7DEE0E6B465D9921A5B8E6815F4DC +F1A35B8110212752366A1BE3F2798D5D9724D57EB09FA91F1915C51365E18E122ED1D9CD9678 +7CAFB1407A132182C067088131033797A4280E791D97F51304C97BAB904900AC4C4B2DEEFA26 +F6995C807FA388C3CE5293616345FE58E14E73FEF22CCB4E98304FA30E72DB6BAFBAC8889F42 +D92E0CF3C8A7713D3FAFA20BCE7A49750E1ABA34E792502A6D5E1887954D9E797A4068B85E43 +A9B659A4232F2281FDE4716EBA366B53B753596727620820A453975F1BDFE241E3C61B353D42 +5DE40E76EBAA40611A750461E106A239CB9629E509ECC2DEA4937A7DAB55236975874771A2EC +C8B8575F3016E428FCF7CC8A5867D6B4C62A63E0651028D604575ED29D814A802E0485151F9C +E7BE671A7D574D39FEB810FC0561BE4F087EE3C7F9128A2E28B836E80822744C07ABD4D1D1CA +5B3B326FC99015838D54EEC9F04BF2B0F1FA1D323594761CDA9650F694BF5A1291E7A645B472 +07AD8895D4E355D5375BA7DCBC1A9BE387A516D62EC22D11CDDE2D8F431432D3435039A2F414 +D0D9AF7EAA73D436D260F726F502C03F3572CA6A24377D2C65324C746D8922957AF968EC5B59 +8888BFE2F193581BA57C5A75BE6AB0DD9B3AD3D7325761BF268A205EDEB77EA1054F338BC6EC +41DB6F181F59E0964EF690EE11F89A1160865F5A216F4FDFB9D04DD91FF3D775AE95908DF20C +4F68AA67545B5C037DC28136A037ED2FAADEC8D4D5F40804A6EA36140DBBF5E4A4944CF555E6 +9A9147105EADBDEF17C3EEBB009510E81440D69A23C4E3BC66477EFD5E26C6FA483260A10ACE +B8D0BDE5EB1DA2424434EB37AE64E65AEF3C5ADFE8EF3EB7B7FED0271C055F6150212EE67011 +8475877D9AE5345AA680FCF7771C41CD6E6FC0204449AC6838D7C5C4771337EE745687EE8ABD +0845B0B82CE077BC761876498CB2ADA06E544F902D4539E071B3C2B86A7D6DF165CC155A125F +0A8C42D647DEE8C7E0BC627574874977ABA470C3CFB3AD4AB8EF41B82041FF60FD06F21296E1 +8897A55945CBC030C31CDB387FACF1BC08CCBCAAD51768C788C3DFDFCAD55255AB49435A8A6D +EF9005D2B1B46CEFD85B6C6405E2A1F588F92F8B2F7E87211934A0FD674FEBD28D800F74BA1E +35F31B68A59C36F767903BCCC307F32224E153A7D333E309C9D41AD2C014B33948951F2260B6 +712BB44017A67F29D3C4C94C13DCF4E5E17D86635AA0F88BDE2C35C3518AF8DCF193E4D94924 +40B78D7747938A6BC5F228C65E0EC677270E5D2C3C23BC362D5A5DA5C2F3A7EC626B54F3746D +3C9CDEDAF0EC16E471B99BF8C63E52CFDEDC10C120769EC8F4ECD6CA1C456FF9C1840612714C +E4ED4B2D6C41545286D24816500157D70623808321B622E0CCAEA2888C4BA5E6A9620551C890 +6743654C85827D5A134E5CE003DF1E52CA536427233E4952D2CC3BB25EE29240E3026A4A725E +184B315949B7E33A31FE7D541904A9EF59689EB6EB1F1FBEFB28FAE99316FFA83D0006C0340B +FCF64B915B41A8A72833FB10F0F8BF1319E3FFEF18C79707648AE174019E77963376183BE323 +AE9C817D3CBED7D2E90F6C3DC92FF7E276582722D43171F6C478E939BD9F6AD6A74BA7318505 +7C770C4873B28D9D828D2917F055045F589594A88480E321A09D5938A8E9E42D867D4C0A5241 +CA7E8892D45F543A6553AB84E71B4CB0C63878AA90E48D22CCF71DC01E9F1525CF26C58973B8 +585F18DA401BEA493BAF2AC11182183E8257B0E96ECE1EE212B86F86B42E97C4F4754A582CD1 +7E53FFD67DD0EBC4997460EEF06D09A28A0D10E3B7ACF3E93251B745EB4491F4599622F208F1 +0BA434C11A77DFEE361ADE58CF919DDBC2E9AEAAD48435C736DB27322F01BAF2B1EC69D90600 +87CBA9AE81E12B050E0F97CAA0876D63CCD9DF3200430B21C8C226D7FFF8A2EAA90E10099F5B +B49D640402771BCC71061843EFF1AB0FB767647F1395401E9376FE326EF3B7F07FACA1998A89 +F269370EC00BC1713FFA4DF43306FB5877DC0B2782046A361BB2A48C7099B1E525C18E9C0A1F +1A8212F18ECA3A291ACFE932F92EF0EC1EDABCFCE4E2CA5EB67490A056F60D617282313D933D +B0F3FF4E0F29225CADA88DD9D0B63EDEA5CDF381554812CA14FF20558CE7A4919F7EC4D75003 +BEA56DFDD123C466F47D7A06684AE6BAE1F757608A80264BF3F80416D98197E1B9C76A19F9F1 +C64A864819D9BD08B97B1E48F27372ED59DE652556FF4958DAA802EF83A5B86BC3DF7CB1B316 +3369BBA00790D4E92C600AA44718054FDCAC06F46378A807874051FB25D6D51B88228295E762 +C1392296F35C5977BFCA50E045481F8C6E5D84F60A060C772C95032B36958C1EA4B1E24DB290 +A618F19C08C21336BC0A2F26FC62ED6ADBB05EFF2FAEA907E05AB099D430A424DEB1A7FB130000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMR9 +%!PS-AdobeFont-1.1: CMR9 1.0 +%%CreationDate: 1991 Aug 20 16:39:59 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-39 -250 1036 750}readonly def +/UniqueID 5000792 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACDD6500ABDA5ED9835F6A016CFC8F00B6C052ED76A +87856B50F4D80DFAEB508C97F8281F3F88B17E4D3B90C0F65EC379791AACDC162A66CBBC5BE2 +F53AAD8DE72DD113B55A022FBFEE658CB95F5BB32BA0357B5E050FDDF264A07470BEF1C52119 +B6FBD5C77EBED964AC5A2BBEC9D8B3E48AE5BB003A63D545774B922B9D5FF6B0066ECE43645A +131879B032137D6D823385FE55F3402D557FD3B448685BDD20EB05D5E7C2126132E33A59A717 +0609DCF4871A5D023C9EF57D3362D9F2D7A440BB69BF653364105F16F4D0F03582F9ACED3D05 +CC76489B16E3FA8A446094D30038B06ECCEDA269F2EAB9D19A99C7F939F9548F206C5A457A19 +270B2B82C43B091DFC5573468EAA3E7A4A32F8042891D85E4B180FCBCB3091D2800E54C87D84 +CE9CAD6869B5AABBBE47F40C68799893D22B765295E1E69E33AA048B7ED98BA480CECA91F3EB +F8EF85FE9A3976909626B95AC5940D53F9B02215D84A44837BA25ED15CCE0D504F1D33506559 +4F3BC8245405407591CCCB11CFD4645DA60D960C0B93F187B0CF7B105543C0B70F89AF5D264B +6C026E3AE646ACF145950202EC73282111E3E601CF2BCDE22CE3EDF6DB23516481420F26552F +F4472D749811F27768150450D0D0EBE3C79F999E99B5C0F22EAEBB12D97782B1BD91B2A1F62A +76412548AD53C0DD411D4A08C0F071C2C21863D9ADB75A4621803ECB84C2BB235B620B658984 +B2D8E0C4637E2811BC8F0D046C8935AFC70141E1B2D9C23BDB251D304B3378FAF8928BD09686 +AA0340FB0CB1DC48C996EF91530FF078666FAD227A3589F50B605267212D3A65EBC1019A8EEC +9A0739A00279471A01E1505C17658C10030FAE32F274FDC8C8774B0D5406C384A1D17068DCB0 +C2575C562FDC5A2176609BAD9A2C255E426A4325A4FC3053C7B32F35F7BBC9AA50135F302233 +60FA2FBF019294B1D29C5E2AA489FE860FE1A8795EA9F2098A92C845BC50220471AB711BA6E1 +8C4AE211F10A172C60310C10FE9DF9EA1CFECAA5FEE0FC12063F8F48F26955F5809F8EF09DBF +7515C7EE361CE74828581752D0169CBD3A850793875694C551826A537F8F736C280C09106A42 +A594173592AC22D8837B551670E96F78B71486427834F531C345F233ABE4153ACF5307CDC6BD +FBF55788BCF0826812EA3D220AE12D403B7185C3DCC1D211F1FEE7BC12A6B005E4EB8DFF9EA4 +F388E39D6AC968CA08B6FDBD3221C01021D4559A396D424C14BA169501BE44275B5C72470C71 +8DBB92EE844F7DB9A5938CB340443B5FD69C7F0318056D55AD66025179B49D484507E6E1D38C +9E3F20CA96B31EA1892C0E8B844938D9EA985DD202056BB54E7EB393147E7AB32B335EF1002E +4099909E199154CBA70736830E49AAA18482203E1DF6C36FC9E661B0D4B4E9935A30127A1771 +ED815451983AFD8E6B9FDB0E7526D9566C2C9BCC5A4F8D8B69ABC257D12D97D2771FEB780A15 +BE513B3740F4252534F0BCAA9C755E94AE61AA697BF689107C4FC5841E9DAB101F3B4C00DFEB +A79D50E74204835B872160AD3BD77E9CEAAE233C72DFC902BD16E457C7A53E665D60D6C87429 +D3CFDD52E7850E490A5F133082D17220A3146C19F0FB45F99AB9A94180FA8E8B19DADF23DBD3 +E2A099D533DC3DC0229415DEE606683EC67929805DF2288CFC116ECEE35BE81DFBED1A77044C +BBDB7FF8924D50763F9DF29B0D67A7105C455F8A853F80E58D25AD263D860F2E31ED1789C198 +F2C9F71F8207C331E9A81CAD1759D93D65E6EC9F607F819C136C2642B192547CEB6AFA4B24CC +B316A9B16426BF862316154579CDCEA5AA8AB67E9C68717920124953D48C429E368FE62695A6 +C755FE17963F4AD10EA11D1B043C73D03FECED825290C562041E819B81682CE89E3A8D712FE1 +A882B312A5786DC2AA373B8C733A1D29C641DA4666D939DD2C1ADA11B9358C292205AC7AB478 +7D14B38BB01AC9BA36540E3A2B9A1BE959BC5617EA85C2E67EE039578C98C94EA95FC8055EF0 +DC155B19ECB1E540FF78D579E629350A957DD0E41EA444B2CF13A2FE054E8952E97D9E2B1EF4 +9E63BF6AB23D3B1B208A2C030588B3B635BB798EBB1AF921F801B2711B301175CBA843307E7A +3140C30BA881D13A533415D46E4DAC4BC37BEC8055A79C6578EE31DC696301C41EEC06A93A4B +6F35B90D3B2D2B0CB23C7EC2BE8D09CE2C14425C1426458BB270284EC1C9389909CBCCEBEBEE +A168B102B92D40FAAB8D73B1D610C234705CB6349ACB167578E62B9FD886776A51B59138A33A +7B5A668427A8E86EF022BB8076C6BDAE83349F8C3B2FBC85DFD0E981926E25AC33983FE117DF +14B94B1B6A3A3D9C8AA229D5BD71DE6DC3C01DD803CCD3EC679B64A9FF6E2B4B78CD3D7FA85E +E7EB9E159F49CD814DF9C976F43A5974F66D7FC9BE938CA166FACD1F28F6564D3F7EAD59E5A6 +3E6AB443366F74E543BCD4A23073AA56CF26B12BE2498BF0AABF534290F45FCDB10AECAF7E0B +8F124ACC5DCEBC60A1DD6F877C4F00F03DA11E2716DE7BDE52EC348EAEBDD3E2547051B80652 +69BDA67E6A946D735863FD50919FE961DED54F53EB1D5DB088B3F7B2D5EDAD30A731A85E19C7 +9B658F9D1E914E0189FAE214687B438B2858A0A660E2436ADD68ADFA8639B15694BBDBB74983 +8ADEEAD0A53447B6C9C46623EE15FC6A66B014E70E29999AC5C51699039C6504F026DB30AF28 +04DE56A155712CDE2F15B638F50C7BF4D3EDCF224C5825111A48CC34A8822C8315A17C1B5874 +B2C115C2FA893AD13043DE08D2DFD2F9521AD7C36BE22C61DA5D422E1E9A29B3C555307020E1 +29236C13257EA49F7494C5446A2BD8B9755566F68BE651E1E4BDCFD8136587B62DE3B79977D0 +9BA18CB403E84DD8194586EFBAFCE53697EE87AA0615C3CA76DD1023E36343C390A145A1306A +D53D8932003D87263E5CF260AEA09EAC244FB41342ECB2F0C8F3D0E06DB67415034FAA24CD46 +883A5A8DF7128DD4A21C4CF6E76DA7696AB66BAB62D31CE6B563899CB066E2135F5DA74050A7 +7FD3808B550E477821B5B173F6585E3FB6CAD840F33606D65E2460E54FF603257735A6728F25 +31F69440280766BE322DE460EEBC2583CF0A8801D13FA4F636A1EC35FE36B02AE7E7C23E32BC +0FC721A5F372B81EFBC8B58C3343CE67E34C1EFF8FBF229CE4F06321F1D580FC186505535989 +25D7AD09C9B9DD3447A2DC614E1A7A330E0DE134CC469B2EDB8E31F9663D2BE685815F962AE9 +B1CF51C8584062BEA53BDBDF52C5AFA07C0CAAC0C9F92F60CA7288DD7EBC53F61C0F670AD5CF +C5E35488BA9A8305A0253628B4357993933ACA122D43D5FE9B76E881E86C7AC2B4DD1C96B527 +4BE5FD69289D9C37C95ABD38FAC01D7933458ACD06170BB1C87EF09BF45F75AFB40936611DC6 +7F3A809F5E9D82286A7B157AB8CC8109733AD1DCFBB95E6CCBCD8CDA7B8FC2478419C8AD0A5E +51A274B11934F69C5FE4C9BA16A2CE0BCE57FB888368EC93AF6A1DEB09AD493BCFF8529A4D70 +422E3ACCF3E2F8B0EB8293333BEFAF1C0733E29F4BF1D4080B2F32778997B07941B59DF460F9 +B957D82EDD5596F9B110894123421FE8BBABA45C0D69A03A3432C02CA9768CF942AEEF860F40 +0A3E837FF346F0066C4C92C35BCC3E207227AC924E7F9E282DED77CF4CF703F89282571D3FA2 +A7218E75624E153AB91AC251D4B221A93BBD47DF57D70D8F95855CAC83EB021DE7BAFD06F550 +803A21063A06AA03D5458F697CABCA2E5AE12692C7D118C15B8BC9B299E8207A555CFC2B419F +094198BD3F2F4F4EE78347415AC1559A224D8957F3B610A1E9FEC3DB3D4BEEAE4016C6950858 +8C9CC5C7976966A4D9AD20AF67EABD911A85F2DFFE448AAA8F6A0B2568E393BFC7CFE93FFED7 +861D8C455138DF1661CE4F8ED9EDB500CBE6DD745E43E209E81935CCC9F8CB75E49A3B2B1BF4 +3A59B993B361FE0F8C3D80561F071F93F04A1865A3145981F1937053EBED55DFEB7E5B4A1532 +C1004924D9214007D04B35C162A40CD23794F157FEE32C667DB378B42FA66C1365E95D770BAF +BA64FD7659806E42BB3E1A33E0FD213B6B3CACDF3CA24881B4DDF8E615B616A32C27F00E9A5A +4EF256BE36108F59CFDE91E473A9E403B675EE70AD5D165D2901EF28EF82D4FCFCD23FD51506 +41044BBB61B5B74B4EA4D0ABEB2546100AD4620B589586E5FA6B8C3C825FF0DC811045F6AC1B +AC57EEAF487319917433495A956F4B0B4F2E113615CFC62DCC7D46ED424238187DFD734D090E +96C308A573E62E96FDE5BA3C8F0D2DFEA845B48C34558241299111CBF1114492F790D2808CAF +445FAC91499FF2F077B137C28FCE443ADCCCC1D5BEFBDEB8B64C452ACE58B96405C7244CAAE0 +58897DE7AC76549BDBF2D541DF175355DABDC292B4DF85B9E7127F794E1D328161690B0D11CF +91DDE93C174288419871E8B7F0932BDAD96954FD1D955767D8CF3337C78FFBF8F7565E5FB755 +E252D86FA101A3A7FB119ECB3A893E5372FFA1DDF431781162B15ADC845D6A81021EFEE6B91A +8E2267FDE73984FEBBA71AFE464F4A5FE5F908D06838D317F2230BFD733DAEA76A404ED4C55C +59F3D37D10F8D086E5590352D92EFAF0D94A15D6FF0E9B9942FCFAD9EBCEEE42BD47D627BE8B +DDD5A725E7893A62475DD24B4D9DB0738B5058A2A26A00D13006560C7F6D5C302CB6E6F9CBE3 +CF58FB6C6405CD6137B938E7F16B07D0B1A6524A3D34735AE75528E8994D2C944D90BE3270EE +01D4C180989A1C6E0EF34691F0B168B33957DD1FE0E8F0B5D213CDE640D9490C8B68D8C7F88B +D1B1369CA8A8911C1A8E3EB64A640FDC7BCAF45B3CF69360B1265E16302CE6EE2DE6F872CB21 +E4F6A2F232384B704F2F198F8603FBDA728B15A15C96F473E471F86663F25ED04CFEE32F3E1A +B4E2EB241D0E347A245F164198B1355F15E237E4D00FD36279DAA3B8F826ADF11F2E241C4FF0 +8B7FF1F56E4E42312EB34C8F1DF5EA0F9C75BC377F8F3E842F09B1F0CE78FB0621DFBE87DBD6 +B052B7BC67D66D9242CE2714D54DC5DA474D7EA79DED5A510304A77A96C790D0FBEEF2243E4A +3CFD2B393910C4039432ECF531099FDA34113DDF106E81DA407D901CA7CD99712B6AD589B1E0 +E36E949D0ED0ECCC5CA3E435B33FE26315E88B04A29D1BC179EDCAE2DFAA32980A32D70CD55C +22AF4A15FAAC46AA19D0DE0A69A9D31F36388BDC7AC2572011DC394BBE8A602E0A0A870F6693 +DD80FA1FDDF9142533B8C5E75CDED67879560FDC4098C34C856C3D35FDA7A161BAF08CC4CE54 +C06C512B1DDF9955483CFB324E9B04BDDBAC1501A1C67491EF95D2548095D99959257582905E +824E26071733C83F3E84F44F7FB1F4549D3245D750C5F34953B152ADB57EB3BAD5FE23821781 +FE2F256EA4EC2972243089AD1F7A001E1D9C2D680C1A2BEFDC23907EFDD645EF39C55A67A847 +73F0E9F5F0D64109D12BB9DFF604333BD7555D5E3EFA5A14192E19E38496E1D42A55009ED6FE +53AD6979A1E56B5FF2C369686067097E6506B912CEF34F019FA6FA39AC99EB312B1B3AD02DE2 +35C40C65E0D505D062C7133D39C03EBE4B75CA6FAB5D02B5CFFBAF537EB5C4A00AE18FC50E89 +CBA3F7FA31FC6008C189665740A6048900BF94560F32AB5A34063822331D40B98524FDB23A25 +650882399223C8F327370073BDA351D165847D2F0B1EB6545AFDC31FDD29324563F9335DEB05 +7F4E1BC026F34FA9FDF0C94217250A08F5F8937C8C8C113FB126DA522B92FC8D70C5F04C6B17 +24E1B2978A5054AC9B43307F1C173BC6B545DC68BDFBD5BB5FDFB340870B2D147120817DFE3A +8D382DAF3BAB1A53E85FE476B1306DBF540AF07C439A765CAC5DCA4AA6F4EB43B2F93C4985FB +269E0BAA5794D3C02217BA8AD52D8121ECBF0C3E806F91206E0EF43FF82F561400DC2AAD277F +C7665543C01C7E64AB886586A5BDA15C1AB6DD4E482475CC2E00DF1D355A49A1AC2E57CDF5BF +A64235E1B23A480D0CE94E656AC92B1A48F2D2DE0462CA1C7A5B5B4FC97E73A262E9F17B3732 +38BC7C777DBC7B927ED471CEA8FC86E8547DEBF728216C750D460DA9FA857F92DE48A04C7C68 +05FFB805DE8F03293D803941BDD89C1EFFACCDD6A9EE0AC1EDFEDE144FE786F50861D49FDB2D +089D24F98868FAC405264E4CAAB7B05696FD4D265764F8EA28B74E405AD12A4FAB428AF41756 +5238C72F25390CDDA953D478B6E564DE04A596B6210362D0B3F37404CD7DE65081CBDD5F4989 +436C4DFCDE6B238A4C20B3067F85DF8858A00CB8A4240F3CEDE461E82A44B6DA2AD6D494BE30 +10B46E7F0B6DE9702B55BCFEED0DD89A1FA02F772F52F8B833BBB43EE2671F7E78057D2CEDCF +816C24EC3BE2DABD2E2E8A9BDDEE62478E432EE1BD71C7F79DFD10C1C184AD1499283D557ED2 +84CA2A2AA7876D90F0C9655100966BEBF404A28E19130F38657F107F48F705BD9688EC2F68FA +DD38490FD9FFBE2113112EBE30598B9573BA39F1DDC2812A567352DCC3CDB54A677573407F69 +91E22153318B0507B35736307C1D1377621543A0987F93E99198CC9B022A99BC5F5CA8FC0435 +E723B2D84505E279BE7760FA38107631E82792DCCC71C3632904E220A16514BDB0080B84EB9C +74405BDB19EAC2574C0A7986A36C72961A55579950929C73489F0A07CB0E2A69367F86B2E5DF +88753AB8728DCB19FC80BB077805470C95A881EF657B842F00EF72D9FE3C754DA84AAA5E3799 +041AC567D789FA6DB50C1B88C7CF4B5E39CDDF19CFBAE9225B46B0AA3B83F9B4E8D215AADD47 +F2BE0794BBE4683FC3F5AE9301E7D16E3798E55B193A2AA1E0C2F61003CFD6E10BC7725693E2 +705B323DE8434A2509293B278D71922F4BD432C2481BFEC17873B74205C5DE79B2C57F518F5F +D0F971A4EBEDE17E4A034C5EB5A33E2E0E03BD6F61BC7DE8EC3882A0FC885F020044D1AD7D7D +7E0DB4C425BAE04FCA6953B2BACBD9FB2AB7C015B72EDC5B05BDCDE08455769EC2A76E4A557E +CDE85DB30BAC84497B35BA2BC581CBB60112CE4DBB17D53A18EFEF227B049F3444CECCD0E788 +0E36AEF24920A2F8EBA2BFC07E91F07F186A80E390BB49E786DA672CFAD2DF5CB7617614D6E8 +65FA2BDFAB653CBBF6A617B1A3BDB61BB8750097E0CC6CC94EBD23438E0F8EFF3F12D4529523 +BC5FBFDCCB4D4F29271182B3A848A7B55A46262A9BA3BA0FBFC983D136B8EC45F4D29476779B +93302C1DF35C73C87C1B340C661BC4984668326F7142227EAC1010273593C86198832C8D5594 +AD30E3C90672B49EC8C3E25C98C065EF239C4F0AB97413E8726E7C0766906F4E70034FA98314 +B9F3CEFC13E40F14A7883C4DC850EF4CC8D637613033D74CBBDB9837505E2894B9FB9B33E624 +659BBBC22826E155D580EA8B9EF3EB27C070F619ED7EE7EC0AED05F45E5D9C4C6B6D6418E019 +C81E49F18FA808C36E501CF9FCBE138E683F914B25AFAEF8E017A3E894271F01CC636FA29537 +79A4B783773DA5DC3C70EA5D0178AE18BC3DA6A4267507029D47A552C7091F18E4A7900ADA98 +73ED4D472FC0A9CBFC3B08A2AF391DB35093EB03A66A99499DD68A7D9D266EEA7CBF6268E81B +2ABA51B49A9869891E0435ACC6F9CE402AA1DE2A496EE5C1200FA4E2CA0AE893409347A21866 +D32808C3B918F85CD4B412A3EE8668605860D74BF0F13CA4AA1D6DA673AF97CA5FE989E348A6 +756E003CBE748AD34E0341006939E03D47182EFC7C45171D4E127FA471A934FD2C788C9202F3 +0C7E2AF2C2D71F3A072A2A00A1A81AA55D8A546235ED9177492EEAA89647E6C3966FD7BFD46E +BFAE9EFCB7DF8BF03B1A4597E686967055BEA5F3B05F48D3CF37C33CE1C17B911353560CFBBF +0595C41CAAF024FEC83E4168239C22252F5992569B275B628C8CCA3229EA4AF64221CA6D62A8 +84D636E0854A1B5E0B0307B6FCB3C6E6B0F887E516E132F88E1830C0801E0197B9CB76CD9A83 +13BD3A7940D7C160DA3D9E67B5E89C9732C13F24CFEDCB7ECEEDF1BD323FB7BC5B3BFA8CCC5E +081FE114A5414472DAA4F889BF94B387979A8DBE36998C4D61FF3CF84FD9D492E91CB09D668E +DAC03C71CBF507E69A37C9C5884BE278EDBB604E7FA0A2B276CDA974571FDC0B645590723B6A +571263FFB8A211E84B27502AC775A91856D368D3E776F0050AFD4F39FA9C321E405356D060CA +26EA89021F48FBB183C9FFBA571D5E4326405C8B6EF0C0D7E8BEFB66B06E3329A4DE2DCB7957 +E41BF1345AE0A40538A9EC7C063360A81B3DBB7ECD87D28666E59B105A5EDF2822B64C34CC48 +DCCE38E4DC8D49E20025B3E3BAA8D798EC7ED6B1DAB67B87BB1CCC3C91390CE463CFC0FDF02A +DBF77DDA6E3E3F812BAF56D822FD081B68BF59DB3DCEC4FC052E92A653C5E399F749DAEBFD18 +C9F20C0699E18E1BBE3E4275F2079E59587B4462B0D437B15CCABBD924AD25694782E0395D74 +6991DE195D5CFAFFAA3BAC74AC86CF67B66EAE6B9604E796306096CD3DAF489AB2711270F5DE +B93097F45AC29DA4C7FB493DCF76A56278BCF2627F49ED20EB74852C00BECCF2FB1D69AD40DA +5ACC2FFC20551178F4860776CA2EAE54779374AF1CA3485F314969403B33F4C61C78FD76275E +D73A513B7E4FA4F2A9355C013E4A981D21FD319A54F139648244D6B05EFFF45D94394B0B5957 +E33BDFA11CFB0EABCA6D8C69079452DBF6ED2C934F01C4FF3290A773EC24907B81CF658FDD4A +626F37AB3FD4B37F0CF439BFE461870029F5785B7E7CBAC4594DB8C51F8CF2EDEAA2E0190791 +A0AD7E35CD2CC66D5F5152EACFF983E4A12D321C6B20AE605DBD8A323A53F92B6F5B0FF37D40 +2D46A9BDEADCFB3530ABF0E0760C96658C914C4861016EDE63722F522AF61A888108DD9BBA4A +AB5B5C6C8FE89FF9A4ABD054AECA521F88D96A86FF7EFFB5179EF3FA6549F473A71F84F11E1D +C3AEC1719505D1E6B7DEAEB3CAC29972ACAB9B8770B53F5A6AC993C74921847D6A566BC96567 +4B3BF7DAC1718854A47CDA8F89574D566EC01917C43BBDA54D50419918A84A3118093F990312 +C37CB5D67A406142DCB578C810F27EE33034666D7DFBDAE9EC153B2889D38DE3D923778BD5B0 +D6A00FE38E7C3794D29231BB0118F54253B7F10D9F245E2C884AA5EE365D5689BBAFD0B2C2F4 +046C5703B5C01A2859D7E7716ED1DDFDFCFCCF00768061B060F48FE16496FEBDEF964227F0DC +7311892CA3F2605B59F2BA1242A882BA4E6A986B61CC4146D3AD1B4CEB6533319C47E7745834 +FE9F46B9ECC7CDA3E283C7C5F744E55377DBE88763E48108A4A1E2DCCB57902E77EAA7C95E02 +C654950E0644E329D2B7875722CD3E573C5ACCD5CE0CD66BAA840D0315D693A8BB275FB821A1 +FAA9EC0EEF490578473B3705B327E41BE324B088F424E6BAEA36DC7CCBAD5D23B8C5E4A19A74 +2685477C8363BC6A84B2065A1E02AF63D6C33555D5E6A8BFDFE07F2E86ACF69609B7898790FD +F53D8D5B9EBE7A33A5252EB71FFA81D8ADD80BC11004F725124BF3782DC99E76B702AC01E0A3 +2E1BA317DEC909ED48094801C6B52B58BFE0B9498CDC28B83472DB91D3CAB55714E934E08BDC +5027D907EC675C94BE19185B62A8666A8777F139C58445FC70B18AB35D2E22C3B9824A38219E +CBADE61729037510BC840DB0E3D62C8A8F33CB124F12F71DE5CA918E3F593586251FA72E8D36 +A992AE354423303EE1C2BF3D3D37E64EEC500B31ABE2188049EA48C93A1B99D9A82B2C813224 +68560F23EACED62565F3301835E8F96335592C227169FE2ADAA1F7D8D6474118F9E00FF26D63 +0F86DC9509E021A59DA152198979190F2BD180AF8E82ECDB204D9A2FA51B182A84E958929F18 +3DBD8BE6575D4C13943F00ACA12C2EA603B107D15DD7401CBD5FE46413BF16F99DC7618DC526 +EB041DFA841D964A6B5B438C1470EADB68FE4E97D4896395C893EF7177C2909DD9BD8AE8F25C +1A71A6FB7F9EE515715F4361E0B01E6130EB3506E926475F4F1A8B7E162EDEE25286E7565448 +9CCE65A80C54B46C6EEC990A8F5006697FEC8CAC1DC79B6420501A66146EC648E49F5A1A9739 +25E1F4FE865EBDF350D841DA96C3FF7D9955A9F4C3B2991409A50185E20FE5FE331E569CA978 +6925306020833F9F304C9780E8A142617A0B4758AF5BF73F9DBEC6B0F3DCA36648CEE09C08B8 +E23147681BE470A753DB32E84089D2AF3BE64B9C242182B4AE759EDC6CBF43E5825DD2E86EDA +6686D6C45D769BCE34EA05E61188E4491FD136CEA5AED10E228E44CFCC461B507D2DA03A10F8 +80341D2F0DBC12F8CEBF0A89F1587E249E6D2089C8DE18CFD1BD691EFA55C66C71076094679B +46875C78397C0081075EB45DB6DDB519D685E98C44A1CED29E29EFDEFF2B76137F55E1B585EB +84B8AF5AFAA54DA43001FFD88A84747777A7FCDE41025E6BE63F0CC91B97256903DE43D3BC5E +9CC0572D9DE3D185579310E93D6775FB33EFD1838B2214EB2332C1AACB0EF116106867A359A4 +A69297B6735176FC07FCDF7DFAD6C9009F87C21B3181796941C2CDF8A2AC2EAD7A70143D8B69 +29E1E36AE6C45035762DC43EB810A2CC0DF7A826376E9C08D7BB38360E0FC2B60B6ADCF4D560 +99D954C5436B4F9C2D15F8429BA4792810FB13E7DC39BAFC1912E1BAAD45F6AB0327A5D93FDB +9D947185FD936229E4C99280878D91E2018979B583FAFAA33D5D4730D57FA680922D28B12D7A +F720A080207D4EB4A10DFBF3F77CA336D3A12326A5C3F710AEE63F2767C2074199C9E2CA8851 +7E46D019A8B4F880BB6D5745C168AA0492B7569DB707675D485067F313A2E1F56F7A2C93CF03 +3FBFEE635AD06C6CCABECB5CC777CF274E2A3A7EB96D0B28C928C59E77FB3BE301647EB377C8 +D2E0B57B647F2B7E7B01F44519A3C561F7CE84121093BDE4F9E799B0923608EA9CED23E03F5A +4DD1425D2E6219AD8E1388C46027483931FBE864FCCE49934BE30DE22AAB04C6BB453D52C95B +5683CA29C73281333A4E2424B3BAB34AD8AB8270327CEFDFCDC4E63B3BC7068692BD663ADCB0 +2C7BA09EACDEC25FD07D2E236E299EE0F9290E5B8B7F8862FDBD81710468818674C2BF94050D +C77B479F6FBD83EB939BE411711746229018421BABBEC891DAB8C00BD15602A2236927BAE40C +057B88F3834E2582F77DF3EE0F387F6DBB23282F887956D01F183D73DC0B074A81432EC813F4 +ECF07EC8C51620EB7B796C22481284FBDCF26505CC200BC1D73821A5A8E3975D9E76FE594528 +F2391911403CFD4993A2CDBF6011E304A858165C6BC439CAEC6723792A78F565BABC47D48B98 +FFF4CD726C9F35FE3FCE4B2955EDB611F0EDF6893D904B2855E468EFBA52BE7BFAC6867ED7CE +7C226CBFDF2A4B8A545209294FD58C883FF1398D24800CD1823500B0FD98B99E6D24F11282AD +35FE21D97826B3CBAE293C191D5107185A620CE3F30F04C540C9F39C1BF0F9F59FCCA1D06558 +B0A01B33308DD3B9EB11E881B9A8E317682DC53BD91D7A984A751AFBC2548DCD4CF62B12414A +CEAE7FE31A084CF7C809AB5EDA0D7A65A4E1552DD3F620AF1BDFA235B908FD2A56A9D316C262 +3812C7967FB7E21330D3E3F4788D58F08DC1266107842337EDA9D915307DF3605168D3456D40 +048E36016250CF994AB7ED3343053B638E58C462B99EB88F1543FEB8E8DEEDCFD096D82A8DCF +6F978ADBC77DC4DC1C5EBD1783A1BDE71D6F1658E1BDFF1E8FCCDEB0B9CEF930421519D60C98 +96906A79C2E5207D6629DBF4A14863F7A9B8CF3CD8447B92004F29092F1ACF42045240EFEE4A +70D69F5858647C686CBD317881C53E59795B32757FC33BF15AEF5A830BBA62DB8C42D1153FA8 +DDF7ED7B9849A2080933EE4CEAA4327C2320CFFB858328E2A936A58D8A94D334B463A9BDC35A +364A0DD0CAD4BEA0AD9B7366DD984AA3AE74C823BC32EB265A7B5D122834BB53DE3A37B414B0 +3320129D8F7B78E59D3459758F40D049FDAE7588828EA1218D828DE318648BA0E0A414DAF43E +227CEC67E9E0DD502D9A7925D5A2281701DC636BF79362B724FD93FC64BE8BA63CAA4D750113 +25B3C0C20F8DECD8C325688493F3347A71309482A2613B5048E06FA6AD50C6D0C615390DD3F6 +F0F549C333D1654BDD3E372D3970FB9880D15A2D922E86002A98807F68491D29B1341E562B56 +5C220B70F0239538551C3CB40BD1B45061205A60E3345BBA21500E8B869533EB266C31BE4FF8 +4F42F0CC5D8B178B67BBE7CF357199A32F94C1E8EF8CD65515262B29464BCEE3A93491DC134F +97BE64FB222F15356C11586C7DAC7B2529B6B6246A028AAE3BC08800567F633080963BE6CA8E +CC8D7385670D9DA59CC3E33253630AB01D3D5FA4DFE77523D2CEC4A5DC8DC62D1515BD78E719 +2C5C1C2199DE7876E36BD6FCC3C27AE577A72247C807EFDC6635FD80081B8CC78498002EB78D +FB2B4A13B3D1DB8E6315891915F445E046ADF168358F713B4358FDE076907DC9FD86A86E3E27 +1656E9C6D24BAC96C6D400F4A931750F9A4E753F1572E069B4D6F435D63EC1E8B223DE713CF9 +6A40F3745543B8A9789DADD2493FB1738F06F3F35E4C295AC740A44557DA6E74F26A23750FF9 +D51E053EDBCF2CC30D9B6DDBAF684AF9D0EF7A14C4EB101DD6F84C3D7047C32293407103A660 +DEDEFE02EC9869C2FF2C0ED1CFC46A73F879AA6BB207007C76FA776098139F84B4A0D28C3AD6 +D500517AB58BDF672C24AC6979967698B28193C40B10E6EA1A3705B6FD1C1C2FB3813B3287F0 +D46B922673275C63C1A7126A84605D0AB5701C88FEDC467328998A8564FCD953C31C7EA2B668 +AFFF9872F86DE95F3BB1D9DD6FA033AB0B8E903AF01DF2E6B060E3D5116379676EFF7CC5899A +ECBFC89A0D7FF73E46174F1E452A79E36353595A22493FB7D98AFC04549860F0AEA927653A7D +B1AC86542502FBC7357314CA668F66E7E44A33F60820FA1F53E4BDBC448FCEB4D685FDB06978 +8D870B203BB18C18C8970A3513232662E92B1E5B126390AEAF1177BBF1EDEB55A1DCA43B4572 +3C9E8789EF056EDCE4FBBF73BB37C90FADF5105312E67F467F0C0BD42FFD8E5643895A5BDDAC +12557707FB82AFF8DC9813D0B931B3E7513829E0BE3FBE342A6A3786F2656FE68299968ABE35 +5CF4FA53DA08F6745130336F5AB56DC6549EEEF1F579F0060298737DEC827AB7ED5D627BF7B9 +D8EF165A429BEA10A1C2ACE4C668730912EDA9F75D17E215827042E1FEF5D72E643C1BCE5E61 +F8ACA43381FE6FF1E736654D11FBA39EC251D69CC3C5B7D9145ADDF5CCFA6DEAC18D4B9F43E5 +2F3B660A34610761E9937051AF51707581ED226DF239F8F7C735B4FE3D9B251EDA1C9BE2FE14 +D603BC91B22CABD7384D9DD8477F66983042D99C911B14DC0372C8350B3BB1BA4199BE157A08 +DDFACB5BD368BFAD813A05890B8BDBFEC778301DA6CDC7FC67B9300448505B7BCEA5C1F4A06D +0D39C12DFB649412827813FEC978530C5CE020507B08F90FFFCAC19B3E7B7474ACC6F4BA357D +974D0B5D5F4C5FDFA899F1895595A51FD2590F0DCF52CB5B5A01DCB94589900AACF23887A182 +4C95295BC28EB912FC8512CF1465B7D1469AB94C104C1C1A57F22300CB9A151B7E7431080FC9 +38868B5A7177569212C1EA0D185CDA5503D592DD781386F619661A4C1DF9D9082F44115BF318 +5419473A1A786138E344C49842AD159E143D671BE1F224E06E71B5E14385F7DB7EB083F8D3F4 +CB8B3FBAC22CA88025F8CA84BDF31FEB9D0A5A379B8637E4E60A5875860945AE85A04D731C6B +C9F4EA2DFC84A4AED87C6A3FE4DA0578A82895D643D64A99FBE989CCC2ED431464F919B89916 +730868A3DFE6DB998131E15171E39AE509521D4029384D68D6629424FF243B8F3573B1656A89 +38F21E0FF51702A24DCA86CDB87FFABFD07E23245E6A0522B15B8B7F02B32AC81559471C6032 +CB63B5C2AD350F1E60713B798178FCC159EB02B5C033EE36F3D760C469AF012503AFD3E4BE8C +85403DEEEA0F9862A1DA3BA9BB4BCC3CF4DDEE1D7EDAD994C790284ED6AD9DE0C6E6A73812AE +1A9295782ED743777A549B6A99C55DE9CFD50D98B8ED95A54D9E9516A5976D8BC3AEE24FCA52 +52FE4D75EC8F2D9AA34BF988384A3A9F86B1C55B6B38519CCCFF89B7CD0165DDF9B5141C173A +8539C8DADABDD4786452A37B2245C925A0CE6277C5A66B8EA55533009535DD1A456057D5EA3B +64384D89BCA81F7467518138B5A24670CDDBCDFD5F392208917853858A8EE9A5B4F2AC060ECC +9A0CE34EF5CA812E15E10328D5234D087E80AB369529DDADA470AEB75555C584C7F68C300CBA +69CC30169760947DCBD0382E4F2C68BE14CE1C521440AC192F1016EAA233A23FF59BBE98DB9A +6FD16AC25576AAFB7CD417033A9A43F42DA250D9AB53E96AC10849C36348ED4B59B9E758FF89 +7630E8AF3746394C15FC94E1FC0FEB30EFA61C962E2380EA0479C6F3521634B91718CA44027E +69D235ACB2DC0F45349AF9A4F7BE58056F6B574AFE364128C0AFE227231D0AA97D45E01914EB +2EDA018807B73BEEEC8BE2CD1414E898A47267F4C649B326D097152A984B0492C9F42059BFFE +6189AE83031808223BE65067437D7A89445245F7C6F5F61D87B86D5F3B40F9261EC3E142F495 +F1B199F30A13BA2AC6770B7C73D3A333090E267D3B127103A680DA1A00B0C148F9D000CB3011 +0292FBDB1FAD386C862D5A3594A31DDD421C680A83FF41FA03E2B32CF3D0FE3086EF12DF80E7 +B5EACB2ED8CF1857A00DF3EEA3510F49D6F7540EC0BD08625250DF8A3B2F3A160C0A0035DFB3 +4B7E960550C5C040F0AD461A407AAA9AA7877A23CF99551FDAFF32B82FC87BDBD86A6CC9C63D +F6EB8BFCFF2C1E8A3B57BE35C0AC602F7B4F3A8CB8CE62253AEC186B1BDC8320D5099180527E +1CFC40F7398454B9CBFC5BA0B421F55DEDAB33CFCA11217608763D23685E1530D0FA1AABD091 +AC9A6867DDE46A733712CEF63B46E29FF70E9210224E0964FBC56A9AE0F600F720F81C7060E0 +16ACBC1BF97C16F26255BC4D82538BE080D37774642CD4D4C95B3BECC85E32D182BE7A1F450E +F077500EC91B21C383E71F9B6690C0616457CD8768916022279A6BEF4589A85732149014F067 +746C3FB95DDCBA28C7F0DE2C81926DAE7967A387A06DC62A82F813230BF1F2854E214984001D +0BD4A7F8E778CBBDD88D702863FC3C8593255627F352DD3327EE291A31F3DF409F108DEBA842 +3116CAD62EE04D8CA8CECC16B8802F698FC2939E3898771FD932799B54705A481C652314C8B6 +4BBCC883296CE238804F68346FCA2F20EEDEB4B9986B470B84CFC07984D5A1E896790B854B5F +21BEF81262E1E32B949AA9EEE6BF20B9141C890A41081868E83E5780B54A456D1D5F21198126 +93DA3BCC8C88D6DE832717BCBCEF1ABF462E949A415839B98D91DEF040B43D7B1F174EC74506 +262F04F1E599CD6B01D8B5902C029C97487A1E05F84DF9D42FB47DE21F59F91B78BD16DD9FF2 +087D1A73C0C58D4C9C53F64A8E2A076D763B581AAC565E34B05368A456F52D64528EF327ACDB +4AB6263C1561EDABAA3032EAD94A6FB956F24C2E18B6A8A47BADA39A20BA4BC035CB8408844A +1CFB7E4107DA5FF66C307CCC01B93DF8D99FAA99DA5F3719FB26C2F214F18494BD92F9B6DB1A +F2DD492330615C3BE70D6F3E2E77DC8348D16339CAFDBB96A90436D2ADC86A1864B5C2F4809D +01717A052BD791C092D600B1E2F6A24A21E13138621461A3BBDB4EE06D880B477DEE907B0928 +A154AFC2716865D8F751C398BA65E70F325089882018E0CC5CF735ED15428F074C17AFA559FB +3E94D43340136BEBAA8E47C773DE6C28D54B3ED9FDE6622924159135D49490EA90A7D91BB08C +4345C0AE3FA4A1461422EAFF8E9C49329AADF6342B7D55FC513821DEB5E2DFBB36413E954E39 +F5A24B3C974839BEB97250F1566F7A7F2F9F603D2A5E43CEF4AE5B0BAED2B6304461E8C16A7E +F458E6542E7F8933E6C253341874867965489527C80260E254411265EF559A5CD9E25F6CA0CF +EF2DDD2DDDF07653B9A0FC6066903189D076F485EF03D52D14D676406AE2CBF46E818D964607 +759091C5B0EC784AAAB7BE495FD20876E11547DBD9CB02508BAFFE62D3DE7F5AB79A2C94318F +E16574406E7933D4FB8FBEA0DCCFD1553BFF56B1E04BBDA2B43B71A77DEB8B445E74C574D7C5 +B530BB312EA0EE227242D4FCA0CD13FD056E30433DFABDCCF6274BC85B3968AEDD85E3ACA8CC +017B8077C0991C4C83490F5C59F3F383C6C7BF0A7DB9C4F8D76CD146E3F80D4DB44ED37674B9 +0091E05114257103902A9966F75DDD14A0B7EF5711A429BE60E378A89C7E1B8AEFBA049AB1DE +59D36A037AA41592DC56E731E911BD486FC06B17D66074FD7332452EE69FB9909D8D1B245E8B +7C3A4061F3D2DDB055CB9C8BD2BD1BF13C2239E90D9581A323E8CE5865162AAE002F29A05989 +938C8F78C781EB5EE467854052B9B520E9B518FEEA9DE7B9D1D4D13FA85892105E383924EAF5 +C7634E06F9590E1661C0D12F3F867AFCA1A8E34D8F2D7FAFDF87D345D914E3065430E84FD70A +DF71630C6C836BCDBAD5AA6A1E7C73F3DCCEB4E351C1B3CF348EDC47E8E1E27EA2CFC2B3E7C0 +BB3F7AFB557D158D820FB815B8FE1DBEBDABC179B0914064845C90D2710D506D17729D57F2CE +A990A49176E3A3A128137DFA6AB814A9B4F544E290BCD8A13E92D4EEA56889B0D2B58C50A02A +D9508365881471FA7FF4C028704100F45BA347F8F62B3B8C827C2B19002F712D68AF8BD7A167 +E6B9D53BE6F44496E5B00C8458C2A15B90BFEC6E5FA5ED5743F4E607B93EAB75FCAE34A6B163 +D919B80C7E62B1E119BFA65520E2D7B78DAE89E34E0A3D7069EFD1B7D69B7396E741C1E81015 +710F743D2707A8324FEBCF46DA37F1D4A26A62DDFBD03D93F13144296D728EEE912243F8E8F3 +83042C51E48CA1A5FB757E6673CD599BE052BE15E9809F4B1C1373F0781963B39763DC4B3473 +0936DEADE5501C429D265002A4A280A1B7FBECDD6FAD9518BC26D0886314E2C3DDFC5405FDAD +8FA9B0FBD53863AD59BAF1B0BC6ED0ECB34B7EDE368A1825A896AC132D4A3B598989677BA608 +A26F6B35E46ACF78CC959F94787027C7509F8E8248B32A68F75A5E14E2118DDA7A3861C3944C +88C198012E811C71D94A3FDF8DE7E842A1662088B4C014CA1C29BBE58A46A8CD7E82E277E8B9 +EA73F75E0BEBEFFFE0A2737F200CF05A697210847EDCB1CE17CAAE782554D57C2C5F206893B1 +49ED59028707595032EA8BCE284A9B409C69C2EE9ADF0CF13035A1AE3084B58557EFA596B273 +DD7582EAA8153DE775B991C27124F684617F45CE264F3749BF05DA720BEC48277BDE7320CE97 +B39317D2D88CDF1967D50496CCAAA99D341E448160DA81DB763F8D721324608E9E13E7B92318 +22C669F6F7472350FD411BB2874935232E47CF8BE653C8DEB6CF00AD9367CD80B674DC67709C +8317CAF2D618170F99155E2BEE988A972FD99F28AE1990B5C8234721ED0B5B05BB714E2F84D7 +056CF0D2B0C46E1823163BDFD90642CE898A92016C9D05FFF063E7B4B489C6C452CC7467E64A +59978C6F82DCB872D322ECEA7BF2DA6187D78F27E4A1A9FAF3626554BC5CE69DA195CA0837E3 +A44AFCE6F55C2F540D6B9551CEE083F75155E978CD5BD4782C24EF20DFDEA82E66527304EA74 +CDC79B59B7DBBD262A2B37841AB3726D24F9E2E12325A22EFB884127CD3028C8CF819B23CC90 +8878190F8436AC1934F3478EA966708280EEAE8E35A31D5AEA2AE696258DCF952E53307138A4 +5F54E38566784A07B07B77E170B04BE12772D72D31C58107360F403BC991689A984F5A2C9B93 +7EFE72A267F1547B7CC477FE414D754EF566495D9C13C90FE4C87963011B0C0BDFF6A7179FCF +5DACA0E475A9BAD39E7325C238E0FD9185DF54465F976DD68B43B057399526DC8C7383FEF16B +AE73E89CA2A5F55B6EFA49DB81D19712DE1E5BF9C7B4536AA3F01B1EFD1AB3E356C2C27C915B +9B795780DA39875DE71F836EC0EA0DB3493C17817F07D34FFF52C4879DEBD510088A0A95D1BF +B06ECEF3524488FAB2F01A5DCEDA2F1C17BD611DF5455CD09AD5712144CFF92037EA80CF0058 +6543E8B40FFDD9A9E34CDF450D4573A9B279DB0A3AA8F17CA50E0881F8C31F681D55D6641807 +A08844309A7E40DA8FB21B1B409B2093275865E0375D7D5F9A9641C2BFD25DA3B7247A8B4724 +4B1BEB930202A9622A7636296B10846CD78FB8CB04C7BE4BD3E74DFC7627165FAA80DB2AFFA8 +914804A91824243A59B76CED9648D12B47CE8950BF760D865136ADD4F83C7CEC9CD730416E71 +01404019522B641F0A4DD1CBF7F9166180FD9232D94248D2ECF149A1F6FAF7F7CAF0FF409079 +10DD32C559476F6B0DF68DCC97716F82BA617DD0CD2C9D147A621200CC26A7A768796283BD30 +65AB4F569933788C17BC564568019D169E5E43D0E46C6CCDB11B36D5FF56B54786EA1FF68A98 +E8DD16F41B2B224D906F09A4347C58278F0F151AE45D1144D05E2519DF446795ABD09BA61531 +F93553D6305F228E82C1F28A76DB47A8BECC7755717952FB5506E4F26AE8882F6AE8F17AE34F +B80CF2B0D0D99DBA2AEB9221F82155E9F666C5F1709D17049A2E2AFC05CFA9779D10F7AAD03F +E76F78A57B1C4D844262F5A889802360BB50C3949FF9AF199DEBF95BD5D0A4B13B8663442C92 +DF829C65654C4A85DA8E9CA7224DED598801EB8019E78994A5C70980B1BD09F3B255979194E6 +1DBA6513B5B6288048A9E93DAB48AF7070FBE494A1DDAA087B2278045AA9C5E747A5D49AFA72 +D0BF8BCE89F182905973FBA60C5F65C079E143B0D3DAC6E774F5B298A18CB11AF493BBE2D783 +51B4688BCEDCC6A897797CF30DB8B600A5D5DEB6294E0EEBCB34523E28BBCFECA8C3B467747D +F85BEB5127DAF911375335C5D8B3F065B1B5D6D6FEE564D88B56897A635822C09C999BCF91AD +E7143F09F61ACC8C1553B5BC2C9A2CE6F86AA616A89808846FD1A2986D6D82013F1A2B962EA8 +1A418EB77062B721C0A87927E26358378EFC5E75256842F692121D4C5DB323DD87DE40C507CA +C183F305418C1C4967C2114A28B5B3DA494C01F66AD78438FBE9CB77059574FEF5409FBB77B9 +428355422F16E9DAD5AA5FD0181668A4C896D3A5AFF24C7DBBBB88DAF95FCAA95B270E519F2A +8729D013A5775CAB79E656BC515BFCF9054154D0C12C2D056DD947D24F553F40DD7052F4287E +3F0FB30E89190444CC52286959AC984345B11859DAFF089FBFA03D6111DF78DD4393324A5379 +71925FFD6697C14A5A1971613124B13EA20FF1086986DCF54BD6460AE956BA5C3565E43F8DF3 +5AF79C637FCD39C1361CE296612CFA01750180E7857BBDE7DB8F6EC757D71912328E41A69650 +271C5380931EA0B6B5227D9094679D69F04C2EB2B406338ED59ADE317E80198D3CD722B0458F +0A9274087325380B7E0047196CDDC363D161A49E7EE0F262C3CD9CCF88D279953A6FB0C3CB67 +390EE89BCBEEE246D321E076AB59B8D3C25CC90DDAAE731D19B43FBAD97A7A97BC21DF4FE65F +673753FE06D633D156E57D1E87433ED1660EE8C34FBD3B2A83EC5E88F98A6F45415EDB555880 +AFEFABF11EBCDDF9DC0F6045BC18B24534BED2DED3A5FD0769F16C521A7F1EDDB0D51776B482 +DE96C8FD119A03D63FD475D7CEF48C854D079AE0D10A96F51171437C565FEF88AE1831C7D56C +5FB2B184A882200DDDCF0552EE7E809DE45FBAC8777BEAD89958DAAC04BF6142C21191EDE23C +C7710950472EA107C0EADAF87CB88F7FF9D1ED061A7CE67DE329DE30613DE5A30EC6E46778BD +BA41C95CB9285908705E47E9B52F3F570F17B0190D33AD6F8F3255A2C499E81AB148ED7A3745 +B0B8FD74133ED7270CD24B33FDBF49E6BEB88E1203537A40FC6D1D3C545C75C7E42663CE5C71 +8BECA455EFAEA50D18E57FFE96F76452B2FE6FD147AD36A88D6DBDE307AA7A0DA0DD21986A79 +2396784F604A84C06EFC40765FAAED39756917635C582A8736D875D7F33ED344E7893BBCAC47 +176555E4A11AD404D1318A778D924FA726A50F4E114C29E44E9AC842060310285BCB78ED2087 +876CC115C0F837A4EBA53F07ED6594A932EAFF40ED42D7B313B99BBC8B10283E8FF683BC93D2 +BE4D2F370F0D2B14E6EF4832FD47CE536FD40E8CCEA442C6956D2C4780423BCEB9680280F132 +FB93670919B643F49F05F205F90EA3091620E48699D55EF35EA51397422E16BBE79776C222FF +DD5A2E5401435CE0A3690EBA317A8B3469CC19EE0CEEE20DDCA91CC41AEC64E4B483122B1BB0 +1B67333B7E1F39D808F44179CA3042A87DE4649EB1CFD5A5E8231D08221E2C79CCDAA4267789 +3C6417F47C0DB97D8ADAAF7266DCF9011AF7D71CCD8092FC994BD639D80A019714073F3C7EE7 +769056DD117FC021A40DD98DFB115A596CDC0EC9AA9C8F14EFD96B98EF64F1A9430D8DEC60A8 +B4F20E696B812DD9C0EAF3259B69097C81EE43F9546FEE7A556A26F0E1ED927455A1BA0CA65D +1148A2974516E79B04EE02DAE02A211DCC88C5F8965BFAE5BE65A25494BBF7C23CEC8115B1CE +2FAA0CBA14D99605A24F14BE129F80C806CD9C5273AFD406AE758B0FA5F81C0F2D7CBBC2B0CF +D30F525E35D937D4423B2E0FB8C83930A38D1620F12068CF098E459E8E970EBB0C44B74305A4 +01DC449EB227B665445CA242D42B8F73667B2BA0C7BC356BD5C80FCADC2256CB2D0BCE609ADB +60A22CFED22A5DA1F53A3B7E9535712031C472D34CF2F771520CDBCF9A3A5E878A47B909B794 +91A2D0F2A370957E4B1B3A516A3A4BF0F431BA695339E0EAC940FFC9D93729D07318D6C8EB49 +0CD8C923415A811C9F78B6E5C66601C552500012144B793BD0128E0CDF6360EA70FC83633CEA +5E962E14AED5633D2ABDD5A1283EF893CFD1BCF6278095C3075A4E03F6738772437BC1F45994 +9F5A14BB014BC909E3551EF70B61430E7EB9C0DA2FB9274F399560B6BC1C754D8A770598062F +409FB7D1165DDD2356D506E7D1D868847BC0D4F8482C99CD1D4D460B51F30BA5EB7CED25F56A +001C0AFA884C8A65E241EB72DCEA5DADBEDC6D761B24B5789EE8404529CBADA729159B5B1158 +91AFC097F3A3061606AC8BC1E54649579F65F8B5081CA530F51CB230EE59C1E065EEE4F23B83 +D6CC89F0FD0420F8A76E224491100E9C420008C8E5CDB9F76FC5218AFBD4E8000D47EB6D42DB +69C07A4609410B28BDE1CE27CA80AD1FDF6D18ABC7E15D8EAA112DB8444495DF49C309FB63A4 +6647F73A5FCDB9DBDDD2F6E5CB19826D7309C1DC3F2ADADF2E9526C6FA3B1520BBD7D1B27E4D +BF70D32F827FA36FAA710F342373C3A1954F5EADE197609809555808C004C8791AD8B0307C33 +44C93D35B9709B2016E8859FEF495859161F17D49C56DBA5E32300C080B7DB9D40B597D9626B +2A042BFDD249343DFFAA6D96B585D127D4A6304AED5A8CB39720380DC175C17066FD39CD20C8 +35DD3E87EB3AF936CE1A6F953351A49A8160B22B2BA09000ABBE2FF305FF77326D080EA35CE7 +D924BEEC365A1B0E37F194F3E796810A4039657BD35F21EDA3FF80089C2E3B2A4FF40A7C0685 +8E45FBB7426A1FFE0DBF2855DE7941F616850FC0F3A9273DC2D40DD60ED28C6A6F7C4E684A8F +B224FA1A52F4F733529A7F3CD3B672A37C9D1F6C00DEAD801078EF12EDCB63CAE750B82ACF26 +DF9650CD502727EBED366E00A1E6EA351119CCC68DBD3E1AE37636E897E964A5EEE0F4E892AF +88CE18FCAED77CBFECF9216AF5FFBFA35B0181025760CD6920A3732BAFF7ACCB611710F2F389 +CAB8C1A5AF75F82CE7C8DFAF55FB6FEA658D706BBFD8C2A979BF79DE4DBC69DF204769719440 +2274A8D6B61503BE576AC61D64995B9A4E5B2CE5B41C70219E0CD4A42715009B8AB11CC681CF +501744A54F64C35248A0A5063CF725CED14BA757525E5BA7F959D0CC1918A21AE242293EA7C6 +57D0B1BF860BF3A994EF414D457EAB682AD8A4E0C859B6B0C7FB74E1AE202AC7011F35B1E104 +44734F4C04BFFFC35A36A2F856CA4BAA9B0A885DEB9068F2E635B68411BC397509EF8211128F +CE9FB991CE287347F06080083E34E61D6266D9FA96DBD1DDB48040FC1B99BEFA11CEDDD479F4 +DBB987236B4C5C41C536F464CFA43B3C2751D2114DCA8C6B75987C326FF5F5859A20CF68FE61 +264D3D19C3EF7A88C66EE455F1B85F570BE50903F0171A46FEFA4DBC8F62EE9383B585DC0D53 +F6E249F469C631099098E3391E8B432E739BA60EDB0B28205F4F6F306A70D16C149BFCA8565D +1141BC191D12B029D4A97DFD41A10B2A3BF0E7E3E56ACD867CEA04B85C5F7462262DBAF7BB8A +413DA70DC3D5CAE2C3F3568FA52081447B8F3F7F2C608F9D89156C427136A060323A8779A18D +CBFA6D21DC08116BB1AC5966900095176900CF3C35323F45CA4DF4BEC4CE8B9E5183847070F3 +FE8EC37EC98365AA6F3353E68E1B371CFCA937C5F3628D85EA35615239402340C3DA703F7A18 +1961AC2AE63CBE7B7A99322B1F73AF2334B569F9597A2426AA02A36CCE40415392F382B26449 +592723D2C7DEF0CDC39773062E13741536AAAD929A35F698A226342E624449AD2534973BC1E9 +B2F8E875B881AC7B061A8FD8893DD399F1AF00E30153B6285C0B591135FD1FEC0425CE1B2C86 +AC0378FA29D7FD7668A4C766CD922FAE0CCA3EF7481DF2AF98C4E204940B03C24CDC6732C548 +6B0FA2C312C041D0A97F51E47AA0DD96CC60F96FFE1F37EE54C835BF34C20EE115378CB582E3 +6ED4FB2DEDC45F06D0AFBA2098C71A914E8A2BCC30701765B9E1F4825715C6328677776A6EEC +B1674BEBC1EBBE955CC6E0DF92BF67B4A62AFB52A90318ED69347CDA22339AA374C8C7D6DD69 +FE9A3460D7368295FAAE607CF34E7FF41FEFB7650B5CFB4F7B5DED38A73C005B6D21124F9CA9 +012286398270B0A1C18E7CEA3C5116E89EE7751CF42D4E4CBDDEF49D1DA91F0132CE636E4F96 +FA40EB20392338F5D2F1F3B15C44D23B62CDC36F804005A06DB79B70964B48D8B1D859664000 +611D5FADC7CE699BCF030EA53D1ADA7A87D2A6B64ED5A107165F80EC60051D1DC85666E50BAD +862D961589E379A48D51B7B69336B5CC155C732B14BEF3A01003732D7BF05109D01A2202748E +C305FD6B7DF421912EB377B99C49FF565C88EBF56C7782BC0D3DB5C634EC0508D9194B09B98C +E0E43BB9A6EA2DC02BEF2CF3179AC90F7F45FF6AEEA1C6C7C8CCFAEA5A4E8487EB470D9DE00D +055AA2AA0ABB5B22CE3D96B2D422352747E1BF64C39FF9E1F51D404CE4339BBF79D2EF1B2486 +01B02F863456EEFD02BA5A1C7F97F860D4294D8C85560DD2D29C2167BC2208F9F50259EDEFE5 +8CFDAB9722039D2493AFC7D71E714B886B2DB7E2A6820CD5642FF72FB47D20A8F45E4458880F +FB30FCCB6ACA8048E5914F6256A439188E004A6DAD74DA2C6499B63A7852684DD3BFF34084F1 +DDE62B6EEE0A0F33C89B90E42E55A285CABDCFE6280929DFB9EAEB9B04AEF296C7A9381054BC +2E6DA960D32E848C9C40E28670E255121A0C5B17CC9FEDEB5EE0126360C134440F9632903200 +7BCBD32AEFA3E271CE3A8947784CA6B20CB07ABF83CD0B29DF54D69E2C072F939DFB7A7E5B8C +6C8354758CA5D33AB9D61C77EA562642ED8388F2F84E3733F13787AE7D1089AD08984DB6958E +65DC5D02572816E696AB3FB9D95A9F64D7AA7A62B3D54D152394D6598431B8BE651435152BDB +D687DF6330ABB0B451BB3D5198C3740A44435B048B19A9238BFC5805C162B61981D08C4FFCE4 +CAF37D11CBDF6769000093147A26E8F69DB0E18A96150A569097CD1DD8C9848355434B377D5F +94A01A532002E480AA5E1027B696469F85577FF07B793F4B8F684C044C62CF42D4DFF1AC9E52 +8C05F6F36FDB87F2266D232B6717897E6C57DFF9D31CF3CF5F12A48296FFF2FE7D6F975A2463 +F4FB485171143755AF082FE102DB4D3A267B43953C4F09BB634D54047076056762C099061CAA +D7B4F5B0BAAA7B1A40396AF29268C784A91F3674DB9EA724C3C1B88B110839825B82CB50B58D +A5B282D589E0015497E1D887730DB88F6061AD0A0D92645892F0DC6FDB83027C0715EFCE2B97 +B117F11B7A1AFF37CBCADAE82D38B39984AB201CCF1B1AF4D98FCC527CDB75D57454B5103FD1 +1C9305091EFB79DE2B9B7521F3FEC034887D7060CF40C2D522096AAB5D3ADF56920FD7EBF767 +6924AA2F89F97639B42286151E76B04EBFAF1492BEE4BE5C9A75A42079503B7B67E7C81BF5CB +DBD93E34EB1453EEBD4532BBD47513981577E5C3E051BF62E1753A5A457C78E78AE563A39A60 +069C7294D0C04D46F92CFC9B9620CCCD1E4294CBDADC7B97537333964DFA8CF1E17E01B0533E +01F41EC9867A111C17556105071E0FA5F247DE49159055AC50CF4B5144E2AD6FF2104784C4D2 +73E948D2A264E4BEB7B47A87D5E3D415D3926734E8C3C05281BB872D1FDE1906E8A397000792 +6CFF3231254CD5DCE65DDEE11ECE87791727042B933C5AC119C848554A4045ADF6ECF563CF33 +A8F910412313BE5B4FC987A67D145686C0F5E11869FC8963B1590FCE32AB66031BD2757E226F +378EA27FFBFABA11F916538D20E6F692F9EB9CEE02AC13188E9905EE62000B32D6516F32D90F +F71DBC3C288F3FC76CDCA24AA0AA1D0A7D0668E6986AC61690388413BDCA81CC060BAAF071E6 +7301DE9DB664BC988CF0C4375FD51150F9E254AE93C50A1EEF2310BE1673FC22BFFD2DE463B3 +69B19E23EA76586C54FDA5C50DAC226E3F95D95558A8E832DF2BC4F3AAFE1F3C0C4AFEDF9FD4 +0F0BF05D747C82EAF7EB4A76F01587BE18086C4597BB93A8E3A3AB7DF298F8C16DFDB101881D +1EEAD4B0EC16688B43ED77D78BF022366C3C3456462265E6A962414EFEBC26D17B67647EF49E +74308D44304EE64556909765F068DA69E0D3DA44C0F7EBE4019E304039CA80AB806B47B1F49D +512901895A3822BB0424AFC3157392E402DBE450056C3C6760CF29E257911DF9610DDD9520E4 +A7CF15276A81FF9A79786B22DCB2137B20E1F976E83E98CEC6EAAB2D9427BF8E006FD30757E6 +ACA232D64AB02399FE79A2884F145FC6351B5C186F97AE8BB3AA3DCDD34805EB1E240E393A36 +D1F85C8B396624CD69802DD267D5A9909987669DC66805C8D273B1D69197DA8FE60D005B1132 +3DFD5EBC1B400B9127D71DFBBAC8899E688C92AADD87B2C895813CC20E35B1F7D383E450E384 +9589387488C7ADA1FF323A3CEABEE249298D2A2DC34EE477169EDA7DDEA1FBD7C2D5CDD76667 +06EE7EFA6F42FA80F622F42257E9B88EDEB7BD64BD607FEC542ACE2F119AFE682D97EFD6817B +545D2D424D6435C101EE6BD670276BA133DD7D16FED98A9DFF0EDB81A6127DF7F070751B4014 +17EEAB5FAB5D4A1A18611655228BD070C0F0DB908BD32F03E1614C95162034560A053DD106FB +4C0690D0DF259947574C6D82721966397EA456B1E8889518A7525C23BB294E47F5838C1B5E98 +8400A58DB86DC86B35C6A3414BE3E2326892105B2CE25DC7F15B76571D0EC9D646974D53B8EF +96EAAB63928C4A175A34881BEB0A801C14567EA395C5418E89C5F7BDFD62682CC5598E74608F +47F3B9A43765FC435C66595772B04048EBEB1C39C18ADF1235426E341DC9FF747FC5554FAF22 +AD4962A609F0CE274C572F98ACE54BEA41930931DC944986485276FD38144A08CDF0DE4FAE02 +9213B596977405C220E2FDD21B7CBBBEA22B2CBF7E7964D58035B242E2C2DFDE43F21B020976 +D1AC86E2C365FAC822A38DE51E6ECFFFF686DD4A8589BE09AC9DC1B70D65DAF7EBF146ED7769 +B3B00AE122F4D322CF1B83FA9AE501FB15221E1B3449ABACC7B62D9CDF77AAB06FA4CF610311 +DA089012AEDDF34D37204DD1E7EE89FF8E50A9AEAF99DCE64DF6EA0CBCFFE8E16BDF5CB5F482 +3C50F6EABA621C6034EE2F2EB0F099950E4425B818F4052EEB014E2929D34D5333055012F3C7 +518BA32BE04B1E8676A14D95EB1AF4F045E78E6CC5F6B5B6AA976527325C29B7234770EE1F9C +4609DE2CEAD3F39EC7DF027606771406C622377EC9E7C4AFD2B7BC78AE0BDB6F08D3C459D1FD +8E97C020F39205BF16C907FC5234257189212521E6E57F2AF9AE9EFB11EB36F2A428F3BD3A76 +628FF7E86589BD3CFDA9E774E1655FCE1BA225DBD2506C7AF7078CEF60C209658B0435DD5AAC +00BDA0D6B11680963D9C64BF1A01E1B884A65BA9CEB5D87B2492D44664879A5E9B046B8DC05A +96E50AE5A71055D23F79E5AF82FEF4D124D7238DB91E1C8D2EF789811D45411B75785B4F3609 +91C7DC590D15EACCC950634BEC77ADA1B96ACA5E4A09849883104B6B584B2F345BF3A6573044 +4B7E755BB603A170424412A6F39B882BD2A6554CBB33DE4AE5AEBA7AE9B0E61DB5A7ABEB1553 +A4A1B92BB9E6AB4021C266E932E6F871C362E07883D4CA4767FE1081DD626348979533C1DB13 +B42B6DD7ABDA7CB7D84EC347279683E22600ACAB25DF533F564C97BB3EF6E39D935C59A0BD2B +9CB53C0ACCD759BC4AD7C60BE4536A21D59F47130FB01D174B4BBE901E19FB56AFA5BBF8099E +50ECE0075C340148F18BD6661EF75F5BBEDDCAB5621144DDA8F5696F8867A4CCD8336DADADEA +B5C6CBCB6A114F0E44E43945F46C9143C3BB688E4CA8229E8621B2986CBF45646753B0CED554 +E09F8D961CC9BD0EE359A859B0B7313932F6E5013875FEA4B51268BB3D608CA579D999D1CBFD +6AE8303BF21DC188109092A62B1F5E18ACAE78DF01F41E106EEE0113D253297C7798E58AB6DB +A4AF1E93ED7968C0A73F5151FA53A5BCB039FCAF488B2E94F20E3D5794256F202FC5EAD8E526 +763C772245B590FC2F98B3C091B9844C332E781283632EF903CDF3D10006969E8BA9F189A1D4 +A3A676C0A459EC476894C3E28891A8D451B055DE02EC8943E3BB0AC46CA0114717C24C6B3917 +5689B22EBD8BA91F97EC1C6452711C57A4B8C883D2FD15D1B416C3D131A902887E567285E018 +D52E3F5CBD6FE3D7127F05FD400419858073E58ED1F47F24A8CFDAE157230C6C801AF3807890 +C9238E6682CE035436E6EB162D8B30E52D6E84E981D8A977CD59B0093E477283FEFF42448642 +ACC058CEC4050282EA8508441E064EBDA93A40EBFBC68EDA94DAFD3675172DFF79A52E352044 +D94D457E84702C33F1C53855D048E0D37BF96E9EE400D584EB9787180E3765A37533BDF3F814 +78BA837FC6D007AE96F23F4712F0D8C610EC1F8027A0D0A993BA0F55D91A92A6A2CAE17E2F58 +638CB84099348B02EE5347FA6F02851EB046095B77B5011E1A629834098593AC3BF9BAC56380 +98C30EA3F0C5526391A8736AFCCD1C3E5864B2CB555E7D979ECBD909DA06F5AB8419C134AB29 +2C296F4EADEA3118D7015DD6A3B9D7350229D8833E34A583AE3B8D084FD9CF948FCA765BA0CD +47FB37FE46BFF0BB49E7D2A0580968D09D35B8A28FE54848CF0BAAD6AF6C25AB15A1882EB165 +1FC1DBCCF0CAB68A5DD18974C2C5A4AB08C52AAF2C89E2577A621054D8D25A340AD7B0D3167F +31FC5046819C9728A338AC204C3B0F196CE64AC34435B4491E0E357F26EA356C9049499F2036 +28F5D3BD277A7B337AC5D89ECB7F26E41CC80DEDF47FBFF8DC2E716284F68E6750C0AA4A1933 +B38E114C7A3761030FC8A5B9E1E7FB753E287576AB81A3D6F54691B9945C11B556604BA9853E +BD89536E56CE770BF86DD1B26D10D797DBB001FD0BE132E5B6DB3D6B9267587F30BC7EBB1B55 +66BC7C5609F9D1125B4AA2ACC850A6C39FB0ABA181AC370E8CD49C56D0338832AA92AED01A18 +B9D228FC350D0B2CE6E1543ECA4150C0ACE22B5AC3938A8A04101C3BD78777DFB6F7A570A205 +1C11EFC3CD6CEC68F70EE9F950AAB03DB2891F942ED550434DA413CD2EFFA9D2043976AA20AF +8FDE9D2E2FD6F515BB36741CDA5FEAE7BA1E8AC777F68E6CE7DCC16EDFE02F57852E87FD8A19 +1D44D87E69F7B9878CBC734C227C6AF895F083263F4B5029A0013E5909AF9DA77EAC81F17A23 +284CE3BB3C74B26D9D08C5B7379CA8C1E8BE0C84EC0C69D07A645E613249369268FEE614BC90 +AFFBEA486BA07B993119329573575DB8788DA21E5831DA7ED91E18EE3157EC6C72DB051CAF89 +210460766DB6743D9C285FFFA2C2602759F88570367D5A2E3B97DD9B2BB977B3900CF9FE1B49 +0EEDAC8E3640E43331D6AE45355460BE7EE1F38B11925A9DFA3F943074A7347CF0E03F852714 +357115FA41A17531CA9FB49C3AF799EC0FEBD61B81631775290B1F38E205A78B317EF58364BE +494DD1CAADA4D5F84980D1FAE9ACFF35E2E7D6EEA26F97DE826765DD5E1268A53F5D8AAA8FEB +528E8A13E0E001BB04C033BC88B1B83E0AC2BA20109014C9FA9353E7F10DD7C1DF8B3FE48A3F +9AC01006A895B0019E7F62F450960BAD05A70BC457C88F28759CD1DC5904237C1B865AB4F938 +6A2BEA70D5ECBAC9EFFFBA1680413C9B49B2E16485D0BAC750AE473B1B3F6A176DED4EB6A052 +9478F120294E591D34B90CD62579DC53D94ED0A98A5CBA48225E113C0F8BF5FA1113F695B757 +7229F5DEA917A5CB49B85D107CE29CBE83107465A98C6832FB5F08C6B82540123B675E69D442 +7905C93B701C3667DD78A500F405078A7A0B929BF5DD21AFE771ED05E73FBE5699D4D2C9337E +ADA08B3FC5916EDE6AF94E7FF54A01BA67F72A3A130B61CA2E792D539FE4FB417CBC6E4911DE +84388B3E58BCA8520EB12A0ADEAB59119CC9795B64FDBC6C759D314BF93E91B8F0ED753F2A7D +1F50255EA5429A7C2C719E13734DC9F0AE706A14598F05609EFB370FF110B87D418BE62D6B1F +3278C5072F7C2C609E92DE9CB15654CED6EB336650A9CA2EA1786865508AB6CD71AB57503C18 +7C0A68F532E3F05557C191D1029C4F6095ED7869A4258C893394D8636BD0DECD8F3851B42EF0 +EE6D6D7B23CD07698EFBF2A6159AD01F2FC5C69FA5ADB8F0CECF8CF1EC99AA919A57E6EB4E8A +840A5761783C7DF31FEFF92651AA3975AF5A2003C307C6703089EC1CD63D8798CD4FB69CBCAE +A810E5D70EE6F2DC9ED3CAE29039A86173132A0EC628814994191095E1F578582B79274C6050 +191EFA3BAFAF6F331B3109A04B5450EF7D1E8CBBD634374F200980BEDB6A34B19A2057523C86 +706023EED5563570F6F88FD9B8310981D7C73BADC9216AC45A4BFAC6E4800CD101CCF035D2FD +D71A8D082BFEA07F3F9CF95F2E70FBCEDC89F27BA661EDC0DB4F2468EBA2E4290EF9B5670936 +EDC728E55963D74C444E03AA2344D80C24405EB031F5933CF414705C3329FCF23D93C1F1C6F0 +2AD7B4FC6E5CF38BA92ECE4EA1656327236FA26CAE52031F4F1FA98903DA4C361FC7DBD3B5CF +37508E1F22C582DE7E3E9F5278D7424A9F824FBA19021AC81EF7F0D3C6D67D53A26E4930BED9 +CB72815F0884BF52D1DDC54E4AF35D9558345D498D63E7A7D6BC327FBF8F47C4997E2DC4C6EA +4E1B3FB9587FE48978B67EF5C8E8D8CAB7627A982DE551DA90275AB90DEAC04879021D593430 +A30240CF389E10D256FA72A8656E8A8865750283CB245CE063C4EB16059F25AF21AA7F9412B1 +51A3404D965C2CF02CE88FBDD3A708FC7CFA73DBA0C664272F49F86915FDF58477AB8678D42C +AAB245B637168C4FB33647C6A2CD7F96D54697C375D0422E27D121899462D8998B3624E203EE +5D0AB08E0AF286D5F1352F0E4D5B58774F0324B5479621488FAF503415333C9B232119542A24 +54A72918BCBAE3628177414CE76975F786C68AB4FBE47B150539D9BD711C510A7BB87523437F +CB820000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMSL9 +%!PS-AdobeFont-1.1: CMSL9 1.0 +%%CreationDate: 1991 Aug 20 16:41:23 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSL9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMSL9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-61 -250 1150 750}readonly def +/UniqueID 5000797 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACEE583A5C939393E012707B47E0C1FA47D284A1EDC +9D01A497D772BCA8C543388E6DC0D1E2C4944740470E0914F65EFB0737B0851B2BA713A9A00B +36D07DA6BCB52920B9B59EFE587734027A3C5E6566AAD332FE6FBCCED1417802822A3B81D618 +7875263D6BBDA04BBCF6E4870FEEAD60F104BB3C5A766610DD11AEA64A6B107B0B04439FA288 +8B8CC39232BB83F7695ABA81F0260CD5248B9E649CD800BCB325468C79FFACB9CD3036F2ED7B +B65DC6F12E33DD6D45B61272314F98990D08C0F8274E999F4B46AF4B5C5DA923683C960FACE5 +0087915D2044D7211A18E0C22967EF89552662BA990E2DFB9267E09E354F41E871E612A4D94D +E3C1B4C6C54C7A054FD7CC0696A89C7A397B1D6245052E0C0AD0C5CE92A01BD0890730E2863E +A92BBC1E036DBBD96C7F4F618A83417B9D46DCC4C226C30353B46DCD3D7F12DCADCD658FB2FA +858840C4A0B11ED519EEB77AD0FBFD18B449569EF3B18AFCBD697D436EA1BC3234BD0AEEC1AA +C6EAA487043657562D0042F41FD9C42DD2B59F4AAEF65A9FF83ABCEFD8F6DF3748CF9DBBBDA9 +E56E15AE7A6081894BB385BAEEADA06923F9C1948CA5076B83CA75D1784483CF2522178EC7A9 +6A495A21F9188C0C190651AE49EADFCB5A1574032E34137D29BD1DFAC2CC8B2F3E0B31491CB4 +FAA1D861839F6AB105692E579A236A85A4A2DEC3274EE7E793AF7946191BCB7CD853FD38DCC0 +2266138AF3BA0DE0741AC0E74D83D57E5A522A7ED1EF9774B6B913E10081436D2F3BEEA6722D +2E285CE94D158511306020455C85E6698DD9CE31711423E1F09E7178EA99F7B0AA452E1ABAA2 +263A474A7804C21B5687D42443E071736A6BB3EA787A0E632785B252D4F834841F630ABB6A70 +5CA58310A344ACD2E9996F2C374C618758D9EBD68703CFFB79AC71F3A6FB51F71E20BED016E5 +15398CF662DDAF62B1DD8044F687DD402B8637554E0365188450FD85515C73C3B6351A293A06 +C39EC54DD06DEC0B7F59A41F129B9BEE7F1393F4376DF020EF0E5B720F67386F2284702C5F69 +1FD8BDD1A30E470ADFC48E1A0C4ABBE0D304FAED0F174516310BA1E06D8C95AC6089F12F82EF +E394D2FF34FD718A382715562C42970DB31BDF8447E34E4838ECCC768A90085216AC62B6A739 +4C5542A15FBEA519FC4A943042B7FCE9843F0EC27B26A915C329AD3CBA58FF03481E46893A35 +6A6455AE7A2831566B7D586A682BF55F00D525CDADA0DB06183C8DFE6CB7018D61E5C311EF99 +704632073C40D73D520ECE937A67D1F6EE9ED16242A553817B8926795644369DC77E64C01717 +B09B4A24589205CBEF620967F0E9FDEEF894046218FD7693AFCA1D83E7049A6110CF90B76A0F +749F34E15289558A234A6AC2C06FBCD99DB8639D1B86166B8664D6477538731F398681ACCE59 +5A4D3F63206705EAC81EF11B15DA975E2E73483918D824A52E4183C22C80CC222C8C4BFFDBFC +ADF1218BB4BEE6C94D3AE583817EA8293D414124AC6FB8DE54DD5B686F02F337DD8273C5B00B +3864802F1D7287F50C0D8A378725FECFF1E69735091FAF754C6E1BF8171640B172D2F1AA20A6 +01FCF76A3F94E2CAA57CE65495B4748F2DC5C974C5872D65D3B511323D072F119AF718149811 +9BDE7524420A44714EE9D9601D287577EF17CBB3ECCF455B75FDEB06B677C64881F4F6800A71 +05171A6C6215C504373F935CB10644A2F7B86B0D837297855847DB6666D4DE10B6DE87BFFBC5 +94D7CE36F3F28F9BF84EF9450B4DBB906DD35380E4DA899CF628EF5F80D348FCC32031951B81 +7088B0A38BBEC4A3550F608B3ABCD7EF3BA780466C8BF70036770118565BD218276A57564277 +E27D274B6C31CF442137815ACB2B891739B521A278628AF25CC6CEA8B94810751125033B2064 +4F592B7B5825B5C83B4EC2A5216B9B51A4CE8381E3BF3B27CD927BD3FE2F5928BC042B9998A2 +634C43A934C5ACFF6A8E933B4C827BEA2CEA303281490D0450F66BDCE448EBBA0328D829EF61 +B9102D568E9E841D370BD7769357D17E361B6FFFC4BC51DDD5AA907EADC777F2D76DF58E55AB +9D6AA869EB99B3B3CDB5CEC94E1375F4CD21A1BAC49D50E8DCC72BA1725F41681D746AFA7A0C +4D6B29B763A19775B0C0BB6D1EC638EB0E45143CF0D66414C8CB6DC826BCFB444C489C0A6A00 +F862720C0D5E029D81F3A1AF24CDF2E12A77261B77FF5A894FBE00EF9826C7676AEEF1B7C56F +1E99972BEBD6C20D611AD494A6704E196D801EFE39A6A019B551B5B92BF37968E1B1DC5C6664 +17E1E65F47FD0B491B439D9DCD9CD18C8EC3823F1C53BCCE3AF99A1BC9CF4B6AFF9AE861AE25 +12259AE9C464C99081DEC2056F7B2B0E8D5EB4784473BFB34DA257ADDFBCB8084006CEBCD248 +7AD4D1D8480B02C0139F9783091B102B727651AEFDD73324D0EE87BA466ED513744F280320E8 +0649793BA512125CED7EE77B1D1C42955993287791E3106AB6185CF1E27A0B217CFE402EC5BB +677383D7C1B39D755C004E9671EAB5724A5E694F3A9152F3B7A4F52BFF2B0A3E6CFA6C317216 +5D9577833443B4347B81CD597B82E059DB3A70873FB264901191533E0668A35BB2258815B872 +04FDAEE5283E69F095CD0162A5E918B96F1AFCAAF8F93E750CDFC0A956D0784DD9E4EB53B914 +411D275FA93061805ECFD1CDB6D0544CCC9FC19CB03C103C1887D3C57F618E43D9C2E65B8B3C +4289C6A2531F3A8865C0347E74B369896CC7630099C88537EA92FD79B80DCAA10C97FD3935A4 +6D30B96B189444D8A06B566F07E4004A4C8E6D8EFC2882DD890D5EA57FE6D4E906089E73F960 +0A292A420F3A0389B9FEBBE80D2E9A5CCFEA727ED9F8BA49074A2E2ABB76EC5C5EE6DC0B00DC +3CA2D13EB7B5784B244EA8DD7E89CE44D92F4061215C3CA7D553BC460A202B4758FB5E8539B4 +9E42505BFE9CE658B7F51C5D5E978C332765CEC78A0FEFB16A243A7C6B0DAEDBAD0DA87B04D3 +9334286C6075765BF0839BDC6FFA5F29F393C90DEBEB1C0389E0C18810DFF06E48D7C551C218 +0439435532C1B30136709283DC1DA7ADC5007E8C9A177FFB4EA13A9B08551F07DC486B213F34 +F2E437B5558EAA103D8D0F07D3039269D7A9C94459324D6131EFA230FA7A08F197A78B19B517 +E1744C60022F53413C5788842160C41C326A66C487DAEAA58153A11C70BCF531CCFC0F7C33FB +079E7F6AF37B3D4454AA4BEFEDA884E7D0C2D720F4F97CD82279EEEA0E1E454D9FE88C1AE982 +6A46AB4DA2FD56FDFEDEF16A84BC3ACCE8983C09DBDB6EA419A992873BEE63EF1C0FFF8FAD7F +BD68BD6BFDA3C87141A452739CD97FDB7E18C887D19CE12383CE9051290B1C13CFD5BB21C337 +5D8E562FC9F0803DEEEE356F924C2E325FD2AAFDBD1E9A810C4DE83095FDF102F30D13DCEE3B +9366ED9D3C0411D268DDE249F1EA17ED43E8211C4772949B39A0F87EF76138E3E8A45761E9AC +129BF02EBFA46C6E43B8CE7760500ABF85352B1F0B1571AB9814793B864837A153A82AEBA4E7 +4C212A96EC520EE7B5D8746310A7CD11EB4CE892BFB07838661BCCC1B52836DA4E2D25718A98 +3732076E4691B91B419D2234FFDD9AE1FDDE667A24AEB5E422C7E2D222019FEF4CBB0100B7D0 +7534FF3F3C71249738F04D7A0E29785E2FF743E44D6F214E1FD1537723BB0C9F6E245B0D7C08 +9911BB427F62969B379A213AABAFF31AF14BC05D090C7089A5795998A174BAB5800BC900EA38 +75C030D39F637F5C7D43D67FDE8C83E1CD1CFD410AA6518807A31D2ABEB18322A6B90E152268 +BE8D4B283BAC7F8A5462681D1866686183E5BA87AE476392C5990DCECA2F5C3D0F616BD0E793 +F38EA356B5513218519FE19C7EF72629415935E321AB46E204F608899F08ECD50156EB2D22A7 +9748033C2451DBD3A6B3A38B64B1669298C077CC60685B347991EF2E05B87C549D534CBFAED8 +0BA4CA3A85875FD54604D87B3BE7D97DC79857EBD7B45611083ABD2004B1496C8487691626FD +38E28EACF58A5CA0806D17541AC7DE94217818D33959AD6B6B5C9ADB770EFD406075F5CD131E +2A46D49751EB2A543F03569ECC4FA1A5895FEF6DA23AB604363DDF19845397B86B11B24C196B +3FBD9002AEF1ACD905C1EB4A3A271315138A7B3A59C5C7976AD919D6A17D7CA11736B293E907 +F8027BE9296EBF4E6C263F0676BF24818EF63E34FB3B4535FD2E1540C457D2495D8E6506D762 +26B2A334049168584C8F99864BE81F4C14EC2C90B2DBF393DE4C7DFBB055144EBDD4D6DF2EEB +FCA773B9FFF2465F769ACFEC113DFB2EA8DF00F8C21CECF10C8A13597004AC253D444AB12DE6 +89CFA8847B0E5E23839BFE572016533FE3550C62779BD892751AE59E403B2BBE6D4C92845E9F +9FE99E4575191E1A5C41900248926BC6354BDA40A0E9F68BFF9D6BF33F8B88D26956AEF8DB58 +0D756D7D2862D201973AB9F01647B05160C69FDF8404DC2A39CF2CC71F86E768C4B6C7A21782 +B4009CEF0AEC4F7F2D6BCA51335107A4C8ADEAB4965701EBF97EF781F527B7B80C40890C8D1E +CF9DD52BE30121B4654CCDCA292E116183780C545D7FA5C79825C0CD7CA05592A3771B51C226 +5D23920CA443BE08F9ACF3ABCA397F95AD5877247938CE3357B60C58E8CA36A67D7FB4B2E3B9 +EFADCD65AD931B37FE6A8AACCC6A71268DAE85E2BB2A2BA48D2A6FE9B95672039F8D7A3D1836 +3FB798ADE3980C6AB1C3349A03438FC32BCCB7885DFB3A7198331189327F89395377D593B984 +F0F5B52C85A2AD7B581F3DB9019783724C1D362ECA6D96C3B849C52AA6B893763AD99670407B +3993C8BB2F77527912CDFACEE327498DB2C21883F15FD0CE81B29CF20E757E21E1F04EEB8E3F +CA489A0733CEA30C34E84F3AF4C9860E604360801D8CB74954DD25A46DC1CF46643D62D521E3 +0E6CA0F2A6E13AA2C939E72A4D1C8E9796AEA9CE3A650DD48656826DF2AC44C2D3F170DC38E1 +460B24E000BBF9535904606A762DA6D46BB0996B2B3D69D627476F8A47D245522471CA8DCA9F +44756F31174D86C59757E1CE73D467D3009F2C5FBFD2D393894F01CEBCB9A2097D09C797E48B +6006B6F3D1B1EF8788FF8BD6F54711DF2910197B5D2D1239EB79A7468837A2A6920C731332AD +6F4BBA3B92D0E43D96685F7442A12F74602EBDEA00939AEE8454765BB27449316484C4FF55CF +51F7DA4D98CE110131F2F37A847B5D46A1C6A20FB2186B0201B20777A8592217DBCF4C3B8F6A +C8A2D50877633D4819DAF9DFADB1E26CF87666CC9CD1F44928D3607B3CD0608904CB7E67AB35 +D67040CCD27459DA51DD4D84BDF1E4B087AD368B20CE3FC8801D5135BF9E670379EF1F9319F3 +791C852391C614E6149D45ECAF5F7B7BFE673A4CCB3EAB10C241D80E893A2DFEBCECBA7186E1 +8E55BA6F761C36D026566274F4BB2FB355FDADA8C43F1194D1EF1C31808325C7CCAAC224603E +25BC558B506CBC106FCE0EF34676ACC7E09FE6ABF7ADAC6635525C609A0A611A7B0E116B3232 +9922CAB93617F57338F3D054574533FDE3ABDE2E75E9E1A272DA2D6042A64B4B3D24341695C5 +D882F6C55A28F998197EF928196928F67E7167F26F3472D63C3BE92F72163CFAE01C8394BD9E +ADA89C9BDECD59A91B498E307C8E9A2EA5B2A3DC6A1FE05469DF64E1E6F9EC229194C7500A74 +8AFC7E5D1EAB3A91F6F18915A994BA91A6FDD9C3CCF6EB2CB50270156B0812CC12332CC41CE7 +D10D2454C4A46370A5E266E3CE002A4FA2E856D6ACA939A9AD70D7F05792A32F183D0647B1AF +57261E3D7036093714CFF51C5EF1DF06DFE666BE755C5D786FCA1F73A0C5DE59DEE2F6622A42 +9451983F1B63D2A956141942661667558C2FA6BFDA8CD0994E794D528EE23637745CC4006D07 +D77D8F1CEDAA6B83977380B52595D87E39894395C87DC6793A2E0D28DA6BF2533731C937049A +F557DFE98DAEE6C53757841C49BAE9D76359F3C98038A92DAF71FF93F77F18DCF022FD4C0C80 +F68292F6140C2ECCD742BD4129EE4607AA8BF03499C5ED98C6D19F05A3E4D35A74EBA259FEF3 +1B02DDF6349B120C28E327AF90196BAA504F9A8E8E91A4F80D2274F55887A5B4FEA8484D2BEB +DC3CA1510BA1E8B9CB485B34B0821A9231311F6794A33066935B9449C40CF0A250EF5D6D367C +320FBF747F229B6D3CF259E5FA79B876CA70C4F68E749B9FE0F755407C5002615C658B2D563A +0671C4C90F036E3B4A182F2B80E3CCA061436003AACF1AFD68D3E7CD28D420826FC9F129160F +DBB9B25DA22F74E615791B8D3B159A51645E9D247F7571B5C23E6F0A24D2EE4ED323F635AC47 +7B4DE1B279048721F62A4CC68837A88AC788CA84B2D6B0B4EA8F0FE1C5E97D0E806CD6EC215C +876E12CCE4F5E00F8390A8A3EB908E01B3F1D5875F433DD0C8A8EAF5E5C05AF70152E46C6037 +FA6E639DEF108BE515AFBF2E12604F2C0ED6D1BD21BA32DFCB8468023CBDF22C308A9B448DEB +1E39AB61D6F85ED4E311957578B6475FE8C405EA837732E22D208814A7AF4C1C6C50C608E145 +15B11194BBB734591765501268FF1D855EF3CFD5D3030757AFFA04072FE145030B53FDF93840 +AA7025ECC21169C357E6E504D2D24916EF20EDF8F107E0FDFE9327BE14ADD02F2632AC5E7EA3 +CED8DC591D493E68C70DDF4520FD208446C7039164CE8B49EDBB801850B170294C0C1C76193E +98A212F37B30E867D2B153E3EF0EC36331E521063F55941EE7BA17C4F6E9A648B05FA2B0AA28 +CFD2F0A42957250F653A481207C098913D23D504B1D8404C9F2B756ACC60F05EAD019B99AF26 +6D989850C6F4DB9F6A5E38AE7B6C6B044156A80DE5D67E7E67C3FB90F6BA343D925509D1E423 +ED67BDA7FF5FD2B8F00229AD4EAD028345B5278286BA7B65371F40E2BD230291EE4AD0381F50 +AC7616036352098E82396266B3BC9CCF2A1CC1807A5155E7E44A1D1E9D3727E1506BF046AC19 +FC7310D4917778CCEA430C09F70BAEFC4626A9BB968DAEE2464CA415E25B7D3EB9A838A65B47 +BDFBFBA40F2763758EDBB1BCBF0A009216A276BE05113C2349C2D90261157D4244AC9BFC3E1E +4D8AE382AD2A5208A3BC2E8EE39AFE75C21F6DB85ED874CD94F84DD9B0936C4A60911059DBA1 +C54759A76A51ADE87690D616DAF90EC6E6107938F9281CEA83A794CFB83C1162D2C0DDA83B7C +25FB45554E70B3AEF60D739734698C1FC9D75A00F908363074978E0080DB3407B877745FB2AD +BF68105FE483F592E7C5FAD680EDCE2920EB03A4920D9225696F7CF08A1BA21ED4C8F330623C +952DEE255AAD32236027AF29636FE5CE6FC4F1E552A24ED19798A27B3988B910CC56199C1731 +2091107BA09C0B52622F10C0E0E314F92A778CBACF3D1CAD1E71D7519FAB40624A4AC43CE57B +44E946535CBFDBBB4496DD962A702C0ADC30D24D4F33FD67ABA9AB2C503FDC16D9F35C4D9A46 +6A4EE318B860E1582E0304F99259A60EB9ACB51D60FE2563E34E123BD11C2C72EA11F5CA7494 +5421683AEED810045CF7766DE071B4EF83CCC8B61863857563FD5C01FAA03C62789F2E2345D2 +99B0166062C5A017B9C5AF5233C0E034E218FD069973E25ADD360803819D7BD21EC019197CAD +77CBF593EDCDB7308D7CEC2BAEE8756E6055B285DB5907403A7F3B3D2E608E68EF5207962B80 +347A5F997F74D07B7750D22A8F94D8A0B0D32E4321CD3340F299E79A586029D67B1B71EB669D +B60E54035BD656C81C86AF01E6E4B9FAE571C3C6538595A40CB5E3458F0006676594DF04281E +B36FF923B8478134FAA6D283AAE6DF03FBB28C5103D0732A67A71C9188CDDD2BA91EA876C30E +BC34FD6DCF23F1BAFD1A10A2733D373BF91BE611A2700B05EC171D0876729EC9B4DC3DF554D7 +27F6A3179691E32B35074F24809C781BD2AD0A3FCCB853C1AFAB473E732BBBE4A3DF9DAE9411 +41559C1A3957AC79F630E54E1011DBA44B98A01C9A51A0EB5F56E188400D00C99F35D0C2B6D1 +6F135BADFA876B9912B892AB642A6796997C0F4EA3E72166A09AF19A9288D567AD3181433880 +8CA05DB296B16FCB345877BEECE863BFBB39C638B65AE99AA3D22A2991D5622F12C25F4AFFD0 +0A5B7C7B0A0B6C5AE8B007859DF034345E427095C5227B1CA600EAABB6591B1016318162372A +6B07B5983A207A87FB2F6C8DEA570F6359893BD62CB658BD440E3B4752F8598BA358CA74F267 +9A97F5DADA42B58FE20559D1CAA4921ACFA90EAC8AECDADEC25099C571AA9FE72136DB1F24C9 +C2818091C6D3F19B9AF5D52B52BD76B8662BA31C0CEBA2B07527ECEC7F3488C83348528321F3 +666EF537B98960F5D0BC4BC68516AF28B74C37716F0F7591E7F42C53E1AEA043293DFC1A4346 +641E5A782518A21CE4D4207B0486DD4E80A1832C61659B4534D932AFF75C3D64C276DD8DD288 +CE130BC9DFBB326A94C4BFD2085546C6878C925942B7C177F74A799A0789338672D0ED2B7F0E +2EE638CF5B1DD3B8C77EC07B90C34088C0966043078BCCB15FA8CA8E82305E7D08AE3448468C +E7098400F0679421AE058D20E138231FF33D1F3407080C82D546B5A259A2A1ED89E73C053959 +C00EF759FC519051A34C369580BCA4AC156A1B41FD292221FF62334AF337D0FF8A9D24FFE5AA +CCE4264C8AED6774178066A1075566AA1BE91BA8B99535A0A81A4F8C4C25D5A00138916B3A9E +FF684E035502F940D97D7FA86601F131C7B30453BFF49A4DBA786EA87FFE0AAB0450590F2C47 +7251FB51FF9129EDF5611DBC5E387F3568359B386058640B06FC4FBBC0495FAA9051770D25BD +B2A6056831B50356C5820FE4488E8AE0E665474840C9009624457C6D26597B7C381FC1B10E20 +F7DF82CF83994B4FDE4EA06EF4887A01E9B3BA1C6655DB341B70A7A1E8AD73F29FCE66E80530 +264D034372F97F358BADDDADCED355C78BF93EF9D079D1049840BAF237487F0AFCA4D68E6253 +80E539A48DE7D5862DD0BB81F58E9EEC4504FCF0530E1A0EBCBC8A38AA0DA51487C3574CB5DC +2EF0E4F8A4C32ACF92D57B46774C19F4A67672226857AADE0973D26CDEDD2CBEB28ED5CCECA3 +0482AB34E415706BE1EF42F5DEADFB758036C1164383AA988F229AC8B2EEBAFDD38737948A14 +2BB157B7E4EEB2A3812A2887E4674E402AFC5FD97406A39D69B31B463EA9A0C0713C25A3838C +188792584102629665BB76837D5BA1D400DAD7216209615AC66C1538AEF9CC8BE23748EABDF5 +CE78CE5A04B92456B11FB759801E7151423901712E42F01319B7D06E414EDF56AFF5ED88728B +4D6ADB2109AB818D81AB1BE0A84967EB92E37AA0CC2D2971A7609B588B8C60B05D6826F4FD42 +C3987CBB88ECF4DC4906ACABF6051189D7A041930CB6D38F9E7799F4865D61DF52D56311757D +8B58A6A3B54BBC1DF192D5ABD36C31A0A7FBBC9EEF779A75C97B92E969DE7D802FB37E1E46DB +AEE6299A42F452D52C481C2002104E3992A0E0EF9D09508CE68F2317053B7752EBBA656ACD7E +8502361B30EBC07DF94E0E10B628014B9BEB8D9C7610A364E1F89A19F69391A883CFB37E7569 +AA5BA2B79511A08A35D42A447B772170926812519F763911EA87FE881BA83FA635ABE5DCD1E0 +07AAC6C520FB45C7F8B4F33263202FFE53839A4378604B2BE4DA9CC8D27022A30E123D75975C +2C2EA1131FB418E62BD1C1047E9C54475C4EAD6576F702785FC4B1EB6771E91AB19939BA3DC3 +3DC9B06A29FDE881BE80E7B7B0F00447418F74A94C8A1F8BCBA270A21440838D1669BFBA6C38 +B1B3D4C57DD7B4587F380C73069DA2CEC486C63CA4FB279B8CC37E1210A69115C61D651753D5 +C7A48F68642CA3BC7EB6F9900A57F9DFF7469267A62FA49BC7AE5D20C7BC2CF12A32E80071FE +3160D4DAC146AFB25C7496B1E541B49CA077C9296E79423C242B8AEAF620E6E72D3BEDFF836B +5B13521630D61CD1D2C0B8357DB3ADB636940C0422082B0D2D811BB9653515287DA0CFBA8EBB +3F2A667593833AABCDAE59C058C06A9EFB51E719ADC6893FF5AE67BD797108B593CE303A6783 +7A0481E444CAF4FB3688AF74508646A02DFE1E0A3377AF8322E6C92F95A423F063BE7CAF49E7 +8A097A8D5CC0CB8052DE18CDFE29FA570C52892BCBB00A562F6659E33414F059F5D95B7FD609 +8FFDDFCC5093C40F8EFCE7BB087A61266F827924EFE158438BECB8199C8656EB8954ADC9164E +AD7E6470437D8933FCDE2DD53CAA393D4375DDAEFC05A00FA8734ED70243604CC946EE78ECAA +77F2FD62AE1ECD8FCC19A65CF61617455235279B9F45C8020DD1BB34ACF3F72FD89EC6204074 +F9AD3FBBDF7F861E2E30763E55DF2A247C867592FF526E85CA185F3A0AA9F9998CF23A541F94 +44E23094001B8AE8CC9D3867AD9289D4DC49A6B9FE56C2D51B6FA956DC54DB6B91579C567518 +D306BBAD0EAF730C6C26C87372E091EF2CAAC6A2E42BAD34EF43562B91CC6AF28607E434D933 +927F49280FD66888AED3EF659341996C2F9C39036511C57FD7E70BCF496C850128FD8F5FA389 +9867D58679F2F54C8FAFFB4F6CCE6A5CD2AA0B9EF803A7B11C8E8C21266C18D84296035F0DFD +3A1FB23E7127AFFC65386C3D06F4BCC13DB86C0FCD7D599EBABCFD5D5C7EEA1EBF94177EC38C +42A122B14F4AC38E8166CB351D72CFC4E67D9E79ECB8BF0C76A19F5F2E2E92DC7B26D74140AC +C678011033E2DC0EA33FACD594BA6A134785038A4B86F0FB1A49C1C38E5127E77CB27CAD6290 +FFA7468C07DB0E8C7813907DA1BBE15BADB3D6903F31BA567BD6599CD584A49CA8786AF4E03D +38B6D647C749227F1A366418CCB1AA0175242949938C8FEBD9019E871FE4FF877477E8D6F17E +A55A17080AAEABF22A2E4635C64E7E50C4CE78A5A53676C7A958DB4EF16096C078D10A1889C3 +F6850F29AD00F2FEDEA0CBAF79532C2B2509B34DA4B8E64FAEC5F8FB90395B34C3287003AA8A +66B59F247E7DCEBF4F5596052C573EAE9A4E0A21C9A6ADAB094F5693C9F8AB82DB842B5C482B +3560BDD1F685AB7B2598E45D3BCEFC5D661FA66272050B7E1CF6BA6E8087B63370E360F3B01D +AF6F856D5283BA1F6E2611AF496CE73BB0F71F0747D5B2FBC795AEA698C528F3EB02E5AFDEDA +7B9AE5FD622AB302625EECFCFFA27E84EF809EB9A721BE0A7526CAC8CB815DD2AC0855A0A5E1 +52D4E3F7B1452FC8A602610450E57226EDDD3C0F378A630DA61A14126595B66A6B31355B6E67 +426D6F759FDB20FF018353DB17B0E0D587253FFB93E791B006B167EB776B69514836406A6111 +10097441B068B27FB0521DDC19D913053112C95237DEBC6FABC2BD6E0931906BF84F11CCD816 +7C3DCC9D5469B27A1432DC807F6D3AD9FFEC46E0E7EA17769C0865FCF38F677607A8663EDE3F +F50FA6E4C2EB076AA38A286223A7037BA3CF2F838A71BE18C7AA904E9E455527ED72B72612CB +513FDBD887B426EC9CA30D860B533E9C70C47DD791FB7A5EB35091D5746EF80DCE54C3F24F7D +59DD7815D63EBEE0493505A79E9C6780BE0AE7C4E02F4A468C1FA87B68D82A1927AF29C81888 +F18D9F8E88BE5C41F97B2376F6FB403048E210BF21E7E114B800DEFE005F2978422080FDE0B0 +72417D9C2E22373F2918BA5FB5A6019C0728E7C481F9BE6B470B270166A68AFC2B6D44E4B7C6 +47E660A7E6688EAA44362E52F4D2A83F4BA05EFD7723C22ACF78B99704A5292AFC97176F37AA +9E553176855B6420DB8F19BB1CAF05661B53B69883E9496CB067E5A7FCD7E253F20AF2C18F68 +52C601012E7D58303767A84DB5B8FDEA8D25BA3DB14E373B2099166D1757C1F17465A9D98E41 +436A94A9CB9CB1FF50C4FAFBC5BCF2C9F23E3A03226B1DBB6F1869F6B25FCC7248523C832113 +618C262F1A0E96AA0551065D959328E04CB2E5C8D43CE0AC3158681511C84DDA28DCAE8500F5 +2441EEF90AA6CD00C27CDA96829349ADA2AC887AF34A0FB81F62F8BB1475EC61AA39B75DFDA5 +49CC98D4D39FEFAD3DCB540423DD61A69819703BA947DD8093139EF4655AD3662EDF8937F204 +3D45801B7033ADBD3FB4348BB8897DBA98C26B01361F223E5FE2E526F52C6374310DB2AA5824 +E6616668CED42A95F69A32B518E67BB9DCBEE9C1B2C5F708769F2BD50C82D3BDD1DC712423E7 +B27D6DBB4E038267264D66C2A07769CA8A97259C812E77A8A8A40D6E71E2818F4141F807B043 +877BCB44E4A189DA4DA5E44B2FC1BD2E4C0F8440ACED128AAAD351CF1A6A9652C58007250FF1 +1E9B7401F69C09E90F5DC5B589EF9F2D5EEF168D9DC6243AEDD912EA18426441C146CF582B08 +769C9583A8515B650CE0E1045F09D88BB85F3AE60B4E4C384143280FB5DCA6AD3EDF4D4660A3 +052E372C0601DFB55F5F3144F2BA3601CA74E5D2473ABC31B1D52419181D301DAF8056710820 +0B6990BFD0D3A24B5362CA8EB11EFFA2F8649AD5866DD286D9C1352D7AA2F73C61510D366E1D +DB5EF5B4B19160FDFB401F2B7150D2CBAE0D944F0DBA4E3058502C1418A7FA14023EBF0541FE +D67FDDABA2C63CCC53DA8A60121C1D12C0E752814638C0D65FA3EAAD09945D94DBEE8253FA0C +9C3215FBA6277D92FA96FD856D42F7A36D4872CEE3970176B6BD8F8BAB7AFC61642558D9F9FE +2724067EC02A2A8046EFCA20F9190D4559C30C79EF1A87D8707B84600D551AEACB47024B30A5 +F04A694C9BC16F5EA10A262FFDD5CDC1F08D627AF7C62660F28B14E167054A2FFCB993F41B0D +D923A31348B623B67BFBAE091A74101F0530B260B9B9884C06E9F51411D103BD207BDDED6C21 +CAC09146033ED8BEC767220F00839187F2FE9D04E79A79DBB896E348EFC171F86DBE599C68FC +AB38B0CF3D091017802089187536DD240AF2D22F8F625724DAAD05D8A84BF859F81E5ADA8CCE +8AC43E4435882878C1591FE0A1BDA8A4787C57120DEBD28BB93AB8B0730840A34B821635A0F0 +6249237B66BFE7CDD59214DA2BDE643425D53DB69032609489BE92BA6BE9C6B055D65F483C72 +CDA763FB2B4B3261B5C95643A6EB0A07C95666028419FF9627147992E0D0C604ACA1CF2F5985 +DAB7A4D49E1D9A1C0B510669B13106C0D0D00560510C6C5FEF2C5F21F5618F82259D289012D7 +705B0445D8209A8B24FE4D74A5C853B104961D4417D4C9487592961867C651FF295249B0CCB7 +54CBB35F7F85773F8907CE5DE407548D65D341BEB2FA53B1AE41CCEEC31B7F8CE7B6CCA80632 +1AF3CD076E94502C475CFF49ABC8F8189768BADD6CF250F9A193E1AC6A896CBAE1ADCAD21C1E +844E173CC908DFEF12F1A0B2F3F8428AC791D1F93A0A0025B94B05593C90A5F298AC0C571930 +D4152408CF4F9F625AD0653F85F728FFEE7B5A64B65B38B9A86544C4DA0D9E5830D1676FBCF4 +8CCBB417CC9F7F5F7796101F5334B153E9C306435C13F4BA817ADA12A989CF8E81B606903E0E +45993A4EA464CB967119F3F8637C2D7534C53A2C8224551AF459B53D5B3ABF6DB47DEA80934B +D5C96783C1830350E6B9FE2F58EBBB746EF8289B14E1B0880B5487BD9620F7B72059545BE97E +19ACF2931AFB24EC141B2A94A099F1CD8B5D1F3117A4DDF829BB74B46C086BCCE62F08BBCC0D +74AB0A40AC313F5C576C0C5C3E44A4EBCDAA78B22E41D4730F3EA7736319BEA352BB5FDC9C15 +C366AA5EB40F50F48A9052BF6F82DB5920010D4F5C99B648A29B0107F677ACB30812047579A7 +31B025CFCE8584C16C9E5EF4F5B73FD62D37979964B579C80AB0034ACA83603AA38E54FEFD94 +65D8F1F14DB287973A4E64CB751823D284FAF75EA64D3242187AD7FCE383057C0A03C2751336 +A98DD208B0DFAB343B16075D69D87ED4163D6B78C2A6A923982B4AC04D69E9E6FFC0703187C3 +F044B8F2F4E223E3E93D9514646B5F7B0E17A8FCC902FE7EA64FB9ECDFA2412C3E482539C71E +D0B4DFC8F8927A3F6857633B68D9059BBC0BBC1FC3140D496E66BDDD49ADB2FDE0B83B8C88EA +DEDFC2CA6FBF499014CAF47586B115B200AD98BF1AF9B9518B898E66413EACCD0765C5BB79CE +35FD6B773F790DDEC496F867097739075A29882427826A574BAFB1D4E77A8853DBA55F67B266 +904B9D88CFE80335CA9657C1743E633AC19A4F34663099C299B5B450BD54C7477971FBFC8376 +872764ABACAAB2AB5DFBAD1335259907B0B8EB937890DF9BE77D57B4708DAADCE87FC49997B8 +7E3866E0E3DCA42C90C80917CEA5AAE1B16B9E01A7F36C9F615769254534A610A60C279364C1 +F27D13203BC561E1A5E1079908AD9A3E535593E861BC400C61B6A600A7D61C7A037E4193B092 +8E831D971AB5F90D8803EECB340CDFD2E392DDC7B7D75D055B1E8ECC39A640588994D90D815E +4947A4D4CD3A3A6C7F59CD8EE47C9FFA338A4886A7522835E400A82B869E6B5E10FFFF9AD4AE +D0E1B83FAF9FCB4945E5F3C4F63B1BA27B06E491102E17ED72CB70D9D0911E6D45895CA3ED35 +FE07E6E1DF944D20CC215189E0AC407798F22138738FF4002A9B0009838D6B5A23499F16EC7F +7FE9DB3052065206CE3941755A84B4270BCCC4EE147ED4EE9BE9B595DCA3AF53D8B8D1187895 +9D85D9AC42A5A0C8EB2AD4D289A5EC6E4338422F36CE2496A383A738AF92D3AF777EC74CFC2E +AB2FCDBC192AC8D3F0235BE751E7DC00759FE28FB1D11E93A3B48C3B103F9672938F3C497D76 +52A984ABFC38315BA5D909ACE603FA23CDE1A7941EFCBE15AE5E8D6EB1B03D681ACF88824045 +FAD7BFD2AA12ABA300BDB8699653D0B850DAB84D69D3BA147340319728388A4170CF09CEAFF4 +5CF5C7A1F7D0D2E1813ECEE4A6A26F4559C0B17365C5ADA32232A19099424A334936CBA19FFF +095AE3EDC0283BD0C3047D8B95763A72E8AE8D06CBD10C037F12E082561C73C1C20699F71051 +CD43D909BF4E326E587EDDC001DE061E8D91B53DCFDF6A0268285284FED37D0BCDEFC3DAB278 +4B788FD0D7CD074F12AD38BE333F1EB2A66AEC3297BBB063BD7A81DD3651232C990698A9B27F +3D2D88D4A2685EBE8634CF298371080FBDE7B5FD7E29D37245CE0B88F4144978218DE2674F08 +EE10E46FBEAB628D14F5CB523FA4B6AA946AE8DD8F5EEBC002ECB68594E9A690C595CAE5B898 +277A57FDCE3813A2E820B95C71BE41CAACDEE97674A78734A724BFE3A98C692C47543048B2C0 +3C8980B63DACA90D38011D41F16D3E5BD74C73DD8FC24F3941C52A2BAF32AC655C075BF9D3D0 +38003434DDEFA833B670D1C4AD086FDFAFD5B5735B5FE2AEEDB6BDD5E05639499FD1E5E94FBD +D2B295AB1FD1F380B387E33BD9407123E3F7473B3E134975A192DC45FB8A0BA70F2EAAB7E35C +7375E96E5D0C5BFBE83C02BB8541B9100A3059FE9B7468D72D9E8CD63DD46EAA1C4028D6392E +E21A18439055AEBA4CA6785556BC91CEEB714F8902501D6BA2BF147C5B790A358456A85608B9 +C4F2167C1DFFCAE0C64F7B2992CC43FD09345998101ACF3FB163E06C2E13E9EFF42C7C8325BF +9D5BAF24402A1B295A26A3E4B9B22240847E9DB03DFED070ED457A6980089293B45DED44AE13 +9A1F57BD03395FCEA51B3A1A77A2D44F2E1DBA43BFD810730CB81A3F3EE2D1FE99A6FA2FAE92 +197E89B32BF2D6E2F2A00DA08BD3409E92A484FC140C4AA7B4A45EDF0E40B7AC861B37AC409A +3CF85384E9619C0AFC879531F36470773ACEBB79AFF4F1EEC3E2B6800FAF5495FB6A96CB3E96 +03996463ABB60F6DAFC9BDF968A2133D986EC711E838901ECDE0EE38A1C0943E885AC15F30F0 +230443A530A65ED45A8BAF589460B00F5AE37DC5F432743FB62A08327AAB69F63762889A0E30 +0F16F9099C733A34A2CD4F0AEBBB9810B2CB421326CF49CB82CC53CC044BE9F52F793B9CC0B4 +F6BB896E26CBE82B76722B852107C42DF2FFEF102344078E160995A9BA772BB75CC99D060D82 +CAE9DBDFCE5BCD2670FC0C6BA90956E196A495A3D0B8ACA80F01D2AF880B4911316EC14BE8AC +9B6946F5C06EDA4A2D5195214367728D29CDDF931F547F065734F5541AFD794679D971F93E3F +CFAFEFEFDC4D47ACCC857D60E9C876A9C15733AE9E7E71CE6467E0C17645145C99049420E9D4 +ED1CF6C9BD5BAB9265FB4EB197AE6B0EB9F4110BEB8EB602A9D57CCB4018D41AAD0BED13E8B5 +4B4E8CC25F8969F1DB633A02BD6EC5285F7DE1A5779640FD0F2FA37D4963FD9E679B8E688732 +857C5AFDD94CEFCB417EA143E585154480726CA2A2F28D9DDFE028242140B68A6E5A96C0AD1C +F3CED38407E583DE30D10E5172EE82D8E9BFA276283200937E614548C80FF9649BABCCEBC824 +33D9B01B8413630A304311FA5F00A578C8435CE52371B5C847B10C6F0BF1693C5E69B0D2E47F +854C752AB93BDE194090066A9F377C6FA9F1280CC7D32293AF98E1C3129309545DD9A46736E2 +563A40B086734DE8A6E55C67BD556C26F33A382958038DB2A29CF0CD3D31EB1B5FC90C4D1156 +559ECB11B359834170E45F68E9043F01761BC8E7CC51DF841A50AB8CE89A25BE0082A90CFC0E +4FDEBA09192BB241AD853DD1651F63E5E0F5E49E42B722FA864447CE8D0A1468CF7712A50D06 +77C9F75CFB8862334FCB0B5CCB6376BEE93FA0D4133047FCCA2C16924AF0897A8B4410E17DAC +D37673DAA4D57036DFF9297D6273602F5422DA19304B65AA591AC39226F3241923BD98531BD5 +E71D275CEB0E1E6A7DCBE1CDE1DC30ECA8309E182FD2E7FF237B7C7909BBF203100AAD4C4AA2 +5ADD302A8CA49132A528BC4085830CDD4D09697B91F9588B9AA59F1F3A9C7192EB2DAECB3E1E +62488498A76C52E968872F91746B1F1644CB52EA4981D9EFE5FF99778A1A831DE99DED80C0BA +1FF48BE01628FC80771DC8DC7033506767A50A282F48F4A273216AE71174C5AD80691F403381 +EE846067BFD5343CC023980E1E9C820E99DB2C19228D1F3523661885EA96C5613E081C78ADB5 +E34FC586B7580CDD317333018CF398C27260B822F222F855A561F15FFEF7B654545B95740DD8 +BA8F96C0712257CB855C59CFFD86F49C056059EFEA1ED8D9D0B5338859090004A74EAAD66E20 +924E893FF6ADC95330C65C7CA340413C5CE8369627AE20BCF95D9111A6D72F1C454DE1BFB367 +FAFA326F7169E19D96C3D5523BB30377E7189EE6EEB34F2FB5A29CDE837E260B0FC6B84BA391 +03C5A58E74D0147E391A6FA84FDF6780C3655D7D977180121A3DA58F3C381D7758C2797AD16A +582D6E4DD07BDE99792726313403360045523AB8A1E4D6E28BE48A1FA900C7DBF876FA304677 +84937BF52673D49EF45D5278912990960973382374D64C139AAAF334EB3DD3DABCE1CB3A7523 +8AB0A8CCF092810D4AB67CEE24BC62BA787E71206163873F673DF04E1DA8EA6CF467BBA5D3B4 +45BA8AE6F008852E07C8EA49FDA59DF7A667F29FA2C195FA4A3E9477564B4A9EB1DCC4FED9C1 +604A8137E3F1B0984D40C6BBC94F3039CF9E72CD7EC4ACF9D146BBC10DE59636A10B5448FBC5 +9FBF8A0CE8A9ACF531EF79E4E31128A53DDDDAABB87EDC1DE3BD0853702E62FF79C17ECC6499 +7AB050D1FD98D60D30FEA84507DC05E476D1072E014817F049C11F24E32887B6C4F41BC82205 +43B5AE8DA39FE7B2EF899DD5579D175329AC0F0AAF240CFD6F8C67778A834FD2C0E986A03405 +93FCFDCBED0DF48E3E2ED49962D7A48F7DF2B6F57EC937ED7768308C79BDC13CD25D2427D21B +19412829F1800DE679AC98B8A65898F0B70B8AD42ADD166899E7DF45942155599E97E2075255 +F62BBD34507CEC1EE59148616A967FDAAFFBA13EDC14961F347653F0FA64F703203536771C55 +6105BD0A24D7FD19D7F6709C3E57BC6D8DCA1BE04C0B94CFFE9A551D39B9704C55EC91F7C9CE +FCDEAFAB30BF9C37C636B0D0FC6D79CFAF77DCC0A79288E02F36F154E08349BD159B8E718086 +935D7C6CC58EB2CD0FAB75EE3FC8903AB7DB8EB5F9F648E0812B49A6C8957ACFDC76C264CC96 +97A210F143A4A814AEDC686E865E193ECAB679337984545E64419DE277E8C3E8DCEEE9176837 +072BD1C486C8DBB7D5A93ACE8ED3BB47D3D76CAAE1CEB1F7F465805A32CE787F8C8E2259AD26 +441DFEAB35B73110AC4212F9F900DE41F95FBE9317C26E6921F6DC92F1EB5A061D26C36B13D7 +B06D83BCA19B991861B95F2869D175D683B3E659D66062988AAB768F355D7A3F21CC0717F71B +704C37362675E90C5E1132381AA78D54EC079F2F15D8FDE4660330E52324CBDAA06C5456AA2A +9989326A79E2BEE8D77007D27430D0D82882B6C775E78F1324378B5DDD92D0E18AF965585BE3 +299C03CD4523FE93748A54FB754B353AD878250670771B6E4F929D135B4FF0537AE1E6914B26 +DFEB032BDD21B937485B5B84388DC8E4B60E40B93FC17AF9DEDEAD8DDBF0E66E59B3AEC8D14B +3C2FD2A8C551494BE38FC43565A158EE6F22B3E9B1EB943FD6F6CC0DB5E385A35E9A452D5F4D +A2E981797C25D27D938623B02252B462026210354BDA8979FE64873C56C966B5493D908005B7 +C1AFCFADCE86FDBDC40CCE42CD8D8CCBE4C6DF68C1518A55FDD32AFC87034FF1B8B1D4E5ECBE +987E903AB66012E3838BB884CF523EE140D8956258A990E17DEDE89156A68E1156DAC960CA60 +A014275227879B0F41EC04AD4B921EE49C5511AA509F0C4E588E7B8D88D42FB156124A174126 +47FED4317F69F5AE4B9740936508F246CAF110F359EDEE84ADFB680BE054DA58D9FE89BD3E35 +5781FE86F4F9896C1310F6F95C9D73F7F5E865AB2024E7427784AA5DB022360E5F36F8004885 +184B6126604BD6B6669727DE42C6C1580056112F35C207E8393A37FFA857E55F4A450A6F0AAA +AC69FBA7EB1866045C1803FA8A783BA9B0EE0713B5951DEC2957706E6F8AC8C6BA8E446A796F +9A6E408CF2669E8344018507C608BB3A4DFCCE03A9ACEA75B1CFD83A2BA5AFD709823792FFD4 +3B6897D04C39ACE261E8DA9136F1A1B1AD3F9D573234766A851D4EFD45655B1DEA2387CD1A71 +47754DA4B7744AD16D38980B6995C555233659F75F649260DA6137B3120BCD7FAC6FB59198ED +0D9A125E4248C445DD99E93FD5B888FCCE90C5E8F5A8EE05A7BF5FAAD04A646CAE3FD0302CAF +99F7E365CBB2CCF1E76CB888F491946A0949363A539F0253F66DFE822777EF30D6776F3D79D0 +50555DD455AAE0708D03D0162C598FB363E8550C8D2DE286A5B8F5F603DCCF7E91B820D68E02 +98C1A5C62D743D31FF10C6AE1092EA7A93BA01EF54DE98243384E3FEE717F955632D423E0979 +450D586B2C3CC9A0E67B2371B79DD655DBF9873EFBC032B68563A79C64172933871D692480A7 +6CCC824C1BE6E6936D51B73FE0D085DD89C472E861B14B9154DC570E6CF9CCD92284BECCF749 +A072F7A283456B9AA0DC86285A158BB7AA41B5036186C8E7890F79DDBBCD188B84FD4CD0880A +50E0257A99A183B65150889538A70A80D1E3661C7749D700D9E5013FF66F0ACF050B436665C7 +D9E0CB9C0417F8FF61F9F3E32F029FDAF9414552F6B954CC2F1FF77CDBE60F4E757BFE77C87F +15BC391E4C026D0AAFEC2433CCB7C0C7D7D3B1F73E650359D213D4256BE0690CD8ABFF0F2A15 +742BAE61AD2274E4C369EFA39DE5F21030A4CFD813DB8E471E8B0C7339FB8CE67CEB8C56573E +74B41489C5F45B903F3A2DCE5E94959D592944E0C0DF2BAC26DBD7F7429E2B8825FAA5B8F0A3 +54CC1E4087235B027DBFAA01D08A5670FB0CCB77F3AB62F5919214640F1AA703E28FA3EFBF0C +E39E1D18C698FDB852F28D175C5FAAFD0C3739D5FD2EDEE896A1EED1DFEFFA2BBB8AF002F249 +AC593667664B9CA5AA43B8A8D1AFB890259DDE5A1CB46AB4B25D80EB09EA256049C79ACDFEA5 +0D3681116D86F87CC1DD16A8E8401453B66E9AE1DFE7C442993BC0D7603E5B01185706220504 +578F5F49AC3D1B92F5926E6AFD12C3DC061530D7D518584ACD0272A1AC649D276E451A4EA3E1 +08409A76D784A204E440728BEBA57D147D6AA9EEF365CC490160FBE1B2F8CEB7CC18848512C5 +6B1A454ED79DEF423BAA36802C9CC8AD074B30058C5EB90ACFEE549D9759C9DF7E5970B829C9 +2C33F0FC9038A89FBBEFA2557E4FD3E90F5C1C06C63FE801B2D7BEC2FE51AD5874089E96520E +4FE3B2702D83F0C9D182F100A588038D573B9FB18069722083CA87AB3E35945966BDFF4D96A5 +25A094513CA136ED98A5F29F1DBE74355F5B639B20ABAD2574EDE7AA8C3ADBA35A87E06FF39E +BE86D3EC95F34B5FC77879EE15429BF2C11F13FE15A873F629E86D3397FD4996449453C68A4F +9E8678766E05D239F860AF43F6948654A8E0C79126DF4DC49B0B01E0DA9616343B4C20E91FFE +48A11D1CABA1DE7A7BDD96B2D1C5FBD22BFA36179E1547281BC7BEDA358A569EAB67B650A7E4 +3F85695ACD8EEC1E50B9715160245C04F1964A519A9B0828C5802E32C10DA432C36555BE3305 +E1151513CDF16BBF678B6B5D2BE4CA8E316035D2F81DF28CEFBD925849045EEB729A8257E0C4 +AB074908A261690CEC36B02536E993BA3929DE1765837A06D65C11E609C7089553F0027400FE +B89A4666FF44A1C5C9C641A2086301949674348CCD1DDA7741A05E169E9AD16F43493C0B936B +F158A64745AFB430DB1AA35A9BE9F9D37274404F4398A9BB3FF3FF0C6B48D017A990048FD94B +92707C544AEBD2BCE6FCCA3466E4E8C2117E627E9B4D51982DBF4C061D1F633D9950C5DEA7F4 +B797307496AA5458022E67AED070F54D560456C4F4C3AABB37D5703BDF432CB7EA7E1FF1FDCA +9D4542801BA65ACB17ADD58466926AD9CDA9F057B20D8B36F2DA6DBE8297671CF4721482A60D +AC674BCFD2F8FFEEEBC7FB680A3881E9F006CF5E27D66AAC36E119CA6B18EB646EBAE3DA56D3 +A4099E1E0F8BA823CD9F31D107FA3419F281E4FE8B3F1EDB57450D771EEF2576428293B1C44A +1587C0CF0988AAAC5E86D279113C978FFDC527AEE312465A810376808669FFD5D7BDA5762538 +EED62A08588E23AF20329FEEC44D18DF8C8746692474154410E9C0B4F3200CB2CE82573956DD +05DB5D01B002453E17026F0ABE16E735AC9CB4244CA2D3B996E2687B5D3325F1C80C3491632B +B307D40B8D862FE0125A5BB8F300CB781E20D29B77B902D5689C9B9629742D2F8353BE54C163 +6FFE211ECBA43356B6F0B532049D9018BC6A9067F0C3826747A99699DBA985B37B772E7E7DF0 +EB66D2B913A2138E0CC73B827A0CC3033027AD56B5269699A3292477D27A8DE75F728912B33A +1576266FE0E03138445018435A2D8B849517D90661D7D483ABCF4B9AA7CB91F4D2E7940561FF +774700077925962753F955B991061902425ACAA3E23BAD3311CB9BB2E4EAF9F06B594CB0ABDD +9199B455F4E906524D2173032FDDCFA5BBE4A3DA745F9EA3AD849A55C495BC644870A6850C5F +6E2134E7613207D35C888F8A79A87D2B94F9D4DA675F7963E6ECF4887D757368EAF64717594B +F16C2DBBE0803D7BCC2D383B670406778031A9A0F57015AA045A82BA49A09DFF3DD4F7E480E8 +C725497E92ACF24FAD6113F7D207790C5960E283F48B400AD8E82DC15F5F7CC8BE6F5D96721E +D73BC6DEC1406B1492D468B671A726303F86ADA6D3DCA923EDDE86BA78CD0D142CC60F75CFB8 +8EA296F0D3082DF2862A73BAAD2443BD59D3FB42335B888D81B9406AB8C62B821F93F0604B97 +444B8596CBDBCE6EB97E7A268056310D196510ED6637C56C5C54A554E0F0A1B719A07A57F64A +50979BDC1D38926A41B83D5071341F5A333A22393EEC58F7F38B70C885BCFDFA1B7FE2F115DF +AAC81BDE36AEE3683209351F466096AC41042B9F5AE41A41B498DBC60E74A92DAF0CBBFF58B3 +2DE54EF1FC0AFBA8702522A995751B565A99E7ACF7450AD42003167F4337F4352580CE76ED03 +766EF0050A5101259380DF8CF309E768D92CE01C12191C3359FDBAB7A8E5E142B11D906B478C +815A7D68B9AA95C0D882EF85B015B1B5BB8C156DAFF21CF84BD400B0C05AD136A0B8448E120A +586BE304687426E090C09DA1256C90258B219FEAA75BC6F9666683ADD6EC9CD805106B4C4A26 +F857084944AC7CF6CA81387618A368A1F652D6BE4B1795BDD12835827E0408EFD13FD77668F5 +271FD4041BFEAFCB1773E74887E2AC164AB1F1030B295C36556BE0D1C45F508B2CF2EDC53BC5 +204C0A81F67A74F727C36CBB91565893201582C7B329FE66DDF5791221B1B69FCC57C4532836 +2704BE9BE4E56767C640B643059A726BB286B0D8BA0269318CA374DF3EA4E921CB78A1F72D4B +930FDC7EE31185997E7BC9D3AFEAF93F890BC83C479C6632547C92FF05CD69EE95268D774520 +E45465471E4D97D1F45E1379339FC5BDD45C71983E763253FAC96B9DD965DC561879191C3ABD +8E89F50AB1F21C3C9AF1F463EDBF454D7E0CB1BF3A2762E61ECF7E2EA417265ED10C24228D61 +CB4074EDAD5EC5400A24594D311277794697C813B45BB7321ACD3E2948C11C0B2B9706A884C7 +D6E341FE951779595E693E35548C6FABBFB80EDA2FA25731067CA5CEFBEE9723B0FE1C018CD4 +1B961581EB2A0DFD24AA90D1165139079B6480D0FB0469FB9BD4F4FCA580380C09720CF2CB0E +D2A658BB4485D451BFE21872C10CBC6419B8807EEB8B4E6BAE555C261148F16D44B24B533378 +FF0C87B81ADA7A1E400273578942C241609A4C0F0B3EAACD685A6D8F94B2EC1CDEDBBC72CBF7 +75CDF079324BD7094EFD4A1AC85B39016F44DE2A4638FF9CEC9B0B000B9D510AD6A4C9C5ACDC +B00B6DFA3371D27AB457CD9F9C82E014DB7BFF5F20A320921D055C6C5C6D580D3E610D6C354D +1AF5624AEFE4244BEC0C12275A02BD52DB552D4DE27A149816F79C00DAC6F5C6F05E50CD273B +AFE1E6301076FBD4ED4FBD09595926A7AAF7106FD7D6985F8210ABB61CB58DD2B5E63E713B41 +0EBF300B34F8C23223D2B2C81B95524B25FC587CAC015903F9FBAC9A78D46A87CD8DFD339D6B +52C67D2EF8CE49334C743ADA39F6BECCE5A798F3EF1C47BB92A255C26E1C7EA1FFE0E1187C8B +352E41CC9A1C128EFF4435759AD9F2AD66AAC2474DE2FBBBDCBD0E079CEF1691BBE349297144 +D1C0544FA0696E241B6EBF8975E84F326432BDF1D96BCF9DE6B905277A9457DD22B5DC4C6BAD +8F4E821911AFDA324A94B248B5CC2D6B31A9E1AE1F76A196468099C204545BAE02B3E80BA8F3 +1ABC387C578B84DAD7E4822997CEB315B1797F2A7DB3A6B4849B5DCC2E4B798E07940282D88D +174D9BE1EDB4BBA708266543DB8E69B424E4B60B53E9424B3F4AD14C50B1DF1E9054BE589851 +C49CC7924033D43701987467134AA12E663969F8F3C266EF2317D4F0B010B7D731B1AE12019E +FDEFF06E62266C01C44B85F694A42B2F1E293059D312EECE11D18CCD45B02496C9225AEA2D18 +3CC197D3E4674689FF64BE4B58FDBBD9E08C4E6AF226C795287CA92517D204E8CBD29AA7F0A6 +86F01439C2AB4AC5C175E7C35E5BAA29F896B4742EF037E71971E0BE92120F17779363AEF400 +F2CAB6F86CE143BEDEB9F367991859C46D26CDBA51F861EF1700A8AA2871976C1F12B762D764 +D058F077377604B5AF13FE0365E15267223F3FCC8621DC4D73CCC4AD782FB7622379A999D668 +19145A9E528D2D39E706912BF1CC8106707CDA0D7909A369805708B3250ED4FB03C68D05CFCA +496B9B85B033A636D0F8E49C545ED9EBFB521F21136D3F4DA2668A4C7845ADED01AB40AF87A6 +89754FA9AF355CFF7388C45DC47E4FBED3530B5937EA566846362C35B6F0A11D1BE38B7F9E23 +08A076D91A1CED2AD7F7D434F78AF2DF6DC5C3D94EE0E20FA893C85F74C52B04E6AA8ACEE79E +E296C6F2119F775EA035A980096CC5BD7C0F104A8382419E196B32C60CCD4E8B87D6F5FC74B2 +626A7652EF8AE1680E55DC5EF5789B5476CF1A6484B8EED90780005DDD303C1895DB4CC0E8DA +08FC3479FF9566F5C28E1B4CFEA5CF36B5228554FD158EDC79DE795FD5B91E040397BDA6DCFC +14AF72EA7233F79AC0EFB68A023EECC3A49F388FE6B4C945964CB6A760E0CA65FFFE01BEB243 +61EAF0FFCBDD1F014E41793535D5593A19381F1FA2ABD02154EAB5F7A473680B789345C7AC0F +D10275A045F920BC21E8A89052CD11A8D435B8C1F5972DED3D6C86B5153EE0274E451444FDAA +60A11FD748E0591BAA0CB08AE2E663FFA4998EA90DE5C0D8235FE50D63F38A50D51640997FAB +EEA72D1AD186110974433A23472D356ADA14A478ABA09EE7A6BCF9E01CFB7504592016A46B34 +38E178475271F112DD946D81AFE41C17AB8249F0D811CFCB666CF266A73F68DFD3883E33FB5A +7EA51EFF669B81E5F7B88299B42C605C78E95AFFD364CF78AD4F03E07F4137BC96A291B7788D +437A7603821689722A4F3895A3E453E942BFB36A80A7085A0C006C2055BD6E18510ACBEB3CEB +FFFD354466F7FC944C3B3215DF0C3A8CE49AA813D716FF9824527AC48901A44DE44287DC87CA +21E6C83F8227DAFC3563F20C8BC78A4BB27C423093966C17394FE4F63B4DABDDA07CE5477AF8 +D1CD21F0A3232689899D6F844F2E3F0B37F72F671FDD508FB960C74ADD22B11B505FB78CD18C +F3D7297913CA0689468406CA7FE9041161F58C44FCC653943255D6766005D956E63B9095169F +58F2A01C25041F2AD6AE2C13C68AF377E761001C00C6D4690D17E86164234A33E3A7BAC22203 +A278FB87A340D7C22ED4C3959B2695C4346EC560D0E3D6757D0AD9042C493E16DAADD007F431 +EC7E81956506601EFFB0A9597DAD6DA3A7843D8D4698BCE9CFED01CF2A0D6A1D392D77970C5D +597A800E86637CA11DF7D4174F71F053B1C2863188FC324E44047962BD2A131057A01F14BBF4 +047805470C8A37CB35DBA4F525B0178EA491C51DE1556C0E0F8BAC0CF0FEABFF29CEDFEFD890 +021092D44C7AEEFB65E97CF68000C831AC44E3EBEF77FCB0ACB8CEF0378B9C722ECC68779694 +D471588AA4AAB5BBBE416E7B9E9FB997A1BBB216BFAF86A3EA464569B2CC528954098AF5D46E +5160A173F2A2F31F6CDBD471AB61DD5BEF7026080FB1718A5EE4A5AF3E60AC60DD8970F5E979 +8A61BB0E9AD185082CCABBB5D198DBEE7C044E97EBDE9737E6F828F4A3A578B61B0E08DF67E1 +F2C021C8A3472B7C9E97FF4B253465D3DADEEC25FEC7B0283B7F09E24144A313ACE8B793A69A +4002A2440DB762FC4ECBF69BE7214901C6ABA148A423E0C176A7FEEEFA6779D46DDCA9BA6CA2 +A7C872E9E07384E11DBBB75FF7B7DB54E95AE64631E30121E1B680A9D4EE60D898E8FD4D1D02 +3A238CD98D409D4989F87D60902E8F0B9FF01DDEC1A8EF64EA08159CC989BBA622B41A65BB07 +B7AD69737D907684B97D055D47780C7A97524B345412A025B5505A434F9E7E51EADD8E74C27B +CAAFFB471BC7D05AE9FCD511D56BF11686844D69B01A7DF9EA4EFF801F02100E1E0F283C3060 +F76FFE2E6419A463CC4AD0286D82119A9DD3943D48C12D3ABA640E0CCF1D19BC3691DD697537 +C912DF4D741F4B345A26EA6D47716EA6F66A21832400860A3C0A74D32F6C67E0EAC846C2660A +06596E1DD67619CE2DEA453E39D38735AE7AAFD876A3F7533AE181FC2157CB9D1FC8BE5DCF8D +9E6E414F512FAE4BD16F1E812E079445774C89213962CD3930FF44A0AA6D9D25019726373439 +3CA0EC7CA421F8D8558066C22AFD774FAFA702B041A38370260C64CB6DF47F800546D57F1ACA +80A544F53B5DE6E284C3A90F6223ADB68DEC0FFA1221C75C1737F45AD30B79955AA8433A6C0A +8C819CDA9C816970B543C8FA2A19E512DD5944CC8299016174D061B8E93D73A7B68A33C45E45 +F645B7998919BFA5EF5CF1D6B3DDA1E31EE357C03FAE6BFF8968E30CB5C5A9454CDDBE90D3D0 +3EE4E18CB3DBCF29465795584B4BDBE82EDBC5D9BFB483C3F601B7F0DF4003540AB79F75A36E +6796C647B59C1AB1E2AF0F85BA2831E68677BE8EF5538A3EF014FCCA94F29F527C81DA36B8D2 +E9148808A67DA19726736DE846DAC1BB466818A45D4A5513FEA54D27ED3A07528687F9DA24F9 +AD801D7DA4D46043D984715538C16710A7E73511DCA378DD05455DD802F130E25AAFF9B19B14 +467129A3324A4283E5E5938CDEEB85639E1A4C0B4CE1748171B45BFABFA153842B510A52588C +DD1CFE04CAD53AC280998FC5775F007303939DC9452F38D3BD231AAB239EE208E3941D3D1893 +ACD9691EE323C2E46E7C0086C3D9A9B73680A76611B1F3211B2CEA129FB43A1598D83EF7E095 +7B6BA52AEA247DE9230EF1FC2CE6FFDBCE35E7D52329720FA7EF6E911F64F7CB9902D34576BC +FCD823DFED49AC8F542A957D28C433D67C0D2AF47BB540E0AF3F8DA5DD1C9B9E6C772D3FF618 +AD13A97418F84987E39DBD6DC921E6ADC455C14D231D646745305832E043876E9242F2984B2A +64ADB9772F3EB54A342DA3E58A7B940D30FEC76895BDB9ECEDAAF535C9BCDCD6A3AC5614A360 +CBDECD12491927B6789CE498E249C3C9EA81201DA0A95850B18F18FBF02AC7B86FCB92E92956 +51602DB512B37DBF4F888E548AEB43B9E9F9F796676B4BC90E4B88427DF263A85616EF87E0C3 +AD5F7BF41817B7545A2EB9B36FC23D5B99DA0301BDB02E518455DA3EE8A8C9769B944B0CFA4C +A59313804D6908A4A2C43777F0AC38EF72B67D6A03668959BEA21EC15FB8E959BFDCEB844BAD +6729C8D95AE29D8A65B179B8A962947BDC1FB7C5B7769BE5F390793EF1B2C330D777545A755D +2C0BD9F2D6DA176C1BFC14AB1A876979BB37735C7C435A51AEF80B229061162A8E113D4694EA +4C1CCB85D522F1C52D9EA2866C5E90D0BA813A3E5426DB753474637C9333B2F5ADD96F558B2F +BDACB771D8D840923D6055047872FF68302391C488DD29CDBAA3CEDA325F1DF1327318033864 +65A43A713BB145A67624D1F250AD17B959F654593CA51339C4ED7B765A2D543D4DC2FCC89F5B +3E7E101E20A8C0B0E85DD5DE5291E07DCA6553630146E8548E84ADEE928E5C0DCEC33CC76A72 +7594A024352ABFB701CA1EC3DF8E01F63754AA84B8D58DD62D6A0B893CE81BDEDEB9A072C1F9 +59AB69F35CC3C873009776E3DF428ADDDAA1B0E36F9B6BA9E9692F7F63EF2AFC0CE52DA99B70 +5A4A1AE394ADC43D30DE59760BB745BD5648AEEB76BE6CD90A37E468F2E4FF8647D4526D9F24 +691EE33D7F6D0851BDC6F7B24C0963A88DBE1CDAF7CFFBCA04ABFB83FD31A1C9ACE0BA3413BF +02C6FC426C7B63C4464A8C67B97F5D34EFB42E0BB64C4D29A53D28F8FC6BC4ACC9608AAFCC3A +17EF8ABD8A808DD00F72D3436B5297846C0838B005675BCF9AEDE1E0C727DD4FB7FFA8361A0B +876EECE7421259ADFB98275D3B8DBEBEBF0D6A3B4E68698E649A9A1EA1383799FFFC6D43BACE +A3DEAEC24E77307EDBE38582F4D5263FD6B98F5804CC77044D3C706BB8D853D70CFCC2AFD32C +6A0FF6FFEAC0A0CCC474FD69B7A8FAFB3C8A30802BE0D8DF2555538C5900AE987D3F5471AA0D +392635EE5E7B1B6FFFFE9C71ECE7ABE4D140C57462E90358C6163A21A4AAADBDD5EB9D1FAAAA +460BC1DC5056B504905FFBF846072C07E3C646AAB55E0C64EDF7C7885F8732F4FB4AAA985764 +643DBE73E9CD0DFCE9C6CC50B6C5B90CCBDE2580738BC4BAD3E601811F490A5A49A3FFE888E8 +326DB17E30830D0215915C17CE6FFE3FE6ABB3A0380B7381DD6797FDEB6EBBF3FF9FB1A5579A +8EA61C8AA458EAB799B8425854E967157A28B8DE6F5CCF904A8BB92CA13E567FA7B150CF8C1E +E96D173BDDD0376D79C9365FB859E9A5BFA088B88FD4343158C1FFF7C0D5A2549953A5354CD1 +E536F1DEE41FECDEFFDD4E3E837A97C7421A9921B52DCD8FB2F2FA30CEE7D235C272A2CE6960 +9BA938673621BDB4B9C85B95D86CD98DEC52639732DB9A13B0B738EE527DFF3824B087C24B0B +0403273266C18620E81DCF67819D24361872D7FE1288D132138EE7527BBD289A228C3BB2855B +0F2EA52AAD3D3B7168B0F974BA7E4F7427B88CE20A6BEF486C8ECFE114152777FABAD71D97C3 +10EDC2DF7F9F4E716F78229F47CDAD95748AD5AF722579DEABA7758746E642204F48D40646C5 +458D53B27745D311A23D9D0C4EC6CD6591AD3D37BD8D70E9E731F550ABEB8504D3B1356590E6 +B0CAB8CF14863860DF6C2043883158C95DC0EF545A95E12071F4E6722799A27BFA6938E580BD +B42A2C6A45624949417C4001B87DE77EFF2048190029B069213970AC74389D3751B115A3D1AC +1115E96ADE5CE9021C087C5A3CF53BA8D27A2D9F01A8D8B0C7A0363827C26106F5ABAA9271E6 +B699D9A076F3B9DA7C9C5AC0A0D8573AB89B22B9DF1C5A0E212F7A51335FCD35952B94AEAA73 +5753C6D1EAE15000C7A48AB10286AF3AF5B130F3208C9B720FA1AA73491B4C08C97622FA040C +B71CD2DEF44827869F4F420C4FDA460B93C7D7F3A446879C356C4453B65C85DE2EC31FC1452A +0BC94793378BDC24A263667D44DD8EFDFA1ED8A2F55C115EBB73BCF7149BB4BCE95DDC0ACB90 +005F3007DD016ED13A05B6F391F03CC9FB2C26228AF925631252FA9F9CD09B0A72242D10E44B +D8D87C67B6BCA6843B3DF080B162EB44867B4E0FE7CF85917199E5EBE7E8033340761D95A6A6 +EB8E25BB444BF5324B12BCC9C70EE3BE72A05F5E350DD03561E9C49B49E0CE0DFC976CF14BC8 +D30D2082DC4000A3DEFDD9561C868B2221DD4E78A33DB9B52C81CD9C965CE61E886526B4CC00 +45B932636CAB17D8E42693DF4EF072C0B7BEE4A12A5AA7B6C90CF5B2C036EA2DFC663005AB5B +9CA83585A5D175C58AE81D7CADA2547CC707FD377F125CD87C123B227C5FAD504C9AEAAA323E +329211E427C2B5837172FA30E0A31B83EC1E19498A0D2FC7E5AA258EB8159BA310456A13647C +6D26A3F01CC61BE278B813933A2272A83C834492139A0150038CBBA966503414CF4FE3609B86 +D269D47DF55FD75AAD92EA150E81A47E697D949A03E45C7D8C414C5367A8A2F5EEB8E38449CD +25C5A01FC964CB12055C6B1E48E4879991EABDBC80FD6A7C2500E38E184B79919C20F5C8F423 +7E9E808772794F3933D766C8F551C00B4011FD061114D165E3898305B44D9875304989E6D179 +0ABD31B7978F98AF2702E66D10175F34133EEF5BDAC9798FD27E1B6D67A592441BEAF918785B +00EF6AB0B0111E7658EA6CE167410A20926DAFBD8B02402C6EAFA3B14CF1620D7FEAFF0FD977 +7333A9E98836A9667E802712D5432CFBA8FDA921330FB8217F57F55CC6E2FE5613D725D124F2 +49EF2A765468F167694928B4290B89BF5E08D85B681B0340CBF49D2DF75F7CD851797229EBDE +8CE0830A5FFC1F5EF9D3736F61260C74913CB80F7AFE623F788E8C10F7E3CC87B0D6C56F41A1 +E4E3D33055C0FD0E1229A8CDA14E65649F13A127792E6ECC2D43ED137A7B4BAB0EC3A8F4B901 +8D1814B0718E6BF830D773E6631039A5168E7A4E3F5605154021C2812393DDF57F45E24CA459 +44D813F79759019A258350CDE9B8FCB19CDA2F65425F125DFCC7B2F1B2CC9DC550BDAEBD49FB +5E2D121789973D125EB87E2383FA4D7B6EFBD60D17EB3A43AF0BD7AA9933352815FC013D0984 +EECD48B4DBB4E21B1021A9ADD7EF5A3C5FB52BE2A5339E6F6B41799879C4984530FFA4008240 +88FAD94C4845B37B0E471BA2700FB81A23F6EE52A565625BD8FD8F3E50B6E056948889BFD7C9 +03F449A987512F637267D7F55E88BF02C1D57508761F11F7CE2EC06C8FEB25F61DDE569DBEFB +F1241143BA536F141A780B59271B1AE74BC2B0C86CA2593E4A1CDAD4FA086B67D4EEF49D3033 +29B516A723347A41F062809319842DF8ED0EF5EA65814A29233654591FB2275F6C856257FF56 +CFEA9A175275A44207E8094518F0DCD2BDDDBAA73B22B3C92A01591D8FDEA7E7D633D9AC53F8 +4C4C5275FABE5A46BAA9B53FA7654F72CE7551304B8DEC152892EFA190E6B3B205837EBBED75 +5F3BE660587416491D72D187A29D5F13B9926C68F491EFF5F5CB8D44D537CB5BB145ADE8E1A8 +AA809BD4AA7B64A3E5F23EF381F0D964C61FC8CE41B3EF5EC12B56E3CC919372EB10300E6261 +0E0575409F2D52029899C2E88FFF3A691B57E372919CBE2ADDFA55204296C5BD808FA2041466 +120EBBA03A9791F0F0580988B708A7F79C09A5A1731047A4F8B06906A0F8CA78B11494F62DA2 +E8DAF0F5AEB9F6BCAF8309355F0D81F0AC70581F749A0FAE919F24EF9F700C0BA1EBD42526D6 +A41A115A3C2F1B2833B83154E5B5A2BBC5C95128738582B46F10F7B0499A3B1AA6A0841EE941 +8238DFD99AB5CA04DF99D0E5577D1D515391B28D77EC1A1502F25536F1066E2A1B221AD1214C +F6F07A743281D94AE4E6AEAB9E3F2B56A7DD700468719B281B9525BD46CB3D8F9201E4C3C7EA +F28CFD118FAA2FABF286D0AFA188E853D4BD99C37B73DF9FADFEF42B51CDD8CBF8937DDC4812 +F8E94FED90C9A1735DA6DDB691E599D6B485D69C2B2EE785FAFF35C10B76B061226C80B9253B +44EDFC0EB823FD0A7E639B28D15B0602D8AFB6784BD60F3A04A00B3AA1F10E8B692144089187 +5225D7A61D50DC62A118244E089F36DB38ADFF0BEAC2EAA528B60C5A09B977FB35ECEDF723A5 +0F8DC3D8108F04A18624B8A895C6898734D813B94A37F242A8854C5D98743F979094F94BE1E4 +403C54C1314DE576634B26DA95EBB2C24918BB13398BC407116B8CDD77BF2F3C23BF580C4720 +7BA14C8C5EA3ACC8A4607C53654735D1145031669B09E92227F2603E855E56DBFC26182957D3 +FF92854DC7CA266F12D898000FC67A6E63B05F9E4AAA3FCEA7FEA97BD24F15DDAA9BF6282BFC +A2D0A00DBF7B788C22258FDCA95C2468F632554226810D49B63CE026FDFDD7F3A41FAB3BD7E7 +004585FC199CB76E3C3AA87AAE019CCF3FEAA22119F1F342792CA3660B0AB42D6556CA0979B7 +75589FC33BF4E62A0F67A4588308D7C68966254ADD8E7489559D18665353BD7224FCD76F9F38 +7A97A6FF64E4EFE72F00495D436DD5D3BC48FD1EC68CBC4F40BF60091AE1AD0DE25F2AD74065 +3681F2ED2C53318777DAF99CA580CF77C5F4685821585F2C6A50348F4FCB380D2F7AECFA514E +4D964CDCEE733EF8DDD9A1CFC1D8DD7D84E7F4BE86F94FBF958D3986856109B0C571EEEAEB05 +711A2C20113FC645CF9FC45C3CCEA3EEE39507DEE88CDA8B1D46F1C209CEB09CE979C1CC5533 +D25FA0F776171DF064AA9C6778EEF1CE489BA18C8E32FAF37FCC2243B207517A1125AFE0B0C6 +6AA2CEA54A8732B0EA88217B06EB9A7E1A575368995C5DB35F359F0CD52A9A9093079414F8A4 +9129F8FA981558B8C27DC6555EDC23BED559C91DAD4C8CF904C3F80330ED82CA804BCCFA2E94 +C7EDB3CA44ECD3CC1F726CF997CF080DF61AAE278218D431A70FF3B72572FB3E2EDE93B70267 +FCCB95DD413E64804B5265ECDD41FBA10DD66A885E106114D4668AB7B7CBF29756F18595B6EA +215991C540F36FF52ED903B7BA168EBCD722DF2B09CBE2B8EF5DC62635A297BF386C00B445C3 +5E5CDEA3A05FEBD5495D0136939EF436B57EAF17BD5E5E2A0FC2675BA38F9C73D4E16F8C6633 +D79B6391D65A378C9C1B291C1500A83D960EE3B82FB15D4BF4F931EAE9BDD461E1AEBEBF43D0 +D90BD1851D5A5C0F8470F2438AEC4A81267E089C1E88C7459D367CADB5A7E58CBAC5DDB756BC +AD9FBCBF51B9424B82D27856F233D2443CA989F237EC4F85E3786BCD19FA9469F95891650AC0 +B5AD3F3BD9058AF24D18AE06C9910FB93D12A8FF5005A0FD51AADB861B327910F2A20AD81CA9 +EB1CABBA37E7DB936CEF728888F7B614365BF75B999B525CB3CBF0DE85E2185C424E3B101200 +89391CA10297CD5670C8AC6F121CFA1769ACC0A17F2075E8D0E32A8C49BB203E64B944230883 +F6F787051212E5CF772900D977F3F4DA95D940E61A2D248DF3F78FE43E7F8B7B4BAC914752F3 +528BB598825E67EF58689630C7FBFBD68CA22D8DDD07EAA09D013894BB5C647A65BE1DA8C3DB +98595A7DD06AC4D17BE9C8186F2A4939D705C9C78FE427EE80EA447F4ED0D2FBFE586FECED54 +9E3DCF332E0062369F6578998518898BC24E26EFD731FD4DD832E00BCA9CBE6F21512248F8A6 +C55A59F4B02E7851DF178DC81EEA8A2661A31D55EC2D4A3E3BF36A52B118C0FEF4C1FAC980A6 +7B0CB007C3CA31F44BDF40863DFF6FD784800501DF0147757A0B18D34961D3C417BE7F6F4E6B +9F1783BD4BE50A6AF1027DF713AC712CB6D225D322BF24287D2BB8FF3BC448B437813AEFF25D +BBC5C30BA113F64591F3F14C55DBD0E3044DDDD6BA23ABA5A99A15004E29B3850C911D60BBB1 +ADCD6D66CB050393260CB5105DDAA2C7BC91975488DDB601C06A0296B28A6077BFBE85987F30 +CBC9A9DD048C66A49F2BA0A9867E536B07795C856D41B66679530E1D60E626B719C45D400000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.1: CMTT9 1.0 +%%CreationDate: 1991 Aug 20 16:46:24 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /arrowup put +dup 175 /arrowdown put +dup 176 /quotesingle put +dup 177 /exclamdown put +dup 178 /questiondown put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /visiblespace put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /arrowup put +dup 12 /arrowdown put +dup 13 /quotesingle put +dup 14 /exclamdown put +dup 15 /questiondown put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /visiblespace put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /dieresis put +dup 128 /visiblespace put +dup 160 /space put +readonly def +/FontBBox{-6 -233 542 698}readonly def +/UniqueID 5000831 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACDD6500ABDA5ED9835F6A016CFC8F00B6C052ED76A +87856B50F4D80DFAEB508C97F8281F3F88B17E4D3B90C0F65EC379791AACDC162A66CBBC5BE2 +F53AAD8DE72DD113B55A022FBFEE658CB95F5BB32BA0357B5E050FDDF264A07470BEF1C52119 +B6FBD5C77EBED964AC5A2BBEC9D8B3E48AE5BB003A63D545774B922B9D5FF6B0066ECE43645A +131879B032137D6D823385FE55F3402D557FD3B4486BE465959B1188F76DF7824C135A7FB382 +C4E11B0DDFE856B6F34552CA48C24B57DD8448FAC257C4D93FB122E1218FD36B99B2D79DADB8 +A66613EF11039BE77816A7A2D6781FE0D69CECC36232AE87A172AFE095532A8C7FF40BDD4A5F +CFB6CCFD8F73C572231734E0609C6743EE11010F6579820B367C49069AC1D45760C0CE8DC1E6 +7E2BEB72BE6D287910547E1B4BB52465B75947D224998223275A2C340A1C14C04328CC2935C5 +3EE2723F1DE6357A291E14863F6C1411477B3EA074052B30A4C1EF03AB324D678307E1CB02C7 +AAFFA90B73975378B9DEBCD3F6AAB626A361BE8068C60EDD0B2BE4A7BBF4EFA21CC23607BF7E +2556C17B5923D7B0FC036D5FEA743C55F2BBF72E8A61995BD63D7104A085B8DD5A83D9077376 +A4AE8F0C048606BB9E84C640C52D0A95B35D48CFAFD6EBE3D6EB0ED88C1212818CA93E406147 +40A77C446B792D02945642014A5D55BA970EF97DCDD5B839F621A052D1085A1E668161D3AC02 +27C7867324EDE883589B39E5D152793009CB5A08EB6719A44DD01B6147E3436BDBB28215CE3D +29A3B1DFC72BD942F8CB3376B4E12CFF53A793D935346CEB2AFC3428CD9313C671EC1911252C +19DE341556999AAF7417AA5085DAA35EE71353FDC2C7D83EC2DEDAABB1B89B99E4CB5282159C +BFB45A286F8D6BF3ABDEDCCBDCEBAF6994B17F1BE07D10F00CBA47F2FBF66C0F608F28260BB5 +BC3CBBBDB7BCBBED9C322336A2F2E4F954A05D4879D3D976E201848ADC85B763C354E8017EA4 +1A9998C520D720772255C69EE591BC3650E52286E6F7089AD632DE39FF9B40F725F8E6E02B74 +8929DD79B8FC1B2E7B761909AAF09F1F3F0AC59488B0D281D4A95C25CE830A5223D618A634F4 +71F737BB211E4B04D6B18D867CCFD1694E1586595AC2D3C5D7EFFCD4773DBDB8424C817414F0 +0B2653598571C3F5D9712671A0E8B555FCC8F9AFC5809CC7EE6131E662E3D3066E183D0B6711 +A18806B426429B44521AD3F2E33FA53438F676B958752A88A2416118602CABEF91C101C94A0A +5DB4D11B913DBAC9C62AB4B754D3A0B43408AC835B5A5A28BCFABFD6CD9961FC83A21FDB2FC4 +8BF4D06F623ABFCDD7F72E7B2BEBB7995C67FD497FF0008940A6D6CB04A8C65C7697D91B817E +D4C57962F7A49B2C878F09B012D9AA9B871E7A9400C962982EBCC9011918B1608506CC061ADC +D18A1CF71E088DBD1AD5D9B7459FF3C6014DB70839555EA342E2F0FB91308981FD02A7143549 +2DF066176634326152BD0C93E4D83C8F9687B5FB6C349A6342AE87F7C15E711172939230DB11 +75B419575780C0A9824F8F4F9ECD9F2C2721BCBAF73E937BC57A80B0C4D7BB6049109F21965A +6D9EA90B3072074E1C9FB3FA31E81754010705568382F8BBAFDC25E4AF9B1458A8D8AF2E8357 +A9FDB226AD41469A18944F78DE58E996C3888B75315D8F08C991C04C6300B4F111F5FF14FFF1 +2DD6C9FCA55B96142E2FBF4941087FA600ACFAA02A2137720766A431070DA574E0F60E0F3009 +D004671C05C37B1B45583DC371DD2FE9E6108AAEBE6A8CEF22B0AF23F68B44FC3E0CAFDA3AE8 +0188F3AA9DEE25B099A2C0C4CB327AD3275A7DC004790DEF9E2BB835642B81254A1B8CE1F59C +F7BFC693E5CD4706AEA03463575E0F44AD48691C206B9800060EB2F80A050A332008C9D05832 +7DD3E42F4D046D8BC37244599046B30D65B9D059B55827EDB2FDDB79F0DC693743226EC0B995 +A7AE8D5E9BB55FD830753AC63EF8EAC1B18414F060F4613F868ED7E8D96F69E9BC82DA3DB64F +939BFD11B4B64A5B2E068796C3E1CE3926B2D6F442408820050D585EC449E2AB037AF3257DB4 +3710F2BA8BC72DEFCAEFC767F92DAF7D91BFAB2AEF7FC7E98C8265CC5604F6D5F63BCBE954C2 +ED8A58D0E312DFDCD46B7CC55981DAB0AE803D65C3BDA792EC50ECD030D41ED9C19C5515CB07 +7EA57787A78A143F714B020B5E51790E3FCB235970C0B930CC0CCE33EC3851F86E0F8897E4DD +BCE32D78876F1BF668971E0E172A3BAD17F200F9AC224ADC85198F538ACDD6BDA89D5337BD49 +1A19BA4344CEE1C0A2603FE9ABEAFBFB96E0402F1290EEEAF3C59D9FDC7242EC59F006146BFC +1687A5081562629ABCA526344DFB24A4067339DC7D781F392B9135957D61E7C1B97E29A4DE64 +B7891054A6C33452995B9DF8C063803B20A5A85A8ABBF35B55BB4CA57E91916F619DD920C24D +7E61D85B549BADBA2BDDFD0790EED49AF54A6F5F62DFF642F05F718EA14C92647A4D20EE0489 +2F15BC318266FDE7DCE53847E6F64C2F48E6A0CDE461DE6AB0A114B3A72ACC43A18458A3C9B1 +3AA722E999DB610EB0F1DDFCD098314EACD40104FE9869325A9B847B74DC1A6B08F55241F8EF +BC6575766B3A0E3977F0BE297E20C6DDB6ECDF051C0C0DE64DEA23B02FC649A86CA14E0197CE +B2CC6B9CA3529DBA5ED27A7713EB43E133C60D2A12BF5AB59A2032335856DE22893F2C03BFCC +046A22CFD609EB0CB3284AF5F0BF9FAE44920C2BC3E3B667A40AF42CAA78DF97286DD34F5CFB +4BCB44026073A80030017223C4A7F54B49E87478F6B72523E6869BFFBF243698CE53DFC56A2B +12907580DBC8F29844F7B7780FB6517EC2692D9E6F7F0794E3F5D1D98C0CFB3395AB9D30102D +95496F3A07D65DE1F99F986887AD42A5F8EA442FD964FE2BE2887DE6A249CA455102091247DC +D69C6A3763C057BC6AF8E7C2C6140DDC5AC8545820400A6EB63CDDD1077969EFA7791F8C9BE2 +0C35415DCA882E2A177A51EEBA30B74A4A76674CFE4B0FB190F3ADB4EA053CB2134FAD92B66C +81FD0CFEBF3EFC858B1B1343B32FBBD5C9FDE90B343D49666F7DB0577C85C0471B18A3680349 +0D0594E602EE96BC3400413D97A0364C1E4057AFFEE0880A97D0B07D4C72F2E0DD6D59811541 +BEBEAB66DED21D76411722DFF15EFB5B90BE6774622E29C7C3B409C76159C23CBB0A7D4CC542 +B7E52B6C20932CD32D6A8941A231AB9DDBAD60DAC9494F9F92CB2A04BE0753742A035974C7B2 +CC9C3C58A7986DBDD7490B4F74EC880F20E94DF05BCBCB29AFB8CA3E72B5146B3C3C19BC336F +07366B99247C3DD400B2897334786069C5B5928DA1867953653629FD9016EEE4CABFC071C3F2 +FCD0A810880B26F5CFEFB5E23193D983D1BC6D954B292167A9729DF33590CBDCA442C7BEEA9B +97DF822D87DA8DF90636BB48005ADCF821C7ED488D0678601E2D2906391FD595553F5F4093CE +87CFAF9BFD25DFD3DA97A0DBEDBC884CDFD62F8A7DDC4C8D74EC44C6EA4C264FA9FB7F83FC29 +2FC6A85D8E5540D05B61610166438F643CB4D2C5C0CED49CE885E53678F0207579162CD53A2F +07831EE409261B7F1DED1600C730DDDDF838365A683DA6A6F33E7A49016CBB9D94532191F666 +05CA66E3BF54590AD680EBFE92A91BF600BD4DFC19B1B895BDCE26EE4C8F632EC828F60E8FBC +39B9B0CA053A00585100B96469BC6B3D372F84BF41417FB632D797DB504F449D8DE720531CAA +84104F76F1FFC2B4550EAFAC8CFDC48E709D377972B9AA380D4C9457C84AE40CFAB5174E33C4 +8CCDF3509DEEE1422F7AD69CF3D90185C720B4CB0B82B5AC24019ACB847FAAB343BE85273526 +9F98C12D8CB5D78A9A21996B72A71E83EF16EA611DCC4DB16B16C0960A99EF50141DFD364AD1 +09F58E8FD2414978CA4C51A6E030DFC3B02CFAABC0DBA4012EE2449D7DA7B2970017ADCD8736 +1F43A7C84E19C4A04D610F57120A69ED4EC38D1B2314A66B048A07B268590DB0271F95AF6560 +A1CC21066F31B25E96BCD6EF687DC1D2D97FA44FDF5B1E3CDD84BEE32E032A27310A0D15CCE8 +BEB01015EB3E0BECB7810288324E25CD0528BEAE974357E02808DBA3FDA1DD5103B8A5C94F6D +9DCF8FA92189D01DAAAE273EFEE45AB6EAC3A9780915272B8F7C3075AB3074FD1526590FC446 +FFEB68D49EF85420ED72681896D377CD1B228F3A54928AE764D1C2FE62648EDCEE93DDA16187 +B710B70D980C50116455019FFEC47D6D9B268FD9F6ABCF089B7DFD444B62219FC5808E524D18 +5A6EA9D8662679D82B28943E457FAD8A8BB804BAA0A26ED7C4604745E01BD94FCDA7FD47F593 +89CBC8E92D81028113DC6F4129C21A6D4C06F782400487E50F615502C1A0DA3BE5B5A168FD12 +935DC67ED163886FCA29A6987EF8D92405315AFF0470DDDD1483D198004ACF11833E123081FC +BD5B022EDD1D8A2D77EE26E36729B40EE54B91ED653216806FD1DE1BAF894A5FDDAB7CD6646D +6EDA39A1669712A59DF05F35EAF0C0E951717EF05E05D47BC0619872FA285BE4B0930BDC5993 +CD32F6269745563EA2DF9EE4CCE7714F9D0DB8CC65AD139F8854B3DAC7BC2ACD047F287C2C40 +48852CA95A480C82C9071A22BB14E57D47B3AFC6D2A2BC96DB1D9DDF663E94C7CB0A06686B5B +06832690524EF5122776265FDC5852FD4DD935FEE5A03F17E05E71BA218E181150784BD37DB1 +7A6ED6BFA0730DE1FD118EF42459CE5B2305C0A2CA87CAE5CB5A0FB79BF68077A7599BCCB759 +E20E3D911B36A717937B094AFA50C3FBDBFEF20D9DE18284B3958731F082D2112F45780E082B +7259407103A3826F1848EB7AE0840FB90659BBCB57124ABE3B3D60012D43699EC1675A9A95C3 +7E9009EDAE906D332FD771EB666926E18A6B772CBB532BF51482D92D1A2E0BC28FBD7246EAB4 +2BD41527F2ABD4E1358F0CE1B09A1E374F9DE128FD8A499C0067CF3F09A5314898873FA04F02 +B6CAB409B8E6EE6AF895313819ADEFD4906974BCA826D933BF01BB3498417BCCF211CCF67AC0 +41016C776676B6D550480C078897ADB8FB0CCDBABF089C74871B48CE64CDBDB0AB941905D6A1 +0203BFEA7830C0AAD6C32CA155844EE6529396E96FDA312E4C72E0407919D28C5BBE52050BD9 +2E5C4AA61DDE9D500B243D4ED8F30FB0ABF32238E4AB33529E8E9766D93AC8B62148C004ACF5 +03CB12A7723434D9B52BE24421C7DF41188289386C6F8DAB25434AC3AA3E176C297BB067F066 +830FF1C10740772590753065CEAA59FF2561A6683CFDC73AA2DBFA299A25A48DB7A02211F586 +249DFFBE444936DDC4A4D8B55AC00B6400A70031A96D6545CA37AC1863A9DCBC665C07A40293 +7A16B1D1B65C08F1812613119292CCBDA5D628BA1D240630AF2FD59145A7F7DCDE5C82159BC7 +EEF6A8492B0E3E69DBA6E45C7CF47CF7DCC96B19F57B5C9672203EED3EE9001C6282411E1BE2 +157C5E38E8A747FAC83D72DAEA38C96DCDC614B819F6E84B353B3C4AE9C08FDC940005F14206 +AD379A666D9812D032435C25A97631EA4D9234963F4183BBED6ED2B65C2C8DF6E43C4AAE5F52 +9DD716D28FAA91268FA7A366A6E5B1875BC54746BCCE65F1CC98A10300D5F000E5F7C67FAF88 +48E68ACAB634B5D90B8E4C69E1C2317139779388C3D13990EA4E40A3471DF1158EA94C1CA90B +83E70F5435D8A9AF64E5669F6BCFB437C12579F74B14D9CBAAB148169A652AA60066A43433E3 +AF6200E44C20B588BD126BD5565BD38038FB332A8605811C8E83EA43EBFC12F9F1F3389904D5 +28B7832DF876305EE931C2934CB9C6A03E66A4F042BDE91AFDBD8882890AEAB62B8E878D4283 +65B48DE385EA6D52F020E6588D3D42AC7384FFC99B01E6218ABA693F5FFB00A22587A42D9672 +83850D058130862EC67E143E3233B4D145BE1F96CCE0C50FABAEA414370893EEF80C0A2ACAE4 +F61599E691E94684C30250257CBD657754378A83AC6329D50BB7E8C0DC46CDE54E13D094452A +0FD0FD3C7C7129DD6DD9F7D15B8B4C0882A24C33D5DE5B80884E2CB81CA458576CAE48514A48 +7A94D747F2AAF4F0AC018DD254EFEBE96145A8D3C92F606094D2A4C73BE183B44108F515EFDE +8BFD968CE20747E2EAA0BEF32A6862CD1D6666C2D276134CBA9AE56DB71B9C030C87964F0B12 +BCDF85FE8CE5BA1AD178EC4BF77FC769E90A0D46A88A9AF8C10022DC7D15E4242B9E28B9E65C +330A6349A51FB2BC14CCD4593AFFAF36890AAEF531585F6DE6060A8A1477BDD5F6D1E70B0F2F +2CDFF62368AA89177347CD20BAE4A96FAE26F9B4524F9AFB7109D57C10D2F576DDD9C1FC3AAF +DAACC1CC566F9BEC007A682F604279280D9799D94F6F23538C63369CCA480C9ADDCAF94E8E3A +CF47E4DA69039ECE2DA0F61A12A6D007F7680425D0829E67121366E8B4AB5F911E3A04EEFA86 +E366462F7A90325D58416ABF8FE464116A33435358C525038BD3ED1032164F6BA3B68A66745F +73758DD06AA5693C34205F5B33E2681AF1EDC50493764FFC0FB42224959209DA11620C0AFEF4 +4C7C328DFF7D2712D1E03BF07034637B4459D8D2EE228D01E6823C9C477CD234DCB6C929EE49 +7128C73B5CDE048270440A9827B8282FF0B20C28A6635B1058B55C6F5C8809C6B9E3AC4A29AC +41ADD9AAAB2AFCE31F15B89F8210E03AA78BA8E63E4E3864C2CB0A8B577E5EA6B3967E0BD22E +C08BC53DAE6ED470BD049B7CB53FC213B8E2B606DD507111B221DE855CDF73573641E0F8CC5C +CFE1FABEC1AC991CF868155DC346A3631BB469477A6154392F13E2394CC0C61557BA30BA0600 +980893256B6A5CE6C123A9BB639EF6C6A9BC782EB9222C986ECFA9B5C159675567BA5D69AF3A +476BC03CADB9C01EC2D79861B5F3E170B07D6E7991B27014FA33EA552C8462851E7DF7FD9F3C +76DCDE16E08B3FB44F0845B1CB354F26238E89EB656406077153A6BE189D2A6FA9C11031C1DD +16513FAE9290CAF9DF420BE75392D36A9D1E9B5D05B57763AE8270E9EDB4FEB6134D0B1B0BFE +1270A4402797BB76566D027F31E33D1FA703AF8F2608F76F99E02636127D836648AB9BAD0E61 +EAA4FDEAAC409195E044032C2856AA780605946E59103DAD1D1525B7B60BCDCAFE71C78FF00E +83A77B8271AF411716A1509BC9E0ED98C19DD08C457D3F608C220DD544EF4D4B6DD31D8E6CD4 +BAC1E30FF9FA95945A19FDA3F61B199E2A96055FAF195C66C0D36B300009BF5025E3CAD01AC6 +2FDFFEA9E10FC5E6BC7AA1400A9B7D9E6734CA2C1BC4DF7D82142DFC09A56370FBD6F225D5DD +06C449598578BEF70513235AA24951323896B07619683DB052288C816FA08A752740261AD1EA +09860CCCCE951D2C606A2B8175C49F5F4DFCD17A207EE4350784A751038AC6446EF0DDE8BDDC +01D3BCEE3747A46A6BB2320A5003345597BE631C03280F5A699AAE3F3FF772F808EBB7C66107 +40549DCFBBB26153031FAB1452AA82DAB8E37435D6C143E954E4DB00285FD48681EFEFA513FB +CCBE3C74B6885B6693957808AB234531C3D08B1C77B3719898BDCD93E763F57935EE2A74E682 +2B11E298B46FA218B91BEA0847DD5163EB4B8355E1A59B4D93CC6E13D9E9C443FC5159839931 +403F9B371AAD48C3EBFA13F6869CD6A761C4A025DCEAA2378BA1141FB3116CC34B676F57B800 +2114D0E601C905C0B341A1A027968788D0DA1B7538EA1CD3FF889998B4C33BCF6708DE5BB6C8 +DF46ACFFEF462EAFB048EAB6119F8ED70D5CBFB7DAB71AA6F2C9DD82F17524581AA73CBF6A22 +5CA70781A2EB82B2209450382A55685DA2A087523264349A55FFE19F6E52BF52ED8E392C5FD3 +B96769EF3C1CD2AE7FF15D95B72D9055D4B1680EB5DE98A399ACC23D8A0A8A59774E73519209 +E0AB48CBAE1FD3B4B5057DF9DBD199A59F4A6B33CA2DE253B55A86DFF752EA5B69D5F0EFBBA0 +A5C53899CF772B1CEA68C8AF11503371DB48872910677CA0D870E1B42D6AB2B4792BFE97FB8A +0B60CE830DAF6643C7307EA70643644D2F8D0408461FBE68FDE7379F09F8EC87FAFF2F6034AB +6BB2AD1D13F5714301C878C84253F85779BD1CABB29E07CC0D9C543D50B76C416DC6E90D985D +01E75A4197EFD2451336584779B17F1A8B96BA920CFDCF58BAA576CFFA1AFCC32B506640DCB2 +E0AD1CDFF9D1907AAE407DA643934F1960F8008B9767342CA9A75B5628A0A3AD9DF5B6F44E08 +6E3B2269AF255F5A4792851D403CF5901DC56E047670F6313233C3D11FE76FFA7E03C1DCCD5F +A9EC5627BF58D777AB50D413FB0C72DF4B71BB352F81D8045F30C1B13247FA86116167AD6AC6 +D75F6650C34BD5F3EBD4DC864F414FBF34E2E3CF1D4A921B7CE7006AFA0F435A530EBC612E65 +506C3547BD53E20508D39A930931D68F74FC5EA4CE9D5397CF925E6B445AF0E38CA451EAC209 +D7E3C5FDCDB48CCBDACC57A062814CE2FFBD3A5CDE97D01465E790F69D79DBE79C87ADA92230 +650349B98EFD94C6CC80EDD22B559A3228CED6CB5AD5E79507D23F3C54471D0C0B1A7D0D8759 +8038310C232667A05EE8138198191A82815D852E967A9534F360DAFD0790FCD471CCE0AEF5D8 +07D7E14D4AF93C6F7213CA1E5D864DD2BF9BE6879A3212AF6259106B3AFB611EFFAB7D87B03F +49E0F67B8BFFF7E9A9E30F1222D92FFE5F6870BA8A2D7856038623D5F280DABC661ECA98800E +758F8CC46BE45E4DD795C05127264B226236F26245FBF409DFF34BD05579086B9002EDC817FA +0A7B82CEAD24991718311D58D6F29F971C743FCD54429F0CB7DDF91F436D51A52BE1D99C99FA +FBB93E18DAE89070A9EDCB07674CEF1214C0FE6A4DF86B63399D82C50989A03541D23279B8C8 +3EE0AB2A42D60945D7B1B1AFADFBBB9DA8384C4CEFCA6F6BB8F6AF3303E416B545939C3F6348 +B8D055B9E31C8B450D5A0F292057349D639B0DD79AB8428E872AE2301EB48DAAE5AE32D63518 +8536E446C22B9080C34C8781AAD7A5BC12738526FE7F057494960678EEDD6FA007FB8ED34A0F +61BEAF4168B770E8C21DD19D7C3C56A96ED431F766E7A6AD8C8AE6447B9902FD10A87197CD6C +3F771580B4634B807EBE94A169AA42081323E0DCEEDA4AD8B5C2BA36E82194D9CE4746214D69 +84BBE12142BF9EA6DDF0CED377234CB504B40B203A8424E94CD0D9C7EBD7AF6E7781222F6CAA +3EF9CD4D547B9E8840A766B07A196F92B16CF470BA28AE3A705F1AEF3F7A4FB78BC7E5315812 +F34E832A2625DAC422D278EDE610FB689C42F7B0B2E9BB1C6531BFB591FEFC35A17469A961F9 +66A8065063FA2B2F57850270AF7AE77D6F2E2C62F7C9F046EBD581EB0EB709DE3C50B789F4B4 +5B8B28BE16422D01AD6451D6F8329C38201A9AB27A162AE428E061C460CD7F4524C4A988D420 +114340BCDEDA7F4D6E474DF4AB1E7F6A7EC187C195EA7ED1F0D6B78AFA3E9BFF7F452A86FDA9 +6C2CB0F67A37BE74FCA44C985AC3AC6223AC391EE2E3E47F42C9594A5138B505EF6D89D2E38E +6DFD6C81984D85D60068C3A887724876699F0D9967352B5058AEE865D210E11ACDABA4F64006 +F8AF65A2988D97E1B21B09CCF382C86E8E28191A30BA425F64970058F5ED779EA9EEA82B5CC8 +6D05534152DACC07537E7EC725B57C4325FC9E4401AFA76E254B194C97907DBDAC3924138D78 +EE81AE2AD9D75260DB65F48DC236DA93475354F57BE726B03F9FE8207FFDCEE6F5504B9141A0 +4B2CBE7EAEC208EEFDE56D00E35D79916E8F05D4D5FE6FA083A76E744059416DE1516873E641 +0695CD5171589C3631443DCBDDB55603C871367412C7170857E8BAE6677EB8680D573E691979 +1992C929C163E8603467CA3FAC801E4F23637BAAE85BC118E3A0235FA797F0FD64CC5D15149C +1B1FDB4A50E7D59C777CE67F7C10DA9432C73417E5077C18953DED59B7964E8C1A1EB07CC880 +43B095B8504EE177D1F752428D44337C506B1305BA105DEFE2F5F8960C357175DF864274A2DA +1CC1026E1BCD5D8CFC2AB5BCC63D1ED6994505BF969D3CBC8F97F0683182760B5B8972851A53 +A133643146A803F474FE4118121F507F2C9A90D815496ADF3C9C2EAF333544711B612211F964 +844FE6EB3ABADF202D5F8425DA350922C9F79C1C07AFC03640DE8E691CA7CA74D3CDC56AC0AA +7C82F99A057FDF9B1E0561BA8D0710D2B9EAC03B1CFB7B141D39693B7054C6815A0C335FFE5E +36DF9A6AE13E7313C6C7C2331FCA2D6A6F2208F72A0E62C74C91054F9B778957DD83C487E924 +29D63A0FC567290B6B49749D3FFDE6173B5D5B9937EC597FF138547921EDFD0ECBB4055FFAC9 +3A0C3EF17C8898AC54605DF8327D0E77E8AFD22CB8F73AAC3EC94F1AF338B3714A08C2132924 +D19BD496BA4F1F76F410917F4429D5D376310DD5E12339D823292FEE8425310CF40D9A41844F +5EE2DCC2EDBD53544DAB4A120AB999B516D8B90CB30E1D8CCEE638CF1CED2DF52AD14372DA53 +C9F82F876B77BD8E8BFD3189211657194D83F0E57034319AE16492E17B0766AD4EB3E6771F12 +D8E8134A418A85888DA76A9727BC5B5B9A59B996DA8F135AA7759DABE5E3AEED9340169ECE3A +9731A6822438D8E8D44196B73FF8BCCA83FB3B1E0F66064ED52C8EED2E86F57B2CE5D4AF398B +F2664D15F3F411BF5E9F6470DBF2BC6895862819570971BF56897573634856B5D19058DE78F4 +693A339225D1815F62F95204A9E42A49E834BD1B97F20C1332287248A98CD10690414D324E77 +E2AFC5482402EE516F444B7DC47818A64F3F826F4F0EE067CE703D91F52B0C6A5F2A04864627 +15F8562814D6EFE11493F110104FD734D0EB99E02603137C4C0D992CA67B9A7323E946DC8AD4 +16EC380038933E3DDC4EE24215EDEA8125913ECA6EC727715C49B62320868E9407AEF30B07A2 +AC23671A18F3784E6D98A8C1C191C68DD7598A65880220B8BA5B425010EC489022BE4D2645C1 +7494BFD8F9F45FC44C9067075C790F90DEC194655C517A6DCF1FD3122CFC276CECBBC5FC6039 +FDF134F56EE78B5A9ED678C7272FE8FD1A0E8B1C7DA8546F132B9552A581C4FAB5237E254036 +92BD33D7BAD9DC56FBAB7C69CB79062527ADE0C8D8DA93E5C0CF8E4A9ABD743B65FDAE84ABAF +B0674650285796C620AE873558F53C850B0E82140216B4BA3BD41F6613519935F201FD0BB4CB +FA8D5223D1A26E734444920978B42620F21CB5A4F24FE225D141B5A56FB25029CB9976ECEAE4 +8647662E7C98796899C3E1723DC998FB42F6F1B13D536F82F908EC3CA7FBDF24D4A0B954A821 +71CC936DFA24706A5D4FB4118D87BAD0BBE0AE559C951E22A33181F31B92E64984D52744A4B6 +E358189A88360B9521475CA082704F444791CBFABEEADD5A6708B864599843A181FEF2905498 +30BB0B4793371A04AB1A9DE37FC3FABB9921C2E2924495C6FEC58CAA3FF4564E9EC89078E84B +C2066D27270A1E17A92E64AE34134FC6BA7E4F70E8743218EFC83FB76E76AAED306D6A5AA873 +0FED52EED087B46C4583445DFEE680BEE70374C232FE1FBA1C16E2A4FBCE3795B030787D42FB +F97712B887DBB1685474C68CD30A6AED27392CF8EDE33C61C5CEAECC44DA2B98944D3CF40EB5 +F24240B12E0567FF6F62302C5E1D611CACD6A249CD39573F7C09DE6AD8D01C1E69EEAE713372 +5EDA78387FD25BB4E96FE593928A6915F821EDC87C1CC2B2C288C3CBF49FECFDDB20F47EBAB3 +CA3818D6D61BFC825F164DD73AEF81C6CFC01EA5077B0564000C131F4D45E66D8A7594E95D8D +07D647C8D4D31843E10C259684E5DBB3660AC7B8D0119924480756B4355E1EC82E74509AE4B0 +2C9B8F5AC8694B878A9175E7FA476420189C487AB4C9016404F13666ADDEF60F5B9211343453 +5EBE0D172942EAF0CF53AF4FD7707D3BDDD04508A8D4DB1362B67F9BBDBB80F942608D44DD69 +88DD8C4BC013E035A27DEAC29397E1CB89DDAE52F61B52AF29EB39C15DAC92F3EA57EE7EA66E +B8BE4622DC4CA2A7FD49BCD5196A125A74DCFC7615F6759E4BF2FAB28D7E82002347B89AE44D +4623A1979C1A885F700B157774ECA8B5138C427F7FBE595D9B7907CDD24E765659AC9A3D8009 +1E16FDFCFBDA8A6C9C9656A0F75F4D391D4E503C00B7A4227B2D89437F97D0FD2334CF8613C3 +19FC8AE7B9F31B9265A4AB8C3B40806762227A7D025FCF7B209AF7C54455DAB03D708B2FB3C7 +C4845C0D539A6E3F055F19FFB857365FE39959BDB251FE4D36420F6695DAB7764EE1D9B0820E +17BC3C918AD2E52F839BE0015E6C596EEC813A6CB06CF1A57A00EE4785159D493BEB152CCD9B +4EC444998DD44630FE056C5E96E8FE9A7C44E810CA661EEF841A4F540D4F71EBA5660404D39D +A8A03AA50E4C6293F44413E90B4BC05CA73C0D5BB2169A4EF75E1225C6555B9FB66F9AEA4A55 +0DD39B1DA07754C8F4430067325F1CEEFC48A524E521A4320E0884BDF5965DBF3EF29D6B4F00 +815C26CA5D937E64A24A7D6FD126A46EE733BD1AAC872103DCB28CA020D3B50EAF57AAFF6266 +40F8DD8A859A84EFC1504147C444526762DF179457A6FD46F7F02014F761D24438CFCB0BE296 +69E6025AA73236A5CCFACCEFF05F45FAB87CF96EACEDCA999E9D49E1E6F2D3491B5BAF9BDCE8 +5DCC9A49251AEC2589B56037E5032E9674DE1E92C97085DD5E3CE2ECB83DEFF5E4D37CCBC092 +CBA6AE8521122C21E23A1A13FC3A3CF970E0182851B7B729C37C154496250688D7870E9A0902 +CE7A2B9B22C77E58C057B2ED5455962828BB3034E5CC1EB74EC8F68C75D9EA50739DB54782A8 +D55CCA7C47B05A75E4A8A51E54C383716C0E6D59ACFC0A66CA5056A413801EB193F39DF2E7B9 +775CC59F005863B9BD98BD69B357337AFFD8BBD9FEC8C0D4518AA6F201E1820852A59908C10C +D48F29EB8ECF19D2168CF7BB39E60E707A41A3D1B84A4704097D689DE1F111F5CFC33D8093C1 +F0F811DBB7908433E1B4354AC6A0DA559464E8F2CA94FF5092DEC40E949F6C92B8F311D3835C +623B734B3D1F9D54F2E933A7FB664FA0DA414F608BBF614C65E644723B2A723661963E7700EC +318115637D017AE4DE8EAE0CE6AF903487D0B3831511AE19CEFCB8B9CED35C65F94DF9806BDD +D82AF0E521FB82A5B4CED998E02AA316A04CAE953D731DB0854D9A4E1CBD272D74AB47572D68 +05067C60E4E960C240CC2BE2AF7AF9E1304C0CA522DF528A18923F97C5CE7B4409FDD09EBD6F +BB800D11A1C6882B8965DB70E019970E1F6E541BE5219A156C58126FBB21C4726056C1C33561 +32B85FBADB5EC981F8D9334FCBECE6785EBEE2174BE962766EF60B7C02F249882D05E8CFE782 +237F4D9B746323EFAC8BFF9C1CC1B375C620CC708FAB00BD2EBCEBA4E5C0C3B3A4011A72FC47 +4F974CECF0DE5DB304E5A06C04F3D049724DA571B64697C1A80E2059E6BB6A21ECD81A544F7E +83C6AC240F22F25F815C20C0AF08EBA624467DD4B5645E2E1F4DEB2C760CE6CEFB0217E000D5 +A7895B4A62ED06B86F2A0082F1AAAC04AD55A5102401E897C6C50D616845CF92F25A4147118A +464D4B94003C7BFBBF3AF22AE709E360D5DE1831994B483350F1BFF514ED4782A9C6982F7501 +63DE2A6B91F67713F49DDAC470C19E9FD4A1250030CC67868662C0015432AD7AC88366B70E0C +6023F518500BB68C4D84080EE5B692AF1C78C35D48F4F3392B5E4FEB298DF0B869A28B8799E3 +0CCA3C45400620E9AF3D61B5F8074541BE64914343D177B8988AE05ED460AF0180D04B8E78C4 +67E83C0ED5D2C7F8613439A9808F28BAC8F3ADBC52093E4EC591692233562CD5A25070014F62 +C54F1F1A6083C275D7DD8A776E86C207DDB702F122CC92F73AED70DDC65D627525FEF041B597 +03B43840D82AC30DA54B5BF852E1A9CD5FBFA4CB3CAB838BC2D4C0B8ECD37C641885258AAE53 +0BBF0C2B279DAD677F152A1ECCBE6C89A55684483127C3D03AB7F4D8A31FC04535259B242C46 +EFE89BB7D09161ADDA5AF99D63E6B023D3E01BF576D0F4821CB5DE75CD1212DD292172006FB9 +DFB70539B1C9A1DAB6D5AFA53A133FC22F337F5DE642B50EF883F50E5E75037C2104D36E1C31 +5251E246EAD10D073AEBDF2643FD275B6569F1F0EBC42DAC6E322747C3BF4312585C97171F03 +026B81FF362E10FF09A9471224453AA4B32887553668BD484B6356FFD5223FBD8841B584F3A6 +983DBDBE0B4EB9A4915FED5639BFEB0EF3506F6D5F28C9BBC24F1B2943FFDEDBBE4FC4EB4A5E +0F3E4B86D57EFC43582E6AF464D5808200E9B75657D53F2405132E33AA53D708D5FE901C483D +395F3013DE8035C445B3E6F3FF15866A0A6A3E6BAFF3503E8B4DE6A37600F24F38204FC7DE40 +77199E4B77E6C9370A6C9355668E70A65F1548CDD938E52CD0E774BE108CD6ADB0894B86E954 +2FBA918E606C88299C92B250E2D63CB0623590BA7C715A68ACF004FFAE4CA76866EC20E14588 +872B8E80F2FF582531601762B7E4F677021CCCDCF94E277439FB143C5D23F360A8ABCEE65224 +FA153538AD8DCF7599752C8353258FFC0AFAB471B2046C5C99BFAC2A639000B23A6497C0D78F +BE39308D619108E17132FD52C82AB56FD72827CFA98C9F4C27249C111552D863687717974624 +AE692A23EB6BB6AA6AB2904D066CAB913774997E38DEC623488D3EDA398552852A6E49EBF291 +BF4E10E59072CFB85A805BC7BFD9A1A6DA4DB243AD53FE158ED1EA3DD8A8B132773630C6417A +0D6BF88D63FBD35C4EE55AFE23D45032939A052E42E5D2CFC4669521A45043A37DD06F61C145 +C93DE5405D6AB6FD632A1A2D74A45FC944C2AFE7D66C7F43AAE63CCCFA328DBE0ED033EAD7C9 +4B4B4DB0EDDB167A845A2C918FCDB3509C2F966E45E111EAEEE77E4361E86671DCDEC06E6358 +87DE61485270E33672C0820B62A53F97E54032E1D3782BD14C7466EEE397A31B58ED534917AF +A762A63F4B2A1E6E3E46FAEF8071B99E3A749A5AFA03F45E285E6F69BF69B6601B5B92CBCE3E +82230130E220BDBBA449FB5DF7D67066447DF60748EB5FD9A4D177B4DEED8443A55AE6D63CB4 +D960E3C7488B900A95210F1D8B667E8356E8F4BECE485A1401ED4BDAF19021CE99E09E359AEE +DD22DE12FB4EE8933EA28967704D31639E045585813DF66B97FA4A740FF3725356254FFC53F6 +6375EE08EA4181DC70EB27433BCE126F98163576A7A75CC27EB8A9A9F8B11B806E21CC27805F +D892417724CEFB8E4B34524D9CDB6F900C4A08FD6FB0656041DC4CFC907954C77D42F130E2F0 +79631EB8D67A289E74C4DBEA0600355024A1AE888E907D73C610A6157AFB983CC041AE3CA368 +1F518E7574E9F0C6A5C89686E2479EDD4C098EE928C74F8AF2129E476A60F069CB8F1F2F04D2 +33B47C74A5849958A4AAB9FD031008E9ECFD5034887F36CE4899EAFFD38729E4021F9BA94A93 +04E186726C24CE65A4AF720CA086CCF6C776221DAE558C9F3A6A70ACDB6B34B0946DB062967B +C2FAEBEC9FA64FBEBBAA90401982EE34333ACFD2F7287D9FC0243A08B369C394273B39C31EC2 +DB1DCD299248371FEF0428C8C84C4C064D77BF5663A8F0B067E784BD3BA9FE3AC720D9AC048D +70EA93BDA9A9FC7090AC36BE749A514198C6A9A953650C73F7C40B496767F2FFA303134549C8 +C0B4CA24C40868D22126A8A2FD6DDCA8535792644F109D9A53628BA787E76B6A5AB7E4B2BF90 +1F7547388839D9E7FB2E8114EBA3357BBE95F10BD70C16693032234DC8CABF420D14019F3C3D +BA872D5C5DE8EBCAF343E18345A2B34B9D299E6E0FC49DC07A6500DFC27F7E78724B01B56523 +87F59ECD335856B76694CA43350FB40E3CB11D4A1334E86057A88F0372622DF11B4C6AE2F02F +4E6475B4351265D1730BD0CAF5D6891764FB5E5909DCA5A2ED1AF0484E3677CFB38EBC5993EC +87B8B4E588FF9C2B85C61F8704E1DBE89AD116C55163B88DE73FE118F8B6737CCEDFA28A37C5 +CF58BD59CD6C7ECF9306D38706DB046BA0AB5542BA5391808EAB5B2211A3824A018266BBEA06 +074703E70093CC624824A387B1240023607EDFAC35FADBCF2F238DFE1A2BF494A7BC16D16381 +ED52303AB267FE5BC9C9C71848E8C0AFC603531193E8C6467ACF2E96FB22E56C502394CC8721 +581E305295002C7316B251A9668945761CFA5F1CAF4A6CBE8F74B69D65A2307A4195F6D264BF +D4C2DA1174006EAEE1CC0F66D50507A887834D9710C40DE47D2B12F62827585F49A76E266F9E +4A787F6012AB3D03488F0EF975CE81882C42D8E14E2B23696B0D7D220DC130F660E758E70FB7 +0C9F6D77437B10DD6245324FC6BA21DC0E9C4FE5BC2344EEC300C6B9B53A68005A38493A7829 +EF51F89EF4E049539E237687763E951D64741C0714F60850C8822070E8AC4670AB6A8BD9A597 +733DB0C113801698E89F74B5892050170B1220F66D123396D40AD0E32EA8DC3D7ED58E26C776 +1E997BFFC7468D884A0518A201D132D535067138EBD3185E84505B8B6606882270FE2B9CD394 +66D6BE7583B3F9B1701EBD49129ECB6D8DBFFC80382A95DFECD9B35D4F25D35BD39CB264082A +0A12B570E2394DC231CE55ECD62122B7E8AF1AFCEC346B0AE92AAE17EFB5B29B234187C79DCB +1BF735CEDDCDE0EDF8F1E514A2FC236F37D9D41CA8E0AE329F4D79E1EAB3F345EC8624153E6D +E6F5C5F0DBF8FA8B152E3C10412714466F2404472A78FC7B984B3AA8F6F655F13C3F1FDB10FE +BA215E5F3561FC3C79D07BA8547005665DB79F64C015552AE573BA32AD62FEB08DBDB5304B69 +869CDA9086F7D180D6179CF2B6ECD220A5C20C4E3B6892BA80B3FAB8E03C05963F1C176DD30B +510189AAE745AC5C03042CF95AE3885B5407C323B4349A3CB445EBEF3CF298725E1D0FD3F240 +FDFB4E38C917BF10F34FB5E5BA2D88F72BA1C08FCAE86774B0535B31DD7C7D47B066C4716214 +671E653A36759D0B19AFFC93F64B41B83DA2BBB8087B07125CB115410A8EBD9D712B6B7A54AE +25F79B7C6C70C7FD9542FC0CAC783F3B8F8E9AC4E089E6F4A6ECB54F312199CEE85833C5E077 +5DF387123383C3770056473B166AAAD7E3615590B6EB9979D837C3558EED8645354AAB3BA242 +71D1B18B87514847C59AAC104FB483C47F3CEAC41ADE74F9CC5D86E1509ACF12BF29C6632D96 +05BAE3AE921C6EE6219BEA5C54BAA03FEAC7E4BE6A2C2570DAE022C8172DEF353FAD3BF44F3D +38DE838BA4E0F785973FE639321022C83EECFEE606BF47567DF300E3CCCB041766285912B011 +249F26CF35049E368B855C960DBF5A84DBF4CCF68A65CBFF5A46BEB6A0E36335D886534A295E +A6D6573DECC1556D3F805030A7853FE4F6E896A722CC5C4B968302C7CFEF896F38EA2A1B5A1C +1C73D462974AC0730E6829DF882D4FAAA72DDE7FDB838AB8ED392257B2A1B5FA781FD572990A +4493DF8130BACF4730D9FF732DEB84A31CD76FCBB154E383A55A3C803B07057A92BEF5D56559 +A876E760C6A08D2BF31F4374A9796F9FD71D323AC9036775B346B99E6AD2948885461CEFB703 +B801EDAE4CEDD9C62BD1AD15C45A6EA4FCE3A500C8B9FEF22A8D8D79402D6538F9604E11BAF6 +1F779323B783BB1BAE7E12679890835D150CB3196A70FBECDF3AD7279AA24189D8F75C82AF58 +A9B0770BB155FAD8B400656CB89DEC49B3A14E5470040FA18E6D86D071525F1AF2A779E4B274 +1EAE1D4055DE3B520E143A660A7E9ACBDC354F4589C59E601B8AD3628998DE791CCADFC45486 +995C69FD315E09A33DE11A09551185C1D843A11AA015C2C43281FFC38306A3A07917996E344A +3F230465D2C42F743506DDFDB0B1CA2BE16705F4299C77DCDBBB78646FA07EDD0A411082251A +B49CA270CA0E9C6066E475C5967A4FAD7264638C63DF88351371A7A63D0E5B3064747E5E9D52 +B99179E13FBBDC9461A54342DA3FB98FEAAC7A1DC10B6E708EF04E7A02D84C72EEB0A3465FB6 +B1C76C2216D218E64CD54CC3F690CA6BD98C6913A0BA9B5496C425138FA04797CBC1566F381B +CB46BF2C68AE286EE2A27F8B9EF7D232CC89485114A5B2FEDA1D0F8AA97425E29A7CD47600E9 +82EC75AD3C58F4F28E908FC0F0955560F8502A4497DF6D4F7A6A1343EFD6974793E2DBF11B1B +4630DF9FD380F0CF01BB69ED2C2B13010AEC2173CCFB4682552B2800E91074A31A83CC3870A5 +5A70CD79E915BD08413324E14B88C9EE9B34BBD92717BEA8F6DEFC8E6DCF1868921BBB6AD163 +057D42EFACDA4048F5DC536C7B6F0E5BDC3DC46CCBAE5B538690E679E7CBAFBE78C27B8DB99C +672232AD764FEC2D7218E1FAA216CD1EEA7BAFA5AFD6220CF4D1EFF3F013D082B93565355032 +0D6663C959359E4E6B9B439C868CFA0F01429B5E976A1FD2876E3E722B1AF363466361057EDF +0CC2A93BF4A459C0730DFE9E7C7B19A1DF3DAE8C7871C78180A1828578883212E0085A3BE918 +DB0966D965F3199108A68B3A307433E82341B50F5509A9B87D4AAE3F536FADE30418BA1AD8D7 +9E1237B4F84067345EF75269EEDA1F024030EF28CF9D79F81D8C5F9F5BCA572737D60933158B +CD61655EA21DD1018962FB58A52891857FD440EE871E6054ECCF8CD1546827852F1843F8EA41 +C701AAC221E97F4C74DCF6C8600338486FDCA002FCA6A68B740D288F6335CB3687E9BAFB5D6B +B7F3740DD9E1A6AD6825A4BB522489766C84AF2A1E7DCC8CA0E2669B9348CF47C77A33896737 +57CDBEDA57A079EC6DCC516B51B67C9F2DF4835AA127CACCBB0B8E42DBBD4B635DDEE5CC4EAC +1FEAFB5BA3E104E495DF8A264C27B2358B286F81CEC983E9F3CEDDFB8B5910D81C128F532398 +2FB87588DAB1CF1646AAC3A4BA66799A18E0B833751625531932BF9096C3479DB8696049D6F3 +86B4768155148F2EFC928DB22BCF53E59F01663D50DD7C13885925C409F27D6E1D6F1B229A1B +AEB68B423F74B99739D5912BED355CB695CD7E15285B647C53EDB6AFA48F00795700358EFB2F +0E01F9E4C5456FF11D56D3EAB0578287CDE175F095251AB337343F4C2A6B40EFF271467B5250 +35F99F69FA9ABC2CBC78BBA342BD1730BB5C3CC07F2B8692FE89328243B54ED897A5BA9772BE +64C9234EFEAEE62AC5155CD65A66CF188C50FFA53B5F3B78D49FC9D35C677C6A827EFF15A10B +1BA2DD7B1F90F310220333010F36E9D93A5DACB253666A18D2346DF08C9337CE0FE806A745E2 +898B4C4890281AEAFE22FA42CA6607AEE24719A416B0BD943E416F937BA8988C6B520E6EAE78 +DE0E309BE1C2A719641517E4F3D5482F090055900BBA8FF70675B214126EBE3CAECAD24666A4 +7770325903AA8271F73ACC39F5DE03D250F2F33C6259CBD823F6F5D49F1C34E361C987160749 +13F8B0FF2521CD08914319D171CFD1E4966562083B418EC7D9647C4DE55E4E03BEFC23006E6B +5F13CBC4D1AEC758A676B5031DC080713163873D3DAE457BD75ADE007DA158CA2D08D104C39A +D9B316FA542C1420B6AACBAD4D493E1C772E4B1E2407BFEC694C1C9639A008883F73A4E67827 +E27BA8181E791B10248AE0E2FB581E1F6C4E7E32C64ED03ABA8E0A242C345F3CB9BF07772BFE +E7B2E6B81AD533D03F528D18E31914BFD244D31677A2A2E1DEBEAE80314E2FB38E76623CB1BA +725DB0CE13BEA97CF447FA3938EBA6ED2003451C6A89D948BD1EA907E3A94FF65760D53A20C4 +134A4868F81F97472F08F4EE4F4EE59F0642768C517997A8494AB19B20C65CE2F473FD9B3734 +4969AB121734534D6CC1C6BF4D5720CD01D4D889938E71BDC3B8074062849C8A1145FB69CC1D +BACAA7FAC653644FF5F484F705793B33F73C321FBAA03557E85D3B9B7923A84B370F6F4FC577 +6ACB0C1423C7F3FAD934C29608D9BCD4899C6DF59C2398679578D26D5237379E41E967DDB67D +798EE6EF00F59B50D8F0DE4288DAE073824275C20D609981074A583C43DA7A1370DF9009BF8C +058D60508AC2B4DD97165063100B5A622D168C7ED7CF690769573B7EAF6D8F99DDEDB0962B97 +B9C40D38B15717C83538FB95E243E1AA1165D2D3040420737382296C3EB234EA045006C25818 +D743D175EF2A80CC7E0E2BFC77AB2713011E4FF718F5166C101B279598D7CAA9A45A9FAA135E +69B8B73EB512A6ED54EAF33E324F5536500D5290F5477DD3385187E29A3BE985B22F7909DF43 +848372D2E013ACD50C6DC1FC4B39F5DE72DC293C565CE65712BA69AC33C23B230757C40DDC5E +517385E211C5E1DB2370A32E4CA069001AA0BBA1D2EBAD24331AEA8692CCDE85AB67EB80187E +F452AAF1F741C62DF21F715F51310FE22AC05F63C4E43C879F6CCD874648FF6A0D2A18E241D2 +0562DE8AF2D795CE2F285CD4BA64ABDBCBB00BA796C812C61597B2D8CFDD6BDD8ADC7E90850B +5F60E14A2793DB4393DDB9BCAD01D623D2D9C07CC893AAE088B42EC99493E0DAC521752B42F0 +E4BC6ABBDCFC92C674167E1A6DBDBBDC5D382D1932791C25A31E114B48F8FD110D1507603A56 +9018201869834B631CA6F91178D995D55E9FF41D4CFBC08D7655209B25E74AC28EDB08DA4049 +A6400FC8F0852A6E9D1DAEE159F507A56FE59BEB177B7A8967A8B043EAD2F2C0C1117044F6EF +5406B70D3CAB63C7C97ED5DB5A4E81C85622E7AC8255F292A4B1557EF5CAD30D5B7576E18DA9 +43AB5E37CD446C92EA057B137E47FA377E1638B32FE24660E9B27D2165583FC4FF7EF86CD53E +FEC4C70AD65EA222AD2BD824F02754C58796DC92A40472BAFFB40A922E5302610FDA9A6DD657 +A3B3F24E2A85B0C3C84394406893F297589B942AE91C0CF13B4B25FFA2EA8A4C642A8D1C7E5B +C6CE6DC6F89B76797568403070B1BF1A70DCBD895A83389CF931A2D1E95DD24A013CE9991FFB +90202661C150EA7E92243DCA1A3412C7AEBA5B94681594D8DB66328DFCDA7D0705377AA311DB +242351C6308D41068B2B0307250635DE75F9E0E13B9BD7C33F544A2044F393EA8D3F7209660E +F6C9C24A62935686063A0AEA796F9591B9C7F9E57196E90E29881D5B4C094F6533785E48CB71 +1A54A839566386FAE57D9B6AD584508DE26CD1CD1DF3E34D41FF74793C2F05E3BD7EB18BD477 +6C0C49B215EEB498D45D21BB60E36F85A899AAAD74B45AC097C3EDEC6C36D97B38D4E769A502 +6CA365EE306B5DC1EE932F9AF12EBA52495A6B7B737129EBF6B1EC165867D545C87161B99EB9 +FD7613092465BD80BEAE681397D56E3329C63F1BA8F48D4396412D750BF3E816EBA24C189489 +7B39D4DF8806B6B059D9F0A20533EF4C19AB8DC8A0AB5F49446689E44233E4A76F1C2FBE27C3 +15C078872399803E0E58629E3993D9B62FFC083A6C957489131610C9F9A130606BAF011921A1 +5D44DBB0AEC19A2BD022F2B713C41BA0C7C7F772D24ADE8C8DDAD89053F6416305D80E2554F5 +DC9A7E21A1C5C4FE68F7E66B500D8D2E4FB2BDA0CC3A65CE609DF98B81B264484290807A7FB1 +73C4D5A01CB1198EE883E8D8862AAE210C12E84330165B83992245D5E3BA046C3FB742C55EA1 +D72A086B36D9052E981B2D7800C94B4EFA2F9C9555A1876A3AC1B49BE72FFDDCB6DD704A5BF0 +904C4A2B10BC93E81F26CD4C8893954D150299FC47959C0597F9A828E86CC2E4F987DC140B03 +C1063407C924B5F32799CC29B231E0523F6DBDC920D67CD823E5A37C44904515BF348D75C969 +1BFF90132AFAF15121EFFB54943F01A6550F06C6900C7876BA533BADC79F499278791C677418 +7C917570EBCCC804DC42930804BA24AC79B84E59476E5FAF06F155AF18353DEBD21958FEC90D +4D7A5C97511DF5BFFEE9C77CB5A3DE52A4C4AB6AA405E3E4847900D8B774486A0DCB2AF23166 +11B246545FC590329A62EDFB76CA767F7676FF21A9D171C77F5CD310AF7AB6FFB10B74581F9B +10A6CEF863F86427DF0ACCB2BF3EFA7BAC5B0104FB2750FC111060E5E53B2244DFADCB548C57 +3FF3771BDCE4FE8F3593B2A47C05C13FA4782A75D1C2A8D0AF80AC1F5A4AB174EA3F18060202 +C599915BEDB9DAA2373AFD71099D565E976F59642A930465A7A45CD42E11F657ED7B5DBB49F7 +FA58FB739070484823526652FEF5340FABAABE7679C3B951552EA2518240422C6EABA838EBC0 +D42F7BE627D7B9CF20D13688FAA0A80ACC5F293C00F580A3779F331A52DDE22D5401C78FA42B +DFA0B9D4979671FE7CCB642972F047764CF5CD0E180CCAC8154F0021ED854D76CD9364A77D14 +F2C7AB778CF6459F47ECC750D9615CF348FB94C4A2259EFD2E5D415749513DAE442F840B5046 +79B5AFA05F381DEEB9885E21E8DF0EDBCA9DAD5EE47428CE2E347AAD48EE6111CBA5A3F77802 +7E8B62540E1483577235D6F02445C2C9E3364C986B51FBC03B4302F48DF7716C225DB04E1823 +590E5E64F2D776ACF6549768554DD376E617AAD05C2A764DC3BEAE8CEBC12976F1DAC2A41F5B +32B48E412444F3616DADE10AC585E1D8B7936C4A293CE678CEAC47D5CD1395A05E4ABEA987E1 +3A0D1069AD62450135170ADD22E02570F58242CAFEC1E47089116511049AB559DF9E1406CBBD +E0911FE9D3C1658F58DFF363D4E5C5A57FD862C347E7DA9B109AAEB6797919A358DD4C1F23B1 +04F8233A7DE7A256AEE9C9C149C6B447F417D55CDC029252B6034C3AE9FDB45C35DAB333B430 +890D1A2D3F32B6951EFC53DD1FC9E521A5A891BDA1F19B373E6A37B9DE1B1E503F78F27DE920 +911E16FB07833C734770F17227F7C76D7067DA1BAA3887EF8F16D1643156AFD52C4910977784 +06997633A63C58FC63EE43BC83C99BD80ED298887B91F3388685F7B13C0027547662CC0F64BF +2AAED6A4362D6C6671724451AA003D87AD6B9F8ADB9636F214BD5F013C4C0ED7EB685C17CBBA +CB44D912457FFD0F3726CFB8500487ACDD7E580346548BF165A3E8DC2C2385E105656A1E1953 +5263A09E9BD3B7C0AAE2D921F3321D9DAFE7B08814DB726F7B56C59804862BA095E4C5D3E5DB +454ABBBDA041698F951E8808A8A5CA86CECFDEC00A2D3462861D871AE19E8F223C755B0C0F3B +8710217E747010502F360401F98EA2F46E34DCA6BEF7EEDA347C0351B17555FF0C61CD568135 +022A50589239770213A5324AF5AD0F68D85B5A87D5C600A966BD16C7F2C4D80600935F14DBBE +FEBE33105CE41716C0E62A1CD18080E5407B0E55D575BFB41033E62D7AEBF9E61415D3F32C02 +E56F018BF5D9A8B8E47A0929EFD0E4710D52DED51BCF60B8F5DFC9FE7774F0B3C4C0D9E797A1 +22B7A899B5FDE3F2E6C636E3BE4EE21ED25DA5DBC2890ABDE56CF5FE7C47A7F04E86B204067A +E4FD00C32BEEF0939C128DA0F8601902AEED5EFE6997B313B668BD3594ED719175807F03BB72 +16F722884631435E05598B91AF40580139CA927CCC50746DA1D6D68AC3567E9A3A8DF77A60D6 +03DFFDA9761C3466DF50C8FD7C298AC713AE7674EEFA2537065A3B6A67523E5C4C4267BEAF87 +1B634CD26392ABD8538A54C4CBCEBD0B7748B31DC43A05CA835730D0E5EAB7AE8A861256671D +FCE6A8B2D37A4B7BD7132179163EB4CEBA50464B439AC81FA224C8F7201C345E185D53D14609 +728BE0EA91B584E78BC2E7B88FB454025FD92F0423E6C821A2B783CCF3FC8D7F2A7155B61096 +9785B346C5E4447513AD7650CEED23C2F991A8C3DC215953E222AF8456734C56764E3FA539E1 +A502394367E0F10CA1EBAEFE867681C6E7C5BFF5433F68B9735E6428A9166EF62CA43BF02036 +DAB15672A3805C9EB03E9EBCB6FC16F943FBD67FD7F5F1D25F64CB417E038569040A4250A15B +C0933C6C86B6EA0D59B85BDBF0EDC9FC3BF184B440AE5E5136B762A23C743DB47201437510AB +1EF118990945F9752390B73F90B9CCE7A281CFEFC1C643CEF2D67398271F7236B1CC124AE22E +AACD04B922BF405DD4ACB82A7BD28C4DC9B2AFC7B152777798917A1BA5C92C14AA34321E94C5 +C3307F8FC1AF824C52BDAF7F51E95D8CC79B6759D6073D68AF725410BEB923DA287CD54C202B +91C738FDF5A9F41A4C5F0A8DECCF48F5B579025FBB83D8B039AD73C82EDBD6065CE626F5CF8A +838ACDBA15A05A4BA26984C1D7D906A30CF6FF28F443E967FCED75E386F14DBBBD58527163D9 +050F1F290D0F9E43873EDFB865EFD791D1C5BF64582B59B8C1FFA03BB8CC90CA43D466E67333 +A7AD14E3BF24F786D05395A04E32C9B38D5ACA70E10A3AB5373D59675DED7D69B4463C43E071 +59EA1A028A5AE1125C637E430C0489D5E15C8C303762165F66409AF63C3A2C91506C56FC3641 +193A79A630AF6ECAAD5D83739E70909727EBB4F16A4BF721D6FCDFFA5D954F7848DA06E28FEE +E1D283708165C220A63B4A864D9DC5B6DE0354BA9353CD2B494261F7B257B0A754B3CDD52E9A +EC7C566F507DC292B2471190D3EBB72A4E1BD8A42591186FEC62E549CEB7BF65D7134B36CEBE +73272E8C5F8D72CF2A9058E05AD3C9765937F570B802BA20D0D02AB6E1B6BD9C2B396591173B +4C10976293041155FA4EBD82C51D844BA8F80DF7CF5FD65E3600694145CB35A450DDE4A8E878 +56044CA5D60337ACEF015930AAF0EB5CDF0B1E1A68BCF30BC0E7EA5D5C2736FC3CD262CAA6A9 +0E9CE2E04EE096305327E1C8FD3AF080DB83362C48A141FC130479EA1DA05EDB076109F2387B +F05FD252CACC81FA1903DB9992ED1F64E2FE510C642CF4CFFDD4EE7B10C089B5C86E5BB69DEA +2319C2932FF45D29DAFE3C82CE7E40674BA0B3D7989CAE0A727DC2A235D87A59DD3B4D35095D +FE3C155C6A81E101E6FC517657BB369AF76F6E1F336CE401711D6AC2A8F59EF8639E3EA31CF9 +0D658551B204D7FA73620C0F58C9C6F31BC04AAA58346EE5EAF4A909E5718206FA5DFA33224B +864E096092FA5F1CADBEF77CC148839D34BCB5FA37534E9535A89677973CC3074D1AAB7DE161 +902209CF7BDC36A72D819B3F56EA89DA7311EB7E9127FBD76A2E4622A13A8A75D086B233E4D7 +AE468EFB3E891B98029C051CB3F8CF448559121E36CB382CC227349D4E23DFB4B48850E43703 +1C43BAB97A3DF6BA3745036817D9E2A279A72F79FFBA64CB7BEDC67F003088E4FF9C67B955F2 +B27755B4BEF3EE2004952A07757BBF35D867213C46EEFD6F3E7C3788B2FF6395569C6DB9B754 +51427FF8C981F93CE4465B8752BA981245C02D0114AEFB57B7281ADE51976D058020C20316F4 +03545D1223F759470E0F13615344F39EB233C4C3B7037D802F14AA61AED76F095928A791497D +A74AF37D9E6BF3F9279100ABFD656C69D3F213501D581FB5431208691E7D1C93AE306642391C +361ABDCCD0E2C8C2B8866FA235E37E306EF9E3A7F8D157D08ECEA6234A118749C1F8F86EDAE1 +B65CF9925D7661B86DD88CB1284CAD6D5BF8288B75A7FC1B4D368C67D4268268617017A7FEAA +2BD49F2121AEE3A5B86E1C3960AF8AE73876478F2FD6E77D9897DC2208ABCD87EA3461A32717 +CD25B7CE6B7D67E233D2B6203B779017CD300D07463E856BF938B9BF72FAF468426DD43186AA +9DA5DEBB10E12D1F35F89B464EBDA702FFAA4673D99CCA3ABA68741FB9C2EF7AD75A262168FC +807B6C7C9BB8DDE5397DC7C03AC3FB540DC24C55271675696CB79456ECFC51D623CF61527471 +48ECDA89B0AEEF1388F71038A8CA246931D47DA52D3759B66491F5F8845C2B295BDB417512A7 +30E9A1D9C25E0645E5031ACF12E66D25DE534D3C0CCAD4FCA5C1E12177CE38447A8B427941E5 +42650A8E5F4430A46B3F795718EF2CFA98E9AFB21A67FB9FC1C2F4A87DCC11BF15C9D1420AB8 +37AEC4A0F7F17916055B0E829711C1499538AFAA83DDFD7016B89951DBCF1A8867A10480DACB +7FBAEFE55A8E2A54405804378F11CC8085F7DD8BC2325268FE003507EC92B0D9A3409B0F0E01 +BB0A05C4658C8B31F7E14D5FC2620BB81AE267E85641F246C7F8682B910A08939EB3AAEDBB71 +7164658976C32A53A2F93B60BC4731A1095F9314F31CF644D6E84A5F6F2D0A33F2E647257EF9 +D5914E315403FCDD5A7592E11DC091296A5E395D89DA8B85E18ECA098CCABC775E64DA9F30A5 +33113A5122E2E2BA128B0BFFC9BEC9EEAF669E88AAE1F659784F2907EF646A58F6644FF150F0 +EB3671758C81C882425249EC0FCF7583B160507EDBDD5A362923A741E4FE92F868821C006354 +25548AEEFF3C7C3094A651F9927CB7D0CF9C895DDEF6EF8BECF94C29816A680323DBA8BF395E +A2371445E74A09F90FCA22432FB4FF9006AC2789421AEE701D54617ADAB9CF351C2DF459626A +FF9DD0D5D5D9DDDD2CE5A42A5FF736C5881A86B94B8B20100168DCEA4466F5DDBB73352B0C81 +C69179938DCC461696702A3FB77DD6D7513535635E20788DC2A018281FB7231D95C9B9A94BEC +E5C6AE242126D38FC6F69D155857C1555031925AA842771478C43F7E2205388949A231B210F9 +696D14D18CD37AEFB0DE2D2AFDF53C84781D5740FC9C969145FCB45787E3E26EDA743C91B2A7 +E10F248FF1B38558A4F1447798FFA9A41D5E5C51F506560B3A33F632D856CAD2BDFD470F330E +6697ADF166B35B56C6BF3BE3D9B7896E714D84AE2E0FF67ABE9ABDDEF5CC0556BCBBA38F6DC8 +BF0D40C6F4970C3EEAECE1FD5A4C7461049805A2055C07DD1F200A34D6EEC6DE966624F05BA5 +714EF2404AFA3DA5F86F80EAAADDDF370DF0223E94B61550130C45E951ACACDEDEA426731FA0 +FE64AC5065719E3D691F57B9B6CAB4F0387BDBC3641765D01CC4203DAD4EDDC2E1EA3B17907D +A754E2DECD4BC1D14615AE2C35FD8BF10BCEE295D8D3E2D4940821FAF5877D1E8AECEE7C0803 +01D7121913D27AA371B88FFF45DBB25BA77D2710892E425B9F4266F5B0A076F5ABCCAB3C0155 +95F04440EE4DDFB38823038C993DBAA31E5AD5448DD4972A2001C707372135CAFEED9B5A456F +48E638099DEEB70EC360E2DB2B39D7A77328C6B3E84E318117FFF84BF85C6D195EA19811965C +FD9D735B9F211BA3694F3535C4AA235DA0D68C20B37CD60454BAAAECAD3104FABEA8707CC478 +1D7D733A0D51A7E51D8876AB30D741BBB0F09D9A9656A4B00464D9FB215F8A890C94126FECE6 +CC5639FD3800D98D1012BA7B898C71FCD011F32E2E2967187A4B56E8429BC3884E18F96075D2 +16AE15C8FDEC5AC747F3588A89068CD72664D7BF721EA7432C919C4BC40FBF926EBDE67C2E19 +133F967394241852D1B5C7604581CD8AE1AD3F1C52898320B336D30000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMBXTI10 +%!PS-AdobeFont-1.1: CMBXTI10 1.0 +%%CreationDate: 1991 Aug 18 17:46:30 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBXTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMBXTI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /sterling put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-29 -250 1274 754}readonly def +/UniqueID 5000771 def +currentdict end +currentfile eexec + +9B9C1569015F2C1D2BF560F4C0D52257BACEE583A5C939393E012707B47E0C1FA47D284A1EDC +9D01A497D772BCA8C543388E6DC0D1E2C4944740470E0914F65EFB0737B0851B2BA713A9A00B +36D07DA6BCB52920B9B59EFE587734027A3C5E6566AAD332FE6FBCCED1417802822A3B81D618 +7875263D6BBDA04BBCF6E4870FEEAD60F104BB3C5A766610DD11AEA64A6B107B0B04439FA288 +8B8CC39232BB83F7695ABA81F0260CD5248B9E649CDBA9914CB8D6D773D679FCC3463E9BF514 +C07B8A59BB54802BF5B9F4228C8B8B6A93F5CB6E4CECEDF3ED4C1B45D436A79D0605AB5BA567 +1BF4A19250D6097B2DB5ED045A5181A2CD083529D1E0348CB7A4C964D4A46A9860423C2128E8 +FEA6C2FED3172EC3248FC938BFCA9C203E46943B34EFF353A65048A47A67163137679B203F55 +81D54158719E31D0D4D3FBEC5BAF44BEB9F177DE2D803C9EFFA7BF891ABD703E805BA31B109A +3FAA3FADB7D2B0B6715E442535273FACDAC07195806F92E7899D681D2F9F66DE160AC9CCCA73 +51ED697190766A61F8D2A1BB13AFE3D5E900F651607676A6E6367D816F1D6538500C770BB745 +C4760AA539BFB55F5F6806589E21FF19C65A21565F38129F6F0B9DE7F8978760D49DC0256437 +1632DD9B729080A0E673FAC60EAD57447C081DEA03F3B073D01B34013646E9DE40B69F475591 +59070A4886F198B579A51A67EAEBF428671CE29A61A391B5DC2D72704C13052E66A665B55603 +5DD0B369918BDA248D700ADE79DF005ABADB022BB0BA2541ED90CE7F821362FD6070BE5CD0DA +4EBCDB7454BAB34A378A154DC0555993F32C0D0928DCFEC6FD9CBEFF662E5AF2042A27AF70F6 +DCDCBF1DCE427022F31E403C920FEF3DBE1AA859E6DE55842E1DD2C9A71B7EC6D89B9AD85EC0 +CBEFBA3D3D06C065BA92CB4E1547D613B0B5393634F63CB169564D9628BA4C4E317477CA28B6 +B9F8600A34F8A7E108134A496FB7F60CB85E7024C9454987D9A8FFE07FABB09218D50C9EC5B3 +37177A53C7CFBE950D0C420E2AAA3AB7728B11CF7DC42A7649CA3DAB3DCBBC4387C6050515CB +8F592D8C9393531D114FE6DA766AE9D34F34D5D10846DBC27DC13BAE07338D52A9A0FB7D2DDA +EE73F5F6473526ED4507B7E33B9A1FD93DB6BDDA9AB56EF8D260032064BFA016F6F2E975B13B +3D83822BA6E7F23C40E90725D1B03490BD0D2C939EA52776152ADD7C63063F9908F7DB16BA86 +24DAE1E537922D513816889CDB05D81C33495B563126255C2783206454A24027F5E649DAC93E +C86AE0CFAD7C13283E2C9B73D2D3DBEF5A74E645FE0FA4A0BA7F0204DF32BFEF28E9E941B3D3 +98D4D90E551D9DFC21333F7FA222DB930F953AF44216C95FAC4E5AA79674FA6CC0C39A2921E2 +AB970B2D3F2FE1BC9CAF5C0972A9F95D1DF81F34666A6BAC6839411BE79B8B23825B23B784C8 +CB797840B9C4D97DB77AD4D9DEF263C6309AC1F8261444112F1BB9ED6DBD6ECD75E1A3C0667C +0A0755391EAF29174196C9B987EA72ED4B49B2ED79B196227E3ED8AEBB123EC1BDB969261EBB +622EE8510C92FF40D270071EAACB8DCD6E29EACD86FD506DBBE459979C685C362929886E5341 +D0DA1632727ACD7C1EFE732925D6BD1C2C9123132649E7CD29B804401C12A62E13094FB6EA1A +BAC0DBFA8E0D762C6413D8F339C51054ACD667E0B194CBD10AB9B5D0235F7A8983671B2DA7CB +CFABBB15837212BF068279E740C52D7006C8EBFDFE4CF1B8329E8909C924AC02948BE3169491 +2010B462EF3639CA0CF5FF5DEB987B756E2C87A4D12D852D90A26BAC76DD8CA30E83DE70B050 +8374AB6AA3FCD1511C0608C7CD4224B780250B61BC0B5089400C1F89E786496D9E54E561DA19 +474876DB33EB12ADAC393F83E3603106977283DA4456F281F374D82744371DAA0E81AEFD1E73 +2888B3CACD25B7F8B417DD254B2561EDCD17067F637FC327D1C3CF42F72A5DF74276F74C5E82 +CA53A2C57AD55D2B520EAAD8371162135FCC376CE29F27DB48CE8C9798579AE5B97E42667633 +7EFDAF23EF08A9C72A869211F2862E9E0061686F2D8210F17B24CE92F9202B33702AAB8BA41B +48CF975E2B80E4008FDD49B1BFAC30C5907AF2C31A90AF6410B8B81C51B3AA71BADDEF2957FE +8192A3C7D2676400022FDAE131F1A82C91E4F360235568F3C4680273202C5C2922E5CC2BB7C7 +68988D10321108EE9B854B91606232AA18D6C517C009FEACDA894DADA3F030080D9D9E9283D1 +7276978841BDC27BF40F3990BD8BF7E4D570762348CAAD452BB8889241780D45486EC11C310B +80F965BBFB68368FBEEC0FFE402CAAEB0149DB92DEDF548FA96A9923A4B88553335AA4420F9A +47FB0669D0516B8167A23ECD3E880AAC1A6E3C32FF08E71DF8F1BA696394A3209C8CCD8CF6F0 +4B090B5F595B140889D2E45D2933876F244A30C71CCE5ECFA81D8ABC58F3DE60784AB91D42CB +E5FA2C019173BDD9AAFCD1BD0EAE9B5A48ACE2845C3140E254986BF6DA7B2C6A21CCC4043BAF +8015114FFD49135336D2613F069ECDDD5F06FC6B41730815C7A529DDAC3704E597E334A2EEF8 +BBEF664D25B9D4C2389D20EB1D78DB2A25640CC7011C3FE3739AB58C29D3AAFE8F4A80F0B487 +BF004E410448D34686794F6513B3AA2A04795DA763251C611D5AA9E17F8DCFBBE94597DF2E5D +9517A8A28D79F7307E09EF23671A858671EDC93C954A4F2075701A8049991161BA72CE393FAB +900BB690A28BDE1323C674CB865EAE09D21EFC5FDAD0F22B975727E25AF01C899C9814140FBF +AFD693DA145148373D967F362B5D69B6B91F013452FBF29EB1E3B4104F3F29878A5C3E824192 +B1F0F76331B3F528EE367B8347DF83412607B63ED29C61FC9CF031A0669F25772B927FEB3093 +41BA4479D3712115AB2A5D4CDAAFB2B80CBB9C31FCE48A8772BC3D084BC5ECA32D748B0EDB21 +D69E8EDF2FABCBC362CC3FA999A051C66A38CE6DD6B3F1981E344175045F0E11E2EA0793CEEC +CA5B7C636CCDF0C0B06A5C0AF9F823AF628FD9E1C14C2A3771979AEABFA3CE9CF05726147140 +99C3AC984046E8ED8A7F3F8BB7EEBAE27552CCFB1F3B81856F5F4062BC84696ED53D4A615FF8 +0CDD475E18E4DC4C2E3C5946CA3FF7498C068ED5EDA8BECC457C27A4F4FA61CC7E8C49C87826 +E6A3F6DC64B3DD94C3D01E7C1A2F93233B4FB57464A47DE8AE5ABC9BCC8D28177CCFCB834CF2 +F159D7265DA798D2CA94B1AC6335FDC3DE4986EA706D07D05FECBBB5BC0B09F8800069F97392 +EC32AA169DE11BFBC5DB3A78AFCAB96BAFD4561E0CEC8DBC268F98ACDC35CE74200370745D80 +9380F7813EA0AA2D5871359C5B02FC6C7DF613F9FCFDD9CC897664943192F75DB8233858F9EA +9FEAA89BA7B9C398AB380A5A4B362A0114A1711D1C03417A75ABAA7E87CEC990428A0904B3A6 +74DC6C3C8B46A75DFAEA60C8ED5F08BB08534F0E4D01C84B401B153614C231BBD88CB8AEB08D +F2D422976DE95139C6A3DAC9638E06008238F0CEA90A42E4B7BED8B9BD3403866CFA19284E68 +1D5628DFFBE67B73F2C8744B368D0BE00CA1E52A17B75160E03108E63FF4B82B8E36222AF32C +B83EC3249B9BA1525B2B862460A35EDB0803F73C997D20E39302259061076C9E25BF16F54B40 +8B0E965A238EADF7D4456DC162F493C01EC92E6ED6348FCB9A932FF8DBDF807084CB6F2925A7 +BA26075EC54FFC673DB23F15ECBB033EAE8A27848C77C10E2DC55A5B5FE865D808536C709428 +B6A46F13E1755212BDDB512B982F494BF48C627D5C13FDD9F5AF91E0F5C1ADAD9D619C67C4F1 +925D41E6AB98F586AC08AD28758A211C0DD2A7D25FF0653394064827536773AA01A240261234 +A4762D42225B3903FAC74E5BAB0C8FF38414F7596617D50C194BF067A860E79E85822D250925 +065288A8195031FA77C321DC2B0A6FA80044C8947E934B1845A4191D4E4E3734859B86BF5184 +B191738184A2DF81BFB7BEF177E95764B7FD6BFC9BC715F496913567F8E56CD54A2A0A395866 +4D8E0FDACE3F1DC732D6018DE0D026AB1D4B124002C9F0FC73CD45EEBBD8DC28771925E31AA9 +DA6E23221F9CF21E2C9B5B8A12E4F6B9C2F8B46DFCCE9EDA8DB9B42E57647815B48984FE3B56 +079DF654815FBF7C5E0AE8439A18A594C0DF6CDCDF81635BCD81BE813B457FB8116E449F55F8 +A98AFDFBDB0385F4A97D24F8102A727FD71DC858AE0FFDFCC57DBBBC1D0D0027CC627CD43D8C +8D879C3A9B1A920B9D37B777CD04D4746847B2388CF241B954D123999D537C4125D99B153F16 +ABD24938CC57B7289277F89A85B7B7069987D529CC5BCF2756EACF33C561ECA3A7EC948EB641 +74C7DEA8425C7350927B0751F4BBE58937570892E8998A12CE8B743315E530EA961BAA1CE839 +6A92A22E5CFFB8373469DD5F44B0E3C567994FF1EE716DD3EEE3E58C8F01D9164C3A0351DCDA +E1729EF3D8FC436DF7D2DB16BC9BCB23E624934E08824478B9CE1DAD59F8E7DF718CDA0A3E34 +2DD051F383B56BD12C68618333C000CFD2BA26A7FEBD7E2A2F8D88A4BB188091046510DE8249 +9C6382451305C060143ECDAF59C7EC9AB09F075064D3A9AB6581D9071A7733AB83F9A6D79F54 +5DDC6957C1C50CDA488945828506F5AE07EBCF4951E5677F0D4539C11D16795BE3B5D7D962FE +555F403F45FB4744E8EA56C901B8C3CC239C392E6B21F56D7D5B3B13C9417076B67643E9885A +53FB6D0B7D945E9FB2BF7F56D6020FAD12330FA78F43F22B9DE3158171A1078E88147CA55022 +7085903C5C121C49B26162F48D251BEA609E3E4D98C3C31144920103F5C7204DDEECDF98C184 +1A55E5CAC5FFFCE1DA713B8916A76CE25BCF57ADDF51AD7F071B7133172AB09A7A5536807273 +1BFE54C10FE139EF2BEFD02E71579B6C974402FDC69C4F87397ED953668A02D06DA995E3CF9F +3D56EBCA6AFF4A73B4912F06FE3822E64DE83D0F05150819D0BA5991EEEEBB8373018CFE98E3 +7F87D00B4A79C462A0E8306390D280BD2BFB64FF4AA5EFC61BEC9E3CF46B8999FF0DA160EDB7 +5BA2A9BB98EA0489EE72F23298B814F37C1D834A93E62A5F86991D19A2A366A05E623D9769D5 +4AD7F809BFE715F7644B5A1B64A765AEA45CE1F2C4397EA756332D6C98E1456040E409B8B0FB +CAE369D90132FE21A50787B72CFBA411F6B00D9BC92053B9EB6AA514AFCA43A21AED3C3F5442 +B05449E1D893A2BE615254B69B1217874E4126D42799846EAE0210582F81E28A0B7F7F36782F +3FDAB2D15BAFA1AE12C098F1493D7F913F2BAFC6F06BDF132E987AA4B3ADCF799F4BCD60C9DD +F21D76F0BF1BAE811A42FD4641C824CA770EF610F8977D0DE00243D971833FBB9AF05D1848B3 +11A57E36CA62BDC962A9747FBC771413223E14629C633D870F686F51949518DFF19842B35262 +ED85821AB8EC66F2F86BD82764BE847375054A5C34BD25A338486AADE33E2D7EA14A696DA997 +B0D6D14A684890ECFCF821DFD6ED93DFA61BC75A5886EA889C5DFD9311F8DC59352B4FC8F2F2 +096C663A5CEF52778BE746F798166686C4F5D069238B4E6419F5D33840F6B1C560FA9964CD76 +B371A739E370511B7300F13BB992744B444500D01B5E8F23893F0A3BF72CEB8B5878AAEC4355 +284C06FB15CC0DB70EBDC36E334DAB5540BFBCCED292265103802D369230119311B9A8119718 +DFABE8C4FD90B6BFFFD40D60D8A3984B0B81A2BE2E49159964FBC0C3F6C63C73D888696CAD2B +965602F04F767BC6AF5D2176977177415C29A586815F1BE29E2EC308E7731E5A2CFD9508C832 +B30013C1E3B3C25487DBFA7813FD95B2B43C896AB714E10D04700911CDED4CFF4DD2B7A08791 +863A18F23A4B211E68CFAFB9915190DBFE9F21B032920F97776B317DEA4B1FB1992F419D7F9B +76A1BEDC5D8DE4B8C6CF42C5453D8C8203D43D74D7DFB47991187B6E9A802110774EB70F0056 +986DB1C89F2466E23CA9404582ABB4B227104C17E678FF4A3749E2FF66B226F629909C0721D0 +18B8A32D84E37CBA9CF2898B75FC19912569244B04DB4C328EFDD1040369CCE6671A4F0E96F9 +5A881D6E1FB7D7792A5B67B1DE2DB1F771029CE1E827CB83ED9062A6466197AA0D6034B05858 +CA043EC91EEA99D558A360F3A473AC868F3D6A964EA89AB73ECAF6A8CE768C07A5D503BCC3A6 +07524AB2BEDED304D0D3D7BB460C941E1F9E941EB8CB3FC61B47BC696E5C058D6160440B8C20 +2E0B9F8D6C30332FE19BDEFACE2656D3F784DCB5E1B84F3C1A9D37CD735BF6B0AE6246BC1C74 +EB8A5AD6315EC88456539BF5ED2243F979D52085A81ABC078D45E614801261751B6CC8859F13 +4D05E28D026C3F02CB3B2766CC74B63CBC93E5D7C9CE4768EC5AB94A4992F5AC0B807B4A077C +E52B6FDD1D283DB4B97340B2DD1C523B2B4D99AC6FE46866B34A17EAAC5EC913CD96A3A6197C +9DAF86B7CAA3C5052DE1D6B29D77BC952502FD399C8392FC6713BB0D630EF5CDC1E60B65CC34 +6B30E085BBC608CD57999D36188182C834BF6DB8C6CFB1656FEAB98DBCE30BC4BD11039E363D +D8AD2279CC9E718B60E38B75AD974F878BDC98CDF5AD1DEDCEFF10C948848025F3F6BC908622 +D82B27C6D39D4C7A365542B06138C24E92861F45FF3528227449B32E758AA5072486F44E889F +A71BA843BC309713E3AE718F3FF481614DFCBD99B0984A2379C03C4FF5FCD92A37E836A19702 +F1E805E845B2FC914C615455A6A94CABBB6247E9041A44D3AB684BF90FA04BB188CA7D083254 +E05ADBE61AF39712934896716F69D057ACF2D7D164AEDE5765E0BAC8022722B523A56467BFED +DF4DB012C1FDE5DFB583F713A11677CE7BD9F4BFCE3AC88B27965469C5ED4B807B00572D2707 +11F72C67D6DB27B3E5E4134E523B3FC41F193C1B5AF2D888527B9CC8F2DF07A6C55527228B50 +F6037E99D6747411B8FE3783007B3D378FA6F5A0558DCB60DDB4623F375BCC65BECED5FD8701 +A9017CB5CFC9A15B6A48F9EB6AC8789D4D2FAC76E3E4645288AF3FC395757BBC7D47A53FF273 +43D4D5FB8FA782C3C690350F7FEBF0F02E246A3AE57E585C23EB93AB35712970AB61BB036E20 +FAE444EB8C8EB4C60C7DA47DD530FC5CD6DA0F870762D2FF0B12EF977A6966EB2211A4D78D7D +8F7A84737EE6FD063261D4B69078E926D93F396D79FF6C2B5C916524A41C48EDF67BA12545E7 +C1074AC38FDF509588C0DEA3C329FA12233D38EC1CC43F7262FA0AFBA13035DA05CE4B5DDC67 +6F0778168B9EE75302378F13AD0FA89FECCF34D9CCE2A5B5F8F556081626C4E877EF0B0CAA99 +B5826C3B5932CF1FECDB6C95709835B2F71CDE9211EFA26BB6427605CE42832B4AA1C8FC8F13 +DC18407AB9B0229653CC033650344966B50597E9C486832B25F3603440FEE29BB0F4770061FE +95BEF70672A40FBB3AF0635922E73EFA192FB95D2722B6D59E6FCDCD9EAC8D011DD9854ADF5B +C8C9C87437DA6A572CB563A2DF27F60083C17C0C1A8D0793034BABE0BD48E24DD151E7A072E5 +1300673FC849E5A82E2B5B1B0CED7386C5F52FF2E67B63C898F53CCDE84A26CC040F52B9B0EF +4FB81E16532D1A6C4A8719AFDA699BC396A31155F5F98617AFA79E7A87CDD8CCEA3281D7199A +F3FD44BD3239590371B0AFAAAE884BD2FE202F25EF799E3DB87DD95545144F3AAA0DF7C49F04 +41091451B752501B8E8120A3BF98FB94B8197577939378AF83EB0F6BE53CBC695FEFCDB991C8 +AC1E7B85C6AA1EED8E7F8D433BE46DEE57BB13396D4B87D013747356A15A1B2ABB25424C8A7A +FCAAD955BBD3919882E6FA9EC0828DFAAD4BC45535AC6AF3018F9BEFE96EC17327DE4D206646 +1AF62E2E02A086AC33F62157E1E903F469712635C153A647AA85C2EE5F853CFB25A4CF099A8E +8CB7641E59513EDA16C0F61C6F18A3865413A7149C6A54921F71340924E2A4EC94D81DB10322 +03A3B903363723A5E48175F876CB5A520BB136578E678DBE122D36FCBD9E306291EAE7EEFBF8 +43A47F3F1E00CC80562490C413263395EB85F6B110078B00E1CB6046DD2D0EE171174E636873 +7DBC645208616769A711030628E96B00AADAF597E7871FCAB42B8A131521A8B15E2464697941 +838D124ACDB066EB24C05BB6D1826DA795BA03CED47666418A68CE068607530E57BA8CB83EE8 +CCDD9954E2697A96E444C5E654CD0EDEE968C2E50F472A1DD4500E5926A01A7C919DDBA5F4A5 +CA9E3907804C17745EFB6853C18B4AE3160916E1F7E97751EFFE30925D232844E69444CD1120 +B780CCD15DCEFA939A3A3C476AC9BA2214AC80B12C12305CAB2C58FF12BC415C432D92BDF067 +A3434F523D9F361F461F608B506F89D0DA482F86DD36EA9EE7E54AB577B03C970384E005C7AC +95E34F7C42A139523C6EED5D335744718C271BB40E6C7B5B3F30E90C226DCD631BB5801866A8 +0B81B0699789FA49CF9BC97C802D8FC7B93C1AE7519ED35D37B7A345449B2DD436EA6FFF1DB4 +3841C07E10AFC76E8CE538EBC6EAB36231238EF17BBF9418DFE56AE9C197AA249EC24C9EE740 +35C56D6E51065E05EA3737508743DA46647F683420939488260CC41162F24827C2D82AAF79C4 +770FDC3F06BDD72F93F4781FB070DDAC24C39B407AA6825E9E94ACD25CE68CCBD56D69C7F5F7 +C9165D09807222C1EAC7D3BDD1AD93B5A271E9C47E6E6B2D23B791D8174644A08C8CFDBD6FE4 +9EA3B526068D43DD6E0E5C955941F5A5BC8CCA1A609439DB7971BEAF2942EE23CA006F9CC435 +A57995CEA5B34137B99D6C77FDDD0C289E1916060C2B839BB0EAEE9050B2AEF86AE3061ACA19 +B61B3C0ECEC44A0B9361C783816A437FB24978532EA920FA4104623AE10B3D455ECB8BBF53C6 +97EF74E457C4C6B8DD093AA71B3256F6242AE04B61500685B0A40E0DEE2E286EB1EE6F073B88 +C6AEC865E0F27DA968F96A69680FC3903D884A07256033AA97CA97235878DAD33F665E4E391E +BB88CDF780DFBF97FBCB255C78CE07B519FF3FFFDAB0A8B20A99C9ED6B4B44A13361AECF5C59 +92311FB05D238206FFFC39421CBC203855ADA6DAB66A4ECAA5D034DD1CDA700DB6FD1E8E30D0 +1AD3D50BF0E44BE7CA1751D91DDBFDB216EF3C3E28516356C4E3B9542024D981D33D556BD7DF +307BA6C05503B898BB3A95ABECBD968FC9D2DCD3D8EC5655268FB625211C61AC887F0855EDC7 +0C2FDB791DA38F9D55B652B9FA7AC952A22F5AB907B14218A42B89CA70B15788487534B83A04 +6DDF35CDC2CAB162D650E62DE7D2F9FDC2CDFEC2674A351E0CBD90DC2033D34516F1E3C4BB52 +94D3CA0D45BBA7F3EFF1F5D7EF5F0EA7ADB8EF55C3E97B31F3352019B62EF0B746B7747F5880 +40E406B20400AC284D72B5152C4CAF16A03F49CD109C02F521C0EBCC4E6C4FD0B80A82297D63 +F50A1F5CD9DBAE32CBFFF7F4D44FFED424872E61D56C4E54AB5BD7909E529811BCF65EB67888 +F5070FFFB07204DD0397AC12680F004FBE09B2231BD38FD3A460615171DC927EF087CE65E7DC +255DF61DB063D997C96DE41C0955E3E17F5B00569C18119A137951DED7603FD74CE554A56E09 +649D96AC755AFF91BD323F6DB6E2BB76D370150155EF3954ED41CD97BB3BBA6C9708E1404C6D +EA7B6FFACB52A72C39C5DCB198ABD9FE74C9DFD13B171ED875CD62CB5F1325E2625D6110D32E +DBD63A91027D4F0D599E85824ABCDD2BE6F61A65E93D2EC0409E1F6E90DD147C746C5902D0E8 +DE16DF365C238562233FF6F15CE8CCB47C04120F40902D3CC7242B4DA5AFFAC301B5DE237B37 +5DF7A77F6EE619F0054DDC96FCD895CF6D5331EF49C5C0C1862C480948DEFA7D49220662A17C +BE3FB75985D8076E4B514BDFCC7715A8C1DC0228617BAEA63DD2C9B4442868F187EE9837D422 +531B43ED5B62AC32754FB4A7599D03AEC47CD28BA9A130A4917008905645461E740B0DB4F199 +2A13CB1F8142824D0EA7B9A0332C32D324489728A0EFCC790DE42C33AFD2D9B309506C465BFA +DB04A444D34A0DFC650992ECD9DC434714FF453F91797FDA8689736F35B90907C555EB1236E6 +BDD4122D9616BCACDA07E5D53A4883B065ED0E40FEBBB7F6A291C5CFC21614B4772B8B13C1F3 +2B41BC0FE25985EA43C2033A0F45D9B0B1A59F043D7C18789F59EB72BC540B776CFD06A3B7C2 +BF59E36977064A8D9B1C6AD145950A9B2D29C4DB9E6E73245EEE9DB4731F78D8D67F2CEAEE82 +9D260D5179B331884E4678D27CAA5A45DF3CC25AAB2EEF7253322FD90362DAC3436C174110CB +4B84B0271966856AECA30B29AD2F092481049BD7411BD3F3E70B926029D8123105E49C44C962 +8E92CDA307D5F7453A07BC50ABC902288DF5147041236150C17BDC83A5E222AA43F3B5BAD351 +8F0A0FDC273B39D0E0B9FD3FF1D47AD201A33A7AB888F5ABBDC2BFB335D30F7CC9994E7BEA7D +D9F8A56A4656E31FCAD5A478A8DE277EAAC6FC38047C9F93EAD457F6255854401274FFE5F25F +020F7CD1CBFCFC0BF1431D95A74C2D9CD6832512A6BD7292C04DB0EA4D9E0D5B86B7711B61B5 +8BC491691D250C88BDAB1455C793F1E3D9BFC7D3F95B7B3035A77A943CA3FF05D0CF296371F8 +AA25C9738A1E6A89A9D28510F4709B56F9BD37DAFC4CCF7F2265A789937CDD7C094ECE80984B +2F8D98A246991E80AFA499FCB48B7B64F84C6AD8EAC491F2BF6167678AA37472879093C1AC66 +78DBB013F3961903A73A606960A1278601D37D2CAE85F87EBEC391266C6BF1BAF786DE093E31 +C9F24F4B47D72CCA931EB27BA7C76A5655C97B31F1897C9D6C67F76051AF5E00C94E51A80343 +6C3DC3B501D6A692DAA9C1DD2CBCBFE4E4A62D3A93C2ACAB52937EAB27E243832B1767129BE8 +858AFE9239259A2AC1945F9D5D585601D0CF1CC510D8EA588459DA0731C94A6A746E57F4E7E4 +026F03D6383CA758BA5563BAEF5468DF1AA2443B9678F394E9E48677FC31D625FD78AB9EC70B +85641608EA30C07FF3850CB842322AAC297E724EFE8C65B2C4CE08B7C5D103495BC1977EDE6B +DD31E887B94753588421ABD75396EBE1891169F2A7C4E85B8D815E5F6F4218A450BCEC782D47 +97974F2D0AE1FD0D5395B2FC52071A4F0A243CC5C8917D44C74064A331F7A9D29E2D9CF64300 +522677175E602BC348D70AB58A0A0A181BAEA97BA58D0AF900FA60FEC1788043D46ED4E1BB99 +C0FAA77A6828774F8626500A98BC5F83EFD1520D1B2851C9A8C98B6C7E9F2F34F933235839CD +4CA12C504BD0F0893862B0A4360689134BE6E8B2D9BF35EC4C5CCEF876F271C7CC09BA66287E +4383830411C1132154D7937A05BBBE0093C4CF11B33E02BD4DB9E51DC6BD7C1C2BBDA8E6D354 +E13A44ED43D144CF117D0E47D73BD58460687DF8D7344C4EECE4E23655C52E4F3E7028CEE553 +BB225C298C92A7F1A523E848FDEB261E696CB52FB02E843776824C2663871262A84264C3D3AA +5F2DE42ADBDB45D6553095B677F5CFB3155AC73B310A50033F6099C4F2539F6430012BF93EDF +9EC4993B4C9932A3BCD633AED64934E45456278C2FD59B21DD436DD3278360106D66D31F2519 +7745535297D1E1DFC5B5705A366D91AA93569F0FB05FE9EE6C6BAEE69A7626E4C29F4E97A08E +AA27E37F9D0575F1E3F27A8E6C9F9922882124CCD4AFD2F10E7386FD4BD8CBF60B56507BE7C5 +574236385E1B4CCF263879C4DF21E6A21EDFDF9B4512E2AB118801AD9F570AADDB91F68CD9A7 +E1CD751614E19134F8872BAF85FDFB92CF2D508B0125D3DAF4557A73B670FF8ACF03B9D537ED +BE53C45757465F54A77BF1FEFDBDB526A35FD6CDA3C5E0EEA0EA360E2C2A9432FE96EE64317D +A6C74C102593B34BE134B1378E2BB4F522889B07C3B1DD35874476FC39BD2B1D75100B5FC145 +789DEDC161BA06B0AC456CF015EC2662E5D4B331FB86B3DE3C32E4A4286AB731D2E6D797989D +8C366DBF17ED541065F925E056147C81C4DF3354A4CA63916106DFB5722B2D35C509BA397DED +56074ECD2468F27BAAD15E4318A463A7E8295C93B2F8AA1334B1CE0179A746F130D7DE56A2FD +516E415AC86DE63B8F6C2DAE760E0A9BD58493E18B6F6F5F6E10ED929CA4920948693E5AD66E +27536A9C7A1A1AC1650DA3F4FE914DD4E1770A6ABABC4058C3F4E353D5E491F7D5378D71731C +0EFF2161332E61712258CC48E59C9B886CB80A168E6B9B1393A2D6DB356C59D980A8FFC42303 +C34450BC2A52E0A6CCD5B5333FFE2390A1149321065B07AE3D6CF516745E08BACADB5A9B7989 +66A3E8362B9A111A60B93EA319DF4174C7529AAD864C72CE929853C506BF4D5E5EE70985C289 +9F9976E812434FB639A4CBEFAE9186712B7D00BA3FF7A376C1AAB8442E909A334C80FAE29029 +028B17E7C5DBDDF372317DF16DF2C227ED0390209A6BDAA8FAAC2A073D8FEFDE7A2529E61E48 +654582202380FA486915AB0104B4D8885F1EE5A6FB222046883BC243431C4793D52265F0481A +4734581F499FC85BA2B771E91E6BE6F97F401FB277D0DAAB686F8BA49236E462FF3117FB97CF +501B8CE8CE203FA32B856572C04168A87B4CD844DF2AFCB22486FF7F734C202A138AD173208B +4D40542C07BE7817FB7357D9541F94B809AC3BC701D43F365B6F6FDDDF157A7FB7DD377D4D70 +B14E1757FD6D34D27473EB9F5EB97425D474F1497D7F03457842E1BB929BF4A1D33B98D3B0C3 +B7D14927804B5DDFC71C044D0B3AFDBCF242C5B3C435AA8BC8C6134E3821D9DFD4EA59CFCE0B +5DA72E5FE4C1F4A24B7839419E3DF639F9AF2A6B595249AE14FD951AF1F938664824A459E858 +BA8ADC49DA53596E8A81700CEE5B0E94980A3EB471DE73C8DC3FD500C5F8F4E7AD4EA4B891DB +FD0B5ABCCFC986C8C0E866CC93F92F9E2A162EFD943E477E6766E542DE1EE1519549F7F5D998 +190950E03896903C05177399E16BCD052C0191ED812910DB69E482D8C97AF625E848450E528D +0EA0B5BD4092030754F57C99FF82F87C3687823EE9E0DF7CE048863CF6B66247D7FEC1CBE6BA +9FE6C233FC3C0847BBAC396C8B5D319D8ED86A89E46D1A5D4AD6767FFD257B28F7A85B5033DC +14D57672871387DAFB33445747B09A2A8DF6DDBEB0092F919DF7FE5D53A1809907EDF73055CF +5BCF36F1A20168D56E0810DA766DA21DCC9B1EAAC7A4DDD43B4B86F74B18CAC5FEB30202ADFB +22832069EDA58C9CEEF5DD277C3072961777E4712E6FCD2E376D67F38511A9D107A93A7A7679 +282809D3E9A2E5D47D3A9B81A2E9361750C64B08328AE5200D3DBE6F00320A90237EF6940C65 +9CB3B9FC35413DA9BADB0F4B79CC8F117E07D9E2152978FF7ED41CF11D67B9F2D22CAD6352F7 +6635D8F19FDE1A779A85E06D0EC52876F8CDA736B81E90BC7BFDBBF6A065D4B6770784C28B5E +F116902073D863CCA4B26CB171CACF02F61C46693A51C7FD60024660466F1A4157FF8CB699DE +E5205EBC9CC7E9367140E16639B49ADF600296E3FBBF74B5A915638F5C9D9230827460D38943 +B930595E9DE971C04498E3FB9FC2BEBA616E5EA044BC61BEF1486856B093A8D6EB58875267B3 +A5166D9A3D90A75F442FFE61B71A6745396A20AB4484534A2C23EF7C441AA62D2D3A6B44650C +594D014CB9616E7C4119CB27BAE6242CF7E15F8DC265FEFA86E47B23CAD33CACEDF91CC4BF12 +71296AFBAD74FDBB84D037E8569202FC74CAF78912D2B23ECE3D511E69407F3B60BD6A8699FC +480B1145A53CAAFCBDEBDB90675E09305C83FB911FE4523E5053E4B653FF45D5FF79B0B512C8 +2D44E26962F61066D2A8FB49012397C1315FAE275C9F16A0D045315080B52E4CC6A892D7AE5E +48F18D8C8B187915D88ABDB01E0C35F2AE7C8C37AEA7811D2BB7079BB8E8F4ACAFA957B46381 +C4AD359578D4A4E9CA37E3A823F6EFAAAD997494984F772938C3EEC578CA3C82F0AC2D9DE9DB +6A7486E7DC55452F50E08E56C4CBF715EF7144F5CF6F0A0037E97258B8D82E7B110438A04604 +2495F3A4C4EACDB42E082E235E7BBFD7A01AFBF9D79CE9A5062887C4B49E1BF9B5298C95E9F8 +6F22B0BE99D0B5B09C3EBECB9D85056FB8803AFA8722A59D3711094EE03AF05DE00A49808E7A +9E37A9D94AD54F974C675460DB19E6040F2B3640D9208386DE05554403CF051DCAA4C45568D9 +6970F317E816078FA5C0984E6E13C671B923683BB6F5F74A0967661BEA05DACBAC5B4A6FD988 +ECB47595A530F33C19B3E7F939B9A40EA321833BFCCBCD5C05AB84D953A15BF0322E6DBA9606 +1D6FA73F6C7F598B20C1DCAD6F5AF5527B4C1EEB4E6B131644C6D0C5F5C25D1A4EAAA7B41CBF +37F67AE1266A642F4D48524D5D2501F70FE95A772B44617AE70C121D7255675F966BF3C9CFF4 +14D79453B3C87ACB479D34D20FEA4641009C3D966187C7DED8827E4D1C972AD9C81133955444 +E49C8452B1B3A1CE832C34AC9219B3836FE5717A091958C245ED7D48D2164DEF968ABBE9E1F6 +03DD22197300314D86C6E36A02FD60B411986700EC1194D2DE751E12D1EF194666A5F4BB34EE +FB2398378E08927623B6540D097C6E6B1990994DC8F9C2D091E50A10686614228758E8D6165C +F47C35E3015278898062F8C9C3317E91115EE0141DE2EC4E1212F0F610FD2087A0C0BE9B09BE +F2DC1763FC6B9902D7BE000DBC3FB9157ED1626703EE5102B07AD4A51924C6ADAFFC7D22B410 +EA80CA239BB627DF182B448CBF7CDEC5C7B7C9D53F2ACFA7BFA9CC1A8DF644A493089842B2C9 +FFE88F9B58941EC003B4CF6D6D1AE723D48B5E8C90869BE00393F2FE8643BC0B75CCE2352547 +FC8CFE53675B69822EF452E36B3C6EE7F6BAADD97B5B2688E07A520CB890E7388DFCAD1AEDAB +6ABC32FA9CD5DCA0AAAC806C51FCC4A91FA99398E9AB65CDDD00807F99511DDC8DC36F81B47C +FC41A563FE1AD06C213946868D99837D0FF2F865768745C422D520C27193C7C0B75283B84D4A +5B0252677E2C0E24529192A3641E075CD6D5A24B7EA7C7AFD082F7E5F44C10E485E2E3B66160 +D40C01276235F39352779B56014CB43CD115DF69C55E7D3674308FF667EC958CAEB108DE17C9 +DDFFF86ECC8B47472748B1F401F1CC9D1F075E73E16E9EA93C9B8C742170E7A622350F993E46 +0FBDD87C564626085A206ABD14CD1275CA1587E8E07983E7078A171283129FD32D8DAD767D8D +EDFB2A0C2F4A5DE9AE351758094330B8BED5757B2DC21E9123405D47E0F2A95370943AAA9D28 +CB78C7EBB7FCD67846BBA26814BCF0E841B1DCFF53155AB7C2A5DCA94859D24D6D831CC422CA +CC9F985F8D745342561920DAD14ED65F468A3A1D406478F0F38BBA1E474A0AAEED29D739A9EA +F3564CE5458A374B87FC1DBB284DDC11A8DFD633229A81CBB1FAD53342286144672459A4B811 +FCA6FD7CF72E1544ED0295371D8E588D757C49FAE932ACB464147492B5DAA320215ED8A1725C +99BAE64C6F6B471A569C92C1DB9FA616085ADE10FFDC25520EB42BEBF68F68497769A0915F4B +855462C00DC55EAED4B72A2DAC91B41CBFA2E04A6A54765B490F90F57C8923BAAA332698120C +A34F044E5E5A10ACC58CCBEF1AD290E3B4EBF91C8B8123D5B44CA21F7894F3959F0113B6049D +A133FE3F72D34DC8C1677C393D872EE8275C7473244DBB4ACA825BBEB19BD1D40540DEE2BC05 +EF8BA9F934E6421A242BE8A1E3CF32D8B01D0DE293E897C1750E63760DDCB9BD6F524BFAE433 +093A4D1AF8387348CD8D20C100D7F82685D9A55E483C362B4B7271216C4AA68099715CDC0A1B +27D8337E1E1274DD1E8ACEF16705F9606F7E2970B8313DD5D52B8ABEDC9694F380EB74B19672 +60887ED8B4D6862145BD80580BE4E03AC7B6D2DFC11590335D90F9B09E940DDF9043927986C9 +3DFCBC936C1DD7326AE159F3F45B0745E28B84FEA44F33198D3E6AD664FA9A9766A1B3E96592 +4FF96D31BE705BC41EF2D7EEE66FB4E21CB5997204307E8F20FA3E24BC2D8EE7CE149013698D +BA688C11AC8EE34A002C4A80AD164EE0C9942D59E987D332A73FD331402222195D55EFE84D50 +D1E3BFB2EBEC3A530D35CB4694B3A19A702B41BFC842EA49502E49CDE9F63D1620B4C28ABA0D +F08BE44E362C4C9FE36379BB01E0F729A229B2F2D5B409632152F5FF352808EBD68321F9F36A +55554B7E4861093E28AE6E497B34DF2E7BE4291F462035F1DA4977842EACE76283FCB5193BD8 +2936B18CFE9CB729112B115D7582FC9F003CDB74AE17E293669736CD5040307A29FE06464AB6 +ED9C298A5ACA05B04470DBE0733982A7FBF747FA3A4BFDB094CD9662A18382875B44FEF03C7C +EC250A9E79A1A63E734718B204BEF6AA201E27B6C49C9B33A328074FC287464AC318047F2477 +3C7019B8863C86DAAC4B8B30B4911AB89D8D0651097FEA97B1D3F9D1A5EA0039A7B4809B9948 +56039543C1ECC776984CDE0FEA4ED008498319D5CCC876C816430C6D58E83572291F344E0C46 +7D349A527437AE67DAF51C164CE2E8EBA805CA87ECD4B3A44BDCA27D056795504532AA22923A +869B1F5926E5223AF55F093F10080C7CF92BA0D3394A9D98FE26B3CD074A7907679148127002 +BFA2476EBFEF8516DED96823B835340F55D11EEF56C62E916D6EF7EF54BF1EF72FC9D63D3958 +0EF2C3F60F9DF7C46CDCB74AA44CC7FFE04000A48AD7413472475BAC8B6D4AC7DFA332D9D51E +E85A7733091AD38BF4CD601EFB58288403047A723FE4B5B5E45997B3AB99289624818B525045 +185079853E3467DF14719904B481D3FFDA3046CAC5796BB700D15E3AA512C38E8EC25269D066 +60CA64075099EB56F7AD5C6D0E47D8F2EBC08FE21D4D0A299C005C4BC62B186C094B8C93D416 +E49CBAE5A2BD1A0AB9762A8A599AC86D87433309C469926228431D178F144A834B90631A2D0B +327525A1E1BE4EE31B59F03B94C1A60A7C324CD1647E0F145D0B4F4C538884BA0BA7D5258AE1 +DC91726D7566D0F4A6141176D014DF1ABAC8FE9E0E1934D6983787E6F4444FF7B34F0A2B4B76 +532F25D4922CC4671E6EDA6599F089B11EBDC77211E948834A6479AEAF6A3278A0D4233B8A7E +BBA7401D3B2A9367A1D958A02CCA483F59FA6CDA6826C558F3A1632317483B21EA5864AC5DF2 +9A23912DFF81B49C4D1F55D93DA0379C1A447BF905989587C2B6DE4E374831FBF228B9456D6D +1F61028292B9BE881CC2E6FEDBC389D7A5BBAD2531D08C7B67250829E684F40BFA2B77C3C70B +B2A62C43A45AF292CABD5444D9122B3379D86BEDF817248809B3A7EDC3ED312FED37CF470339 +D1D630032E8FB7F26E85779071AF32AF005DA45C75AE5C0C1AEEEE3CF86D47FA99D10451AC00 +AE33FE3D8FA60C03E4506DF52397920F4D39E2D893542281D4E83C05D24855750AB6FCADD914 +D7576AC89F4C1BFA9970842394B235DD410776DF1432BDF0AF075E1A35C6A64F7EE7CAFD5E7B +73BDFA5528DACDE41F45A8865E3FC7DDC15F2965ADBF1A9D619C49881CF6F21A6998A0570E6F +26741D231F7408893BB4233D741FF8E0A5798D740EA761B5EE62A54493C235D5A8A5D5CEB209 +BABC445432E03AFDE6901CCDE88CF093F45EE58B6849E95D678574BA4DD1B522B908F3F53E6E +B74EF54FD0D97B4F37FFB113E2004B4A1F70F92E6F69D3D0E85C560DC532ECB2E2EA0E7217B5 +C50A78C60DAFF4D4454C2083B3DA5B43FA9BC8FF78E6891348752639F74CF7036F22D98802B1 +93742470F15188D0C9A22C327B406F184D87055904B6A9EEB01B5CB18702246B1453D0123F12 +FDE49C41177A22F8E915159B7E1F3AF2595D9DECEE8C850CD09981384E1BECD3C46A4756EF92 +A1B02B52939DB5EA45CB7F571BD8B48AA9D739D0CEB626A611EE32B7F04EDE93699D58992498 +7356DB141798ED5B4BCA56FDF038B38DFD8313C341F26AAF47055C2695DA06E07A4A3914E370 +B14372E86B181CD2296285E39EA50980EFDF5536B56CC5D1F5A6158D358E442492E7CBBAAD94 +20277373312AB958C90CCBBCF8AB745FC246109C6745D30D7F32B1FC2C8C1D747DC56DBD2E7E +7C62343E163566227B962C404313F8EAE7FF9C3B6B15D03335B5CCCD0DE2114D203EDA780D1A +916438A8CACE281D650AF8BA1F40ABF98F2623EB775F934D6F6A52EA18CDEEC2F8D920D0C7B9 +76C143A3E0E577A11B07C95DC5E81AD80B3997307FB30C4633D7D70C2C337EF71BC563055FD5 +7A6EF9C17F4BD58AB55E5FD0A5EBC6B3714E3422DC9DFF026AAFAA6863F4667FEE8BE344B7AB +33B636B260D6E2FFFB33717AEE3E5780F45CF912C112661336692E4BE5027D77F1EFF4061BEA +FE98E98E660A1A5501B3307DCEF63181F28F9F5C3DF2DD53DF554A3CB13F185C457FDFAE58E7 +045E27DCA8C8526CDA598D48676BA1AAA43C347198CC674BFA0E6780165E3870C4948D6BC04F +151636810507AA073EB11D57BC7997443306A625BAABE64C0687AE0C33A380CBA5E6E99626AD +EFCE2B99A0CAEA94D92CFBE656779B4EA6312173924DDD99211BC451E2C1D5969D262C5489FF +D0560142675A74223A2A0176F930769BA64C523A5C52B1A01A6DEDCDA96122E8B945AD244569 +0D49B0BE2D00AA7994174DBC2B8314A39675814BBB69C6246F6404C6DB76BF65B3DED0E430D9 +12F2B1D1AF49038330F614454EC20198B9A89B037B3098E137AF841FA9E4B158E2BC918C7FFE +95970EDE6508B4E345D10E9D714C3EAAF9A29422477D232B00F70E40A5F7ED08AB54C8935E16 +A020D3289F535625DA214468B97F22497985C9D175F26DF48A9DE30175F22CF1F6E53E94A5E3 +8008E74E7B0791707625E0129F4257572DD2E25D8F7F8890A0C217DF8CE6465FB2EA623DE3E3 +3659F8B3156FFCCCD68F2318BC06795D144AD8F205338DC1502A0C9F72B73CC2B62FE68A9646 +84D1FA72C566A59E22F57BF112FB8ADBDD6801E1C460A29918E193CC43998D77C9428A36EC13 +6BCBF33D8543067FF03D2C6C8FFE613C9AF2608872EC32C1AC9731EADD88329FDD5BDDCC69D1 +82530F71209B78D91478C1E84B696A6A136C41B84E9D63A50E544E15C6AFE14FC4BB0B9E2248 +9DF07FB188EFFB8F67DFE6D1AC27F236CC976F682A578880F60AAEE7E3C9ADC0996143DFC25B +E71DAC673171D27398AE3249A2FA0AB71B2C84F8BA3042AC2051C29473D512D513E9E44720FB +0833E2CFC8E83C220D6DC3083501C39044FE80BD9001BA52DD3CE26CA483024D7190EEE59BCF +DD3E6F4EAD82A088BB21DFEA9E9C3B5FA623D569763B949A93E3D6D9EA620EF2C004140D88A1 +E10C02A197972AC0321DC757CFF787C9A4C42304798F6B076862C1959F70CA13C7A0F7A0A739 +96D562879A419EEA80795BEAE0515F83A6C4282A05C3ACC66BC142F8225A6B6C019623CF0C6D +5900DC4AD8B9D8A035F133863F8B4D3450590CE7F3DBFC78FAEB3365DC7D1AA0D43022FF86D7 +E9D2A68A172D367CF88FDB571689D7416BAF8CF5F21E3BDC4B8B384FDAF7C83A40A362701981 +164153ED4A783A8FD4C7CCA60BAA19D7BBAA5E178A4F661270F6D552236F82966E9536BEF702 +02C13EC5E3695F14F1F731AF05B0BEF41832AC29290D48D30858C451954EFC03E0B0A27DCB2C +C81392A24216EA5C73385292836723B8F7ADC7AC2E900C74E2E71AABC92F9FCE93A4D3C52FC7 +0773A683B4FA1A7F62CBF07C56A9B9E5297A52BC08B248039B9135561E4DDA9343F1F09BF399 +7F4B866075F3AC4F5CAAB4C21520C5627043310EC81D731A2AE598AB81B8ADB607E0E460BAA9 +D636F5876FC2C3121C080A6ECE7C99F057EA8F3858BD6316B7D3EE43275AF1B5CCAAB243AFA8 +6A89E45F7917AB3B74EEE0F1FF89F137261EA8AE3F36DF5FB4C4786FF9EF16C64325B8D4C6B8 +9A09ED2F47E4E66EB93BEE9929D7AF2EB6243B8B7C5B2BBDEADC1040602C9B15105AACFF8BF6 +96864CFB7253D569D3A4143141B0CE77F07D13B73379238AB16F667AF2EA3B470FE20617E10F +6270E5267E1969C7CC0C8978A9BAB39CC5F3597D0B152D5A86322B0B2E41C7721ED62C04C8AC +2A6DC747592C5E04D87D2F7978CA5B9B68532E80FFA1E9172E9FA69459C6E8E91213D42DB2D4 +AE18839D2698364647D12CEC98E6A89362D49785408D958086A8432F977717626284A8F581B7 +413327E19A8EE59C435EF802CEF65765C97C1EB3DD1363F24894C32FE9F2538A1E4F647A730F +A85C6A6EF7E8227707F3595CBDDD98B48453B52F4B38A5863404382E84D506CDB41D48E6F019 +687D11C516C3766EB7C1FE8ACA28B0427823F581D126945F457195D30051AD6F3020D9238687 +4679A8D0B2857A2CDF40BF155D17509A97FBC1C24A9281EDF321381FF53E013F8D48C6D5CD1C +9D0DF24CC810389158FA1B1DD05E6B1537FBE1C818F7819EB57422BF3A3AE1529151FD93EE97 +73169897C38701327C864F9DC65B4CE208EB71A9E1E848BA356DF9221937589CDD3630B7F8FA +4F6C3CFB6BB311E4F685B6FF8ED5950305FBCE40357F2D21057CC828EBE0B426052F2DAAF242 +8254478A54AF67A4BFE0D934515797CB460A26EA6021FAA063B6076D5013CBAA6114C788208F +80B9225B9CE069CDC8836733096E71FF1C6D3C3E580AF8C0F880D8D68F041D84C6B5DFEF4C92 +60A30842638AD483BCAD1D3FC64AAB41C27B026A7A8831FAF87329BD3AC37FEE46BF4856A05C +21392350F235F7F6EBB2AE45C7C0DF05A10B8C07754CB7BE4960386CE2EDDB5C2CAA2224058D +0EE463F9DD18623B365E1B0C9FA047669C7056C59FC3D8C781B1002E2F8D63AAAF6908DA4B0B +644777649DCFEA8585945BDCE5AE92A4014DBF0746B83ED23856FB250E5C2C820865A43F60AF +C3B43AAE916C1F6761C5AFE113C1FFE34EEE2C7F0AD3BF50914F2D241C2C8D60EBBBDF260D73 +E4775934BAE7F5773D9261052D7DA20E506211FFCFCE011BC7CC7E38D4B0F84766FBE5B1C558 +3FB7A438E986489581A983D0AB32E9A215F9A0998F840FC6A2BAD4544A71D2AD564D1B74C406 +C14E6BEAC9D311DF0102E4940C90804607C2A95A35887328F91520888313CB28BCF1ACDF955C +9F6B1733DD758F550BBF520650964348059781E8E6734ACEB5867C8904E2D519F59A62E30921 +D378D26A8A03A131F541402F9F5B6F12A7B549D1C6FDE47EF8B5855F3BCB1EB6EE840EDFB60E +8FB4DE08B5A0C8AA678B1419C77ACFCB7D804C5D37D0DC449422869F10D8FB05E7C1B6CDD5F8 +616208F414377CCB3265523C901370F95AB27D5FE1384167D6353A083050EEB536E94E942BA1 +5BBD60B9161E8A01F895D53B1ED03353F33AF208BC552547DC0A2F29D624C74F2D4CCC6D2D24 +995BE94FE35A899E96E449380AD6ADCD37C5BC2D1D9AE78056A33D3B185E0447275A831F438E +591C4812891C29BFE05F02E819F3A049F6D45B84E674CA30EA89F6A0A998E1A6F81F5709A36F +F297C793D4D2A61DFC2C5F7D106C4BB5A7CC08F2820230D8030B14298D6F51D5BC90B16615CD +C795221428F1B0B76B413512FC5AEE281126B5011FB35F22C67D8F0A27ACF00DC3102F859781 +9ACFECCAC7D7871486EFEDD581335684B39D4FB840204AFA9F34BBD48CE9171A787E1BA7ABBE +D034AB5407E2C9F399521A4D20550987C61E2579AE2CFDAD130E430B13DF9089B8C4EC862B38 +62F8560D1A63780C5641EED83F43DE7B76C024843C5D94CF445D0B405A8DAD336F79C4F6CB4B +E619AE07F51D0B3F5C1A4C424AB6476965B0CB262D043B0841F300EB7D80CE7BA9AE48243912 +9DA0D2E9F469FD7BF71524AD09007DA723FDEFCDD4883FD06A0E54B53F12C3F8BC0429D4445E +08CC87B786E14F13879B0D257C90547A3B31FD7C2B835E19B237EA3CA11950547E0DF730D6E0 +AFDAB2069DE5BAAF61ED845CC2F6548E9248795C13EBDB2A0E1CE6BDB6D2ACC719BC26A11940 +C642D63AD193263180061E2AEC660857D6E622471DEB16447112E2B4424234AA4EB11ED49589 +5625825C51099654CC6D2982F09BC2C2CAC460C9129FF0F4B8A1670718225B190DAB1B0AE1B3 +54CBFAFEB7EAC280A9AA0DFD6F00395B4744D2A15D523EB0E40BCF8BE3328D1FDA44504CADA6 +23AAC33C329117EFFF19E486EE53DEA35EE2D6CAD27F9EE3A2E19D41F8BDAF79C893F8671DF3 +BACA8575061B7F3B420A77F43302E200E22729E5821473B996A6858C4793348B3415CDB5C4BA +9C1E73E92B2827D844F0E5C52F1DEECA8CB83B83F3BC3ABE1F292A019B476C2DE8FD6DEC3FD9 +D4CF6AC9E93DAAC255CF6F61CC1D2C654B6CEB488F8CC54BE72549F678751630A2EC0C1B7952 +DF54EFA6BA41457B770F8F6F3FA521B5B496CA6A464DA92BDA0A18512565266F9A77DA624529 +E00E339E29FDE4732BEE7346472F4B2598F305669A44513ADD52CD4AC0F9ED6DC50B4C9EE9B4 +304CB16EC76AE1D2D7A5261DB4BF7D607615727CEB66BF80C4892C7F70F6C963DD05841A4F74 +46D7EC7E95677D6C5BD869DC94E04C355B42B3544DA49E28B4E8B0E67F461F5F519C9C47CEEA +D7FF32DBBA4846BE8EC23F1646180E0641F30669113011619A546EE102C59845EDA7E6F59315 +FB3BCA690B4A60EC28C4D80B08189A6010ECD5889A90652711167F0FC71055A247F6233C1938 +22561E130EA62188D687EAEFDDE7420079077DF67591849240C5BF9503976396752648E9C2CF +5F13C8AE7F15BD4790E4015E37ACD2C3D1B39B5C60D9AE9685CAF4BA273D3D777430AEBEFBA3 +2A1A1F4BE2F07DD488AE9C6F8C88B56BF1AEC9FD556BF17E017F115813C379F15F4B3C02B352 +95FD56346C069B922CC8E2F438B99DA7D43246F2E457DD91AAA6A58DF12501E4AA734D4DD2AF +CF93487E1BA4AFE00519A3A2A684B2EEC460680EECDBF8EE043E0F5F554F70DBFE2B6BD0D4B3 +5D5DC1D47D1503252F53D3487443B15490B98738393CEE1A017DE4CDCEAF38E03F2D120B5ADC +24697824BD420F578E55494D497F0CB2CB854040F9B8742394B6F3B42B97C7DB961D151A8722 +A4850C5D68352FD31E3F7884CC365F0166B55D39E9FAB53CD3AEA3A05124DD69877E4F2DF7B7 +83A1657F93056597061F04D6FB6758C475DD45BB29C00D3AE6EBEABEEC1F3CAC36989AE478DD +9272E4E00356217151D605117E4FFCD094A3ADA042702825A9E42432B539A01BC374FF2E6DED +9BB1607CCFEDB5870F1D9F21309FF973A5D1F749BF6C97AEFAE03B18E9838C9BC1FA319FFD6F +06D6B269F1EF477B1A1B13D173856C8E1DC276D747616D5C292C0E2277CE22E30BEFD84B304F +0B3D09D637D3BB4CD7F97CE4D104397A71600DDB05FDCC8D61FB46508905434BC45708DCA26E +9CF0040E438AE92E484B3E425C9A38CB7B986187CFC0932A564652E7BF6F94630A28F0DAEF86 +2D27A9CC26395F2380AA9FC6CA70DE03D8F886EE906021DD60759FD6F6631CDF304EADF784B9 +CCF02BDF84F8687DED45D06840FA38C5D2FF13B8FFC957DADDB24BC6787DDF6A85CE3F59939F +5B431D205F42350D282177C63B59F233886DCD644BB9E762BEB352A13FB461C621D2CB0E562A +F1E4A0461E9E7DCA0165886718257B52010BD695CE22155A37B73CB53D1FF2DAF69A0F445226 +AFB7A5583690920F6101FE6CA51A611CAA7074741B66FDDDC2A66225053A863A5E9410209B49 +7BFFF384D92A8526C570011689A5F443B402EF37C60FAA462C505265DB532956489B57BAD2C9 +A6DC66AEE9EC119784DB7E8EBAAD73B391659A9B330835A44F386355A3F40B6BB019F412159D +F4E5C802403533BE6EA44BE47FF1AEBEA46C42EF84E16D5E94C48BFC4F30C7A2211C6749F814 +9776D134B3ADE55CB190E2EFBAC3D7D48807F5D1C9AED905B7800793CAA7666167B22BDBA9E1 +90FC34A863AB07BA91EBEA37ED484976A3482F5880E54A3F528C2A68BA430543D1A4310BFF67 +819AAD1E6E3D863492BDFEDD29705ABF8A4449F4F56E71E11F3B0C3B2E566E96D0155798FCB0 +23C65EAD49962A38B592D195F961D1C26C44065D8AA63D9D71BF136929EB83EEEC71DB9A76F0 +FE4368D829343E461C2DD68EACB98103DFEAD2DA7260AB0E7961EC0BD8D3BE165EEB0A2A38C7 +791F6A15B9BB485244F338BF5C150E0C4CAE039FE660A6293F9136D2061E73B7355D87DE0A8E +F1288057E1881032797E01396E714AF8DE1836142E91BD8D9235C7A2C3767652729EADAE742E +E5642552C4B36878EB1D39510BF96724ACBD6B592C1DB7628BB620234A48D0ABE17AC3CA9DDE +4E8CCBA594133B0E2F93D4B2E610828903E4D8A0D28A3216F031E93E0843020C0F94E5E110C5 +534F8E24C0D545EFDAB0CAECF8BAA9A288E43271C632BB1638992C54191CAC741AFDD863D252 +F11D4251280E15DCF7385E7B1A6A661D1567E4D9ACCA512347C5993A3FF91ADF352EA0FD7D5E +B22AD404F451A1B0D6E0378BAE3756C69CE394D6FBBCB31211D96A40D641AC69B946576FEAF2 +5CB96ED19BB9FC8A074D19300E49138DD6059347A8C6CCBB7728B58751ED2ADC7434407F0796 +51F2AF42AFE134C283683A37F05B2E5F0B3417C04F072A4B01B70E74C77E28FD90E61879ABAB +8EDA1849EA6FE5EDDF0C6FB78FEA6D8EB0E61F5A3E45CE24FD3DC20BA01FA3C90532700BB3D8 +CCE731D783D7BCC1534B2E63E29AF98D398B3255601B94BEC0C7356E5AF3B375098F62860A37 +D1A9CA4C22E48641B5A85F4BC60B29DCEADBE558999EA4C6E72897B61F038098EB5DA0F1C7A0 +C32EE4B59A8800C78BF1C53CAA4B8A8271E07EF4C74531410F2900B0B2F8CFC0290E7BC3DA69 +FF12215F4016DB159FB24D0F9F55DA824260B6F89ED6A60E84B358EDCA414DA98CA3CAA835E4 +4040A3DC625C514F0FBF13DAD226481F41E6E0501551EB173CA0CF9CE56BABA9A6A127D8AC83 +21B084AFE59638099ACDE3D22BB2C1246C1D13EA24A9FE8FB7DAD42E3757E3B0D4EDE3180DD1 +897126A15F994D9B71B4E32C7B65A3AF912BAC72D0DE22014F0BD2E4692AF1EAD0F9EFAAB893 +D10A566578E54DCD5F095F1F87AC0C38ACF7B3ADAECD93CF2B8526D1A8660C1EAF122A1C553A +20F65F2A703F996DEB19CFF149ECAAD2B3378AC6F243B8252DCF6FD96753AE4574676C8B4F30 +C3F1C20047122DFE4369C83CF228764D129523C44E613BA1A8E9E946AB4F03D664213ECBCBE1 +2404B1E74034DC3A94DC71002F1958C9762AF7E723B0A546CBAA8685F34DD9A9593A4578140E +EDAB02E46CE23334FF69DD5C62A7859C5B7E3B05DBBEF3628DE2699F4A9E7E586AAC68314046 +628FFFD480FD97FA4394F2DE40B7461EF759AF4EE29D51FA77F16945254367683A732225B669 +9B1B2D5910AC3E3A7CE04B9A5DA48BA19D580ECF8C44437EA9B7C18870C42FDE21AEA4DFCA83 +194F602B55572C9D9E210CB6C3BDA4154C8FA31CF232DD6B5395D025F296E33B5B64D52071C4 +D9B730FFA72E2604F91D6099F2B6BE70B8665AE1F454B94421B4B459F5F69DCDFF71CCC75469 +102E6F515CA26C524CA8F3116EA67BD3ABC396B2974788C6BDF3CB143A8CF07E16CDE566851A +08B0B5D6A48E3F3C9BA365CE8335EDADAAC484CDDED7705AE37909DB6E81253BF6FA43FA6356 +70EC0287F53543976167FC4AAE49DD326A6CD6150555800289EE7F941D56531BDBF685239276 +466238757205307D4D09000CDF2E72C9D7BDC8CA28750F1863D6D5310280BA8CA2E5788C3B70 +CCB32D7A1B037A52046E9F70FD849374F3A3E94ED5C6F30B898EB448554A5CD5E60F73E8B8B7 +751DCABD10AA52DC9F0823360903650114DB73F158E9D918D9946A366851CE2E487FC4A5D3E4 +2CCF55D249FF523E3131D8CDDC99AF4B2BB44434C13B21D3B3D5A0C1064D70325820E5397821 +54CC323862C9386654D3470B768939C24977CA82BD6D3DF69D38B852B20B88308BF93A28DFB8 +3D671586874BAC0BA2EDCEB74A53F03674649B358A5200F4A39293700CF49B33CA667B9FE73E +AA5994514BC2CF305E67F4F2D54C308229E2314C4DCE66DE73C6D4FCAD52DFF4224C8C875CA7 +42A55B027B8CF4549CD1FCEECB32BD9413A54D618F7B928D98C54D7CB44679F35073F9BF0BCB +5B1F242B5C91939A079FA3F2AE0454B5A46D0A5198CE6493DD44F3D63AE22E8A959BB8703CB7 +D5B7D374570ED5D32EA749C0ACFC4526E09AD68BD59F61D21510F71EC67CF806DAACDE6827CD +B0B07838B59A275642D9A3EF31EAA0B680922D5CE3995DA2FFF7425F85EB988AD78BF4F692F3 +287F20C642B520A6C58B25994FDC1B2ED9041AB090E05E6A7C32D8132D721996199D0880681F +98E04C8CDB7889ED8CAB198DAFA7EE428E2FEAAFCC9E0B3EBC3E50255AC3CE367F1CE17AB92D +7907383E16DE2ED6ECE1B87BEB00D9838464545C5DD925C60562CD5B16A190FBCBEE12D853FD +7D8C0A9018FF26B0C8BAD9AB250932CC1D8D399B94FB3D5803DA90775B12FC211408107D57B9 +0B819ECFFCFDA3169652EB90301395B89A2A7B10339068425D69C1A24234A2EE4CA5DD4EE549 +9C63BDEFDAA6A6728FDBAFAA1B3B20F9712BB28E16CE5A1C44A40730E5AA6A58CDC823C96C75 +CA601150200C08974CE5E06E8259B9BB88F09EDC9533EC5726918DCFA36423F8B28C4BE1F915 +070F5C966CBED7D8BD29A9FC93BF8AC4649F4B98D726FDFA0366CACF88C834E0F908AF55AB01 +5D3DACE64AC96D7CFEEE1CD9D23333A44004D2ABFACA0E1EBFD9572E276768068E5B1406E76A +9A6A92335F1E9B41AC1130FE13DF11229D417DB9B225AC3F17A0580750F067D5F9C87E11B372 +20A3BE1164445C05A48C8789A09C68C1BFEB74DC11462A0DB868C94DB1082A270AC26D41BD9F +EF1507DE77F50EB2D40A6571761DAF3A9EE4B97CE8A5A1CC09878BE89958A40B5340E58CEC38 +FF9BD99406ECFD4F48208D7CB8EDB10CFD462A6175C6F4AEAB7A887683D6B3E01B29FB694D2B +695C7D3680D3A9D32DDCE3A763F350C9767401193811FCDE232577A52D51514A2A674CAD0D05 +C890F9704BB5E907AEE5EBABA4B268F9514B79D0EEBF2ACFE5A47169E29DC80C1C76F2346122 +6475849CC56CA52CB734FEF0C87F8158C1CCD09AD9E0CABC804F0629DE55FFB0F99208C0EC5F +43B9A045DA2D789E98DEEB9FF1FDC0B751E87D2C3439193BD676EEAAA918A1060638D9630D45 +5D2B6560B7729A29DCD831539756CFB1FABABE10B5539A8CB2A43E7080FAE46A52C46E25C36A +05AF18E06DB5F45A4519B15DE85F5C94ADDB7C77565A96EEB2F5EC1E6C912CE483E8F86A3434 +9A265D1183BCEF904ADCD51AA130C52C4D86120F921A4BA96F7BCB71C0E0CAFEA874914CEACB +F5C279BD9D71D95BBF7D32B45128BD3E65D08E5950BB2B414E43B4A54585AAE174CB2CCD9253 +4EB2409E3778A09FA95038C7165448F718C779B394AF5323687D479D836F463698F9E7780EDB +D2BA05E557681795720C4F3FEC83C88D03275921B9B0F3CD2265DB2367BDD4389E99B90F714B +79A165CF14A7824B940D53ED4CA2E4F30FB983999B2AC4277DA5871EF4563BB8E14690C70C15 +6E99587EC32363FBEC2559A6DBABF3275030FD480DBFF18A7AE5F99EE5D4522D0DACD91C915D +06C2EB163E550732D2E469D577F06A02208F7233DFDAC801CE27A5D138DB007490474A5C7B46 +EF9A831D7867E62B20884894848B3BAFD00FAC7BF90EA99D1A881127B09F1D6165A639874C24 +6EA6D41009CFA60C40A42FA1CF8D63603DE79579DE2F61D085D88B77A23265438ECEB5720521 +311CEBB7053DFBB44F9774EA1A8680EC1A544B40F9203886C3BC3EAA01C7440509C9521A3215 +B5EA5435F613E93BC2A4287FD07BDA5783C945A96B7D6B6CD5E6F8C60ADA35F07864797BBC18 +13E7D037B8AC3CEE5B9309EDE494FC9ED94FACC11CFEF1EFC7D6D1DE8B4D8C2BB00AFBEB5CD6 +B8C7450C0A530B95DB0F70F87CF3BBFFF63A4DAD808DDA5EF50FD4B6980897C43406E8EDA68B +C4BD7FED5F4604ABFA0B63058BB7D05DE599F03DD226D85BE864E961D0507CAA4719FF0EBBA2 +A13DC5CB724463F6940A82BC1723CA3859B0DF06092585183F9D7C8CA92C0A0D7861439DCCF1 +C34C67BAC97DCCD3D3B786F9D8B02101039435C4C519ABA76E699F7FA7BDBD4D1B9939C90734 +CA001152B8B70916F654051003E06E6C7F6284794FEB664576ECEB16DACCC422A2D3105AC743 +BC407C65FB04D5F54264DF352FFB31729EC6209342D30E91F611291BCDE177239367ABDDA871 +3CEDF3758CF460E667AA1510B8A38886AA9DA7CAE5FC2C82A5E033BA6F3166BF5F947647EC12 +9B7A0AA924C394CDA22B8304F8698CBCA0E97F3971A2C40E3077216D17EA4933F37DE26123F8 +CA3E85828D4C94BA047CFE3711421F0D288EC807359484A403E33532D32A69CB0A911A9E5903 +1ACC2FAEB9167068E19D36F17610DD747D378C9211CE4C3F013D377938866D86F305F10CF6BF +E9AF9C8307CE22CBB59D34902FEBEBB7BF17B8BDED40A80C7EBD1F83EDAC21364C9405ED3A82 +E2EA62E23FD112021128632851CD8F2138D0B295E7396A8D9D1C6BC37FD2245F6407D8156319 +30C8DC1D41B4413ACBA81FCC1D7BD1DB08442FFA1C929674B041F6357353E1D45D62BA1B624A +F891C79C325CA30F82057EBF53F2E8C950132A4732092A1BF6032FDFBFCDD7F0D45126E3392E +853E39772A3607F54ACB2F5B8CCE28542F0F6BD18F68E73CB173C8B42EF6AEA400780D061EF4 +D50740513E5720219C1C82C2B8CFBC8FAC7B3D47D66EA3CA3C123DCE253B83C7F92B8FD33553 +06C83033E0E29EAC13A1C76F6E93DBEB5FB71EB6EB72E26D173CB6038E5DC20987911C2849CD +19648A39DBAFFEF673CB63E5351D0F8F476D84FF1AFFC9CE669A16C87B8849ADA12E4813F2D8 +F39BB6B7ED220594D301EAAE4D64F6A48A93C2E50193EFC444FF50E937A1CA7F109AE28FF8EE +67FCF46D4C12CF0E4BC946E4F66E54739F7664C7AEFF51C29CFFF9AA5D250814552912FEA0E2 +B75CDCC61625386A04D82F8AE6F385722D2F5C6CD7CF27528B7C3AED0D5DD0614DF30985717B +83CB8BD869CDA4EEE4CA62A7E6902A51D1068208C747B1BF47B5773D94FC2A0A4D69883F178E +596A514DEB84CA2225D7FC0866B1E2C324FE6A552D10F3D73D6A69E49E5AA8ED960D0D2A2307 +7A0106ADB17A60E842746D3D6440E95E3B76030E0F28B22CCF393E47BE6E026A917CDCD74A2E +21C5D856FD92171933E83C4D96C678717A78DDDEB660263BB7C862FC65613509B62F58CE4726 +A8F72A0D00E22401F1D79E266277A86170292E6CF53190609D357781941929023FD40A9ADA84 +C1C63450AD8B2FE6FD51ED3244D252B774A0011D760188680CB3C2FE99FC83A98EC84EB410F4 +CABCD57954E42DEA3B9C2B4B8170E85D5FB208EDD73F3F12AC9E7C696C56308CFFE261F8D472 +1349CB81017625A9F866FEE3EC2577EB90F9ADBAD7B3C36515CDD55B9D8791964596F0037023 +C771B4DDF27F44F8FE414F15BA106C1C0103D4F2F2F318C00284EAA7E371F216564568D199B6 +92FDD735C139F58FA7ED15B5961C9B08B09D7C57EBC17C7FAC1521394C6C18DF7C6DE28314C3 +B2E7C46BA476125291E21ADE0A5CF6C6CEA706885F96C3623F6E1A2AF879B3C24D9BF9CFC574 +52432EAD81D76EBA0D1BBF5CD55F5D6B783ED79B9D11CB58C0D1E46FE19F86F40CAC12E9528B +6F10CA6BE02896057D3A10740234185B6D0B67B0134FD6F11836595218F1BC06FBEE2DD9EF14 +D25DA925C412F48F29DF86EFE85D5D7F8FD294C2747A5ABA408393D3EB64763A467334D4ED5C +27A4652E2FE75A878786417967D04E9C0033FC65EC99FECD57B86492D353D10332046C7DBCCC +B949D31E3B947A63DBC921F8324CC627534753FE33B34E81E66C1B60DE9C939BA861F146DA1F +75424ECB958DD83A3C92E57702A925E2530AF72F4ECD8473916903E5472044987ED7A009EC5F +A3E858281AC337845DDB00DD5424766DD8E99A5DE5E1E7AA2079D53D1148F9EA4F6388917E96 +56E504D4958C118413958AA1062374610A3FD0517527BA0CC5B6C2885FF086BAFB1A11751B29 +295A04524744E6AF595D82451BE03729C1CA3FD2656D59E309BCF1D2F03BA89AA357ADBF8230 +1DBF8BE6A8B32A871C88EC108332F5C621CA086060FFEF404BA4DDD31C287D34F840636574AF +9A65F609A68C2D4B949A3FFA9807BB5EAE9D127EBD55E21CCB75F51B5884E79A338DE5C941E1 +7E229477319B882796DE2913C8E4A4D5BD74E1EF36B2699D23EA86F1FBB96E4970B15C0CAA6F +DBF78BE331012D60F9E08B865DFE82AE41EB2E696A442305153EB5F2588030DDC40FC78A36E7 +444E0612F77612E692DFCAF7FB7C6B5E4F0706EE79DC89586952372D0F8F5ED54D805C8BB12A +A7B7D3B9AA8E9469EDE02D373FFF1F37F4025B26DEA67E68CF39D67FCF5A7FC4517522FCFB9F +F89D5EFD7C4B04805F400E58D8294DED3E030765BC2FD89F69AE9D42303DB2D016EB18A3F260 +017F6953EA144F32C8A35EF403906AA093B3F510E24EBC50648DD21D1C8AD5BDF91105365020 +BD687AC1142C1A271A3BA6F0245F5F61DB8091D36569D33B6D9B40EF0654E2F1CCBDEBA411EA +5DD7E7C83A062B7F8D750D162A8B5BADCB518593484F45986CF8549F3ABA6BD03DB8EAF6B0F4 +DD254601DBFDD895034B6FB565A8D750C81B561F89A95A7189BEDA68D53C9DE9C3178CAFBE0A +C5826F7DFDCCE63711C72A11EF5CFD4E312D9A5A7D67E4F41CFBFA94E98FB8694351C11B86EC +5CB7FD91FBA52E1800347E67658AFC3A6019636575EFDB2F0ED0481DC72053EF573781DCE0C0 +129310CBC6B3C5FD9C5D1043E3DD4A763ECB127EA2E14CA8F15CEE707ABF41443CADEED8870D +C29C580326B875EE7BD29EB8029E902B4B90C9A601690B4CFEAF48D4505E282FFF77D85B7929 +98BCBDF41794DDF3FAD445FFB8348C47BE586DF13B14E4C03651B642DE06EE95A0FA80D16198 +85629D9434715759596736A97103D6016A136FDB5BE91BE79128A60FF97B5B50B31650A42F58 +F90DF8F5F0E4A423CF1074A85B347B1154C8F5D21A215872795ED90483300C63B2C747D14945 +AF7E3BDD53BAA982EF492E87EB634958AA0CFFE956A02FB778851C3CDBFECF08EC56B073DBDA +DED5C524C276F21EE230BCFDE6B71F08960A3E63CE2C5294D99AD99B3790655BA8A773215EFA +19DF0CF3B6706B186B9492C1EBE2BD9EAEC00511DAD48F42080D059C7616F7FECC627ED91EA8 +BFB7F36EF5F7430DBE08AD58A73BD93B0D7556207226BDCB925365260A70F65B0612EB13DB32 +92C2034170E7FF662932AAF61A7AE5A674D94B89440BC06A951EBBD61A164C919C9BCC94B4F4 +95794187FD514E37BBD9C49F8D22EAEB3F3D2558726B361CDAAF5C16E6EC379465D1756672DC +41BBB4BAB44D3FEFC81B4A16A902236CA72E1AA2724367EC7554F4B8385931980D0A8702654E +505145572DE670B625A0CE5B0A4800F028B2278FA07ECF63E66C6062CE2835A3F71CCFBE6A49 +811E1FD94FE2CD994FAB94BF4A3C45E6A8B323B2E1C1DD91A72B7547C576012E3C9D5AE9CB50 +F145603FA3921CD3B42DA20A2C90B2AF39FBC2BE63F54F97A3D5E6153AD9703C9289B40BA090 +74998303D7E5D17D6F3F64D4292EB0BC457D9BAB0A1E3178057AF335AD00D9A3E96B570B36B2 +A2CCAF807B796B144823E649B6F40C751ADA54EFFDFFDF09BFA1C5F6DD92B0D6F3A90DB49B38 +C845B7A20FC18D55FA502715380F63EE88D4CD2BA59DDED1C224857F88299ECF017717C4EAA2 +C017C5721BE6514FDC69B570BCDE11B2B222942818730C5B98064FD63501B7DFB29A47863F4A +2CB85E1F6BA98A5C7938DC337026E862FD0D93B2E5BB419A10B914EB1C054369213B5A2B68F0 +1AEE757179AB8DC4D5FF8741FF5C8576AB1F1809236E71EFD66C6101B48D2F13DDE243197119 +646A4A7268657D2A5F72761370F8673B036213646FEDF583129A78AF055268AEBA703DB7F96A +2720A75D515EA7270A321670C831FC1BC26B8C5FCE9B2CFB3BF664984250B25C6331BF49B3B1 +A027049304E71617310B123D260F482390BE0944084D084C8FD69695948953B3E4E99EBB7A6C +A8F609CEC7966199639EDEE795102CF0D8F44116AF753D8E3C7F8889ED3D577301983B83AECB +F6817A0B973E43E0894C09DF4934FC7071DCE71D3DB60E7DEFD63DEAEAB3D3D9D9437B0B2626 +AB3B6B669CA3D687E019FBE3648F3004E57EF5D0ED3EDEEA5E6B39D2C88A220B4599AE59551B +64D7DD734A5C1A03B7D0FA7ED6367A7D59A07AFF6B020986548B03AD437D9EB8F6120C314AA9 +7276538AB1E683365B139A7A8E917951EBA38E8A173935D9D8CE9F95B70915C6E221CFC6C699 +64EA2AC2D2A6DFFD50A01714517DBB63870FD71F32CECD73A1FDB43D9DDD4395C9130CB93CAF +5F82F7C76C4248A3BF9638E4957E6CF8304AA12A5695E169704B25D2BF0FA4D83B1C4A76929D +FA16AA6E50B753B62CBBB8F5CF5E6CE6AC47822AAD3780BCA076559F621E3B73B60885D4FAF6 +CDE6B88B3C2C03D410716BA25EB03C1D14C0DAE2FAA40688529F7DA66A53C5B6ABF3AE35206D +B9D472F20BF946EB5AB68FB44B58B9BDE2112FF9E5BEB72F7EB6D4B6D4D9F6A427CC9E592C80 +551DE3F0211061F85883928EE0F7730024C449076CB3E62A7A2C39F3C68AED09A827D3DAB7B4 +7FB7CBEE9953986707D75CA74B4937E181B218E6785075B15F356B3C73375129032BF46B3869 +A11759321374AB378BA5019AAB314CFFF7FD15781D3A4C5EB8F646429CD5FC6ABD2DEFD578F9 +E83E10C6E045C55F7BEC6E9870CE3947917F5ABC963BCDF8BF505C9E35C4FBBFC9A288772894 +F8C53DE66B7DB2DCB2957EBA18BA1138E7A72F114E26500D6D789AA9723D4DE48F2CCA238716 +D931C72B910D7F6D49313A53774A64FCB59A6A8191B9BCAE43198136E0E75015C5F1DA9C9C4C +914C196D3009EB259D1870C3E36DB100E1E286127E68E0A1F2FBE508E3886E0994ADCE782E20 +400EC557699249DC022ABE0E6EEBC3E4A58460A95B0B62F5B2D839EB20768703153CE4706374 +6CC04821BE1C55FA83F49E66884C3C8425699035A863BB4FF62117AF76700004007E950044A4 +571EFDCE2B37C72E43239E007F02933E6DA76E64E49438323E8B3C70303C83DEA900BB2AA35A +AF30460D5742AE201D0BEAFDD6B3811AD9FA36390AD10AB7800B0407321D25F2EECB11A4A0B9 +DFD7D7F0E8F95AF2774887C7F59C00A6354A7B71184E24699D0B013153DF6C8955DFDF6D3572 +74D8747D93148B7D439022547AA752D7ACB4DE625C214A2480491C6FC2B443BBE68D03428965 +770C6E970E9FA5D61D4DF6993F806F2B43F221A79250EF93E5258CA6D2186442FC5C32B82CFE +C4E08F008A6188FBE6836F5A4ADDD83CD3E9251477F8465EDB72015D76B2ABF2AD22FC2B8757 +3501BD22F94E928A09264FD063C9C8A647105989984447C3A7980DCA19A0CC6206F443F1D385 +2B87E7F1D9855195484C88C3D1CDBFFF34599FD3CBF8B18F3060AA38804127B278F00F48AA95 +4EC909959C2A5AF4738D32673722DF90472B733E13A6CB463835D4902E42A0E56BC21E45FA30 +6DDC102A916F1C665D8AC88C613A8695113B304F64B6C3DB456C2CB7020AC5468AB1C5C9CB6C +A85A85E1383B5EA7AA4E8701FDC3435C60C83F25B0240F59105AD5ACB59F92DD9AE67BC90660 +8874FE6FB05E5D4F7330576D986631A4A1A0E0E249AF1A4D9267652F8FE2FC74FC3551679721 +30A870ECEFC6253948AA75ADAFD8EED3C55B335BAAB57980BFB5671EA669A1480B3907803C94 +8717433A5C52E81181C90DCF04015AA222727565AAF69783D3E5746031F8F01278C0E4C3F904 +53E6EE82BCE3C28570246ED6679594B8D02F1046489AB84A90C7DC53D4A95C694759D7CAEE9A +C29D0DFBDBF050601940ACA3C5134F7DBC9524986012034F7FEFBDA07520B6CE72E9313F25CB +553328C0E87270167F0B07F6B488F9BECCFD4335DD2000A16C7C72C9046750E01859F4A43049 +4E4143FDB7AE58F02DBE8292C12700D17DA279760FFC68508DBC84C9E8D616B78E1ED2768B68 +C2B34AE2B46414465457C9F4B8EC914BD01DB6C8DCC146CC8AD2E311C7AD02FD788F14A28EBA +B4254BAAC3E91CED0976CE1CF54F36D26C3558218C7A80CD88DF2DE032EB51112EE9DB607B57 +EC220B50F9B0054A351048C32BCC57F2881AF07EE29D300D25FDFD2381A72CBAC6FD79B646C9 +68DB6381A2E59AF541AB3F1225FD8ADD2845C1397D3D3243EEAF132956E9718440A39CE4DBAA +F8AD4D0C0AD4BC179FDD1653FBA72A6C51247C5927FD4364B810503D3491C517B1891AE3ED23 +6702FA5E8D56D65069A00F1154731860A0D41B7372084FB27E5570FA8238D16D18B5952AD78B +57BC1D3CA6EBFBB740F8236A5B2955A8D46CF2EFA652746BFD5A563DFCFD6623BFD171AAB5C9 +C903EEB28BAFFDB869FFAE492627ECD2F3839D68C17D21745E269EFEF6862923E9FD51E987C8 +5FD4373D1750840EDFB9088186DC914ACDF5B38E64331C315642773C300F528957B52BDAD791 +E237C196F11A1B4CF3C1240E2E1DD2681A9D89EA14BA826EDC1617742D8064D2C6F0EB9A2649 +54BF1299554E676CEFED3736B3DC723CEC473FCA505231A4DAE45A10A086858F1FAB77DCBFA3 +DE1C63BFE834C302FE53E3E2A176CD59AAEB86853B5D5272997B29E7CF5E4971A5976556238F +8D893511E2F108DEE13738BC90233D6D547E34451E35802A7A632B10803B73119A34F634F968 +2FDBFDFC3925A2DADDCFD69254E2A93DFF0E2562DBEB7A62A98FA7CA49AAAA0E79DBCAF45E4A +36BD85E731F4E0BB56B28E698175DB6EF6D4CAD8ED14D1CDAFB9B8BD6869DE84294667225554 +66B058CB1A08F2E0A0E665334402F7160E6149351ED74205DCC4ECEDF306BF670867084C1E2B +34129CBE774FC145C6FA41100406146D6AC19DB75D4B0A716937818E3F56BB30CF240C6B501A +363469ACC1CB161C425B1049C7539B58EE263C920AEA42F93BE9DEABCE76C0E63E41AC2422C3 +3D4FA8CEDE71AF4ED2D8E6956E337873D7480B4E305048AB2051B70768A63D1554D01F751FDF +DAD8E64A16F2F70EE4A3FEEE138B001A88216048628C90C59515AEF42E32B784D63304DF5FD3 +B302C01A5B8ADFF1654FCC46627E462B525F65AC8ADF3D0CC6B71DA08CEDE7B7DFD7E783E5DD +A30C5B7FA1C3BA1D8CDAC73687CB7306FE8627BE58CCF7BBB81EB4588016D44AA87AB9D5F078 +183932E5C681CF65F8198A902E05FCB31C9A214F50C8A7E760CC2FF1D6A542761185CB099737 +47E9E4C2FC0F5EBFC77672F61F1CE1373648D5EA3EAF9E2F7F691E58CC25B983BC21D2265D02 +0D14811D7A451D456648CF13129C4383D8F94C5CCDE2F74430C8DA933C0F126F51AC51FFC0D6 +F0E74027E4AE96136D3839926D3757282DAB5E071080B16DD3B84E674E72F2BE9D35E9AFF7EF +0A84CF412091120E79206CE53BBC5564576545B6F9277CC5FF3813D2E94DF1869E6170CBDC5A +D8B6A2610257D83B031D1F6F7EA6138938EFBDA5ED4A972F6A42B27C83202361674A01AD7ABE +B2CC10945DFA1AA6A82FBF7BF8EC8F36C6562D087F8D287FCC337F78DA5AC459A92D44ABD9CC +ED447E7C49E6709C8DEADA5120586C58F0AE0FBDF2D78F46F0A4D3E08D04067A6CBFB7028746 +030F3D307C929E759BFC53ECECC8E6955F306BA63EC1D0E69A884B90EE0664D2E842F4B172BC +C132B681A789C970E41218A6D4C8E4E169FF4FEE622D664163E580E0419350E5CF7C534CF368 +5CB465A8E2A636A6781AEFA67C50E8BA34AC37761EC3D26D71C89EE63969C1AE1B8AB1DDB6CD +E7CF48DC55C3D9C5F6CA42AEA5FA85726544B19E5AD7B8CF446542E2ED1FCB4B34AA28C02C93 +DBEE2FA9BE47C224C2303399526A2ECF8BEE7BEDD6E0B72DFF2557F3947BB58D767E2EA9C45B +9D242BF5F0A28C8C38F65E2772225BB4FF7FA85E38B29D2436E64054F338EE1340F91147F6C6 +338A0613EEADCCA2C57D21AC0D571ABA3CA005C5AB37D1D3304E95CD9EC2B152255FFBED5436 +A58CE14A897345E43F1146BE65D65982420620FC4F950103D885DC69D045BB4529CCB582F37F +0969304957A4AD52880CA7E834D517F9ADF2BA921C8F880E964BF01AAEE8ADA819024CCEBCCA +040AB5F73796D08D35AEF73A88C7E833023241C2F65D99F89617767DCC39E544E7B46A508E3E +376E9A64801ABB76433A195FF6621F2D763DA0B264A3FBEDC471431C09F36F5DDE7E613EAA45 +AA82BC3844C6472C03F901BC6B092FE40AEA39CE87BE44C93B5B2D930F5C3840DD8A72B002DB +B5A31E3A3AC8D452F5584948E4B230B8347B6DABCA769DFD2D540E885D2E2E351682EC8D6DB3 +41345B52C31F500715D1EA41037CA9F1E9B0EAC226C1109352F8C612D5B74973EBCD7757512A +0BA20336364109A46643409423530DE92944ADC18862B82A93552B4F2BD84ED6964B65BD9EA9 +BB10542EF217D6C8D6072E3212E47588F7CB4939069B324EA2894996331A07A092A0FE0D41F8 +6B8AAB477933A7EE88D4E455741487625931A351F35D8CF354802A558643F7F263370C21A4F4 +74FE89321EAF3593AD7167FA243B892B9FDCEDE55A4374580D952F0BAA44834753901688D856 +AE9656B4FD71E602B6183805F2CDFAF350A48070FE1D8D480E6B2CC846D75124E186504A87D2 +8EEA6102888F7BE6DF93D997F917E17B03C67C9C8113E2263FED855F4CE790185E673FC6D01A +5EB5A2D114CE2F4451F34DA09DA391E9472838CFDF72D638ACD7B4F2300CBBD50825773B3BF7 +0B2DFE4CC7A04F22A149000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginFont: CMTI10 +%!PS-AdobeFont-1.1: CMTI10 1.00B +%%CreationDate: 1992 Feb 19 19:56:16 + +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. + +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMTI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 161 /Gamma put +dup 162 /Delta put +dup 163 /Theta put +dup 164 /Lambda put +dup 165 /Xi put +dup 166 /Pi put +dup 167 /Sigma put +dup 168 /Upsilon put +dup 169 /Phi put +dup 170 /Psi put +dup 173 /Omega put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +dup 178 /ffl put +dup 179 /dotlessi put +dup 180 /dotlessj put +dup 181 /grave put +dup 182 /acute put +dup 183 /caron put +dup 184 /breve put +dup 185 /macron put +dup 186 /ring put +dup 187 /cedilla put +dup 188 /germandbls put +dup 189 /ae put +dup 190 /oe put +dup 191 /oslash put +dup 192 /AE put +dup 193 /OE put +dup 194 /Oslash put +dup 195 /suppress put +dup 196 /dieresis put +dup 0 /Gamma put +dup 1 /Delta put +dup 2 /Theta put +dup 3 /Lambda put +dup 4 /Xi put +dup 5 /Pi put +dup 6 /Sigma put +dup 7 /Upsilon put +dup 8 /Phi put +dup 9 /Psi put +dup 10 /Omega put +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 15 /ffl put +dup 16 /dotlessi put +dup 17 /dotlessj put +dup 18 /grave put +dup 19 /acute put +dup 20 /caron put +dup 21 /breve put +dup 22 /macron put +dup 23 /ring put +dup 24 /cedilla put +dup 25 /germandbls put +dup 26 /ae put +dup 27 /oe put +dup 28 /oslash put +dup 29 /AE put +dup 30 /OE put +dup 31 /Oslash put +dup 32 /suppress put +dup 33 /exclam put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /sterling put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /exclamdown put +dup 61 /equal put +dup 62 /questiondown put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 95 /dotaccent put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 125 /hungarumlaut put +dup 126 /tilde put +dup 127 /dieresis put +dup 128 /suppress put +dup 160 /space put +readonly def +/FontBBox{-163 -250 1146 969}readonly def +/UniqueID 5000828 def +currentdict end +currentfile eexec + +8053514D28EC28DA1630165FAB262882D3FFD20326947B1065649B533EB5E9E3A88A87FE9879 +18A687950B26F647D6E08BF14D983ED1D4A8CA1E2DA8D985F9442EB916F5B6ED0697AC7C33E1 +E36A3BF460D34CE45F1631871097CB04F18E38894CF4AC1538EB19481311D24FE3BE7BEAA4A3 +730E8B4831FE59D6D9CE2E46116B629C7BA2F9CE3ECBA2F43BC162A5A077CA1B2882A42AFDCE +C3F4B75B5D63E0BC8E5DC95257766D8EA467AD9CBAF47BE60F797580CCED6884B3A68F70C91F +4FDF80FD00ED9139E7F480DC3A76AF72AD9B434187730BDFAEFE4CBFE5C7EDCAAF249204FD70 +3011932E5A3C27BE468B7DAB69DAA18DBBB6335AB8DDFDC607961C7C02582763FA069D43563B +A17704029945CF42FCB19CF78C51DF0EC4D851086D43C1AB38E865EF36865FFF3A08B01CBCB0 +70BA4893F7482DC7819AD03D337E520E7D8CD83BB8AC7AFF4DF36751F4F12AAAEA2B6D7260C0 +9A26E987C904003E07237DBCC4A8E4E85CD3259F40D3CAF55C742CBB40AD0DB1044C20A4F122 +A63F7B811D945BFA69662189CE4D089464D2EAD9F6ED60B581B04114D5D45E97BE27A5763515 +4E9B8464F2A0DF18DA855EB51B8F64D3054B0B2E84621F025A0776D16FEDB988A43D2D64C327 +68DD106B9F541AE8E68AC0BB7399E16F4D4BA074B2152D0A4E9B5BFC21BFA0D531E28165E518 +FFC054DD4ED0D74ECA079D20E79670419F92E03BCBFEECF3554D661596F6F29E12170804D15A +250D917FFE7A8B6E8FA530471ED97BA56481589A65CA13619129F1E26AFFE6C22F0C38540F8C +E37EFB6E9E9B60B51A5A9CB4454FD7C7F92F2F9437159687AB590F35B946A54491A7739C9269 +E0F1FB48B129811C82EDB3171CBD5105FE65906974DB8A7DA92F4F43DC7F6B366981146D86D2 +3613A0B38D9D6191DB9FEA0172E982CB1CC50E382F69DA1B377C1BE9407F88A2A761B56F3984 +67A057F35D18C01CC377E006182C891EC80272E22E3A5C7123CD27ECCDC87392A9FDF63BB40F +02B7649CFC53EF933C6518744CB89CBBD437830EF5B1D58B00B67BBCF4426DC1E6EF583B0B4A +D3AEBD741E3FF0F729AE271F032019B1E7268043FD215BE590F9CF24DA14A90F1683AFCBA800 +6CEF5D5632C2481FBC1BD8224E8952DEBB7C4596A237E5505AC143180956CA1F603EEC70CDB4 +A33E1C4CA1744E08940CE778E246938429E09E84F5D90F2822272E697A2B4EC52EC64D678F49 +D5AB137C105A467B7C4FB2B599B8536726935A90145F426D2F022DAD53995B991E97744C027F +A0427CD1117AE246514032F3FBAAF6FE9B496D6A2BC8BFB77040D26EAA434609FE89C1FFFC3D +8081B8663582B893912B7C7C56E5753D23DC2FEF5C3AEFA09929F7470ABDDC99ECFCC44C9456 +5201A19B8AFCFF6C98BDC87E6A7900F980EA0020FDC7ADBC97FF99578B809932DB7B9B6A7832 +222855A0A586738DF9357FD3FE15B89218BDE940DC77842A8DDB973536AB81C2764AAEFED023 +A7F0A3090FB38CD8D51AE7A65300CFE08B3574C621CB1A9F8EDBF84BB034A399F6F4237171C2 +D38DA96707E2DAB287F025A8D50C192A6200C771DF9E79EFCF03E92C0EB5E66AA1D3A0AF1F40 +789D9EC825336FB0FFBA43BCE0F388E21485B432E9BC85AD56413AEF3AC49035CFC5D31ABA69 +7B505385DEC0D36F76849FC55012616820E4D2ECC1E05A16A98438A966526344DCBB7FD5A355 +2EF61AB1CB2027674AAB594074DC7B4DDF7C815529B9ECDF39A148D855940D0A60AAD8F7A4CB +1B8C1402BFF8AB3EC10D088B6DC9B57E047CB7E1B66645986DC6C9736F707ACF15A687E04A8B +D48189A4933945FB77522F1A4DF2A56479FD4EA1747671E0324590BAD27663DC32ADE591EC57 +A1414B1332BE3EDC56D6E354CF94C1D793A9BEE0646C69C414ED22905F413CFA73F9291BA0D0 +BCEC956B0F15FC29FA7B50C20CBFE3069F86439FD2454652C021183D3365EBB8A3632D338A85 +D22BBF99D4E26AF8F5E9DFD464C9CF24FB59A2F5D08CE669207684835106491628AB823F335E +3D035C72FEEACF1B1957AA65F100480AD9D185E042E5732F86A8C1A74D3271741F115B15D54D +47CA2091597340C5165DE89E3389292B62F4C38D90C19390AB221460976A3BFBEA7130829D3F +749E5E555EDE6485F2045E6736617BAE92FD4B6286212DEDD3A130257A26C96B81B73059373A +B37D1B5FEA8545E584B28D8D9C943AEC6D67C9C33BC448F42C56264CA8166302A6C58616C4E2 +418BDBA38DD8059838A708E92A1DEAC20FC598D6B1D59D910B8DD3C9D249D55B2B61880BF682 +A3DD3F28CE356CC554AEF00887EE102657670F51256DFD60B05937F2B4EDB62000588383AA24 +5AE98F52EBCA209BCA0146A1BC9151106661CDACE63C5F043BB7C17DE121CEDBB2CEAA3B7537 +7A842C58B8757196C529C828A5B1815D7FC80B98304A1FBAEDF32CD0C397F4469F42D36CB3B1 +CF29F93FF29F6E4208CB5505F08428508CBEF9C8820310277FCD3E3D69210029606738ADF321 +480B677B60D9AA7A1C3338B74CD5208B695EBE12824D05643257C55176931FEB01CDD048B787 +0F1CA60BCF68D3BBC0DBCE536137F191FBD51FA9C55170FC801F6DF907E12C7C84704481CF4C +464C0014B93DC2B2F3346420FC8698B3397F567FD7B7A12A88BBDDF910BF6EA1EB7A1D45893D +0D50A0DF8EFE2119BC1DE67AA1F8E37B685DAF05544796DB85043111C781F18F249D5C89F463 +3157B5375E46524DD71E1A373C984F7B273418F3CF69E085086B81F0CE832A74407D4BD3D57B +B7692DC8313B5ACBF58288CF188509DECB393C91452BE861715591ED61BE38953264EE1FE854 +4EDB10BD57576A42F4ACBEE31709E75F4B5E19E61C9EB07D0912ACA3FF457E4B7DC75A7F176B +5EE402CFEBD3F2AFEB06F55709AF93320CCF02343EB4E06A98200A4B8BC6A9B284771F239CAE +3B24E69BF3580EE9530CB0E5821E2BD42BCF4DE01656F02EC010FB1436E9C7420E1C9800AF06 +C384BB3D13418B406330C755EFC0E390A25AB3EB067178D072BBD883ED6676BAEB11BB627D6E +3AC6DFD4EFF8D1C74216ABBB2504E0BE03FA43574FB09D0639CF4E1466C799486EECC518663D +2529AF8F9E9C01867962C5936AD3F34D9F62151A3EDFAC604859745C8BE54B96B9C9A766A589 +FE16FBCC9463243A24F769F16B4E0D979BBB27D1CC41ED8088B5D5D39065010AD56E130B529F +BDBB67100EBB288CA74A4FF762FA0D4F4DC509D2E40E550A6164C20D89D9716E44ACADF72C0F +75B44A025A3748BFD1C2413F444420DDD4BA0F451CBE8F70A848C7175530BA97BA140B88152B +733E59842545B1058B3C9C3087045FBD7CA16C6A7D35EC93D9F4020AF5CD96164103C60A8FEA +B77EA9589A6C57F0DDF087C37D2F908E3ED142614B468C2C55C1061507993ACD42357D8DB592 +260C6F387F3E68F346BDCC88AD2EC3F42BC9B8BF3923066623E6E7C603FA509FB89D3B6AEEAF +2F5D8DBAF5883766FA5FFB70632D1DFEAA43BBDBB479C67CD9101C73364360E07F71CD82C0B4 +384A671FFC0B54192CC4E4D200BC108E94F27BE0D95E96B4A5E2A4EB1B8A1CD34D37BB15D3D8 +95A0E2E9D1FF377A2EEABFC9D79E37BB4526A97E25BE20ED47F48919D0C8FD08616F28E955BF +C850A75BEB2D9C495904690A16E14F9C349717A60191C1E3597273C7725D1999CCE450EB4018 +7987D12A073A6F7B21504D6E352B005F0B76846D78EF496664B7688E340296E6409A0A514618 +19DF537F25411604DAE5ED05D2BE1C84FEECF8A4D1E6979A4267DE24650F91595F5CBD8A557E +9D76BF0C0A012C697454B7923706970DAF97BEC8D19000FC6D9526896B0A7082A3E467DC78C2 +4592707204325A38889B381AC8AD33BEB76B0E6F065D86A6337E2252359860E2EB3DD8EB957C +D853FE1397479DD2AC5AF33E26A3895CF08286760D20552A65C9559B99CD1003DDA16CB0EAA2 +35AA8894339CF6DADAE0AC5F0BADB255D9C9F9D480B9AC3810959E13D736AC95BA70B5B810A5 +7FD0B6E986DC38DBB70A6F81F90A5458716DB0D3E121B6357D36D75429F9587541D4493D5298 +354BB2745D6148314338C2761C4E84FB75EE364F44384D9B03B81C90F6D35FF36BA9296A7B1C +03661D7C4BEDD5E88924692F98E3269ADC4368A47E3729CE298E0A86A3DF13AA3754D4A59048 +DA3AA3B2A48291FA5358F1FAE1E833E3FBF6EFFDDB6AA644BA2B7F1F4EA616A05AABAA9F7F05 +F9525964A3A82BBD155C22AC47D00A01A81F5B85C7DEDD04E707AF0B01BEA577224814281123 +93C8B2FF8181CAFFEBAEEF47FBE8D24B5E906011F1FD208B2A14AE81A0FACCCC85A7628FADCA +B755A3BE8C0365485E2F8033FC40AF6F2F93A55366EDF457591FF993EA13BA6D12F31ED35385 +EDF1FD7A9273208B118D2F105F4B2FD0745026F3133F78F624FE464061CABD65C13D22F08CC7 +922E824F3244754E97AA93990FFE77D9ECA348DC30D7865A9AD09E67394A89536FFC851F486D +541A52CA40BA74EE0B312CE09168116A7375A426218224E725A871EBAC32E672718803840A5D +D03861B6CA4D6BF8850B5A328435D0DD7DAA9DE329F123C1B658FFBC41DBC48F5E3160BC6091 +3268DB289C3431B44DE07027E6FE9C079DD3FE1864A58AD2DB80F3E4BBC6897CE5BD288C2556 +B1B17D67021B259C4ACF6993304F6AE48AE0292E8769A5D6BC943970383715F2D03F8D5956CF +8C86C0EAD6CCD278E4C415350AD8BB589466166B3EF12A36037BA29C14C387702C7EB301B4FC +58E8660F3738949D98E6A5537C4310992D7B96D7045647D32B892273F5ECEBA013932F923BCA +AAC00D62DEB318DFF3288D73A38DBDF8B40F690EC4F246056E8869193F03FD2EFB8860DE3BE1 +A30FE9D642A3DF5C59340394213CAC491A554C33A46898E797BE1BC70E04B586367D451D98D4 +3F48BA27E21A00DF8F0792967BC7B7F6483E55C7D917B11E973F65DD003D5C732163D291763A +6C598628F789D4866B841B7E4321109277FB32DD682446363452F494CF0067D159C16352D9C2 +60AAC8673C74E10517FF30F4C0C4F51CE71D2126155E22ED3D52A523DF27E556B0C1B3523354 +6396F9921B62FE6BF3592222C9A868F6FF989C1E86C86575DA51D336CE9ABA13532A59C420AE +9979EAEA4DC665ADAE56B7C1F4AF84E9C5454E17AB14C6FB7E4BC58019DEA386A294B2F4C8E4 +722BEF99833C5E7EEC04B49635496B5FC7D3D277B8AA40D9E87F154BAC8434B86332C628BF0F +B2C5B0225DF39E5EB5760E19D21A7B899BECBD9C189C088F66651E5832DBE898DCD0B0D3E0C4 +C0A7A81AD20EFD8F2ABB15010856DB816C72FCB7518839DEE4B259C6E88B9FA2B7FF3DCF2016 +15D0047712D8EC796F99FA5D4FB2500F879B9EFCF03926C2F43C892FDE4B954FC5496E4D1A11 +66AC197783FA28F54063FA50EBD85DE2A5481C387E9DBC573D8604642F932775B37949E92410 +E339AE70A74BF7E83990E4A29649E2E4F9DCBF8E680F9B5E5D469924983D791217D043907B52 +F8D3B3A8F80D1BC70CC13A00A1D60619E886593CE96331EDA74F52C79ACD9321DFA9A2B14740 +6E937DE49ECCA2B605D7364AE9C9AD75DBAE4DE32033A8C7558ACFCF6B7B616DA13BBD800EFC +CF68441503558C1E42B894FB730197B63D98F0FBB1573FF2DA8DDAE506FBD36F538FF7B84525 +0989B8EB42290238DD2FB897F223A92510F6BAE5240C620D32F408F41B5043074C267709B800 +EF5E78BC3A07083C74A7755DB20F73AB7EA69BE17674632CF4BD14DE5B5EE3CB2CAD485D7C57 +73055D8AC16862EB87A584BFF94DB2CB3ADD7B7A3BB91202FA30903B403D7052FA1A7EF796E1 +9C89229FC8E5B5457FD7FD56769A4A21A7A1D77EA6BE8FD42CE82D40F0FBD7DCB53E1DC0B2FA +5F9E55646285019CA7A780D6B47820124A9340669C6E5DBBB42E5E4561D068D3EFCCF308499D +3D4CBC3105FE9A03122E3E78518E6DB513AD56D20994794FAD9118EDB8964E24219E74CCF25B +4FAEE0086E487D7FBAB394059CFB6695D22D58387D547BCBE98D88F259DCDF1B2C2B68FDB052 +FD1116D6B584970A7F8765E82BE89F08EDE9EBE22D24849593C2166A2F35CA1C5C423E0AB955 +A87168EBF31521A06D5E888F15A66ABF2678E55F5998E868A14967943252DCDA93AD962BEA97 +37A91E3AD4881A41F8D9ECA94B0A3F66A29DECF1A5154E2DA9E5F921484DE95A433354DD8F54 +48D6C84B7D8A8B4CCC5A9FD2812C40146E1E34F049E97D5FA12420025BEF27EE4EED347816B2 +F8BC817282011A9F467654D7D33F0ABC190634978931FAE58288F66A8D057AD853E6A1877239 +095332735001B0D3A387410D82F8B150F5757E7FED55008556F8DACD57376D64EF29D14F2606 +DFB3B35CC3AB3D78CE2D9FB33352D5CA2EBF74204CFDDBC3E2A4841934B14CBB3C1B55D6C68D +61087C8860AB978530CD76AB5778D854EE0D480C0622876701E257081B1862A0311ED3CAC02C +90CB20D0FE5ACD34A5BABE578D188E804FC6C27511A5C8D6AA7CC96E244598C7B9D6FDD0F731 +20926C4436B0D0E6D549DE336C308355BC338CD10A0F43CACDA8DE545FCC4B33EF64C1125E8C +CF9CE2AE9FF75FD93EBF6FA54A53EC4D13613B6F26F8534B8C829956E73039B5146FD549129B +40ADDE993CEFBBDBDBD029F96C5C4B68F9B2EEE6F9B5972053BDC16590FC6CFF24B8ED696BDA +5019A47B2FE78D3BBA20AEAAF10626A4536B43A196B6709D03A0E46640B1003979192F3D3190 +458AB3FC9BA4E05E840409657C3D12D160C359BB902F7C090557AD37A72C04B7D39BC261FDB7 +ED03D1F72932A8E15897F4871E852967BE07A0A41636E6E860887DA67415764AAD5E5E1525E2 +4B6748823B012A0B7F78F686423382E18A8BB0908C9D6A3AC68759A8D5BF2BED2D55142C7F52 +4B2CF5C7E699CEC25525172363EAE0132284AFE68F36D39F52D5E25C111F68237B41B9F69539 +72E89CE7F43FF62938CE5D51D730D44CC79AF928D5FFCA2A27D679174D21ACB0C6F0B97BB119 +6658C28722FF78EBA6033756277B14352B7349D9DE3BCC97B990086227F002BE7E5A930581F7 +6A5712B0A8B4586F4149F2E46E5A7728B708BA5EB0388610EDED2B66C0B48AF87565CF9FC1C2 +BF488B141981B906A938DA0A1500A07D149C336B2563BF25F03103FC515224C45EB8D05C3AA2 +B9D1DD5A3753304FCAB6BA868C21D32E6D5B26ABDE7EAAB5B0250AF4F2F4E773FDF134EA6308 +1405DF0E1C3E3557C8F94B242D6027D3D186A2CBB0867291D7135A3A80106193EBB57157FEE6 +720B6E4E4E13AF432B1C197DCFA0BEAE1F6A7912EBC096D22E8B48D483A4DC1070FF8DFC422F +A1971834C27FAB2CEFE8F811804DAD0E8A47566DDDB6157F766E21847A79698BC8616B68358B +CBFAEBBCF88730E753EE02B2AB3C4D2F5D13E67C5F24F74C2D6B7C06FDCE184C7AB7478A3AF6 +9CD1600B258CFD04E29E8A8D90782CA96740AD6FD48590435C47394EB7F73D0B213757BF50E5 +5D9003B5F53E2E8DF40BCD0FA6B5A5B4A86E710161BE8FF0C0F4EE28A8119F1AF1A28F7638D0 +F76D86B2F99A3B5691C1C3106BB4A7E254B5422780751FA1D76D8EFEC2A1C3275B98B0E3D595 +24F933E4CFD96910E59082C59043AD8EF6802D99E07173F306290BB5CAD4B43B4F2786296359 +E445DCAC16FF085ECB5EF331CA1BE4FD7875DF302A589EB8BF11D1A85419FDF10708D0D4F5A8 +CDAB0C7F74D56296A3FB3C8D7CA5F80AA19122EADCFF9711E7CEC929B30B2ED69535CF3CF6A3 +D7373D65ED5FBA3E5E4CFD14BA54EDDF0AA35867CB7ACEB44D12C3CF2909176E6219A0478F72 +FE393C34B4C0B7F844AE17DB5AFFF0B216539365A8AFDA4616A202A10F148532BEC7DDB5C089 +64BEFAD32C3D240D8080E3948799A5C99EA538CE687DB7093F151C0DCD4C810A83733AC953BF +F76A0988B356FE694FFD6371E8ABF826269EF1FE6E1814B09D99EBF4E5A6949726B1064F16A5 +D00AD8B86BB7A5F9B3252E4ACDA4DBA523F5D662E116C02C70088D8C6F93E3747D6E950D8BC2 +A10FE920854D32DCCD9CD1D07A730CB2D02FF7134155FB2216ECE0E586BC9ED91EADAE541C2D +27F1E9FE1150F50E1860AC136674FDC9FC0C2BDA554269205458150EA28A3228E9A2A3372DE9 +4888D001087F64CFEFA4710735621D6EF35228EE3B257F2C69151F6E119038DF1643C44850BD +C04FB362276EA0E4FA4FBB5D635F98F4B1A0F9B070F1A38453FD6C651F0F90EE471148628FBE +FFA386BCB1E6F63366EB7FEE4920776995E90E0684E05AA0A7EC40D727F4E3484B02A3E66CEE +07D18F115ECC0ED297F958E123298795150F427D12AC6BDD2EE0089FF6910AA577889C668AA8 +BB5076EAF7609FC498C6C51D4231AB6B2E2850A51B59F94FBBC89206CA91FE9FA81AA9AA5D81 +7AE5AA9A45A6FB85D5EF47492E95B9626C1FAA1F8DB33E8499712992CC43FBD7F2570B15EB0B +F1DED971B2EBEABF24240034BFDABC06C5851E828980DDED018316093EA6988DA1F76DF79CFC +90AB99CAE0330B7F2DC517F7745EC3BA7096D76013D53F093D1C21A5D475ACEF361501A97F1F +034802DC3954294BFBD0F9BE301714D958D81EEF8A0872458529A155B0C79FB4685DDBFD2FBE +E420EF4CE6442E3475211D10E50B9692DCD25E5C5473A817237552934848BFBE48347E38E0F4 +D851E0C3374EE6A7915C702C7273050BD74A118FD3E84E0B45B4F3EA30F0AC4BC4689DEACD67 +7DC7AA91E62889515D52AB416B38103308A7B301CA32E28EBFDF6FF2BB3D93E93AE5A40E9FA7 +CABA10B5F934387FB0CFE936F32274624A21E87D4556022CA7447531307DD5BC906A7457C696 +C7835FE81F3783AF019180AF5117B21ABF50EEA2195FB8C26738CFCF7065DE53F9E5C29EB097 +4B70E9DFAB6EE3A342DEBC28F95BFE393037D80B3E027E8435CE534DF47C97D9506889A22504 +4C018B53E519810AAE47E69F66BFF8545FC0EFDA675D3B0D9A4055CCE2FDBA4EFF27B2E638D3 +12FD1F49FED76FADEFA163E01D3C7C244363B57D78C871E9EC5579BFA2B0D9A220A172E6E850 +DED5D7B8D61ABBCB54540F23766DAC40293F129833995EFA7F52CADF88B7E00CE636CBEAC6EA +4A8B00E7925B0D1AA5A4CB818BDCA2E70E37161F3E717FF40FD6F4FE77755F5107B3579F262F +B59712C1B56324F8AD7028DAE5112926DB9ADA0C28D7E8615D96BB8ACF3FD6546E47FB2F9D00 +3C52C5175EBDE4DFC9E0DF447F4A8B5DE9370B4BF4DA5A84E435D53E28AB75966B41420D4D07 +98B8779E18141D042351179C8EDE08307509711EB00474B6E4B12446184F4AA94AC5327D5B0D +2D3D20B4C4C135EE91B9E283ACE06DEB9C1715CA8B78CCE477131AB802E9F5514A82D55FD125 +A93FFCB4385843D91C56AC170D442098EB5F4CC728AC8034A1BADF5390F1D53923A0BCDBF36E +55938B45F2D9BD8B10A7E5F5FB3245BACD83E9521CD85B194437A4CE9685570B3DA825A89657 +AFB6A68A7AE6ADF3EF5D92AEDAA420BBE86B7C671245CB98307159AF74BE629A8F46476BE63F +FA1628377D256A86DB6F28C9BECC892C2406F04FE381BA5A253829F4C07EBA8AC16BE5CB46D3 +E63F1BAADCCE269C66133BE8CC60BCF6704721F6244CA012022BF3482C5B24C9DA23D9207557 +8EED35640056DE0BC4C36EAA208D6FF1CCEBC602603EDC85EEE05D4DBCD6791156F6C1731231 +E77AA5787240F70900CA7B8718CA1FE9BEC6F8EC59EADDAA18182181261815602583C85EBA52 +4C7C18DC27C3A4E3CC14C7DFFB2FD1670B36F2F4D38590460DBAA3B6A992AC133605603AFBFE +7226049FE41E69F04C4A6B2A01D06F5519B55921F820D1A8D12F11A24C0323C35CA2025786D2 +CB09A5AF4E3C2DE113D18FFAED07A354B72F2190767FE9A06AB3E9A88F8B00CBFA3C12B82DAA +7B436E20AFD8148006AE3E4968C2D8289F41CD7D4FFC61EAB1A12B60A3ADFDADCED9754F64A6 +48A458AE66F5A44737B8D16F436321069FEAAB9AE8B0C10750B3C400C5C827BF3674F0F34213 +2F9380ABB9A6EBD54E0E800840E24794EE8E3CF6C75AC62BFD288F05435340AA20425D1A9B75 +939C627F825DE6EC589F1E40632C49379345DCE3B3A4966BA4611DE2342E31E79B25B33DEA83 +08A96D57369CC8570E31DF0B9128B25A21B0FE44C4A61329DB4E50A43981686F9BB3FA50B4DC +DFF19BA5B0EC564D94EE093D2DBBF135840EE31041AD4B3087FE733B9284B043E396535D0C2C +8987563C94E25F0553E1656E0A120685FCD1042A292C68254F3BADD5931398A725A13641E94D +7D4DD5445EC0C6B52194AF70E72BD7E1FC98418CDAB6C4C4684037976737FC783230E2812330 +FEE33D693C37806192F7320FD35A415E7ABE07BAD0E1835EE01BB1953F50B636077FEAC98734 +4DE0320EC693926A09A77712C8E01F1FC2E71FD4CBC088CFEBD6BFA203DDAD5F8F6D5CFE945A +635AC949400167568329315A02EC5DA3EC974EB10BBE0A050FDA62F29509734DAB2732E32560 +9B85B7F6E72037375CC51C78304950215512966D69BBEC4575624074244219B2EFB7AFB8B5B7 +3E95E8DD8B71189EF22837411EF1E1FE4A3B07F7CE3C26557949035A54316349139CAD64E170 +B4301A92011EA16A3A5026E724F3D35923DD7F9595AD506B8D1ABBE47CE80846838A29BF7E0F +6FB8ADBF7B27E1D03B98E487BE18D1F5E374647D0BFE3B7A5347586424980E645166D73B0DE4 +AC6EADB5680888D3E9D460C6831625FFC7C1FADE5AC680E00B6E5776680803A8FAB59DB1ED33 +2B48F8ED919AFEFBBAC7CF977CBF3B8D5EA42AE9D24AA6F61D86CF496473FEBCCFC23E618885 +D37D1F52D4AA63C1B0107F4444E85FE8D7A2F65E3183A026066444132CED223F436A33C0FE14 +30960114978F32EF956D22AA61A7C0AD7A31785CC40E7144482277145878AC842B2CAD5095E6 +1F1036C32E9DB8E771CDEFB32E1EE3D0ADCE43CB1BD8A4CAC9A68199AF84FF4185AB3E06C302 +DBA3AAC3BC39A8B34B9815955338C6768E90819FDE9BCA59951D8150356F659F666DC08DAE42 +B79D209CC2C305DA85B6E5BD4D471128D0A42A2FA4830C3E4BE1AB4E5754CB127766F80DE2F8 +DDEA4A5408C6D3D84C357E78A6D2F46C9A3E376D01A4CF5458559A0BF1BA8B74B444294C6B09 +7FF3EAF29A2853C30ADE3DCDF303AA4A3CAAF6728113EBD143B28EFCA63F6BC75E84DD59F823 +F62562ADC55EA78031A27E95195D79CCEB5197AB7CBEF883BE62FE3A9390A0F4EF2A2CE81679 +C8D73E5329A2C384A2E540DF0A88EA036835B03E17A605F1F350F0D5BAD65335863671CF5F08 +776239DD1B623897751C22EDA66DA46475D0420DADB20EBC5A7F325073D00AB388457C99FD0F +90D1AF23394CC47CB8E520BAF775B53FD32573595AAB699FB443F766319AE602064858E50B29 +DEEB433427D44C06F7BB6F34F7F85F671B9BE353A477A6B79D8E03BD8418242D0E67161B453A +5A28356BB9A8D9254DA9EA2847A26A8AF54640C65B2D84987038B16A232C40C4CD0A6C12B27B +801AE135CDC3A3B383BD511B42B664110B632A822827C024B4E390319845CC062CE0C339C718 +C8179929DD3C590B8870B2CB4A1FB6B1D244DB5991783437AABC5E0D86C2E2BB4A57AE55C0FC +76DFF34D9CE4F9DB23099AAC53901D436A4B0A8E067ED08737C79B75D9CACE67325006A9BF5B +D158103C8078B901170FC86A95BA7671197527852E6FE1540D7F44F369CF1C204AC545A2E704 +AD937B06F5ED870623054CFBB8F04ACB4ADE6ADE3FF71525ECB8B0AD69D946E9CD1C160A39AC +FEF4709AAB5F58FE637425B4C01F3AE3EA928F5A478481AF383CEF9EAC1BF1EA61A551DDCE84 +48791464BAD9554CE870FB1E85F8C40579BB4D3E2CBBABCD1566FE49A2E17F7AF5E6896C2737 +C8017829792CFCF9D753E0D328F96EFE2743CD3F351C7A5E7F76F7EF5C5974A172B7AB5EC867 +7FC561CF78E6A732FF636E46BCDFB88B2EF788908F55EAD2F0C7889A22DEE98E56324BD89952 +F6D389C98B3287FDCB14A6A45B3D9D3699297D97D69BD8CF7924D94FB0568043773A9A5ABA62 +09900F550E82CA6853EB148B537B4F75F33DF6CB3BB0DE3B9F4C117D9D24654235F5EEF54362 +4CC358DF759E9B9DDAA3E803C026B82E70A13FC633F0A6C3DCEF51F0B33E11045BEFCB233C5F +9EF1672699EE26A19765210D4CA63AC280231E062393165C2A0E98A0EA1B68B17B88D7B98279 +6E8B943C3C889090CED654A29B0F6AF0ED78C8E36A5B753B18F5A571BCC68D3ECBCD50AC03C3 +1B888E5D3DE12CC4149983AECFE36E2C3ABA05A3FFB4D0D05676D7CEBBAD026905841F484B90 +E582E551638623876486AC664E131DAD613E02AB76F6F9E09390A864E045D567E67ED37B2076 +540FBEC8F8B10CE78F1902C3582D625EEF170BB657A7F47A9AE02584A15ABB2607151563ABB2 +0EA91FEDD2FAE81101CFFD5CEBB2B538AE0286BDF6C0144061C1283446AB96B4C1CDB8990B49 +4F347D3F776EEA433FAC0BC2EB05FE18D8E7457E1AA6E685126CB494B48F98399190D70BEF9F +47573069D1664E4B0D8765A6C5081166C5A8BCED01B7EFA65EBF02839CA4123E9A8D565AA556 +4095483F605048606288F7A26CE3A6EDD7E9109C6078431536BF06F93345329B4C7EE3AFF383 +726341592756DAB03E82BE0B30059BEBEF482F3E2DE99CEE46421EA59EF355861E002A44E0FC +A5A428336488F5B0B035989F7C569094E152EBCB52767A1296B72409391BFEE6185E10A29733 +226ABEF840D10B4F028F4EDE303D245601734B388CB9717C4AECA1C4391ED4054137F6ECE8A9 +33444E2A03F67985EDCB1B248E34C0EAE44F9C22AE1C4C57C8F6AAF83141744E81F86E3B952B +0D5045E9C725B23F696B79A60F47F7106F53E331C19CA9B3E54EF5DA6478EC11537572947185 +3591F35BA2804F36982CD9A7E5A5963B79B15644CFC15913BE4186BB64BC08B0F4E7863E7A5C +BBB251B2103B5E8322CDAA3A91D7C21455D7A02FC29EA9C9E1C8F021F39931A07080C140D8E8 +A4AB3476B4009CC66B8A51E7C161DC2E716472CEF21B68C2E5877FDA42F02895E3A7641FE80F +2EED2B26682BAD62F860A9F149E17A7DE263437BC6335DF4979807EF19E4129459E2FE0136BA +F9775D97A1DDD4DFC2D555695B59205105F096C80B52D4969551968FE51BA57A17F86177038C +3E09E53B8BB5AD475EB70684CDD7FD7B7746609B4353AF0171434C8050CD2948EB7FCFBE73F7 +35BE287A5CA4E83AF8B4B26D9A939FD613AEF0F7B6D4126E15B0066F17DB8F57A513FE2C8F7D +5AEECEE35912F25251E8853EE3B0E5A2FDBD9182A6B9C99BC19FFE8D85DBC7146C5F8A8859AA +CF8935B1A0A2189FFA3A4118F1478BED18AD6FA6AE328FD6B6F9E0DA13682D4525623975AA54 +DE675E235A4E435ED2B9CB7248B0B1184D590988C9CC5C6C8C118540C67B7885FF522AB4880E +6E6B9C2B6FF111908C62F656F99C6904B57A21C049B5CA876931B05BD1B554E818A1751F62C6 +7AE918082F25BB8B4AF8E9186EA7BB7769F924F8C189602BF190ECE0194A25277962C38E0321 +F3095A27FB7DA0614F717C2E0A575ED37EB80D6B38AB8C09470D64BB28194F05AA151B3A46B3 +71EF51E85C73FD3B9E3A7B476F9A21FFA3BAF12DC5F4AC4CD479795A2CDE98939AA074A317E0 +B553267028940A5375A7EAA9A1185EDCF27AA619301751477CC3F672A3D59F6BED11792008F7 +341A8DDA4F6BBF643A57ECECF19CC60884DEEA925C1EECAF3C024EF16B09BD5E0B6163CEFAE7 +94F61137C44F1FCEAF3140FC223BCF203F663269AD41DC27C04652FA4070B9BEFC9AD37EE79E +AE5E9D703D1E05B9A1AF54D84D5F97607D147A77F9B90FCC5ED6626D18E2296654634CB36FE9 +44C321F1D1A10B1AFA8E7E158A32322B966B0F8ADA060308378FF18802BA6E8172D239D6C86B +2D5F9A159B13A29C4DBDB19E2D6EF3502230A46D4468172D8C2497B4F03BC25647589252623F +011CD0B852061893897DBD5FDF7F4282751267AD7D4914A199CB0F046B194C6277C4EFA5BF43 +05F8B9D6E97897397E359BDB4CAB04BCC2A69413ABD55545D4B47741FE9C55BA58B460C6554F +00E57AB516B02EA6296E3B8A3D7CAC22D6807280F3E454708A2DF1F9037514CEAE8527659EA9 +EA852CB07CE6A14745384866B2DFF0AB77F6BE544DA12DAEA95824C7563A56F24BF8DAB88093 +31D11108CA50870DF03593C421D229497370BF92FCBCC0AC9B5F927322B896D96FF6437D6000 +6732B9DE9DC0AC9DDB2DE9D44F7E9B92A93F5E36F618EAC8CE21829C0C094FC061C8428DCE42 +C028B1CDD84980857A4DF74DE564B20FC20897E79A496DB3149848466B8A6BC493F3D4CC6D33 +5B57BD84C9DF116A6FA286F7EE401E7312D078AD606E8FD969B69891013FCD1FEC68ACA9E3B7 +9684EF7DE656DE419D92A46DED2C43EE1E3E23DA7FE60029E1F1511AD8DB52B2589C7618FE8F +2242956F1976E5C174412EA691747B4F1BFCD3C23A60A298B99ABAF7F5B491F254D90D40209C +23D0805128AD9506FE9ADD32562DBE0B81F2CA21592BD5E739EA8CC4D66690253BB5F9D3108B +9591C3906EEAD0C837902E28D45A68E61971D1706F40BF09DBFAAEE3579F403FAC996449E1E6 +C75A24F8143D8A5B8BA6808555ADB90E32AF1039450F1A5ADB218825EBD38411EA7869AAC603 +E46E14D98ECE5432098714D5B26B353DC418DF386549353C4AB62BBC637FEFF4F3D37AFB618C +6ABAC8F6F2DDE2EBABBC838E388BFF532938CFFD9EF0368A0601DD5FA4DAE6A9E866D9AD9EED +A0FDB4767712518EBF3C7063FCDCACC116CD5D3585F52AC01B75DEAFA649A55FC114C2D6F568 +C23B54C519B19189868B74D5019C643032308066D410977D5866B582FB82D6FD8350B123EE17 +F24F2991C188F9C7B6F3B1A62F8F0BB3FDACBC48329898CCFF62A17D015336B0AB0D97BF3EC4 +6EAA032A9E68A8EC0F84519950FF3030F88DDFC9342B5804F3E2EEBC2364C6640A10C1727105 +AEF24B16F0CE008B4E9E669729CE5FFFB2124F4FE459AF66CBED05AAF92DF7008199A6904D52 +7B510E54CA090441DB1AE6AE16D07AC5FCA4B3CDE7F89AF905FF9F87B8B56F4A45F653026066 +34BEF03D3D5F3F24F655526CDCF2E897D9BEECEA419F0B8F36D83D42E14F51BF109A20E34E1C +6BB749D94101F4A59D0B2325AA66769655AD84C98240920FF1637EE4F1C026D06A0FC596D08A +637E8E87A48A8196AFDC361B0F84CAD1B2128B9AF38FB6B20B5979863DDFDD5673BF8F821D5F +64071838BD74742548031F16D5B054425EB649CFF0D130381048C7AC73FD5D15727BE7218882 +19FF85A8B0654171835D937B61DCAE579F293CCDD51B0BFE7BCCB75E7EE1F2DF2CE6853539E7 +CD74B8B1DE9C1562897A4810689A246DEDF8D702094408F8B6C62233F5FA83A379B3376B1C52 +F35F15729BA9E65EEB7243A484CF7B1EAE66C20BF4FB6D95ABC1D72B3CB95D00934B8835D057 +6C7E75D2F4766296DA85E684F82368DCA018AD9BBB2724B4A30C9E82F52961B2309C158A4F57 +C85F898FE859375051A77A887FA4BDC0EA89CBF73DD8E6FD237B401424C2176D63B329909A50 +0DEE911C7DF297D9516E04444CF2323731AD408C2B1D16138404DFAFB9AE239B4DF5475078E4 +B8F201948C46776470C397C947B32215F5F4055803D382596310A776DC28D5B8F09EA2309A33 +5D97A4DE952B8406F0135F3C38546D9D0BA146088BE38DB7FC1E9FF3B70C21FCFAB4C6C9F9D3 +7D61EDAB276769538949DC39238D1EEF3DB92186EC56865DC0A9D69550547074A41C9A85080A +DADD7FD96E23687898607A1AC8EDD58FEC4156587E7A41BDDA6377F0C436AD70C53663566C41 +478B8C41517A1540A0F9BDB924D64F07556892C569A372662641016E2321FF875FDFD236CF98 +1531AB156E2C793BE3E6354F074BCDD21EF4B7FBD9EDBA1D3DF52F80220D4C697497D6378817 +B40F6CBD2CF458B492356EC2F171D584055FBE7ED48223596B6E72EA9003F1219BD79E05329F +564BFB6DE6A6F62C8838CFBAAA0054342DE83D409F7F29EE655D18DDC3DACD2A29B73C76F9E9 +67365D3CD235184A268791343E09B7A30098B3691D18568579B465B13FAC70F7392A8BC44173 +137E1F3D2748E0A67D7E9FD094E7AAEAE28D1FCC0D83FD68BDE7CCC21EC94E932D333B8A7623 +FF1C3F69E9212900BEE3656124D0856695096DBADEC466D3DC6A466D4F5D5C60BBF3CA100581 +36F453AD02474305F6427E6738C2728B446A0A6953C3E10BFE36DF5F3A3A447657FBAA426F0D +BBCB0DEABC57F7EEE5D3CCB0937C7FD274192680DD79423CDCCA30BBF1EB2767178F8372ACCA +A4E5E513D4D9BEFBD1C367BFB3588E396F0786C730D97F8BA01C5E060EEB124ADDFC8E68765A +AF36768C1BBA0D7ABF871E43918D15636746D0F1E6AB2402DE58B57EF84AAE228D74A20D8340 +B210496D69C3A5201A3233C324B03E53F591B6238E7367895BCE63BE3A16504AF90C8C042C83 +A73F412A0B5EAB7F9A5BA7D112ED7D279A54066A8127F349053AC44E2F72E707D76CA68AD5FC +15AC3C31C1681BDBDF289C1D0BC2148699D02DA09CA4051A71FDD63A772990E58D4E97AEAE7B +20DB14643CA84604B4C692F23BC1630D516CE939EF865F7C44B8C7A182CF372A3B932B1D3014 +58797977C90B57C5E12DE0B62A8D664C699182EFC6B13BD762D4C713A85E7DF5BB9A8207DEE3 +C4959E4E4EA330CA2E5274725E735E485569D1EDA05F5997F16F7D5EB2947529CB70670698EC +06FD3FCAEF47AAFFA1712F5A2FBB7362EEF33E66F0493C30C0383CA6C3BB1AAEA99BA3904BA7 +2C81F8E3D117B3A3603BA3BF9BEC83FD7820E3353D9666009922A40ACD570B752F58533C8996 +9B08308A96E11C4ED57380CFA055CCAFA9558CA0CFDF832F0090580C7BD5779F8C1A0A9F0561 +6384D9C885D1547F38986876971B2F5BB52871C05045E6514AF557EB57C5B2E86857FDD30F74 +958EED440E691F004F51A5A23EAF9C03B2AFB28A6E16005B928EE533AE50529FF4D58CEC733F +C6D9D6B9E235D5C39A8EBE9668C7AF0DCDDB318020E802AB5B95871B644FEF014265A3536D3F +4489C1A2BECF8D5D5D2D6EF984B5C4BA674C74ECA262FA2AA4A4B7164B04B9F4297482012336 +12157A6BCD92A7F3E5B6F642135F344351A94EAD13A912DAE64A132519C58D68AA11BA75ACCB +A26F84E0CE0B8B2DB3788327C615003DE8F723C6C51549709FAFF2C7DC76F773C55A44A26884 +5D7968B52A7B495E93B22F128C569C23A29A5A662C939A16BE08DF74E525B40473EDADAC4DCF +5226409F9982E3F9F28B9F0CD6AEEE91EA3E41453BDB07E84A01E165797B7E0C88399DCDCC66 +6581B746ED63D1B3FDB7731A98C2708DB56EDD25E6097A20094A11F79880CD47DEF83D4B0C0A +BB991DB8C878B0874D099D7B5555CB668CD5B7BFCD2CBA76852F0874B906B1FC95616FE6237F +40D3FD63E29F593A8842B151221E63CE8E9AA2080E5DFD5E8C1959F97A4E570FE6CF8234EC4A +961BC15E46789446ADC12CF9D3E9DAE345230941F924FA7337C3585860A2870F388B14B29B76 +FCCE9BCC0233EE7CE39A242B0537594D14288C00AA67A08443E69521452AAB22575449C2EE80 +D0393ACD3F7C9378B4E49A5A4D0B707DAE8502791EBAAB3CEED7F2ED54585183AACFA76DC3CB +ED28699CC8638293A2E885BCD88EB01C6E6C828C66F42F1D534A63B8606DFDF1CE4F8823D2B7 +1DC2E9CDD74703EF1D9D1EE0CB7241505366136E256BE79C31EE8990B0CA49CD2729A34A92ED +BE12A7738CD2E4F4002C9F6DA211D57AA3D713850239DBEB9AB648BD9D195B1741AAE2F1386F +E88AE159B9E996E7D803E0AF11008B345BD743433F080E70A1415BEC71CA6C331A22629F80A2 +880E7B112C9B6444E146566C9DC14C73C178D41F99CC78EC9D106F102A9C6435A507A2CC7C81 +B4FD18FB4099D61D0228B82BE3755659968DCC18005EC289BDE509D5A98A0317150A2C8D5CBA +B353BF310C39459AF38B3B6532928C478C5012AF23CA4B834B3519575DDA13BAD7CE1BCFEFE1 +EEA9CDC76B5A076B14477C2EF875B310E9A3594A6DFE2A3AE2858049B280FECDFAF2AAF1AC77 +99757A833D0770974495D7094F1C1E4A91F51978E49014DF917E74310CA1C70CDD6B4DC90420 +33391B960FDC9E1945D256BC0F9DED7EE9235723A80BF0D51AD4F2F7E8AA91EC22CB53E485E9 +35FC169AB85BB1CFEC6BD3E7F234AA6FDF26042C90E6A3BE33B3845A1C9D8967A752CF387BD1 +7A76D07B7587E3AA378C07F47E452623FCD2C144723F5E40DEC0457C6E96C39D671484141AEE +45579E097FDD98BBD391DBABEFC70054B0729AF2678687D9ADBB29FE3316D622B62C27C5CAF9 +4FE9843DE8ED1C21C9CE728C83248D77C6067EB67F12938759D82D41520A65668BCB3D45EBFA +C664FFA0D2A0E7BBAFC03F8E849FD08727F06C24767CF30CAAD10F7F18F2E15E2AA8D3A3E49A +020F70CC20919E8AA33F46681F33E1706CD396F9C7C93A19038E5930EE5104A48C3F9B308E8B +88BA9CBE24BD3F26730CF157637DC8720BE68E01E4D511FB5C176C1C6EFD57E304A67FE102AC +289B422D7CF3FBD39CE39BAEB79A0AB979506460A29DB8AE1A2D90E9571081D1FAD999AF409D +632EE7B87E33157362DD18A086AE32C83AB8B960053B71D41D6B72523930794C2473DE9856D1 +F9E889FDFD70A1B7D9E887CE1FF10A2DCE4EDECDC9C0FA1F56CAB503F54461F3D3FA5CA082AA +5E28D3CDCAD848BCE4C379276944C42AEC1D7E6C447ED4FD70BD545887F01CDC53C0E255246D +7496B987383E162DBDC1DAEC6CE801DD3193DAF1DDC1DEB9D982E736226A601FBC0DDE4D7B56 +5BB1E87879443209517C058F68B9BBB48620B636846DEC19B8B2973B88A53F8B2E2C4EAD40CB +EBC4C217612ECAAAEC2AC077E26E4FCDFDBB08DE8CABAB2C0FCFF66A040B9CC79752F1EBE58B +6BDE30FA17EDA0AA8709CFEA344CD1AA650A08DF25D4D16F6ADBE2135FFF9E7C903D7B7E8944 +CD49F7612679C24DC4992DC27532CA3ACCED63CC6991F072875CDC4D1434FDC927FF15833CD6 +B195BC1286CF6C34E3E0E1C7B00309D7F5DE3E24FD3B4B3BE0EA637A337C831903AE4A0CC7AB +6C8402333E66703FD34D1A67F580A4E63990C88AAFFC93CB6B4C9D985E39EA248AD715A853FD +7DAD6D1CBAA35019A2BAE759FD04ECCD4AB9705C2D22522BFD7ECAFCBF5D185C841DCFF8F141 +458574398E865F5187A383B9172B85057D561B2515FF9FB9ECC617CDEC6F6572BDE8983939CA +5F47607BF5A5F6017835C1265EAC50FCBB54D7E122A9F862DDC5FA00CA937D4DE4E0A385E752 +C1AB12570B0CB3B56AA751EFA9B06557BDC4C2634770B2DA7A4BFAB3FE332262BD6C49927CC7 +D433AAAE9D0E77A06A4954A3A1E75C0F037163D17C4984BE3930FA529833A3C6E12433EDC336 +24350B2EAA94A35C85FCCC1039C03145A77F811098013E850B768574E71287C35DE5DBADFAC8 +4B34BA3DB23DD1110956F415BABFFEC9B79A1360B67A9A22D75C5D2994A81DD54D38630F049E +C4F0CF38C692E0F7A372EC2562648AA5B63ABB616DE6041CE69EBE2FBF2E1A4EDAF57DD3378F +A1A445E64A7900073558888857FAB7F83CE9EAB5F020479F6206DABD5E756A481E4DDF0A6446 +34F63F796F3C062D4968BB1055279671DD762730FCCFF930CD60053C9F33A88C73F255254986 +B3055B66A36EC266D73DE57B2AB53A079031EA57E2B10B0FCB2843FD5A1B7AE569C351D7A28B +0932EFC2F6FE1DB4C34569AFAE364BBE8C323FCE13190E6B21E6210B34D4892127D0EB8C617D +BAD3AF3EA4CFEABA4E81AF57F6393C703006485397CF8C018A654ADE14BB99A8280028DFD8F2 +F1C97945EC437026E2000760D3FFB033AB8719AD5924F37E8D2ADB1AF1F3BD9D5FB84BDA304F +E1A47F12A13E79FD0B268B309D784C6F874D5ED89C0B8C6107A704F61B9489EB1EE372285876 +83DC82FF74FD98CBDDF04BEDF35097E66154B7CC2130927C7A718F5F4B4338B2EB6FF0ADBA99 +0B5E94CD21265EB13FAC95B9E976D1DF8FF2496A60A81B9599B3A07E5B3F074E201C46D7EBC8 +C2B36F8011409D5D8430DB5267F2AA04EC5A000DE223D356574042C4FF128D902F1E1151A731 +E54D07DCD0ACF614B19AB51F651C324ADB3D8EFCE74B3493F0D6E56D4248CB06648C28FDE0A6 +341AE2792D29714C66C4BEBCA0A520FF3C312C67E442A9075375878C20EA6766369DD30647B9 +36191BBC344AF10636E49A4AC2E45D2680366CA41A21D0E5DC1EAD87A13E1A0C079F396230BA +CCD2C4CE3AB39081651CA121F35B285CD7ADC2067E121C4F3EE2AE45FA8EFCB563C6DA895FBE +84A0384AC9787D8C4A3BDB6E2E87A58B9FA4B595FCBA204488B377404DEE50823EEEF2221F1A +C0AF2AB2761A265FE2C20D10E21B6E339A1D3A26F5B4B1A99D316C8CFEA7CCB52442D26C70E2 +2563062E982BC256947CCF59C3E09FB1941D7B54E0A42466CF642DCA91FF9816E6F406E0F0EA +23ACC1959DAB7E7A8AEAAB05C2BBD5257B01CC8F0F111CF7360AC192C348BEAC6A273DAAF64D +54AEA7D49D786F98D7358E483609319699A1FAAAAADE42826EE0B30D277025161130414ED914 +AF741854017A405F22CD4ACE4CDCA0833AD52F49142FB4C03924023CEE3F2489BB3CBE03B122 +19B9CAFD7AB8AA59AF3239248BC9EF6816351F9AABF77792D7197945F00CBAF769F00005A615 +B83447E173242A3BEA79E21FC28B383541388AB3D342EA87876F2CB55A02BC333A133FD05F47 +1A3AB493674F17AAC890F14450EC5708063591FE5E6912E41F971362180FE085706C880ABF1F +BEC092828608D1EF6C52D01A9F16FC32C420279C559BE5C673D2439E0D774648EA9EBF4D9A84 +13E9AA815283E016FEBA6293838C81DE8C3E522AEAC857E4EA7891F81DEC06168B4A15E3668A +61B924B8EA6FD11AB0589A5D2B6AB3E5F50BD72BD2C55471C19EF542E278F3874EACF4B2C2DE +312C6100A3F6064EC98747C366874E2233E88F201098F75D4C275B2AE0CF6809BCE3892ED3FC +DA718AE0F46EC1B624DCCBF6E84024AED20793FACF0D1FFD2775C6D6922F9377B1E79393F7C0 +775F2455EDE1A4DC311EECB9F57C20599E469C497FC23DDDA0D9DCE6C3B036EFAD121522C580 +31235EB8FB69FAEDAD0715E69EF1EC9701938DF927131C39848BEEB9FB862D13B8ADC13C86BD +963108F816A3424FB414EE57B3C7D8ACC56E8AF2EE316DCD3E04C6271D733DC9277729683120 +30D87118E79006DD5AADF01BB94B308D6FECE272BCA13C7CFC41CE3C2FB964CA42599C73AC33 +71BF648083FAF1D58F55BEB093E4A941856836C7B5B8FA689996ACA0CE9EF5E14A88DFD61853 +2B692006A29EC8492F21910616731664C6629D5F0D6118BC6EF45536B987C0060A12BB18787C +14174F7EA6A16759986D2A279842FEC752604D479B74DED432D712CD3EEE397B541521E21F7C +3E5352CD5B98C4944FB08F9B1BC70F36288C273D1FD74B7A9A5565EA9E69FB3E4739A586858C +865122210125AB07E4AABF35AF7D2948B8B13F69499AEC43242457B93FE382DB7DCE515849D8 +B91C96EE155BCBFB2F5160986EE46AE7EF74FF7870675B8E5D22FB8594F81D096A967185FD96 +32B2BB96190790E203EF5F2B0772E456F981AEC9DF29D7D5BC5AADFFD9D95D0446573859EE08 +6770C307B0A174DC9A5B9EF35D22DBF191FC1A2DFD554A0F8685A09D731509A80D2BAFE62989 +7CFF3B8476E6904A16A99393C66D11E8CF7A5B7B195752E0523A743AB8CC4F3283A544CE0D48 +5FDE0773B2E364D77519F7D1E9F822980C6593B1555F2BFC8398340C7C4A5D9711C20A2CCC91 +1D72A669737548CCE5871FF08BF72C8C38E4645E5D4E4A10687B7C81C55DAB8D7DBCDA0A1C70 +7AE4029DE0FC02378DA19CC5F818BAF6F88258430C122E6863238C0D3E027C3FE17E58083254 +83AC041EA5331368879ACCBE672677C0D91826F066853E5CD2542E035F6FEB730EE21EEB7983 +DFEEF31B1C803A4715E0BF3CCFCEDBEEC6F312F28F12C56739CE813F9F70649823E5A8AD5C3F +5B06F82231F02D2DAAB589ADEA88520C2B5FC2AD7610C5069C0DFA2E4D74AF220E665869798B +78C3E98EF345D16C60641B226F7A91AE700388A85F8933505BC0C3DE00944BF08A25B692C6C7 +D9F46EDB6ED4503B187530B3B80198623B4FE031CAB4102A3B99CF68123A38DACA0E49B2AF73 +362A601BE22299A166CACED06D3682820F3B97A546A093C9BAC6585CAB716611CEBC87841700 +88E5FD0D31596D6CFEB292EDADA2B6C3397041A8C972EDDB817ACA9139F6C4B82E0D39D11CCC +87A191BD10E23EB94C55BC72F4758DC3240442DCB4A1D2C49A6A05256A22DF07703245443597 +9EF2993370A2EC7D6A46E832FDEC1F425F9850535E34000440D72420263103170EA306B15596 +086D2FB6DAF78202B2E7C7A82A74627613521CCCBC4F378E7C66F38F4947641FB07184F714D6 +AA5EA036256C686948FAB99043D6EC0E5F5458C376DC98264E8D38BA725CC94753F37DFBBB15 +57BB10F9B300BC91943220B4C2F20A43041A60C978F4A69A9536E02A8B088206391DCEC3B1D9 +76C0E18642B3BDD7513757CCC85FBA444D3C007CC7CF3F9CE68B75B8BB43D3CF74D68DE3F789 +19BF1DF0E6AD61BD6B3B57571C72E387B61077A28BD96087C28BFE4450696DE44EA50B375EDD +76840AE0BF7DF126F2A96B1F2C22ECC06F49F3B737C89256961378D6A462A201AE88A3DD9930 +DEAFBFB4773AC710E922FD78328D0A7C1BD057381668A74F988BDBD94B3C8132C344C527FA5D +27D5B50AF2D9F809D665E931C1C8DCDC9ACEA44D76C2F8AEB30798C16A2EB75847E1B39A59F0 +4D419F08F4281DEB5557A2D53492861C75D66F48DBD409B8DC951698FBC6BBE88D30E174784D +46A6E11E49264D19767C2F3E2B192841FB15BC169F2E37E6532BA7C805FA51C62957851F1E85 +49C400B22DCE93ECF10861346A6532480A3D869186E42784FE0372B15FA990D9580A64910345 +2CAE1B433A32BBCADF600EF2DF4A313889CA84749149239CE69B1BFDD816D572C359A9D83ACD +19EEBFB754D8A075876AA99E5C86751542329FC61D247D094094019E78B0101C865CB0F51EC0 +F1003D5F23F7BF8BE9A53DAF2B6A00B0C138AFD94412DB581316BCCB2E294A1CA794EA15263D +C759B61BB45E14A2C207A1AA2577D1D64E2D0C515B10EA68CD9200401F750971E80D251A7487 +146A8AC453A5F809532354D3A36D612E3B8F7355D566F54AD4959D9207338987026DA48FC975 +E43F8EF1595A56FFD4066258AB215E1608867C2BAB3006D78D46BEC9774884B1A958DCA0B0F7 +FFA98C7B1BCFE8699E64A044502ABCE20B997A1B87B605DDB977CB7C66FB2B7496180390B6AA +C711A63557163EEFB9F5C530451F70028D83509091497B388ABC1CEDBF30BB101EE4DC8AAB1C +A4623FC6EAF5390F361E0DD80597C6BC9E8EAA52DFFB1FF652767AF4148D4F72C2B5239627F5 +2784D54145D325C9545670EBFAD118C0F16AC402DCBB299F204CF42B7017F0D3CAAEC74620D5 +AE7A2D66130B4202391E6FFFA18F3CC2A788127A185B4A9244E0E06F2EA056A3B377225229D6 +FCBB56DDCBD32DBA30C613FED48D9890BE8722FD441DA56545BA40853F12ED9B596F999BB145 +0F42423EC3ADA8DD8BBBA651DA6026397A46DFAD76888F612F6D1B7E1EEB959BBEC22AB7F4ED +B6F8DBE76F162D394E61D225283BA461502306941DAEBA75FB6FBACAE056AF835B2FEDE6BE49 +6AFD3CE06BBD8A34F77DE79CAB805A1F88241990D2B71DDCD53FFB3E536A22A7460A57CB8909 +B1DB369CAE328564FC1E68E094A275B9D6A69156C1F1F52C251CB338D36BEE5B11A4DC3F83E5 +35F91A3264E5C8E4F086B42B613F575753EA3D708A5F1AC195960BBBEAEF4DE6D1C58C45E6A7 +C5AF1840CC3923B1A9DF2CFABCEBFD1F1386E0C61A1576CB7A348950F7556E315C255678D8AC +27DF7503051883B79A00D40E8FCE7B14A09A66908B367882CC808B9DEFF822DCAA1E648AA63C +D984A5055D931D0DD82C3C65ED0A3EE3DBA7D5516BACD60A2DB25633AF6F864B307BEC9356C4 +99422FED8B8449B142B4D12B0637EEB82BD5C3541537DB67B099B33A0407E988C0EED630D7D8 +9042D25761A26E3C0A3C143C037B43FD10E01B759B07F4E7E92177CEE9AD78CFD7509B7DF136 +EC05B5F373709D72B69EDD9FC4029479E77794D4A15C2DCD29A26AFB22D60185A9A57A4A0AD8 +3F09C516844299CBD4CE4159CD7F9C191A003ED211FD86EC3DCBE38C6C8DEBBEF252229570AE +416387A4FC03ACD075EDB53989692FF3BDFED86E217EB9DE4F656B143773FB7326A2B44F1370 +7A2273B774E59DF0A6DCAB9DB93D305B7DDF8A73796F8CDBB683B44BC63C15F8913A12ECBDEE +3920BD0E9A0FC81A97B59F5DC7E2B49C993A2D9CBA28D5704E15D702936934AAFC0CDC7447AB +F7C2BC61F73C7BF1DBA55853A12705BE08AB6792ED0E84F07D86C53F2C22BAD9128013CC622E +42AA03A1BDCCA293A04B5F73D7A76CBDBC1F32B428039C3739FA5A1D75A84C29894833E77792 +DD0FDE2C3CA782B634A2868D9C1218DD8F6B1806FE6D3DBF1CE9BE27674A3EBDDB38AED4C087 +6A8D08A578977BA685410084BE04CC507AEAD5EAF285BC6A6E18FA2D6127E38188791363079E +E07BCD68F53372CDEA2F98B9EDF558124C7047DEFD116E81DF56ABCD1668038734DF84F293A3 +387777026646397E36F91B8E87D2DDADBC8E2738348E5B55815A5E060886AACD2515E71BDF94 +589618CDC6B17EC6BB957246BCAD2F01009A8CC370BB18F389E8B6C9B4588F4F6DAE619898AE +0AFA7B359699E04DD41E73538D3CFA33437F3B97DDE51D5BDAD00C22E50E5D94315C45B569DD +9C24F2ECA30144DBFADC451C508F0E85DD9A6EC2878F06225359649AB459D50072A2D11E4F59 +301CE94BD672640D3E3E6F58E335B7ECA974837CC0B5263E29D34C00B2FA9800E6CAD0D349C0 +BC1CFD584CBD648BB3EBC9ADA8456D0C097DCB81C55AC72ACD223AC258F221141B8CF5555B0E +30DB348599139E6F9E7ABA032ACAEFED86735B6EC68A0CC9AF40911673896F8A53E68B442953 +0336E94DACD1024D022970466091FC2DC415D5F45DE6D9A92180E0EF69DA37E014054FA5B164 +155AA990E7461D372129C953413091580AA43605994E8FF02D5BC1E54F14F0A54E1CD7A51919 +5240B2D624DCFF13877BE38A668B1856A0FF96C95C863BF1A84CED2B5B8AD7E2BEF463D74660 +8B07BD3D0F3B315E0234EE06C78847FFBD738BC0C484F59A40E92F095C8EA0463A2F24275F8C +A2ED85C86FC092B92F10B4A76E303C0F359C723FB5F2831178B35056DD45D01EFA8B73577467 +B9466EDC9E7D1A5984A7FEBA05A72F23DA9612A6330D9D26220F90366C564C1846571790656D +ABB3E1E90C9E6F82D974464FDD45D0BB9013AFA07842297E5735976DF70A3CF4A87B1B02C96E +4CFBD08A56391EBCD5453C9157199F006BE605A102B7E1F89199BF164B8BC15FA5AA18FCF3BC +787C016AF848697318A7A84DD40FB4B790F619243A48E75BB637641B5BF5601A7FA5A28D716D +11DCB9A2469FAF63F5448FDB8457FF2F30488A129F310982824DD303FB957DF6C783B8F19734 +2C8CE62019F2284AAF444C7D6DCCD74411CD84C6F18C07EA34388C1D0F15FBBCCEEF8605F731 +BAF5A006EB1E6B34CB567175C9FC0DED63DE0C466B4C35D3AA5F9FA84C50FE914A8F7321C7A6 +6AE9215D079A80E8FAAE17E030FFFD006C54FEA36DB19EEC4814E26CF875F4BA2005DE4EF84B +ABBD55C667DEEB8D5D3D83550E55B98CB00FB45D2587B1DF1A7F428184A8ED78D11DD2D96805 +9B406C19303759E127397C65C4F546F7000100DD311AD2A38DED6B6C692F5431B34129EB9361 +C1D190BF753E807B09831E901DED093A88E6624CF0F46BA8D422D1750C43E4CFF9BA6F76BF66 +17CEB95FDF8F064CAA8996E5BF7B575EDA82D026BBA76D7DB5F54F097E7AE63663EC9938A2E6 +031F94B273BE9936E69992753B967A42020C6140C5FEECC5703E5A565A27CDBE67617FFC7912 +112B60C21262A92DCFFD31A4AEF1F00097958114317B153BF93F8C24B5AC9A6336E7D65BC42F +5A68FFF36A3A56260E4B9E7B655C5B9709684ED04D8CBDEE8BAFC1879148BF81A180B0F533AA +CDD1F402B7A82968117002AB1E7A4E4B4CDD5838D7C0572E0F5FBD13A1D36549A96A7C42EE8C +4D6107E984285D89A18BDC711616A6C68B7A92A2A4DA76F295C99D2E5C754160EC9A51AE9F7A +FFA41547B0EC4210B92D59193B81A973D9763C73661C1C7FD830EE2202A88CF2B6A79D438B53 +2E1714D9DC2E3F8298EDD522FC082AAD25C3CDDD50CD1F132AF308874C1A1904E258098CD371 +9BF236ABC9AD83F23BF276D48A13886F18857AC75105F0254205585BA1322F1DDA52C1A1A76C +18685B5C3DF7B59EAE4E55D87266F67258F14B700CB20664FAA502CE8420088CE1A316BA16D8 +2ADBBCBCC4DC7F817DFCE3FB21FF498FB5CD956607775FE34B1FC20EC21676E3751A579B3FE9 +DC4B7F7F99238898EFA6B10495E64ED9804AFE667ACAE7E8E1D7EB245163D0DDB4B74F755EB3 +8B0C615B1B8FF6D1FB6830A1667810156129EA8A101B101046CAA3F7CD60E46D55BB2814D724 +1B2590E151A05F234A3737CC0DDB57A6E3C8A4ECF0DEB12A8E78FD22B6650FBDAA1D6B342B23 +1725B5E9B5C153FB08CC7B692FE7A2BBCE04651D3FD06DF84219655140F3A46CC167A9B56BED +00EF6981864B99057438C58F476CC445D5A1D2A0DC2BEA86DF1C81704179CBF01B843BB8FE79 +CC5C6B1C966A49E61F6D453D448C9A6C1E5AC1356A67CD6C7E351D9857320BB6369A01F0D1EF +ECC718940CAB37677E9F0E37E53FAA3DE8C0EED83071AE6499663CA8344F9359C2574672334A +1255F39DA556F5DD732A4E5E071D62C136FB70AFFBFFB0F8AD749401ADBA3F45D810AC46F4AD +4AC7201E1F15BAAB988A68C73E56A947E3C5DED28500C863AC2162A766771993D2C8D4BE69A3 +18DB19521A39A303F031601535DD9741B619ED86820D586618A9B44AB0BE6A4642F9E5A11551 +ABCEBB1068186B92AF140DD243645F3991B3553EFCBC10E47D13090E2F1D683584C29CFDB55B +8792FD23A55553ACA2A0C0FDC8AF21DC1BBE322B59515CA5B41A72652FE904200CB5069A09FD +A144F121E7626D14C5FFD64E347D9ECED3211E71D620D2D0BB417C35F7A3437A06B4D25C9C54 +0923ECAB9CF66234004827FD0904C52F477196FCD17638BCE24537545DF99148B19040C86C56 +D4117D17FF23E01608DF1CFFADCE5376B51E3F8CDC3E5E0426C1C7A18FB858EECE4DD124A6F3 +538E94B4B7F81BF87E676554DDEFE1ACFAD2B153676F15837EF9CA70678C77892ABEE7073CDD +353D35C351CD6FAC1E018EB5E26F32414831DD937F54F259A37F0BE85E510C1DFA2E52AF5020 +B6CB17030ADB3DDC8B767CDAA84F78D00C92FC1EE4964E30A06E4B06CFDFD690F16BE59212EC +78EDE080D967FFBE3E7DE247E26F95ED65C8F047F049F555CB44F62060DBAB74B02277FCE39F +B093DE6FB2E043F7B9BB6CE4800C03804094E366F32379FA5C6C42B37D60C5864840E7101DDD +D5FCA36C2C3608F8199BBBFF02F7240722A8B16E2976998F6242E71D9DA971A522689D74B379 +D0BA2059EF1105414082D60A09B518B36299EFA56432EF75FEF406CC7B81AEC55714C42AFF75 +0DEEABC6233244A88E374F91C0581B84CDE79BF2BCA66AD00BC6074F4B0641751BC98FC52F9A +564B9B534E9FDA14A524956C12A4A74CDF8AC15371A4D4F75267FA5AC6F16ED895EA6811403E +576228E4E09FB5FA4CC8275241D1AF5533A0C9E598B1022CF78DFC144AE402D957BBB5A47969 +BB7392DC9FCCB6D8947B5C5C2DDE1C98BFE6B3E26FB0B3618CCF74773388289D7943E144BFF9 +CB5A4F30B23ED5F5AE2DB62F08F6E50CF99218E9A33BB82ED72F12C62B5D7ED7AD7375A77CB4 +CE52AF221144BA7F9601EB8DFAA361FF21341432B8FD8B8226D1B5A2245F7356B3B84CE2D9CB +9C5EEB1CECA976ADD0592F78BB8C4D85E2D5C6179B30B3175B32F0D1F07F37114CD475FE918E +4DD983BF35C7F5CCB415CE41C071E10D5FA2C5B2277071539B6119028B41ABADDEAC18300A79 +25FE207ED0697582E76EC0A60D2B6A29F007F7243B94AAD34FB0C46711C15A2108ABF238581A +5AC32FE07581261B47C375B57BC7F3AD6AFC71D80E6B5514CAF2C57BAE6D519F94BA2F95A9E7 +ED06933113D29F48E625EE414A22850E5C24C768BDABAC2F5E5C4F7024C42368B5E161F27590 +27D09A0F01177B756493BD4D453C4445C8A17CB42BF88B7ED5B0F34EC4D014EC373CD226299B +CF096D059E8065FDDFBA19E58679EF30CFB577FF360E8C7BADE6303C599B8A5F5C1656BF651F +8CB9CBF05912D1852419BA583F54FD5F63ED121871DC1A5E040715CE5DFEE5C7B412E65AF9FB +D38A3DA859DDF75F512809920948CDC124BCECC6D1B18E67B75CA8CCEBB488BD8684153DD906 +6C7C92258D135BCC751607AD093BA50040A3CF04B7A5A53EC4A014D8B7FE016DE9481EB50F01 +3694AA4C9336E122783CC4E964BFF0638AC69D2A174C2A39C458FB49E024A057A4ECB0A243F9 +B33E2DEA9DCBED379CE14E8B66E72F3BF0598CD55B2A256F6B8419218E8D56512B57151B0FD8 +98BF7C38B8FA6A82CB4EB965C8DAB45E80302D6DDDBA72029AF77228FE296D50919A280723DF +A247E0C636CF6D1FF3A7E8F827B5AD52EA6282E4019CF1F01A9D09833F191C2092A8DB728451 +F0B0FDA20EA34FA0F2DC3580AE0621A7303EECDC7CFAEEB307F2220199C01CBE42F27B67DB94 +DFFF4EABC96828A41440177C5DB6F190C0B6015273D7F28EA79383D33E58F20290EB14B7F7B8 +FCB6A4FF0AB89FCB001A26A356781AC30DE98F0F9A62F39EA367FBC1E4FA2FAC9A130B3357D4 +726083F18D5E8961C52F937712CCA680CCF6E361A951461DB1558535C9B5DE9F1C8E153F8815 +82B7EAC247BDF32D018129D6F95F9ED41E024D531C8EAFB376842C079E09EB9C44DC586EDEE0 +2E335028E89C9DA2ADA468E9695B0B5093E88A6957318B03815BE318DD109CAF3243914CEF32 +251EAA13815B23020312E3D17029F42D736A2D2CC20E8D64C5F0D0C49ECF4B1B769CC03EE45E +64A41917EC9118B9307B0CFBD4B1B784CD58E2AA0481CA12567BCA6BD3BD016E2FBAD4C3B8B4 +FE9DCD1C5DABD829F6C908EF9B575F23D67AF3B52A3C7FE191BAECB8C3209D4E50E3A7445936 +8824AE7DC4B5DC52CC95C765B79ADD7C93968205707963FA987D90F33A41B7C3411E59A1D125 +BCE6B22F58A537899AFB2FFD2ABF4BE0A74FF60DA0046B0A5A641261FB23400CDBED14124988 +D8D39640B84E950B6E428113BE2838B81F99E09F8E432369DB29B68B7131DC489CD5AA958354 +12EA88CD6474C9FEEE3FC97AC2D22A583E52A2632865383DA3DFABD96C7FD5D564BF76B160BE +F8B29737B6EA0A8CD493CF109A5F97BA1CF042958A0B5AAC40E42E963F331D7F63660233F45E +3015FEB3FDE4F960B8FD7791B4608075AC660317BCDF368BC7A08A584546C27769E695F18704 +83BCA4E34D63F606CD3EA2CCD8DE3FFD00DDC952603A4D4BB6C3F35B3DBC3CBC0278A270FFF9 +C73189B8846D7F67C5FE81BBD38432030DC0D1B58D7B73E1D87880F96E295552EBFC732E6156 +2878B98575522DDB4D3BB3F2277BD1C822966465A8D6F9FEEC6CA0B925889DAA54C7D845C0C1 +699194E1D238A8FC90E0C61EF1F7D29F86AEDC494FC3721ED813691E781223F7CDD16BDF1819 +A11310696B6357E27EF4097E09ACA4641FB55D783591C72D0D51AD8695442FAA58A0C7B96C1E +199C6EB3064A1024CAE27A318A9931D7DD37D983AF159F5B3CFD45F92F54F15DA5D1A3CCA367 +39E189C61436011974D89140209769E6B42BA729E115EFD02C6DF250818FE8FB91EE9E9698C7 +2757B030CE4FDE201A69FE087FC9258058BA9C4D3DAB0B2481B5457259AE608C114FC811E33F +1514057F627556E6559354A8A660500CA2C95FC6608B4E067913C4FF08FDBC69740B2F2E2273 +2CF091AC243182B5E20BCD0F3E77AE13B129297E4EE30762CE27ED963F1797326A39F70C9D58 +EC4814F9922D19F8B12769831A710D7E825FB59C9C7DE4EC3ADD20D426A8356B1B7B03B48FC6 +3630B5335EB9B68D3009C7686BCC986308CF9F23E3E8A9CBA4EC9F232D24DE48FE83C99B5F46 +C0FA712EBB8AD4260E206BEEC28D55C1E26440EFEA87CC3A592B51E3C3415695D29ED1D3198A +C2FC61330B0C123B279C265CCBE40C4F0B1242E94B354281F26A1BB0DD70A1D7AA7F2452F2EA +3FE1DA9EE43ECC38FEE27F53DB6D5D3880154014ABB1023E4FB3BA5458FB0314176E2DFDF445 +0282C4F0D8778A5BB3619BCF34616339812956C733BDB6259ADFA887577840EBCDE82E3D4DBE +B9294FB2A8713C1EA655EACE31249BE2431DE1D2E37154BF64BF99437DFE26DBEE3FA3051D10 +3C0FC6F10A51499AA220C7B9A23125DE41FEAC02B74933B0B1F328AEB4906239BB13E0B24F83 +075771870F01B4F4A970B075E5BFC1114552C22996286D9870F132FA9D64704BEB931F402B77 +EF645665DDAD5EFC9D6CAB2096CA7CA4B5F4647B091BC893A70A1AE7779DC004288DBB2326AC +CC9FF6A71FD892C58C7D69786B6CA0F5FE35DED10AEDEEE6286481FDD88F044567F9F1E372EF +832FA7C2906F96EFAB72DB5E62F8ADD0E7CD6523F6BE7FF913BEC986A00649D4E65049EB9502 +EE1B35D9B016DDD80AA2795F880F38BAABA202FECADA6F67A22A353CF65242E4C3A0967AE33D +0C9660A7DBADB7364B8678B3196B1742DE4668942399A9214111010AE224D61FC53A1FF9975A +FA8A588E434B69FEC33F33F1447DB75E2983795A3E2504FA3D59FB4462BCCC4DEA6A6797F792 +0E04CD8F1213B8C08FB7D5DAE0657C096D9C2310DA574391716DE57AEFE730CB13C22E560D33 +5C4708ADD66B789C08C9149F33D5D9D67FC6A6B98F92676D736C27D8CB351F85187BF845EB25 +E50F68DB14771A7EBE930BE6079970859780B3C04A291461D2F7F34E31AC0A99C8C7D5EF7A65 +0E067ADFF7DBBA16F8D987B35C5DABEC96EC16EF3657A9A67603C9B8DF5F5DBCA20E0C2542E9 +7223F83295A6758EF54074B4C178C502318F4ABA81FA3D5E4E42F30E959A7A6A7D472ABE014E +5D3B6332C6CA5BAF3D028161E27FE8AD34811D12D394F08EBEF835F1D24EE4DBD8311398085C +790D4FA6BEAE0E82136B78439ACB61085C19F97B083A3BAE74ECD65265023556D41B4DB72841 +B077F190BBB1BE10EE87FD812314C95A42490DFD9AF59B5F728A0CA112BFAB781323837664F8 +F61D370B86C7386AC024BBCBD7B8402396A9AF17A7B9A601E03EA98B2050374C3D8A5A393ADD +B28449FCD667E09F541BB2AC3D8D9006D823C8CF4AF6D30F250115437A583CF815038BB1D47F +BD82C3B2A666D947EB9155E6843E74B3EF92F7452EB2AAA6D7E381AA76934E018FF2A33A30CE +C26663C1785344743A8853D0E198896C92858DF3A6894632817D7E8DC03FF8BC68DC355B7158 +1F6E9740A0CF7E06E12CFE531AE872FED8329C3C75FDD2B2B2FE2642342DC7AA1C1B4B404CBF +BF22185C6C20239A075B7DEC651110A253AADF86E8D9A87F5C2C3B35BD60D7DBF44040EE96ED +65E9C7A3E69E25695C55A197BEC858E2027A59D6C8057A63DFC276BA2716DA969ACEFA3CF837 +4BF4997692D00793E46AE663EB949E726CA39B42F999FCCB5D8C4586380AA5D7B7A2C6518603 +2B5CEBD8CA1D52EBF48B48F7A4E1EEE090796DD37973004F20C04785B232332880C0F845BBE4 +0E1AA7279DC85780B9EF863D9B6F036A2622684856CA0262484ADAFE8F19EBA3E1ACFDF56748 +4E8A50AFB36BDCFBDE2A2CEB59792B1124448CA7EE428DBBA56A46051014E950F0C4E9B1FD13 +5DD445AA9176C41576A9C94E03E91F4AD944876C917CF8A80927738CFB566CCA7C6D1E63F3BC +E16F03F752B27F2446CC13E212A9A492C2B9D434EA054DD6CC5E5C896B2F326B0C356C0E15A6 +26AD11C953C62273FEDDF4249A1AD770FE2EE39E901B3F54853050C1055BDC69805127BF8327 +F99F5D1C3E10EEF3397280C7442F8304A3295C3D7EA1A965E1A3B5CA17FDAFE9BFFE9C1EAFF9 +796D4C1BACFFA065779164D28F4F09F29453D9165DE14F1CA1D2AD02CB51F05FA98D04877BC1 +59B0AAE4CF2DE93E26DEF60944D25E190746E5A661C25B33D9941C30CE1C99C9C471625A429C +F69CFF9697383316A269E48B435EEFA2312D5E214E69E492A3E7BD429EDB4B56936A55CDE475 +B576A849B81D798B00FDB9A6AE9D3ADC6AA58922E59FE95044F8284FA5ADAFF30DE88D484F7A +015B11D35DC50D9B454D6D169C3E251CA0E4FCCA8BD08D3B72B48E41EFBB7739DB1355A3B128 +6E604EFED37E2F6F1FB16B688CA0DE86CACE2B6C3A10881C1157B772C89D74B3E885D00806D2 +8C06429B9619DFB61A0492FFB491BC299E0EFE4EB37F61C4CFCE9819E0ABF678A02296233AE7 +A4EE46ABA2377A22CEC36C2B6942EE227AB674DDF0182F6E54246E40A82948C7783913AF87D0 +7EC0D21A82C0A3888E6F0913B2D41B64CA32667137A756691CBA4385F409B51150B43174FBE8 +E3D903AC09912FF4821DF6A4E415D849DFABE544652B7CCBFB11B1E076A1BFF75F80094CC71A +178098082FE0AC069C234475FB052BDA47B65BE3860A05FB8E0CFAB1674D328F4B70408FE21E +91D3AD01A300446624833076DF98407D002F0EE7D948CC5A76E0F595EE5F1E8AB7D712319F08 +FDD3B923870B0D4D0BDA7EDE7B8312522A2AC9CF50A0F4B50730AD4F64EF94F65F66D9D124D6 +50966912F48C010B27214C26D8E09888ECAF4033E17E0E57F2E2AD2D04A5197C292B281E6894 +9BAB3253BEFF0BC08B90097A93A1E6A077A54CA7958DE9491E10B6D272A5C76F9EF7B1A19320 +858DD866E1FF46E1EB4A73E8F4F54F35C5BB33236EADCA1223D8D4227510498EDED173D78332 +09665C9354DC9F58D837B666CE337C46AB0636B54793A5607E6603F5A807926EE0AC9CD2F138 +68379DF3580501049A315CFBD9A4969D274DFEECD0B14304958FD571FBE2E4017B8A27853897 +14BE4CA12EDBE0C0EB78BEFC76315AA8F60EACF53FFDB1D3F59BEFE9A89884484780772B6C24 +E5BCFB06480D174CEA4BB5A0EA9E09E05B0EA39D5AD05F76F58BC9B57E96AF05DB72087FEAFC +32845684F0BCE34A303BCF991437990A1ABDA527256AE23AA1831D416958953226AC621F8430 +2197FE4FFFF024D04F142D820B4F04461E2D4EA6787AB2484338F5D685726C9A9A9208D0D9E0 +15588CEBC34190CA66556323C4EDDD2440480C205259A1B6F70CC95A0F0710EADDC72D4BE536 +E6564D30EFF592B069762F924BA012DA684306B055A03671DB9B0924472F26266EF11DF861E4 +DA81962856EF1BC4E989C72D475822734C1E3213CE7D7EB82CD1B8E9DA40D2CE26B476E9C716 +14EB2936471196B81168F8B325222E545BDA1592F2C3C84A4FB9F977A67EE586485152B9F7C0 +7D828C04E1C9B7ED189903FB44059FBD129491FBF6FE6B8124D666DE63A37263975174524E41 +93D0F27CED49AF87126A7F7FC4F3F91C967E8DF5EB14DDFEEAC7C928FCF2A825D7FFD37907B7 +46F313E5EEBBBE9B9BD9746FB41839CDC65BCD4DA7749A5B175D9D9CABDDF6A73ADE13261E53 +3D3CA5A7BFF53842F7CADA3B286CA81DC5910B1D9B397BF711354EC2AD02B59D64D91EC6D5D5 +FDC3A627C94D3E17F990B080F33CD206E690C05A8DC51684A659376FA6C3E411C24B701EEEA0 +F77D3B95526D4AD25AF4B8FE1341A6037C25B10AC4851C84BD0F3855BEBD6CD10AE91050B027 +02088E931CD96B6A99F3307CF11AD651B0FA04F917FB4B3739F66D63023E761611A9D300071D +3422C85D7EEA134CE7F5FD6D5C202A97671D1C078B7CA8B3805DD21B22BD5518C6B803008973 +F42157EF1CB77174CBDE8823F80336BE2F5C01FA5A588802B245CCF6C1095E30AFFAE3D0E99C +D7A1BCDE3582D2A3D355340E36943DDE7F764A7FE4B8321545BE04A8541830F50E58B7236438 +2179CA6393F5E819B1DC84FC5783C92746C614F5C91F5BC180A896AF5093F46790966AA2CB68 +5FFF37E7E3338997624D0F9DD447634C5DE26473606ACD6DBDCF1E8194D1596AF4505DDEE0D9 +64DF9F9D5FABE81773BDF623F3A03A7C40A6255B303EB9A9536E0711CBFC90F292F571988DED +C33661685A49D19009525BFDC2FC4DE5889294F0D77C147D41A45BA4F8E43651154266C38839 +BE304F9DE6843AD2D6840138778056575BC410B21E7543654BF0DDDD0A732D540EAF7D5C383C +B07F662F009CC862D9EE2B272ED4423EB4BBFEDFED2ACB7020369C996C612AEAF3447162F90C +E2083977688AC315AEAD5C57F73CB8F54523296B261DB64F1ABF926C687B7AA5F7EC2472AD04 +98BB0D4382E57C8DEB9CEE5ED7D3493C7557AB9C0E875181750EBF307CA650A66F13FC03A49C +CF2573279A9501B2C0457FF0920ADD1E10E33B3EAC850A43B7D3C8D98988BB5117117AC5CC78 +C434CF31F5074F2E2566CB519E0161FDA2BDF63F04E7E2BFF275208C2917923E0112EA910429 +76E26D50365E9DAF859E0C7BE9DB46ADC226F0AF37EF7668C4901B9E7F0AC68288AA765F78A1 +D2646C7E50DB75711941A21568E64AC109F5EAD56AB4AED35F881C6E24EF745D8F571C07C660 +6C54F63ED9F8547C0689F6C9EBB770424390DEB4C3F851F201AA87ADAA8394040522A55800D1 +CA8F6C9722994869623A94AACDC6D8EBEBC34EF82CAB787BF35F9AE176D96F2644A6CFE3FACE +3EFF5F5D0119FA9231578CFA5775DEAD271C175498287AC58C7326CAE5E00015BC02188DF6E1 +471720F04818A47679ADBD5A6FEEF79CDF1242447427ABCF4A6557290F8ACAB7DA5F0F9F8C01 +33725D75728FB1855A84B7962ABAC055B47FEE71672EF81C3B04781ABEC2B6C22CCE2D680746 +14363903199A46C9D7ECFFFB73129E2FF044766A85B54F3EA13642713A0D27C6A83F61B9D31E +BC98B29BEFC79DA3CB58230DC5CAC5D0F9C387835E0018403F0DCF8A18710388EBC37AA1C016 +F775ADAA6657BAD29C5DCF2CAC2CD9FCE27D64ED247EAEE7ABADCC655797E05D18EA60D434FB +1C23228FBEAE9C973A3FC592C5C0E61FA72EB5F7221B4190B7337C9279F09D49E74BA3049071 +96990E9E9C2D4CE64BEA214732083FD9F7C4495A2BE3A63D40EAA12B7423B03104E9119EFFAA +C0064D86828E5CF9BF9E14DF4369292F0A59AF841485AEBFBAF378E9B52803FD51DEA582AD40 +8E7CB1ACED2083F7C2E8CA017C4BA4E25CC46D7CB7E5895664A7B55CD0DA11BDDC6FDFC5E229 +B7C0219C939D857F5CE4FB70D643760DAA0CE0A7B3AFB658AA3C93C41604873FE471B7064383 +6DD1610B7CB9A045187E8EBA00DEAB7CBEED5ED430167519E1E8CB10D9E699987E0B71006D6A +62E8A5DDF6476BB85574A752C555309B6C9B722D924AB1DEF08F835E7303E2DD99301D1FEF41 +74F4C098F282509C9D4B2C791399CB17D6060C1C0534A2FAF9F38678A59C28BBAE714899838B +A844CC308BC59415A64CB477BE52E8F99B1D18152CF300844329E61B511846D5EE5F02A611A4 +CE11DC0F0F2E45FA9A3839479291C5AF0979FFE489CDAA1B42D28499AFD966A0A1FCA6740D5E +E217E10C0175469504582CF44E633199C18636DE5924825C247348B6ECAA36EE8BC620DA7597 +0FAC33CD0E98904465D230B64E491637B7E6C3DB4D294CEFDFA02A23378DC81C5945AD36B8F2 +F81426C0AE1C46DA56D3DDB54A3908868E868E1CCEC945D6849357A6D196D9CC4FB967B3CE52 +3C95A84778DC7661B9E6C9D43B9DA85A8E706D71D5F8EB2FF2F5A84EB1B562608C0AAAC846BD +71471D84FBEB5A0FCA36D8E3A0F640552A98793E84B4F5568281696DADBB48781F23B2E0E687 +DF38E4955D53F0FB3843489E826F7E20ED51D2A3EBCAF564740EC108AB27DC207271F7E63B37 +991FAE2BDD8744A6304AC446DCB28279450671A8B00558E04C7110F878910E3E7C9C61EC79C9 +65462D53F00AFCD3B4EF5AB74D5BE503A1FF7305796774B9BD429C7711505D53843F676371F5 +8A5F2F6AE8C16421AFF3A455FC414F0B4AB198B4A9F7B27534BA01DEAE761FF6506EE5899B42 +519BD46F91F6AD2DF528BC9736576BA9AC2D2FE8E2B4251E28BA44128A55EBA524F99F367B83 +F7BDA7AFB8C531D54A197916584547B79AE434BF9AF50C333821453E1D4841B9A576BE1E3687 +07B8637A493CFD11318797C931366B38AF77B9BF64D128A065BDA50725588C6E1AAE3F6EBDBA +C8C7A3950B3FAF007C40A5D597D96580BD75FDAE0053CD8C62EA7CF631ECF3A643DE3DABE021 +2CB7670FCC158C57A78D180045DC5660362A3F17739584277EA1ABFB6181B1517395C5E5594A +584E64A43DFEC71015F160886547F70A1D892DEC359CBB9DA5138AB29B5B1F8E56C136632A76 +97246EC79A8221061CB212FA3A2A03FC38F55FD8512E327A6F1CB8E72881EE1B2E9FE43A6F79 +424560F1D21B08B9F76873149DEAE9BE52ABFF904CFFB15CC603C7497F850B189ED11592B339 +926CD928F8AF76E69829B2FCE988C6613C36D09AB944370DE24FF0A448BBA58E0CB4C7B63B25 +20658143FFB8A042C40380FDB15693F4C49725C9C74ABA8C3C571DDA80545E2D92F721160877 +2F49DD3FB42465F31282DC0E62DA7CE2A1B40C0868BA63026BBB56D35A47AD9A0D0E230AA7BF +FC4B4AB1B5069EEBEE9395E815EDDE1BA254A80D8D38C7073E8AC15478138ED4A22DB36D9B4F +DB930ECD4A3FA98B87B9D542505E5D0C993A374D8223C40DE43BE22DBCFC425CEA189C212A02 +3874DDFAF5A1AC7F5F4F3A80C34269A6F5D7833C8F30E21D5BB548BE792F7D1149A94174C69E +D90DA8B84F934634966B70D0465C1C2E4907A9AAA62459E010C1781A207CB49079A2BFD54372 +1D8721ABB895BCDC58B96BC6DCA23C3930F72D1E6A9A2E61713BC3F2B4E6652F75E9FC54EE24 +60DA11E071C968E00E9C706E5779D2601D97450D9FCE65BD1DFD4F5BD846625B6CA43877F2FE +6963728412EFC91273AF66AC82E95C79B4E0A949DC88D958BCF50F052D620B1FB8D3425792E9 +C6388A42A31C799F31D29A4BAF8260E9A833C98153C80614F22E513BEB9430315878E6C3BB66 +0231109B6E98D2ABA44D759D8792CD01B86071C2BE8162E31EDDEDCD1A5270889CD0AF7EC1D2 +1D1A4AB2B6026BEE062673E1B74708088850395C7820935BD447898A1EA07F3D23BA73F662BE +BBFB2F45ED608965D9E77432BDC514DF5F516D0316DDA35321F80C03926657E9A16132EF6290 +953ED59CDA152C0F2DC38C275A675E2578CF870A448FDE7D73E679AE61E6BC311BB313BF975A +E7648EDF1D084FDB3D61DC14BA882D489B2E469BF4E31EE93ACA0A9083747EDAA559D59204F1 +CBD22778B5A2995F4328ABDA61E77708052B80F2F85FA83A3A3EB61C2114B597B787D286C9FC +FC594D7E1B597CA3A19D95D7029B81AC8338FBB48A8C63D903B3BA18E17A4B3F4404B6CD6356 +9ECC2EC3BE18A5B5F435501841E8DB11637DBCE823E13F48D07732B991412F1043DE7323E4AD +7FF80262A845491ED2D6F3305F4196E53AEBEEEB3D1D00EB1C8950B02BCFFC1E2AB41AB270B1 +969BC515D519A69CEAFE551F3A1C96E803EBCF2FCAA1945BC5256B774E298711ACF5B81AFE0C +8051D3EA70579B2CA6476244BE68211DD20A9AAFCED929E0B817AA845E4C0F6A26F3119AEAE8 +B04555F5D6EA3F7A49D4D7470B6D29F1A2C64BA1622D7EDFFC622C119A50119B7319BF947765 +841871026085AE10C87D4F3D4BD5B837817FA725390E523F2E3F4E052F4DA11719D75F9416E6 +8B36CE1517494AFAD0E1768817D39E7BCE4700AB207086FC8230F40000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark + + +%%EndFont +%%BeginProcSet: texps.pro +TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 +index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics +exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub +dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} +ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict +end definefont 3 -1 roll makefont /setfont load]cvx def}def +/ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def +/ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def +end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 600 600 (am-utils.dvi) +@start /Fa 209[28 46[{}1 91.249977 /CMTI10 rf /Fb 209[43 +46[{}1 119.999947 /CMBXTI10 rf /Fc 135[39 39 1[39 39 +39 39 1[39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 +24[39 19[39 1[39 3[39 39 1[39 43[{}27 75.000000 /CMTT9 +rf /Fd 145[43 63[21 46[{}2 75.000000 /CMSL9 rf /Fe 133[34 +41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 1[21 43 +38 23 34 43 34 43 38 7[58 58 79 58 58 55 43 57 60 52 +60 58 70 48 60 1[28 58 60 50 52 59 55 54 58 1[36 1[60 +1[21 21 38 38 38 38 38 38 38 38 38 38 38 21 26 21 2[30 +30 21 5[21 19[43 43 45 11[{}74 75.000000 /CMR9 rf /Ff +134[66 66 2[70 49 50 52 66 70 63 70 105 3[35 70 1[38 +58 70 56 70 61 3[35 1[35 25[95 3[98 15[42 45[{}24 109.583275 +/CMBXSL10 rf /Fg 134[73 1[99 73 76 53 54 57 1[76 69 76 +115 38 73 1[38 76 69 42 63 76 61 1[67 13[76 4[108 4[52 +2[87 4[104 18[38 46 32[76 12[{}29 119.999947 /CMBXSL10 +rf /Fh 134[62 62 62 62 62 62 62 62 1[62 62 62 62 62 62 +1[62 62 62 62 62 62 62 62 62 12[62 62 3[62 6[62 1[62 +1[62 62 19[62 1[62 1[62 43[{}33 119.999947 /CMTT12 rf +/Fi 146[137 8[92 34[125 65[{}3 144.000000 /CMBXSL10 rf +/Fj 133[56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 +56 1[56 56 56 56 56 56 56 56 56 1[56 9[56 56 3[56 2[56 +3[56 4[56 22[56 1[56 43[{}34 109.499992 /CMTT12 rf /Fk +133[55 65 65 89 65 68 48 48 50 65 68 61 68 102 34 65 +1[34 68 61 37 56 68 55 68 60 9[127 93 94 1[68 2[84 92 +96 116 74 2[46 96 1[77 81 94 89 1[93 1[58 5[61 61 61 +61 61 61 61 61 61 61 1[34 41 32[68 12[{}55 109.499992 +/CMBX12 rf /Fl 197[25 58[{}1 91.249977 /CMMI10 rf /Fm +134[48 48 66 48 51 35 36 39 1[51 45 51 76 25 48 1[25 +51 45 28 42 51 40 51 44 8[69 1[69 70 1[51 69 1[62 68 +71 86 55 2[36 71 1[57 60 70 66 65 69 7[45 45 45 45 45 +45 45 45 45 45 1[25 30 32[51 12[{}54 91.249977 /CMB10 +rf /Fn 4 12 df<7FC00000000000FFFE0000000000FFFFE0000000007FFFFC00000000 +007FFF000000000003FFC000000000003FF0000000000007FC000000000001FE00000000 +00007F8000000000001FC0000000000007F0000000000003F8000000000000FC00000000 +00007E0000000000003F0000000000001F8000000000000FC0000000000007E000000000 +0003F0000000000001F0000000000000F8000000000000FC0000000000007C0000000000 +003E0000000000003E0000000000001F0000000000001F8000000000000F800000000000 +07C0000000000007C0000000000003C0000000000003E0000000000003E0000000000001 +E0000000000001F0000000000001F0000000000000F0000000000000F8000000000000F8 +000000000000780000000000007800000000000078000000000000780000000000007C00 +00000000007C0000000000003C0000000000003C0000000000003C0000000000003C0000 +000000003C0000000000003C0000000000003C000000000000183636B28364>8 +D<000000000000180000000000003C0000000000003C0000000000003C0000000000003C +0000000000003C0000000000003C0000000000003C0000000000007C0000000000007C00 +000000000078000000000000780000000000007800000000000078000000000000F80000 +00000000F8000000000000F0000000000001F0000000000001F0000000000001E0000000 +000003E0000000000003E0000000000003C0000000000007C0000000000007C000000000 +000F8000000000001F8000000000001F0000000000003E0000000000003E000000000000 +7C000000000000FC000000000000F8000000000001F0000000000003F0000000000007E0 +00000000000FC000000000001F8000000000003F0000000000007E000000000000FC0000 +00000003F8000000000007F000000000001FC000000000007F800000000001FE00000000 +0007FC00000000003FF00000000003FFC0000000007FFF000000007FFFFC00000000FFFF +E000000000FFFE00000000007FC000000000003636B2B564>I<60000000000000F00000 +00000000F0000000000000F0000000000000F0000000000000F0000000000000F0000000 +000000F0000000000000F8000000000000F8000000000000780000000000007800000000 +0000780000000000007C0000000000007C0000000000003C0000000000003E0000000000 +003E0000000000001E0000000000001F0000000000001F0000000000000F000000000000 +0F8000000000000F80000000000007C0000000000007E0000000000003E0000000000001 +F0000000000001F0000000000000F8000000000000FC0000000000007E0000000000003E +0000000000001F0000000000001F8000000000000FC0000000000007E0000000000003F0 +000000000001F8000000000000FC0000000000007F0000000000003F8000000000000FC0 +000000000007F0000000000003FC000000000000FF0000000000007FC000000000001FF8 +000000000007FF000000000001FFFC00000000007FFFF8000000000FFFFC0000000001FF +FC000000000007F8363680B564>I<000000000007F80000000001FFFC000000000FFFFC +000000007FFFF800000001FFFC0000000007FF00000000001FF800000000007FC0000000 +0000FF000000000003FC000000000007F000000000000FC000000000003F800000000000 +7F000000000000FC000000000001F8000000000003F0000000000007E000000000000FC0 +00000000001F8000000000001F0000000000003E0000000000007E000000000000FC0000 +00000000F8000000000001F0000000000001F0000000000003E0000000000007E0000000 +000007C000000000000F8000000000000F8000000000000F0000000000001F0000000000 +001F0000000000001E0000000000003E0000000000003E0000000000003C000000000000 +7C0000000000007C000000000000780000000000007800000000000078000000000000F8 +000000000000F8000000000000F0000000000000F0000000000000F0000000000000F000 +0000000000F0000000000000F0000000000000F000000000000060000000000000363680 +8364>I E /Fo 129[48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 33[{}93 91.249977 /CMTT10 +rf /Fp 205[33 33 49[{}2 58.333336 /CMR7 rf /Fq 133[40 +48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 +45 28 40 51 40 51 45 3[25 1[25 7[51 67 1[62 1[68 83 57 +2[33 68 71 59 62 3[68 3[71 10[45 45 2[25 30 3[35 35 27[51 +53 11[{}48 91.249977 /CMSL10 rf /Fr 134[85 85 117 85 +90 63 64 66 1[90 81 90 134 45 85 1[45 1[81 49 74 90 72 +90 78 12[112 90 120 1[110 121 1[153 97 2[60 126 1[101 +106 124 117 1[122 7[81 81 81 81 81 81 81 81 81 81 2[54 +6[126 25[90 12[{}49 144.000000 /CMBX12 rf /Fs 240[45 +1[91 12[71{}3 91.249977 /CMSY10 rf /Ft 133[60 71 71 97 +71 75 52 53 55 1[75 67 75 112 37 71 41 37 75 67 41 61 +75 60 75 65 37 5[82 102 102 139 102 103 94 75 100 101 +92 101 105 128 81 105 1[50 105 106 85 88 103 97 96 102 +7[67 67 67 67 67 67 67 67 67 67 67 37 45 37 2[52 52 37 +105 4[41 20[75 12[{}71 119.999947 /CMBX12 rf /Fu 131[91 +45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 +25 51 45 28 40 51 40 51 45 25 25 1[25 45 25 56 68 68 +93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 +62 69 66 64 68 1[43 1[71 1[25 25 45 45 45 45 45 45 45 +45 45 45 45 25 30 25 71 1[35 35 25 71 3[45 25 18[76 51 +51 53 11[{}88 91.249977 /CMR10 rf /Fv 138[108 75 76 79 +2[97 108 161 54 2[54 3[88 15[149 1[108 14[148 1[138 146 +12[97 5[54 65 3[75 75 40[{}20 172.799942 /CMBX12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: Letter + +%%EndSetup +%%Page: 1 1 +1 0 bop 150 1396 a Fv(Am-utils)65 b(\(4.4BSD)f(Automoun)-5 +b(ter)64 b(Utilities\))p 150 1505 3600 34 v 2275 1601 +a Fu(F)-8 b(or)31 b(v)m(ersion)g(6.0b2s2,)h(19)f(Octob)s(er)f(1998)150 +4934 y Ft(Erez)45 b(Zadok)150 5068 y Fu(\(Originally)31 +b(b)m(y)g(Jan-Simon)e(P)m(endry)h(and)g(Nic)m(k)h(Williams\))p +150 5141 3600 17 v eop +%%Page: 2 2 +2 1 bop 150 501 a Fu(Cop)m(yrigh)m(t)602 498 y(c)577 +501 y Fs(\015)30 b Fu(1997-1998)k(Erez)d(Zadok)150 611 +y(Cop)m(yrigh)m(t)602 608 y(c)577 611 y Fs(\015)f Fu(1989)i(Jan-Simon)e +(P)m(endry)150 720 y(Cop)m(yrigh)m(t)602 717 y(c)577 +720 y Fs(\015)g Fu(1989)i(Imp)s(erial)e(College)i(of)f(Science,)g(T)-8 +b(ec)m(hnology)33 b(&)d(Medicine)150 830 y(Cop)m(yrigh)m(t)602 +827 y(c)577 830 y Fs(\015)g Fu(1989)i(The)e(Regen)m(ts)i(of)e(the)h +(Univ)m(ersit)m(y)h(of)e(California.)150 1074 y(All)h(Righ)m(ts)g +(Reserv)m(ed.)150 1247 y(P)m(ermission)d(to)g(cop)m(y)g(this)f(do)s +(cumen)m(t,)h(or)g(an)m(y)f(p)s(ortion)g(of)h(it,)h(as)e(necessary)h +(for)f(use)h(of)f(this)g(soft)m(w)m(are)150 1357 y(is)j(gran)m(ted)h +(pro)m(vided)f(this)h(cop)m(yrigh)m(t)h(notice)f(and)f(statemen)m(t)i +(of)f(p)s(ermission)e(are)i(included.)p eop +%%Page: 1 3 +1 2 bop 150 -116 a Fu(Preface)3264 b(1)150 366 y Fr(Preface)275 +601 y Fu(This)33 b(man)m(ual)h(do)s(cumen)m(ts)f(the)i(use)e(of)h(the)g +(4.4BSD)i(automoun)m(ter)e(to)s(ol)h(suite,)h(whic)m(h)d(includes)150 +710 y Fq(Amd)p Fu(,)38 b Fq(Amq)p Fu(,)h Fq(Hlfsd)p Fu(,)g(and)d(other) +i(programs.)60 b(This)36 b(is)h(primarily)g(a)h(reference)f(man)m(ual.) +61 b(While)38 b(no)150 820 y(tutorial)32 b(exists,)f(there)f(are)h +(examples)g(a)m(v)-5 b(ailable.)43 b(See)31 b(Chapter)f(11)h +([Examples],)g(page)g(88.)275 954 y(This)e(man)m(ual)i(comes)h(in)e(t)m +(w)m(o)i(forms:)41 b(the)31 b(published)e(form)h(and)g(the)h(Info)f +(form.)41 b(The)30 b(Info)g(form)150 1064 y(is)g(for)f(on-line)i(p)s +(erusal)d(with)i(the)g(INF)m(O)g(program)g(whic)m(h)f(is)h(distributed) +f(along)h(with)g(GNU)g(texinfo)150 1173 y(pac)m(k)-5 +b(age)27 b(\(a)f(v)m(ersion)f(of)h(whic)m(h)e(is)i(a)m(v)-5 +b(ailable)27 b(for)e(GNU)h(Emacs\).)2386 1140 y Fp(1)2462 +1173 y Fu(Both)g(forms)f(con)m(tain)h(substan)m(tially)150 +1283 y(the)32 b(same)h(text)g(and)f(are)h(generated)g(from)f(a)g +(common)h(source)f(\014le,)h(whic)m(h)f(is)h(distributed)e(with)h(the) +150 1393 y Fq(Am-utils)j Fu(source.)p 150 5241 1200 4 +v 192 5307 a Fp(1)275 5340 y Fu(GNU)c(pac)m(k)-5 b(ages)32 +b(can)e(b)s(e)g(found)f(in)h Fo(ftp://ftp.gnu.org/pub/gnu)o(/)p +Fu(.)p eop +%%Page: 2 4 +2 3 bop 150 -116 a Fu(License)3266 b(2)150 366 y Fr(License)275 +601 y Fq(Am-utils)36 b Fu(is)c(not)h(in)e(the)i(public)e(domain;)i(it)g +(is)f(cop)m(yrigh)m(ted)i(and)d(there)i(are)f(restrictions)h(on)g(its) +150 710 y(distribution.)275 845 y(Redistribution)k(and)g(use)g(in)g +(source)h(and)f(binary)f(forms,)j(with)f(or)f(without)h(mo)s +(di\014cation,)i(are)150 954 y(p)s(ermitted)30 b(pro)m(vided)g(that)h +(the)f(follo)m(wing)i(conditions)f(are)g(met:)199 1089 +y(1.)61 b(Redistributions)29 b(of)h(source)g(co)s(de)g(m)m(ust)g +(retain)g(the)g(ab)s(o)m(v)m(e)h(cop)m(yrigh)m(t)h(notice,)f(this)f +(list)g(of)g(con-)330 1198 y(ditions)g(and)g(the)h(follo)m(wing)h +(disclaimer.)199 1333 y(2.)61 b(Redistributions)31 b(in)h(binary)e +(form)i(m)m(ust)f(repro)s(duce)g(the)g(ab)s(o)m(v)m(e)i(cop)m(yrigh)m +(t)g(notice,)h(this)d(list)i(of)330 1442 y(conditions)j(and)e(the)i +(follo)m(wing)h(disclaimer)e(in)g(the)h(do)s(cumen)m(tation)g(and/or)f +(other)h(materials)330 1552 y(pro)m(vided)30 b(with)g(the)h +(distribution.)199 1687 y(3.)61 b(All)34 b(adv)m(ertising)g(materials)g +(men)m(tioning)g(features)f(or)g(use)f(of)i(this)e(soft)m(w)m(are)j(m)m +(ust)e(displa)m(y)g(the)330 1796 y(follo)m(wing)f(ac)m(kno)m(wledgmen)m +(t:)330 1874 y Fn(\013)p 380 1874 3371 4 v 3370 w(\010)p +330 2109 4 187 v 358 2011 a Fu(\\This)39 b(pro)s(duct)e(includes)i +(soft)m(w)m(are)h(dev)m(elop)s(ed)f(b)m(y)g(the)g(Univ)m(ersit)m(y)h +(of)f(California,)j(Berk)m(eley)358 2091 y(and)30 b(its)h(con)m +(tributors,)g(as)f(w)m(ell)i(as)e(the)h(T)-8 b(rustees)30 +b(of)h(Colum)m(bia)f(Univ)m(ersit)m(y)-8 b(.")p 3803 +2109 V 330 2161 a Fn(\012)p 380 2161 3371 4 v 3370 w(\011)199 +2306 y Fu(4.)61 b(Neither)34 b(the)g(name)g(of)f(the)h(Univ)m(ersit)m +(y)h(nor)e(the)h(names)f(of)h(its)g(con)m(tributors)f(ma)m(y)i(b)s(e)d +(used)h(to)330 2415 y(endorse)e(or)g(promote)h(pro)s(ducts)e(deriv)m +(ed)i(from)f(this)g(soft)m(w)m(are)i(without)e(sp)s(eci\014c)g(prior)g +(written)330 2525 y(p)s(ermission.)275 2684 y(THIS)c(SOFTW)-10 +b(ARE)27 b(IS)g(PR)m(O)m(VIDED)i(BY)g(THE)f(REGENTS)f(AND)i +(CONTRIBUTORS)d(\\AS)150 2794 y(IS")i(AND)h(ANY)f(EXPRESS)f(OR)g +(IMPLIED)h(W)-10 b(ARRANTIES,)28 b(INCLUDING,)h(BUT)f(NOT)g(LIM-)150 +2904 y(ITED)41 b(TO,)g(THE)g(IMPLIED)g(W)-10 b(ARRANTIES)41 +b(OF)g(MER)m(CHANT)-8 b(ABILITY)42 b(AND)g(FITNESS)150 +3013 y(F)m(OR)24 b(A)f(P)-8 b(AR)g(TICULAR)23 b(PURPOSE)f(ARE)i +(DISCLAIMED.)f(IN)g(NO)g(EVENT)g(SHALL)g(THE)g(RE-)150 +3123 y(GENTS)h(OR)f(CONTRIBUTORS)g(BE)h(LIABLE)g(F)m(OR)h(ANY)f +(DIRECT,)g(INDIRECT,)g(INCIDEN-)150 3232 y(T)-8 b(AL,)21 +b(SPECIAL,)f(EXEMPLAR)-8 b(Y,)22 b(OR)f(CONSEQUENTIAL)e(D)m(AMA)m(GES)k +(\(INCLUDING,)f(BUT)150 3342 y(NOT)f(LIMITED)h(TO,)f(PR)m(OCUREMENT)h +(OF)g(SUBSTITUTE)e(GOODS)i(OR)f(SER)-10 b(VICES;)20 b(LOSS)150 +3452 y(OF)i(USE,)g(D)m(A)-8 b(T)g(A,)24 b(OR)e(PR)m(OFITS;)g(OR)g +(BUSINESS)f(INTERR)m(UPTION\))h(HO)m(WEVER)h(CA)m(USED)150 +3561 y(AND)35 b(ON)f(ANY)h(THEOR)-8 b(Y)34 b(OF)g(LIABILITY,)g(WHETHER) +g(IN)g(CONTRA)m(CT,)g(STRICT)e(LIA-)150 3671 y(BILITY,)26 +b(OR)g(TOR)-8 b(T)25 b(\(INCLUDING)i(NEGLIGENCE)f(OR)g(OTHER)-10 +b(WISE\))25 b(ARISING)h(IN)g(ANY)150 3780 y(W)-10 b(A)i(Y)31 +b(OUT)e(OF)h(THE)f(USE)g(OF)h(THIS)f(SOFTW)-10 b(ARE,)29 +b(EVEN)h(IF)g(AD)m(VISED)g(OF)g(THE)f(POSSI-)150 3890 +y(BILITY)h(OF)g(SUCH)g(D)m(AMA)m(GE.)p eop +%%Page: 3 5 +3 4 bop 150 -116 a Fu(Source)30 b(Distribution)2778 b(3)150 +366 y Fr(Source)52 b(Distribution)275 593 y Fu(The)29 +b Fq(Am-utils)35 b Fu(home)30 b(page)h(is)g(lo)s(cated)h(in)390 +721 y Fo(http://www.cs.columbia.e)o(du/~)o(ezk/)o(am-)o(util)o(s/)275 +854 y Fu(Y)-8 b(ou)30 b(can)h(get)h(the)e(latest)i(distribution)e(v)m +(ersion)h(of)f Fq(Am-utils)35 b Fu(from)390 981 y Fo +(ftp://shekel.mcl.cs.colu)o(mbia)o(.edu)o(/pu)o(b/am)o(-uti)o(ls/)o +(am-u)o(tils)o(.ta)o(r.gz)275 1114 y Fu(Alpha)30 b(and)g(b)s(eta)g +(distributions)g(are)g(a)m(v)-5 b(ailable)33 b(in)390 +1241 y Fo(ftp://shekel.mcl.cs.colu)o(mbia)o(.edu)o(/pu)o(b/am)o(-uti)o +(ls/)o(.)275 1374 y Fu(Revision)d(5.2)i(w)m(as)f(part)f(of)g(the)h +(4.3BSD)h(Reno)e(distribution.)275 1507 y(Revision)j(5.3bsdnet,)h(a)g +(late)g(alpha)f(v)m(ersion)h(of)f(5.3,)i(w)m(as)f(part)e(of)i(the)f +(BSD)g(net)m(w)m(ork)h(v)m(ersion)g(2)150 1617 y(distribution)275 +1750 y(Revision)40 b(6.0)i(w)m(as)f(made)f(indep)s(enden)m(tly)g(b)m(y) +g(Erez)g(Zadok)h(\()p Fo(ezk@cs.columbia.edu)p Fu(\))36 +b(at)41 b(the)150 1860 y(Computer)35 b(Science)i(Departmen)m(t)g(\()p +Fo(http://www.cs.columbia.edu)o(/)p Fu(\))30 b(of)36 +b(Colum)m(bia)h(Univ)m(ersit)m(y)150 1969 y(\()p Fo +(http://www.columbia.edu/)p Fu(\),)17 b(as)j(part)g(of)h(his)f(PhD)g +(thesis)g(w)m(ork)g(\()p Fo(http://www.cs.columbia.edu/)o(~ez)o(k/re)o +(sear)o(ch/)o(tp/t)o(hesi)o(s_)p 5061 1992 42 91 v 150 +2079 a(proposal.html)p Fu(\).)37 b(See)61 b([History],)32 +b(page)f(6)g(for)f(more)h(details.)150 2332 y Ft(Bug)44 +b(Rep)t(orts)275 2523 y Fu(Before)21 b(rep)s(orting)f(a)g(bug,)i(see)f +(if)f(it)h(is)f(a)h(kno)m(wn)f(one)g(in)g(the)h(bugs)e(\()p +Fo(http://www.cs.columbia.edu/)o(~ezk)o(/am)o(-uti)o(ls/B)o(UGS)o(.txt) +o Fu(\))p 4927 2546 V 150 2632 a(\014le.)45 b(Send)30 +b(all)j(bug)e(rep)s(orts)g(to)h Fo(amd-dev@majordomo.cs.colum)o(bia)o +(.edu)25 b Fu(quoting)32 b(the)g(details)h(of)150 2742 +y(the)h(release)h(and)e(y)m(our)g(con\014guration.)51 +b(These)33 b(can)h(b)s(e)f(obtained)h(b)m(y)g(running)d(the)j(command)g +(`)p Fo(amd)150 2852 y(-v)p Fu('.)49 b(It)33 b(w)m(ould)g(greatly)i +(help)e(if)g(y)m(ou)h(could)f(pro)m(vide)g(a)h(repro)s(ducible)e(pro)s +(cedure)g(for)h(detecting)i(the)150 2961 y(bug)30 b(y)m(ou)g(are)h(rep) +s(orting.)275 3094 y(Pro)m(viding)41 b(w)m(orking)h(patc)m(hes)g(is)g +(highly)f(encouraged.)74 b(Ev)m(ery)42 b(patc)m(h)g(incorp)s(orated,)j +(ho)m(w)m(ev)m(er)150 3204 y(small,)23 b(will)e(get)g(its)g(author)f +(an)g(honorable)g(men)m(tion)h(in)f(the)h(authors)f(\014le)g(\()p +Fo(http://www.cs.columbia.ed)o(u/~e)o(zk/a)o(m-u)o(tils)o(/AUT)o(HOR)o +(S.tx)o(t)p Fu(\).)p 5255 3227 V 150 3457 a Ft(Mailing)46 +b(List)275 3648 y Fu(There)20 b(are)i(t)m(w)m(o)h(mailing)f(lists)g +(for)f(p)s(eople)g(in)m(terested)i(in)e(k)m(eeping)h(up-to-date)g(with) +f(dev)m(elopmen)m(ts.)199 3781 y(1.)61 b(The)36 b(older)i(list,)h(`)p +Fo(amd-workers)p Fu(')34 b(is)j(for)g(general)h Fo(")p +Fu(ho)m(w)f(to)p Fo(")g Fu(questions)g(and)g(announcemen)m(ts.)330 +3891 y(T)-8 b(o)37 b(subscrib)s(e,)f(send)g(a)h(note)g(to)g +Fo(amd-workers-request@majo)o(rdom)o(o.g)o(lue.)o(umd.)o(edu)o +Fu(.)3556 3858 y Fp(1)3646 3891 y Fu(T)-8 b(o)330 4000 +y(p)s(ost)30 b(a)h(message)g(to)g(this)g(list,)g(send)e(mail)j(to)f +Fo(amd-workers@majordomo.g)o(lue.)o(umd)o(.edu)o Fu(.)199 +4133 y(2.)61 b(The)30 b(dev)m(elop)s(ers)h(only)f(list,)h(`)p +Fo(amd-dev)p Fu(')e(is)i(for)379 4266 y Fs(\000)60 b +Fu(announcemen)m(ts)30 b(of)h(alpha)f(and)g(b)s(eta)h(releases)g(of)g +(am-utils)379 4399 y Fs(\000)60 b Fu(rep)s(orting)30 +b(of)h(bugs)e(and)h(patc)m(hes)379 4533 y Fs(\000)60 +b Fu(discussions)30 b(of)g(new)g(features)h(for)f(am-utils)379 +4666 y Fs(\000)60 b Fu(implemen)m(tation)32 b(and)e(p)s(orting)g +(issues)330 4822 y(T)-8 b(o)37 b(subscrib)s(e,)h(send)e(a)h(note)g(to)h +Fo(majordomo@majordomo.cs.co)o(lum)o(bia.)o(edu)30 b +Fu(with)37 b(the)g(sin-)330 4932 y(gle)43 b(b)s(o)s(dy)d(text)j(line)f +(`)p Fo(subscribe)28 b(amd-dev)p Fu('.)73 b(T)-8 b(o)42 +b(p)s(ost)g(a)g(message)h(to)f(this)g(list,)j(send)c(mail)330 +5041 y(to)36 b Fo(amd-dev@majordomo.cs.col)o(umbi)o(a.e)o(du)p +Fu(.)49 b(T)-8 b(o)36 b(a)m(v)m(oid)h(as)e(m)m(uc)m(h)g(spam)g(as)h(p)s +(ossible,)g(only)330 5151 y(subscrib)s(ers)28 b(to)j(this)g(list)g(ma)m +(y)g(p)s(ost)f(to)h(it.)p 150 5241 1200 4 v 192 5307 +a Fp(1)275 5340 y Fu(Note)g(that)g(the)g(older)f(address,)g +Fo(amd-workers-request@acl.)o(lanl)o(.gov)o Fu(,)25 b(is)30 +b(defunct.)p eop +%%Page: 4 6 +4 5 bop 150 -116 a Fu(Source)30 b(Distribution)2778 b(4)330 +366 y(Subscrib)s(ers)29 b(of)j(`)p Fo(amd-dev)p Fu(')e(are)i(most)g +(suitable)g(if)g(they)g(ha)m(v)m(e)h(the)f(time)g(and)f(resources)h(to) +g(test)330 476 y(new)41 b(and)f(buggy)h(v)m(ersions)h(of)f(amd,)j(on)d +(as)h(man)m(y)f(di\013eren)m(t)h(platforms)f(as)h(p)s(ossible.)72 +b(They)330 586 y(should)32 b(also)h(b)s(e)g(prepared)e(to)j(learn)f +(and)f(use)g(the)h(GNU)g(Auto)s(conf,)h(Automak)m(e,)h(and)d(Libto)s +(ol)330 695 y(pac)m(k)-5 b(ages,)26 b(and)d(of)g(course,)h(b)s(e)f(v)m +(ery)g(familiar)g(with)g(the)g(complex)h(co)s(de)f(in)f(the)h(am-utils) +h(pac)m(k)-5 b(age.)330 805 y(In)36 b(other)h(w)m(ords,)h(subscrib)s +(ers)d(on)h(this)h(list)g(should)f(b)s(e)g(able)h(to)h(con)m(tribute)f +(meaningfully)g(to)330 914 y(the)31 b(dev)m(elopmen)m(t)g(of)g(amd.)p +eop +%%Page: 5 7 +5 6 bop 150 -116 a Fu(In)m(tro)s(duction)3057 b(5)150 +366 y Fr(In)l(tro)t(duction)275 601 y Fu(An)26 b Fq(automoun)m(ter)34 +b Fu(main)m(tains)28 b(a)f(cac)m(he)h(of)f(moun)m(ted)g(\014lesystems.) +40 b(Filesystems)28 b(are)f(moun)m(ted)g(on)150 710 y(demand)i(when)h +(they)g(are)h(\014rst)f(referenced,)g(and)g(unmoun)m(ted)f(after)i(a)g +(p)s(erio)s(d)e(of)i(inactivit)m(y)-8 b(.)275 845 y Fq(Amd)31 +b Fu(ma)m(y)f(b)s(e)e(used)h(as)g(a)g(replacemen)m(t)h(for)f(Sun's)f +(automoun)m(ter.)41 b(The)28 b(c)m(hoice)j(of)e(whic)m(h)g(\014lesys-) +150 954 y(tem)40 b(to)g(moun)m(t)f(can)h(b)s(e)e(con)m(trolled)j +(dynamically)f(with)f Fq(selectors)p Fu(.)69 b(Selectors)40 +b(allo)m(w)h(decisions)f(of)150 1064 y(the)i(form)e(\\hostname)i(is)g +Fq(this)p Fu(,")i(or)e(\\arc)m(hitecture)h(is)e(not)h +Fq(that)p Fu(.")75 b(Selectors)42 b(ma)m(y)g(b)s(e)f(com)m(bined)150 +1173 y(arbitrarily)-8 b(.)51 b Fq(Amd)37 b Fu(also)d(supp)s(orts)e(a)i +(v)-5 b(ariet)m(y)35 b(of)f(\014lesystem)g(t)m(yp)s(es,)g(including)f +(NFS,)h(UFS)g(and)f(the)150 1283 y(no)m(v)m(el)38 b Fq(program)f +Fu(\014lesystem.)60 b(The)36 b(com)m(bination)i(of)f(selectors)i(and)d +(m)m(ultiple)h(\014lesystem)g(t)m(yp)s(es)g(al-)150 1393 +y(lo)m(ws)25 b(iden)m(tical)g(con\014guration)g(\014les)f(to)g(b)s(e)g +(used)f(on)h(all)h(mac)m(hines)f(th)m(us)g(reducing)f(the)i +(administrativ)m(e)150 1502 y(o)m(v)m(erhead.)275 1637 +y Fq(Amd)k Fu(ensures)d(that)h(it)g(will)g(not)g(hang)f(if)g(a)h +(remote)h(serv)m(er)f(go)s(es)g(do)m(wn.)39 b(Moreo)m(v)m(er,)29 +b Fq(Amd)h Fu(can)d(de-)150 1746 y(termine)h(when)f(a)h(remote)h(serv)m +(er)f(has)f(b)s(ecome)i(inaccessible)g(and)e(then)h(moun)m(t)g +(replacemen)m(t)h(\014lesys-)150 1856 y(tems)i(as)f(and)g(when)f(they)i +(b)s(ecome)g(a)m(v)-5 b(ailable.)275 1990 y Fq(Amd)38 +b Fu(con)m(tains)f(no)f(proprietary)g(source)g(co)s(de)g(and)f(has)h(b) +s(een)f(p)s(orted)g(to)h(n)m(umerous)f(\015a)m(v)m(ors)i(of)150 +2100 y(Unix.)p eop +%%Page: 6 8 +6 7 bop 150 -116 a Fu(History)3262 b(6)150 366 y Fr(History)275 +601 y Fu(The)36 b Fq(Amd)41 b Fu(pac)m(k)-5 b(age)39 +b(has)e(b)s(een)f(without)i(an)f(o\016cial)i(main)m(tainer)f(since)f +(1992.)64 b(Sev)m(eral)38 b(p)s(eople)150 710 y(ha)m(v)m(e)f(stepp)s +(ed)d(in)h(to)i(main)m(tain)f(it)g(uno\016cially)-8 b(.)58 +b(Most)36 b(notable)g(w)m(ere)g(the)g(`upl')f(\(Uno\016cial)i(P)m(atc)m +(h)150 820 y(Lev)m(el\))27 b(releases)f(of)f Fq(Amd)p +Fu(,)h(created)g(b)m(y)f(me)g(\(Erez)h(Zadok)f(\()p Fo +(ezk@cs.columbia.edu)p Fu(\)\),)d(and)j(a)m(v)-5 b(ailable)150 +929 y(from)21 b Fo(ftp://ftp.cs.columbia.edu)o(/pub)o(/amd)o(/)p +Fu(.)32 b(The)21 b(last)i(suc)m(h)e(uno\016cial)h(release)h(w)m(as)g +(`upl102'.)275 1064 y(Through)33 b(the)h(pro)s(cess)g(of)h(patc)m(hing) +g(and)f(aging,)i(it)f(w)m(as)g(b)s(ecoming)g(more)f(and)g(more)h +(apparen)m(t)150 1173 y(that)25 b Fq(Amd)i Fu(w)m(as)d(in)g(m)m(uc)m(h) +g(need)g(of)h(revitalizing.)40 b(Main)m(taining)26 b +Fq(Amd)h Fu(had)d(b)s(ecome)g(a)h(di\016cult)f(task.)39 +b(I)150 1283 y(to)s(ok)26 b(it)f(up)s(on)f(m)m(yself)h(to)h(clean)m(up) +g(the)f(co)s(de,)h(so)g(that)f(it)h(w)m(ould)f(b)s(e)f(easier)i(to)g(p) +s(ort)e(to)i(new)f(platforms,)150 1393 y(add)37 b(new)f(features,)k(k)m +(eep)d(up)g(with)f(the)i(man)m(y)f(new)g(feature)g(requests,)i(and)e +(deal)g(with)g(the)h(nev)m(er)150 1502 y(ending)30 b(stream)h(of)f(bug) +g(rep)s(orts.)275 1637 y(I)35 b(ha)m(v)m(e)i(b)s(een)e(w)m(orking)h(on) +f(suc)m(h)g(a)h(release)h(of)f Fq(Amd)j Fu(on)c(and)g(o\013)h(since)g +(Jan)m(uary)f(of)h(1996.)58 b(The)150 1746 y(new)26 b(suite)g(of)g(to)s +(ols)h(is)f(curren)m(tly)g(named)g Fo(")p Fu(am-utils)p +Fo(")g Fu(\(AutoMoun)m(ter)i(Utilities\),)h(in)d(line)h(with)e(GNU)150 +1856 y(naming)e(con)m(v)m(en)m(tions,)k(b)s(e\014tting)c(the)h(con)m +(ten)m(ts)h(of)e(the)g(pac)m(k)-5 b(age.)41 b(In)22 b(Octob)s(er)h(of)h +(1996)h(I)e(had)g(receiv)m(ed)150 1965 y(enough)29 b(o\013ers)h(to)g +(help)f(me)g(with)g(this)g(task)h(that)g(I)f(decided)g(to)h(mak)m(e)g +(a)g(mailing)g(list)g(for)f(this)g(group)150 2075 y(of)38 +b(p)s(eople.)64 b(Around)36 b(the)i(same)h(time,)i Fq(Amd)g +Fu(had)c(b)s(ecome)h(a)h(necessary)f(part)g(of)g(m)m(y)g(PhD)g(thesis) +150 2185 y(w)m(ork,)31 b(resulting)f(in)g(more)h(w)m(ork)f(p)s +(erformed)f(on)h(am-utils.)275 2319 y(Am-utils)k(v)m(ersion)i(6.0)f(w)m +(as)g(n)m(um)m(b)s(ered)e(with)i(a)f(ma)5 b(jor)35 b(new)f(release)i(n) +m(um)m(b)s(er)d(to)j(distinguish)d(it)150 2429 y(from)k(the)h(last)h +(o\016cial)g(release)g(of)f Fq(Amd)j Fu(\(5.x\).)64 b(Man)m(y)39 +b(new)e(features)h(ha)m(v)m(e)h(b)s(een)e(added)g(suc)m(h)h(as)150 +2538 y(a)g(GNU)h Fo(configure)c Fu(system,)40 b(NFS)e(V)-8 +b(ersion)38 b(3,)i(Autofs)e(supp)s(ort,)g(a)g(run-time)g +(con\014guration)g(\014le)150 2648 y(\(`amd.conf)7 b('\),)36 +b(man)m(y)e(new)f(p)s(orts,)h(more)f(scripts)h(and)f(programs,)h(as)g +(w)m(ell)h(as)e(n)m(umerous)g(bug)g(\014xes.)150 2758 +y(Another)e(reason)h(for)f(the)g(new)g(ma)5 b(jor)31 +b(release)i(n)m(um)m(b)s(er)d(w)m(as)h(to)h(alert)h(users)d(of)i +(am-utils)f(that)h(user-)150 2867 y(visible)27 b(in)m(terfaces)g(ma)m +(y)g(ha)m(v)m(e)h(c)m(hanged.)40 b(In)25 b(order)h(to)h(mak)m(e)g +Fq(Amd)i Fu(w)m(ork)e(w)m(ell)g(for)f(the)g(next)h(10)g(y)m(ears,)150 +2977 y(and)d(b)s(e)h(easier)g(to)h(main)m(tain,)h(it)f(w)m(as)f +(necessary)h(to)f(remo)m(v)m(e)i(old)e(or)g(un)m(used)e(features,)k(c)m +(hange)f(v)-5 b(arious)150 3086 y(syn)m(tax)27 b(\014les,)g(etc.)41 +b(Ho)m(w)m(ev)m(er,)29 b(great)e(care)h(w)m(as)e(tak)m(en)i(to)f +(ensure)e(the)i(maxim)m(um)f(p)s(ossible)g(bac)m(kw)m(ards)150 +3196 y(compatibilit)m(y)-8 b(.)p eop +%%Page: 7 9 +7 8 bop 150 -116 a Fu(Chapter)30 b(1:)41 b(Ov)m(erview)2719 +b(7)150 366 y Fr(1)80 b(Ov)l(erview)275 601 y Fq(Amd)30 +b Fu(main)m(tains)e(a)f(cac)m(he)i(of)f(moun)m(ted)f(\014lesystems.)40 +b(Filesystems)28 b(are)g Fq(demand-moun)m(ted)i Fu(when)150 +711 y(they)37 b(are)g(\014rst)g(referenced,)h(and)f(unmoun)m(ted)f +(after)h(a)g(p)s(erio)s(d)f(of)h(inactivit)m(y)-8 b(.)63 +b Fq(Amd)40 b Fu(ma)m(y)d(b)s(e)g(used)150 820 y(as)c(a)f(replacemen)m +(t)i(for)f(Sun's)e Fm(automoun)m(t)p Fu(\(8\))j(program.)47 +b(It)32 b(con)m(tains)i(no)e(proprietary)g(source)h(co)s(de)150 +930 y(and)j(has)g(b)s(een)f(p)s(orted)h(to)h(n)m(umerous)e(\015a)m(v)m +(ors)i(of)f(Unix.)58 b(See)37 b(Chapter)e(2)i([Supp)s(orted)d +(Platforms],)150 1039 y(page)d(11.)275 1174 y Fq(Amd)39 +b Fu(w)m(as)d(designed)g(as)g(the)h(basis)f(for)g(exp)s(erimen)m(ting)g +(with)g(\014lesystem)g(la)m(y)m(out)i(and)e(manage-)150 +1284 y(men)m(t.)66 b(Although)38 b Fq(Amd)k Fu(has)c(man)m(y)h(direct)g +(applications)g(it)g(is)g(loaded)g(with)f(additional)i(features)150 +1393 y(whic)m(h)c(ha)m(v)m(e)i(little)g(practical)g(use.)58 +b(A)m(t)38 b(some)e(p)s(oin)m(t)h(the)f(infrequen)m(tly)h(used)e(comp)s +(onen)m(ts)i(ma)m(y)g(b)s(e)150 1503 y(remo)m(v)m(ed)31 +b(to)g(streamline)h(the)e(pro)s(duction)g(system.)150 +1760 y Ft(1.1)68 b(F)-11 b(undamen)l(tals)275 1953 y +Fu(The)30 b(fundamen)m(tal)g(concept)i(b)s(ehind)c Fq(Amd)34 +b Fu(is)c(the)h(abilit)m(y)h(to)f(separate)h(the)f(name)f(used)g(to)h +(refer)150 2063 y(to)h(a)f(\014le)g(from)f(the)h(name)g(used)f(to)i +(refer)f(to)g(its)g(ph)m(ysical)h(storage)g(lo)s(cation.)44 +b(This)30 b(allo)m(ws)i(the)g(same)150 2172 y(\014les)39 +b(to)g(b)s(e)f(accessed)i(with)f(the)f(same)i(name)e(regardless)h(of)g +(where)f(in)h(the)g(net)m(w)m(ork)g(the)g(name)g(is)150 +2282 y(used.)g(This)27 b(is)h(v)m(ery)g(di\013eren)m(t)g(from)f +(placing)h(`)p Fo(/n/hostname)p Fu(')d(in)j(fron)m(t)f(of)h(the)g +(pathname)f(since)h(that)150 2391 y(includes)38 b(lo)s(cation)i(dep)s +(enden)m(t)e(information)h(whic)m(h)f(ma)m(y)h(c)m(hange)h(if)e +(\014les)h(are)g(mo)m(v)m(ed)g(to)h(another)150 2501 +y(mac)m(hine.)275 2636 y(By)31 b(placing)g(the)g(required)f(mappings)h +(in)f(a)h(cen)m(trally)i(administered)d(database,)j(\014lesystems)e +(can)150 2745 y(b)s(e)f(re-organized)h(without)g(requiring)f(c)m +(hanges)h(to)g(con\014guration)g(\014les,)f(shell)h(scripts)f(and)g(so) +h(on.)150 3003 y Ft(1.2)68 b(Filesystems)46 b(and)f(V)-11 +b(olumes)275 3196 y Fq(Amd)43 b Fu(views)e(the)g(w)m(orld)f(as)h(a)g +(set)g(of)g(\014leserv)m(ers,)j(eac)m(h)d(con)m(taining)i(one)d(or)h +(more)g(\014lesystems)150 3305 y(where)28 b(eac)m(h)h(\014lesystem)g +(con)m(tains)h(one)e(or)h(more)f Fq(v)m(olumes)p Fu(.)41 +b(Here)29 b(the)f(term)h Fq(v)m(olume)34 b Fu(is)29 b(used)e(to)i +(refer)150 3415 y(to)i(a)g(coheren)m(t)g(set)g(of)g(\014les)f(suc)m(h)g +(as)h(a)f(user's)g(home)h(directory)g(or)f(a)h(T)2645 +3434 y(E)2695 3415 y(X)f(distribution.)275 3549 y(In)h(order)i(to)g +(access)h(the)f(con)m(ten)m(ts)h(of)f(a)g(v)m(olume,)h +Fq(Amd)i Fu(m)m(ust)c(b)s(e)g(told)h(in)f(whic)m(h)h(\014lesystem)g +(the)150 3659 y(v)m(olume)i(resides)e(and)h(whic)m(h)f(host)h(o)m(wns)g +(the)g(\014lesystem.)52 b(By)34 b(default)h(the)f(host)g(is)g(assumed)f +(to)i(b)s(e)150 3769 y(lo)s(cal)f(and)f(the)g(v)m(olume)h(is)f(assumed) +f(to)i(b)s(e)e(the)h(en)m(tire)h(\014lesystem.)49 b(If)33 +b(a)g(\014lesystem)h(con)m(tains)g(more)150 3878 y(than)d(one)g(v)m +(olume,)h(then)f(a)g Fq(sublink)36 b Fu(is)31 b(used)f(to)i(refer)e(to) +i(the)f(sub-directory)g(within)f(the)i(\014lesystem)150 +3988 y(where)e(the)g(v)m(olume)i(can)e(b)s(e)g(found.)150 +4246 y Ft(1.3)68 b(V)-11 b(olume)45 b(Naming)275 4438 +y Fu(V)-8 b(olume)37 b(names)f(are)h(de\014ned)e(to)i(b)s(e)f(unique)f +(across)i(the)g(en)m(tire)g(net)m(w)m(ork.)60 b(A)36 +b(v)m(olume)h(name)g(is)150 4548 y(the)30 b(pathname)g(to)h(the)f(v)m +(olume's)h(ro)s(ot)g(as)f(kno)m(wn)g(b)m(y)g(the)g(users)f(of)i(that)f +(v)m(olume.)42 b(Since)30 b(this)g(name)150 4657 y(uniquely)h(iden)m +(ti\014es)g(the)h(v)m(olume)g(con)m(ten)m(ts,)h(all)f(v)m(olumes)g(can) +g(b)s(e)e(named)h(and)g(accessed)h(from)f(eac)m(h)150 +4767 y(host,)g(sub)5 b(ject)30 b(to)h(administrativ)m(e)h(con)m(trols.) +275 4902 y(V)-8 b(olumes)35 b(ma)m(y)h(b)s(e)e(replicated)i(or)f +(duplicated.)55 b(Replicated)36 b(v)m(olumes)g(con)m(tain)g(iden)m +(tical)h(copies)150 5011 y(of)27 b(the)h(same)f(data)h(and)e(reside)i +(at)f(t)m(w)m(o)i(or)e(more)g(lo)s(cations)i(in)e(the)g(net)m(w)m(ork.) +40 b(Eac)m(h)28 b(of)g(the)f(replicated)150 5121 y(v)m(olumes)37 +b(can)f(b)s(e)g(used)f(in)m(terc)m(hangeably)-8 b(.)61 +b(Duplicated)37 b(v)m(olumes)g(eac)m(h)g(ha)m(v)m(e)g(the)g(same)f +(name)h(but)150 5230 y(con)m(tain)i(di\013eren)m(t,)h(though)e +(functionally)g(iden)m(tical,)j(data.)64 b(F)-8 b(or)38 +b(example,)i(`)p Fo(/vol/tex)p Fu(')c(migh)m(t)j(b)s(e)150 +5340 y(the)31 b(name)f(of)h(a)f(T)779 5360 y(E)829 5340 +y(X)h(distribution)e(whic)m(h)i(v)-5 b(aried)30 b(for)g(eac)m(h)i(mac)m +(hine)f(arc)m(hitecture.)p eop +%%Page: 8 10 +8 9 bop 150 -116 a Fu(Chapter)30 b(1:)41 b(Ov)m(erview)2719 +b(8)275 366 y Fq(Amd)41 b Fu(pro)m(vides)e(facilities)i(to)e(tak)m(e)h +(adv)-5 b(an)m(tage)41 b(of)e(b)s(oth)f(replicated)h(and)f(duplicated)h +(v)m(olumes.)150 476 y(Con\014guration)30 b(options)g(allo)m(w)h(a)g +(single)f(set)h(of)f(con\014guration)h(data)f(to)h(b)s(e)e(shared)h +(across)g(an)g(en)m(tire)150 586 y(net)m(w)m(ork)h(b)m(y)f(taking)i +(adv)-5 b(an)m(tage)32 b(of)f(replicated)g(and)f(duplicated)g(v)m +(olumes.)275 725 y Fq(Amd)j Fu(can)e(tak)m(e)h(adv)-5 +b(an)m(tage)33 b(of)d(replacemen)m(t)i(v)m(olumes)g(b)m(y)e(moun)m +(ting)h(them)f(as)h(required)f(should)150 834 y(an)g(activ)m(e)j +(\014leserv)m(er)e(b)s(ecome)f(una)m(v)-5 b(ailable.)150 +1103 y Ft(1.4)68 b(V)-11 b(olume)45 b(Binding)275 1301 +y Fu(Unix)g(implemen)m(ts)h(a)g(namespace)g(of)f(hierarc)m(hically)j +(moun)m(ted)d(\014lesystems.)86 b(Tw)m(o)46 b(forms)f(of)150 +1410 y(binding)26 b(b)s(et)m(w)m(een)i(names)f(and)g(\014les)g(are)h +(pro)m(vided.)39 b(A)27 b Fq(hard)g(link)32 b Fu(completes)d(the)e +(binding)f(when)h(the)150 1520 y(name)k(is)f(added)g(to)h(the)g +(\014lesystem.)41 b(A)31 b Fq(soft)g(link)36 b Fu(dela)m(ys)31 +b(the)g(binding)e(un)m(til)i(the)f(name)h(is)f(accessed.)150 +1629 y(An)f Fq(automoun)m(ter)37 b Fu(adds)28 b(a)i(further)e(form)h +(in)g(whic)m(h)g(the)g(binding)g(of)g(name)g(to)i(\014lesystem)e(is)h +(dela)m(y)m(ed)150 1739 y(un)m(til)h(the)f(name)h(is)f(accessed.)275 +1878 y(The)j(target)i(v)m(olume,)g(in)e(its)h(general)h(form,)f(is)f(a) +h(tuple)g(\(host,)h(\014lesystem,)g(sublink\))d(whic)m(h)i(can)150 +1988 y(b)s(e)c(used)f(to)i(name)g(the)f(ph)m(ysical)h(lo)s(cation)h(of) +f(an)m(y)g(v)m(olume)g(in)f(the)g(net)m(w)m(ork.)275 +2127 y(When)h(a)h(target)h(is)f(referenced,)g Fq(Amd)j +Fu(ignores)d(the)g(sublink)f(elemen)m(t)i(and)e(determines)h(whether) +150 2237 y(the)39 b(required)f(\014lesystem)h(is)g(already)h(moun)m +(ted.)66 b(This)38 b(is)g(done)h(b)m(y)g(computing)g(the)g(lo)s(cal)h +(moun)m(t)150 2346 y(p)s(oin)m(t)30 b(for)f(the)g(\014lesystem)h(and)f +(c)m(hec)m(king)i(for)f(an)f(existing)i(\014lesystem)e(moun)m(ted)h(at) +g(the)g(same)g(place.)150 2456 y(If)22 b(suc)m(h)h(a)g(\014lesystem)g +(already)g(exists)h(then)e(it)h(is)g(assumed)f(to)i(b)s(e)e +(functionally)h(iden)m(tical)i(to)e(the)g(target)150 +2565 y(\014lesystem.)63 b(By)38 b(default)g(there)g(is)g(a)g +(one-to-one)i(mapping)d(b)s(et)m(w)m(een)h(the)g(pair)g(\(host,)i +(\014lesystem\))150 2675 y(and)30 b(the)g(lo)s(cal)i(moun)m(t)e(p)s +(oin)m(t)h(so)f(this)h(assumption)e(is)i(v)-5 b(alid.)150 +2944 y Ft(1.5)68 b(Op)t(erational)46 b(Principles)275 +3141 y Fq(Amd)37 b Fu(op)s(erates)e(b)m(y)f(in)m(tro)s(ducing)g(new)g +(moun)m(t)g(p)s(oin)m(ts)g(in)m(to)h(the)g(namespace.)53 +b(These)34 b(are)h(called)150 3251 y Fq(automoun)m(t)29 +b Fu(p)s(oin)m(ts.)39 b(The)26 b(k)m(ernel)h(sees)g(these)g(automoun)m +(t)g(p)s(oin)m(ts)f(as)h(NFS)f(\014lesystems)h(b)s(eing)f(serv)m(ed)150 +3360 y(b)m(y)h Fq(Amd)p Fu(.)39 b(Ha)m(ving)29 b(attac)m(hed)g(itself)f +(to)g(the)f(namespace,)i Fq(Amd)i Fu(is)c(no)m(w)g(able)h(to)g(con)m +(trol)h(the)e(view)h(the)150 3470 y(rest)34 b(of)g(the)g(system)f(has)h +(of)g(those)g(moun)m(t)g(p)s(oin)m(ts.)50 b(RPC)33 b(calls)i(are)f +(receiv)m(ed)h(from)e(the)h(k)m(ernel)h(one)150 3580 +y(at)c(a)g(time.)275 3719 y(When)e(a)h Fq(lo)s(okup)j +Fu(call)e(is)f(receiv)m(ed)h Fq(Amd)h Fu(c)m(hec)m(ks)g(whether)d(the)h +(name)g(is)g(already)g(kno)m(wn.)40 b(If)30 b(it)g(is)150 +3828 y(not,)j(the)f(required)f(v)m(olume)i(is)f(moun)m(ted.)45 +b(A)32 b(sym)m(b)s(olic)g(link)g(p)s(oin)m(ting)g(to)h(the)f(v)m(olume) +h(ro)s(ot)f(is)g(then)150 3938 y(returned.)43 b(Once)31 +b(the)h(sym)m(b)s(olic)g(link)f(is)g(returned,)g(the)h(k)m(ernel)g +(will)g(send)e(all)i(other)g(requests)f(direct)150 4047 +y(to)g(the)g(moun)m(ted)f(\014lesystem.)275 4187 y(If)24 +b(a)i(v)m(olume)g(is)g(not)f(y)m(et)i(moun)m(ted,)f Fq(Amd)j +Fu(consults)c(a)h(con\014guration)g Fq(moun)m(t-map)i +Fu(corresp)s(onding)150 4296 y(to)h(the)f(automoun)m(t)h(p)s(oin)m(t.) +40 b Fq(Amd)31 b Fu(then)d(mak)m(es)h(a)g(run)m(time)f(decision)h(on)f +(what)g(and)f(where)h(to)h(moun)m(t)150 4406 y(a)i(\014lesystem)f +(based)g(on)h(the)f(information)h(obtained)g(from)f(the)g(map.)275 +4545 y Fq(Amd)e Fu(do)s(es)c(not)i(implemen)m(t)f(all)h(the)f(NFS)g +(requests;)i(only)f(those)f(relev)-5 b(an)m(t)26 b(to)g(name)f(binding) +f(suc)m(h)150 4655 y(as)36 b Fq(lo)s(okup)p Fu(,)g Fq(readlink)41 +b Fu(and)35 b Fq(readdir)p Fu(.)55 b(Some)36 b(other)g(calls)g(are)g +(also)h(implemen)m(ted)f(but)f(most)g(simply)150 4764 +y(return)29 b(an)i(error)f(co)s(de;)g(for)h(example)g +Fq(mkdir)36 b Fu(alw)m(a)m(ys)31 b(returns)f(\\read-only)h +(\014lesystem".)150 5033 y Ft(1.6)68 b(Moun)l(ting)45 +b(a)g(V)-11 b(olume)275 5230 y Fu(Eac)m(h)29 b(automoun)m(t)g(p)s(oin)m +(t)f(has)h(a)f(corresp)s(onding)g(moun)m(t)g(map.)40 +b(The)28 b(moun)m(t)h(map)f(con)m(tains)h(a)g(list)150 +5340 y(of)k(k)m(ey{v)-5 b(alue)34 b(pairs.)48 b(The)32 +b(k)m(ey)i(is)e(the)h(name)g(of)g(the)g(v)m(olume)h(to)f(b)s(e)f(moun)m +(ted.)48 b(The)32 b(v)-5 b(alue)33 b(is)g(a)g(list)p +eop +%%Page: 9 11 +9 10 bop 150 -116 a Fu(Chapter)30 b(1:)41 b(Ov)m(erview)2719 +b(9)150 366 y(of)32 b(lo)s(cations)h(describing)f(where)f(the)h +(\014lesystem)g(is)g(stored)g(in)f(the)h(net)m(w)m(ork.)46 +b(In)31 b(the)h(source)g(for)g(the)150 476 y(map)e(the)h(v)-5 +b(alue)30 b(w)m(ould)h(lo)s(ok)g(lik)m(e)390 614 y(lo)s(cation1)63 +b(lo)s(cation2)f Fl(:)15 b(:)g(:)62 b Fu(lo)s(cationN)275 +757 y Fq(Amd)30 b Fu(examines)e(eac)m(h)h(lo)s(cation)g(in)e(turn.)39 +b(Eac)m(h)28 b(lo)s(cation)h(ma)m(y)f(con)m(tain)h Fq(selectors)j +Fu(whic)m(h)27 b(con)m(trol)150 867 y(whether)i Fq(Amd)j +Fu(can)d(use)g(that)h(lo)s(cation.)42 b(F)-8 b(or)30 +b(example,)g(the)g(lo)s(cation)h(ma)m(y)f(b)s(e)e(restricted)i(to)g +(use)f(b)m(y)150 976 y(certain)i(hosts.)41 b(Those)30 +b(lo)s(cations)i(whic)m(h)e(cannot)h(b)s(e)f(used)f(are)i(ignored.)275 +1120 y Fq(Amd)44 b Fu(attempts)e(to)f(moun)m(t)g(the)h(\014lesystem)f +(describ)s(ed)f(b)m(y)h(eac)m(h)h(remaining)g(lo)s(cation)g(un)m(til)g +(a)150 1229 y(moun)m(t)30 b(succeeds)h(or)f Fq(Amd)k +Fu(can)c(no)h(longer)g(pro)s(ceed.)40 b(The)30 b(latter)i(can)e(o)s +(ccur)h(in)f(three)g(w)m(a)m(ys:)225 1373 y Fs(\017)60 +b Fu(If)34 b(none)f(of)h(the)h(lo)s(cations)g(could)f(b)s(e)g(used,)g +(or)g(if)g(all)h(of)f(the)g(lo)s(cations)i(caused)e(an)f(error,)i(then) +330 1482 y(the)c(last)g(error)f(is)g(returned.)225 1621 +y Fs(\017)60 b Fu(If)26 b(a)h(lo)s(cation)h(could)f(b)s(e)f(used)f(but) +h(w)m(as)h(b)s(eing)f(moun)m(ted)g(in)h(the)f(bac)m(kground)h(then)f +Fq(Amd)j Fu(marks)330 1731 y(that)e(moun)m(t)f(as)g(b)s(eing)f(\\in)h +(progress")h(and)e(con)m(tin)m(ues)i(with)f(the)g(next)g(request;)i(no) +e(reply)f(is)h(sen)m(t)330 1840 y(to)31 b(the)g(k)m(ernel.)225 +1979 y Fs(\017)60 b Fu(Lastly)-8 b(,)27 b(one)e(or)g(more)g(of)g(the)g +(moun)m(ts)g(ma)m(y)g(ha)m(v)m(e)h(b)s(een)e Fq(deferred)p +Fu(.)38 b(A)25 b(moun)m(t)g(is)g(deferred)e(if)i(extra)330 +2089 y(information)k(is)f(required)g(b)s(efore)g(the)h(moun)m(t)f(can)h +(pro)s(ceed.)40 b(When)28 b(the)h(information)g(b)s(ecomes)330 +2198 y(a)m(v)-5 b(ailable)29 b(the)d(moun)m(t)g(will)h(tak)m(e)h +(place,)g(but)e(in)g(the)g(mean)g(time)h(no)g(reply)f(is)g(sen)m(t)h +(to)g(the)f(k)m(ernel.)330 2308 y(If)k(the)g(moun)m(t)h(is)f(deferred,) +g Fq(Amd)j Fu(con)m(tin)m(ues)f(to)f(try)f(an)m(y)h(remaining)f(lo)s +(cations.)275 2481 y(Once)f(a)h(v)m(olume)g(has)f(b)s(een)g(moun)m +(ted,)g Fq(Amd)k Fu(establishes)d(a)f Fq(v)m(olume)i(mapping)36 +b Fu(whic)m(h)29 b(is)h(used)e(to)150 2590 y(satisfy)j(subsequen)m(t)e +(requests.)150 2870 y Ft(1.7)68 b(Automatic)46 b(Unmoun)l(ting)275 +3072 y Fu(T)-8 b(o)21 b(a)m(v)m(oid)i(an)e(ev)m(er)h(increasing)g(n)m +(um)m(b)s(er)e(of)h(\014lesystem)h(moun)m(ts,)h Fq(Amd)h +Fu(remo)m(v)m(es)f(v)m(olume)f(mappings)150 3181 y(whic)m(h)29 +b(ha)m(v)m(e)h(not)f(b)s(een)g(used)f(recen)m(tly)-8 +b(.)42 b(A)29 b(time-to-liv)m(e)k(in)m(terv)-5 b(al)30 +b(is)f(asso)s(ciated)i(with)d(eac)m(h)j(mapping)150 3291 +y(and)g(when)g(that)h(expires)g(the)g(mapping)f(is)h(remo)m(v)m(ed.)45 +b(When)32 b(the)g(last)g(reference)g(to)h(a)f(\014lesystem)g(is)150 +3400 y(remo)m(v)m(ed,)h(that)f(\014lesystem)f(is)h(unmoun)m(ted.)42 +b(If)31 b(the)h(unmoun)m(t)e(fails,)j(for)e(example)h(the)f +(\014lesystem)h(is)150 3510 y(still)j(busy)-8 b(,)35 +b(the)f(mapping)g(is)g(re-instated)h(and)f(its)g(time-to-liv)m(e)k(in)m +(terv)-5 b(al)35 b(is)g(extended.)52 b(The)34 b(global)150 +3620 y(default)d(for)f(this)h(grace)h(p)s(erio)s(d)d(is)i(con)m +(trolled)h(b)m(y)f(the)g Fo(-w)f Fu(command-line)h(option)g(\(see)h +(Section)f(4.12)150 3729 y([-w)i(Option],)h(page)g(32\))g(or)f(the)g +Fq(amd.conf)51 b Fu(parameter)33 b(`)p Fo(dismount_interval)p +Fu(')c(\(see)34 b(Section)g(6.5.6)150 3839 y([dismoun)m(t)p +547 3839 28 4 v 33 w(in)m(terv)-5 b(al)28 b(P)m(arameter],)h(page)e +(49\).)41 b(It)27 b(is)g(also)h(p)s(ossible)e(to)h(set)h(this)f(v)-5 +b(alue)27 b(on)f(a)i(p)s(er-moun)m(t)150 3948 y(basis)i(\(see)i +(Section)f(3.3.4.4)i([opts],)e(page)g(25\).)275 4092 +y(Filesystems)g(can)g(b)s(e)e(forcefully)i(timed)f(out)h(using)f(the)g +Fq(Amq)i Fu(command.)41 b(See)30 b(Chapter)g(7)h([Run-)150 +4201 y(time)g(Administration],)g(page)g(55.)150 4481 +y Ft(1.8)68 b(Keep-aliv)l(es)275 4682 y Fu(Use)31 b(of)h(some)g +(\014lesystem)f(t)m(yp)s(es)h(requires)f(the)h(presence)f(of)h(a)f +(serv)m(er)h(on)f(another)h(mac)m(hine.)45 b(If)31 b(a)150 +4792 y(mac)m(hine)e(crashes)f(then)f(it)i(is)f(of)g(no)g(concern)g(to)g +(pro)s(cesses)g(on)g(that)g(mac)m(hine)h(that)g(the)f(\014lesystem)g +(is)150 4902 y(una)m(v)-5 b(ailable.)42 b(Ho)m(w)m(ev)m(er,)32 +b(to)e(pro)s(cesses)f(on)g(a)h(remote)g(host)f(using)g(that)h(mac)m +(hine)g(as)g(a)f(\014leserv)m(er)h(this)150 5011 y(ev)m(en)m(t)35 +b(is)f(imp)s(ortan)m(t.)52 b(This)33 b(situation)i(is)f(most)g(widely)g +(recognized)h(when)e(an)h(NFS)g(serv)m(er)g(crashes)150 +5121 y(and)i(the)h(b)s(eha)m(vior)g(observ)m(ed)g(on)g(clien)m(t)h(mac) +m(hines)g(is)e(that)i(more)f(and)f(more)h(pro)s(cesses)g(hang.)60 +b(In)150 5230 y(order)27 b(to)i(pro)m(vide)f(the)g(p)s(ossibilit)m(y)g +(of)g(reco)m(v)m(ery)-8 b(,)30 b Fq(Amd)h Fu(implemen)m(ts)d(a)g +Fq(k)m(eep-aliv)m(e)36 b Fu(in)m(terv)-5 b(al)29 b(timer)f(for)150 +5340 y(some)j(\014lesystem)f(t)m(yp)s(es.)41 b(Curren)m(tly)30 +b(only)g(NFS)h(mak)m(es)g(use)f(of)h(this)f(service.)p +eop +%%Page: 10 12 +10 11 bop 150 -116 a Fu(Chapter)30 b(1:)41 b(Ov)m(erview)2673 +b(10)275 366 y(The)25 b(basis)i(of)f(the)h(NFS)f(k)m(eep-aliv)m(e)j +(implemen)m(tation)f(is)e(the)h(observ)-5 b(ation)27 +b(that)g(most)g(sites)g(main-)150 476 y(tain)j(replicated)g(copies)g +(of)f(common)h(system)f(data)h(suc)m(h)f(as)g(man)m(ual)h(pages,)g +(most)g(or)f(all)h(programs,)150 586 y(system)h(source)h(co)s(de)f(and) +g(so)g(on.)43 b(If)31 b(one)h(of)f(those)h(serv)m(ers)f(go)s(es)h(do)m +(wn)f(it)h(w)m(ould)f(b)s(e)f(reasonable)i(to)150 695 +y(moun)m(t)e(one)h(of)g(the)f(others)h(as)f(a)h(replacemen)m(t.)275 +830 y(The)43 b(\014rst)g(part)h(of)g(the)g(pro)s(cess)f(is)h(to)h(k)m +(eep)f(trac)m(k)h(of)f(whic)m(h)g(\014leserv)m(ers)g(are)g(up)f(and)g +(whic)m(h)150 939 y(are)e(do)m(wn.)73 b Fq(Amd)44 b Fu(do)s(es)c(this)h +(b)m(y)g(sending)g(RPC)f(requests)h(to)h(the)f(serv)m(ers')h(NFS)f +Fo(NullProc)e Fu(and)150 1049 y(c)m(hec)m(king)c(whether)e(a)h(reply)f +(is)h(returned.)48 b(While)35 b(the)e(serv)m(er)h(state)h(is)e +(uncertain)h(the)f(requests)h(are)150 1159 y(re-transmitted)f(at)g +(three)f(second)g(in)m(terv)-5 b(als)33 b(and)f(if)g(no)g(reply)g(is)g +(receiv)m(ed)i(after)e(four)g(attempts)h(the)150 1268 +y(serv)m(er)g(is)g(mark)m(ed)g(do)m(wn.)48 b(If)33 b(a)g(reply)g(is)g +(receiv)m(ed)h(the)f(\014leserv)m(er)h(is)f(mark)m(ed)g(up)e(and)i(sta) +m(ys)h(in)e(that)150 1378 y(state)g(for)e(30)h(seconds)f(at)h(whic)m(h) +g(time)g(another)f(NFS)h(ping)f(is)g(sen)m(t.)275 1512 +y(Once)d(a)i(\014leserv)m(er)f(is)g(mark)m(ed)g(do)m(wn,)g(requests)g +(con)m(tin)m(ue)h(to)f(b)s(e)f(sen)m(t)i(ev)m(ery)f(30)h(seconds)f(in)f +(order)150 1622 y(to)37 b(determine)f(when)f(the)h(\014leserv)m(er)h +(comes)g(bac)m(k)f(up.)57 b(During)36 b(this)g(time)h(an)m(y)f +(reference)h(through)150 1731 y Fq(Amd)k Fu(to)d(the)g(\014lesystems)g +(on)f(that)h(serv)m(er)g(fail)g(with)g(the)g(error)f(\\Op)s(eration)h +(w)m(ould)f(blo)s(c)m(k".)63 b(If)38 b(a)150 1841 y(replacemen)m(t)31 +b(v)m(olume)g(is)f(a)m(v)-5 b(ailable)32 b(then)e(it)g(will)g(b)s(e)g +(moun)m(ted,)g(otherwise)g(the)g(error)g(is)f(returned)g(to)150 +1951 y(the)i(user.)275 2085 y(Although)37 b(this)g(action)i(do)s(es)e +(not)h(protect)g(user)f(\014les,)i(whic)m(h)e(are)h(unique)e(on)h(the)h +(net)m(w)m(ork,)i(or)150 2195 y(pro)s(cesses)22 b(whic)m(h)g(do)f(not)i +(access)g(\014les)f(via)h Fq(Amd)i Fu(or)d(already)g(ha)m(v)m(e)i(op)s +(en)d(\014les)h(on)g(the)g(h)m(ung)f(\014lesystem,)150 +2304 y(it)31 b(can)g(prev)m(en)m(t)g(most)f(new)g(pro)s(cesses)g(from)g +(hanging.)275 2439 y(By)20 b(default,)k(\014leserv)m(er)d(state)h(is)e +(not)h(main)m(tained)h(for)e(NFS/TCP)g(moun)m(ts.)38 +b(The)20 b(remote)i(\014leserv)m(er)150 2548 y(is)30 +b(alw)m(a)m(ys)i(assumed)e(to)h(b)s(e)f(up.)150 2806 +y Ft(1.9)68 b(Non-blo)t(c)l(king)45 b(Op)t(eration)275 +2998 y Fu(Since)39 b(there)i(is)f(only)g(one)g(instance)h(of)f +Fq(Amd)j Fu(for)c(eac)m(h)i(automoun)m(t)g(p)s(oin)m(t,)i(and)c +(usually)h(only)150 3108 y(one)35 b(instance)g(on)g(eac)m(h)h(mac)m +(hine,)h(it)e(is)g(imp)s(ortan)m(t)g(that)g(it)g(is)g(alw)m(a)m(ys)h(a) +m(v)-5 b(ailable)37 b(to)f(service)f(k)m(ernel)150 3217 +y(calls.)70 b Fq(Amd)43 b Fu(go)s(es)d(to)h(great)g(lengths)f(to)g +(ensure)f(that)i(it)f(do)s(es)g(not)g(blo)s(c)m(k)g(in)g(a)g(system)g +(call.)70 b(As)150 3327 y(a)39 b(last)g(resort)g Fq(Amd)i +Fu(will)e(fork)f(b)s(efore)g(it)h(attempts)g(a)g(system)g(call)g(that)g +(ma)m(y)g(blo)s(c)m(k)g(inde\014nitely)-8 b(,)150 3437 +y(suc)m(h)30 b(as)h(moun)m(ting)g(an)f(NFS)h(\014lesystem.)42 +b(Other)30 b(tasks)h(suc)m(h)f(as)h(obtaining)g(\014lehandle)g +(information)150 3546 y(for)k(an)f(NFS)h(\014lesystem,)h(are)f(done)g +(using)f(a)h(purp)s(ose)e(built)i(non-blo)s(c)m(king)g(RPC)f(library)g +(whic)m(h)h(is)150 3656 y(in)m(tegrated)j(with)e Fq(Amd)t +Fu('s)f(task)h(sc)m(heduler.)58 b(This)35 b(library)h(is)g(also)h(used) +e(to)i(implemen)m(t)g(NFS)f(k)m(eep-)150 3765 y(aliv)m(es)c(\(see)f +(Section)g(1.8)h([Keep-aliv)m(es],)h(page)e(9\).)275 +3900 y(Whenev)m(er)24 b(a)g(moun)m(t)f(is)h(deferred)f(or)g(bac)m +(kgrounded,)i Fq(Amd)h Fu(m)m(ust)e(w)m(ait)h(for)e(it)h(to)g(complete) +h(b)s(efore)150 4009 y(replying)33 b(to)h(the)f(k)m(ernel.)50 +b(Ho)m(w)m(ev)m(er,)36 b(this)d(w)m(ould)g(cause)h Fq(Amd)i +Fu(to)e(blo)s(c)m(k)g(w)m(aiting)g(for)f(a)h(reply)f(to)h(b)s(e)150 +4119 y(constructed.)55 b(Rather)35 b(than)g(do)g(this,)i +Fq(Amd)h Fu(simply)d Fq(drops)i Fu(the)f(call)g(under)d(the)j +(assumption)e(that)150 4229 y(the)d(k)m(ernel)f(RPC)g(mec)m(hanism)h +(will)g(automatically)i(retry)d(the)h(request.)p eop +%%Page: 11 13 +11 12 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(Supp)s(orted)28 +b(Platforms)2214 b(11)150 366 y Fr(2)80 b(Supp)t(orted)52 +b(Platforms)275 679 y Fq(Am-utils)41 b Fu(has)c(b)s(een)f(p)s(orted)h +(to)h(a)f(wide)g(v)-5 b(ariet)m(y)38 b(of)g(mac)m(hines)g(and)e(op)s +(erating)i(systems.)61 b Fq(Am-)150 788 y(utils)t Fu('s)37 +b(co)s(de)g(w)m(orks)g(for)f(little-endian)j(and)d(big-endian)h(mac)m +(hines,)i(as)e(w)m(ell)h(as)f(32)g(bit)g(and)f(64)i(bit)150 +898 y(arc)m(hitectures.)69 b(F)-8 b(urthermore,)41 b(when)d +Fq(Am-utils)43 b Fu(p)s(orts)c(to)h(an)f(Op)s(erating)g(System)g(on)g +(one)g(arc)m(hi-)150 1007 y(tecture,)c(it)e(is)g(generally)h(readily)f +(p)s(ortable)g(to)h(the)f(same)g(Op)s(erating)g(System)g(on)f(all)i +(platforms)f(on)150 1117 y(whic)m(h)d(it)h(is)f(a)m(v)-5 +b(ailable.)275 1277 y(The)40 b(table)i(b)s(elo)m(w)g(lists)f(those)h +(platforms)f(supp)s(orted)e(b)m(y)j(the)f(latest)i(release.)74 +b(The)41 b(listing)h(is)150 1387 y(based)30 b(on)h(the)g(standard)f +(output)g(from)h(GNU's)g Fo(config.guess)d Fu(script.)41 +b(Since)31 b(signi\014can)m(t)h(c)m(hanges)150 1497 y(ha)m(v)m(e)j(b)s +(een)f(made)g(to)g(am-utils,)i(not)f(all)g(systems)f(listed)g(here)g +(ha)m(v)m(e)h(b)s(een)f(v)m(eri\014ed)g(w)m(orking)g(for)g(all)150 +1606 y(features.)150 1886 y Fm(Auto-Con\014gured)c(System)g(Name)119 +b(Con\014g)129 b(Compile)f(Amd)h(NFS3)g(Shlib)g(Hlfsd)150 +2056 y(alpha-dec-osf2.1)739 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)150 2226 y Fm(alpha-dec-osf4.0)739 b Fu(y)m(es)266 +b(y)m(es)337 b(y)m(es)204 b(y)m(es)150 2396 y Fm(alphaev5-unkno)m +(wn-lin)m(ux-gn)m(u)230 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)212 b(y)m(es)150 2567 y Fm(hppa1.0-hp-hpux11.00)491 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(no)150 2737 +y Fm(hppa1.1-hp-hpux10.10)491 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)212 b(no)150 2907 y Fm(hppa1.1-hp-hpux10.20)491 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(no)150 +3077 y Fm(hppa1.1-hp-hpux9.01)536 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 3247 y Fm(hppa1.1-hp-hpux9.05)536 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 3418 +y Fm(hppa1.1-hp-hpux9.07)536 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 3588 y Fm(i386-p)s(c-bsdi2.1)779 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 3758 +y Fm(i386-p)s(c-bsdi3.0)779 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 3928 y Fm(i386-p)s(c-bsdi3.1)779 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 4098 +y Fm(i386-p)s(c-solaris2.5.1)622 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)211 b(y)m(es)150 4269 +y Fm(i386-p)s(c-solaris2.6)692 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)211 b(y)m(es)150 4439 +y Fm(i386-p)s(c-solaris2.7)692 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)211 b(y)m(es)150 4609 +y Fm(i386-unkno)m(wn-freebsd2.1.0)317 b Fu(y)m(es)266 +b(y)m(es)337 b(y)m(es)204 b(n/a)150 4779 y Fm(i386-unkno)m +(wn-freebsd2.2.1)317 b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 +b(n/a)212 b(y)m(es)150 4949 y Fm(i386-unkno)m(wn-freebsd3.0)387 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)232 +b(y)m(es)150 5120 y Fm(i386-unkno)m(wn-netbsd1.2.1)340 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)232 +b(y)m(es)150 5290 y Fm(i386-unkno)m(wn-netbsd1.3)410 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)232 +b(y)m(es)p eop +%%Page: 12 14 +12 13 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(Supp)s(orted)28 +b(Platforms)2214 b(12)150 366 y Fm(i386-unkno)m(wn-netbsd1.3.1)340 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)232 +b(y)m(es)150 537 y Fm(i386-unkno)m(wn-op)s(en)m(bsd2.1)349 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)232 +b(y)m(es)150 707 y Fm(i486-ncr-sysv4.3.03)623 b Fu(y)m(es)266 +b(y)m(es)662 b(y)m(es)150 877 y Fm(i486-p)s(c-lin)m(ux-gn)m(ulib)s(c1) +497 b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 +b(y)m(es)150 1047 y Fm(i586-p)s(c-lin)m(ux-gn)m(u)686 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(y)m(es)150 +1217 y Fm(i586-p)s(c-lin)m(ux-gn)m(ulib)s(c1)497 b Fu(y)m(es)266 +b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(y)m(es)150 1388 +y Fm(i686-p)s(c-lin)m(ux-gn)m(u)686 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)212 b(y)m(es)150 1558 y Fm(i686-p)s(c-lin)m(ux-gn)m +(ulib)s(c1)497 b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 +b(n/a)212 b(y)m(es)150 1728 y Fm(m68k-hp-hpux9.00)634 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 1898 +y Fm(m68k-sun-sunos4.1.1)555 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 2068 y Fm(m68k-next-nextstep3)536 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 2239 +y Fm(mips-dec-ultrix4.3)652 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 2409 y Fm(mips-sgi-irix5.2)150 +2579 y(mips-sgi-irix5.3)765 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)150 2749 y Fm(mips-sgi-irix6.2)765 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)150 +2919 y Fm(mips-sgi-irix6.4)765 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)150 3090 y Fm(p)s(o)m(w)m(erp)s +(c-ibm-aix4.1.5.0)453 b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 +b(n/a)150 3260 y Fm(p)s(o)m(w)m(erp)s(c-ibm-aix4.2.1.0)453 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(y)m(es)150 +3430 y Fm(rs6000-ibm-aix3.2)672 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 3600 y Fm(rs6000-ibm-aix3.2.5)602 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 3770 +y Fm(rs6000-ibm-aix4.1.4.0)532 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 3941 y Fm(rs6000-ibm-aix4.1.5.0)532 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)150 4111 +y Fm(sparc-sun-solaris2.3)598 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)150 4281 y Fm(sparc-sun-solaris2.4)598 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(y)m(es)150 +4451 y Fm(sparc-sun-solaris2.5)598 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)150 4621 y Fm +(sparc-sun-solaris2.5.1)528 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)211 b(y)m(es)150 4792 +y Fm(sparc-sun-solaris2.6)598 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)211 b(y)m(es)150 4962 +y Fm(sparc-sun-solaris2.7)598 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(y)m(es)232 b(y)m(es)211 b(y)m(es)150 5132 +y Fm(sparc-sun-sunos4.1.1)559 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)212 b(y)m(es)p eop +%%Page: 13 15 +13 14 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(Supp)s(orted)28 +b(Platforms)2214 b(13)150 366 y Fm(sparc-sun-sunos4.1.3)559 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(y)m(es)150 +537 y Fm(sparc-sun-sunos4.1.3C)493 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)212 b(y)m(es)150 707 y Fm(sparc-sun-sunos4.1.3)p +967 707 28 5 v 33 w(U1)411 b Fu(y)m(es)266 b(y)m(es)337 +b(y)m(es)204 b(n/a)212 b(y)m(es)150 877 y Fm(sparc-sun-sunos4.1.4)559 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(y)m(es)150 +1047 y Fm(sparc-unkno)m(wn-lin)m(ux-gn)m(ulib)s(c1)181 +b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 b(y)m(es)150 +1217 y Fm(sparc-unkno)m(wn-netbsd1.2E)300 b Fu(y)m(es)266 +b(y)m(es)337 b(y)m(es)150 1388 y Fm(sparc64-unkno)m(wn-lin)m(ux-gn)m(u) +280 b Fu(y)m(es)266 b(y)m(es)337 b(y)m(es)204 b(n/a)212 +b(y)m(es)275 1573 y(See)28 b(the)g(`)p Fo(INSTALL)p Fu(')e(in)i(the)g +(distribution)f(for)g(more)h(sp)s(eci\014c)g(details)h(on)f(building)f +(and/or)g(con\014g-)150 1683 y(uring)j(for)g(some)h(systems.)p +eop +%%Page: 14 16 +14 15 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(14)150 366 y Fr(3)80 b(Moun)l(t)53 b(Maps)275 +621 y Fq(Amd)39 b Fu(has)d(no)h(built-in)f(kno)m(wledge)h(of)g(mac)m +(hines)g(or)f(\014lesystems.)60 b(External)36 b Fq(moun)m(t-maps)41 +b Fu(are)150 731 y(used)26 b(to)i(pro)m(vide)f(the)g(required)f +(information.)40 b(Sp)s(eci\014cally)-8 b(,)28 b Fq(Amd)i +Fu(needs)d(to)g(kno)m(w)g(when)f(and)g(under)150 840 +y(what)k(conditions)h(it)g(should)e(moun)m(t)i(\014lesystems.)275 +982 y(The)c(map)g(en)m(try)h(corresp)s(onding)f(to)h(the)g(requested)g +(name)g(con)m(tains)h(a)f(list)g(of)g(p)s(ossible)f(lo)s(cations)150 +1091 y(from)43 b(whic)m(h)g(to)h(resolv)m(e)h(the)f(request.)80 +b(Eac)m(h)44 b(lo)s(cation)h(sp)s(eci\014es)e(\014lesystem)h(t)m(yp)s +(e,)j(information)150 1201 y(required)32 b(b)m(y)g(that)h(\014lesystem) +g(\(for)f(example)h(the)g(blo)s(c)m(k)g(sp)s(ecial)g(device)g(in)f(the) +h(case)g(of)g(UFS\),)g(and)150 1311 y(some)c(information)g(describing)g +(where)f(to)h(moun)m(t)g(the)g(\014lesystem)g(\(see)g(Section)h +(3.3.4.3)h([fs)e(Option],)150 1420 y(page)i(25\).)42 +b(A)31 b(lo)s(cation)g(ma)m(y)g(also)h(con)m(tain)f Fq(selectors)36 +b Fu(\(see)31 b(Section)h(3.3.3)g([Selectors],)g(page)f(20\).)150 +1695 y Ft(3.1)68 b(Map)45 b(T)l(yp)t(es)275 1894 y Fu(A)36 +b(moun)m(t-map)h(pro)m(vides)f(the)h(run-time)f(con\014guration)h +(information)g(to)g Fq(Amd)p Fu(.)58 b(Maps)37 b(can)g(b)s(e)150 +2004 y(implemen)m(ted)32 b(in)g(man)m(y)g(w)m(a)m(ys.)45 +b(Some)32 b(of)g(the)g(forms)f(supp)s(orted)f(b)m(y)i +Fq(Amd)i Fu(are)e(regular)g(\014les,)h(ndbm)150 2113 +y(databases,)e(NIS)f(maps,)g(the)h Fq(Hesio)s(d)j Fu(name)c(serv)m(er,) +h(and)f(ev)m(en)h(the)g(passw)m(ord)e(\014le.)275 2255 +y(A)34 b(moun)m(t-map)g Fq(name)39 b Fu(is)34 b(a)h(sequence)f(of)h(c)m +(haracters.)53 b(When)34 b(an)g(automoun)m(t)h(p)s(oin)m(t)f(is)g +(created)150 2364 y(a)e(handle)g(on)g(the)g(moun)m(t-map)h(is)f +(obtained.)46 b(F)-8 b(or)33 b(eac)m(h)g(map)f(t)m(yp)s(e)g +(con\014gured,)g Fq(Amd)j Fu(attempts)e(to)150 2474 y(reference)26 +b(the)g(map)f(of)h(the)f(appropriate)h(t)m(yp)s(e.)39 +b(If)25 b(a)h(map)f(is)h(found,)g Fq(Amd)i Fu(notes)e(the)g(t)m(yp)s(e) +g(for)f(future)150 2584 y(use)33 b(and)g(deletes)h(the)g(reference,)h +(for)e(example)h(closing)g(an)m(y)g(op)s(en)f(\014le)g(descriptors.)50 +b(The)33 b(a)m(v)-5 b(ailable)150 2693 y(maps)25 b(are)h(con\014gured)f +(when)g Fq(Amd)j Fu(is)e(built)f(and)g(can)h(b)s(e)f(displa)m(y)m(ed)h +(b)m(y)g(running)d(the)j(command)g(`)p Fo(amd)150 2803 +y(-v)p Fu('.)275 2944 y(When)d(using)g(an)h Fq(Amd)i +Fu(con\014guration)e(\014le)g(\(see)g(Chapter)f(6)h([Amd)g +(Con\014guration)f(File],)j(page)f(46\))150 3054 y(and)35 +b(the)h(k)m(eyw)m(ord)g(`)p Fo(map_type)p Fu(')e(\(see)j(Section)f +(6.4.3)i([map)p 2262 3054 28 4 v 33 w(t)m(yp)s(e)d(P)m(arameter],)k +(page)e(47\),)h(y)m(ou)e(ma)m(y)150 3163 y(force)31 b(the)g(map)f(used) +f(to)i(an)m(y)g(t)m(yp)s(e.)275 3305 y(By)26 b(default,)i +Fq(Amd)i Fu(cac)m(hes)e(data)f(in)f(a)h(mo)s(de)f(dep)s(enden)m(t)g(on) +g(the)h(t)m(yp)s(e)g(of)f(map.)39 b(This)26 b(is)h(the)g(same)150 +3414 y(as)40 b(sp)s(ecifying)g(`)p Fo(cache:=mapdefault)p +Fu(')c(and)j(selects)j(a)e(suitable)h(default)f(cac)m(he)i(mo)s(de)d +(dep)s(ending)150 3524 y(on)c(the)h(map)f(t)m(yp)s(e.)57 +b(The)35 b(individual)g(defaults)g(are)h(describ)s(ed)f(b)s(elo)m(w.)56 +b(The)35 b Fq(cac)m(he)43 b Fu(option)36 b(can)g(b)s(e)150 +3633 y(sp)s(eci\014ed)c(on)g(automoun)m(t)h(p)s(oin)m(ts)f(to)h(alter)g +(the)f(cac)m(hing)i(b)s(eha)m(vior)e(\(see)h(Section)g(5.18)h +([Automoun)m(t)150 3743 y(Filesystem],)e(page)f(42\).)275 +3884 y(The)h(follo)m(wing)i(map)e(t)m(yp)s(es)h(ha)m(v)m(e)g(b)s(een)f +(implemen)m(ted,)i(though)f(some)g(are)g(not)g(a)m(v)-5 +b(ailable)35 b(on)d(all)150 3994 y(mac)m(hines.)68 b(Run)38 +b(the)i(command)f(`)p Fo(amd)30 b(-v)p Fu(')39 b(to)h(obtain)g(a)f +(list)h(of)g(map)f(t)m(yp)s(es)g(con\014gured)g(on)g(y)m(our)150 +4104 y(mac)m(hine.)150 4342 y Fk(3.1.1)63 b(File)41 b(maps)275 +4541 y Fu(When)28 b Fq(Amd)k Fu(searc)m(hes)d(a)g(\014le)g(for)g(a)g +(map)f(en)m(try)h(it)g(do)s(es)g(a)g(simple)f(scan)h(of)g(the)g(\014le) +g(and)f(supp)s(orts)150 4651 y(b)s(oth)i(commen)m(ts)h(and)f(con)m(tin) +m(uation)i(lines.)275 4792 y(Con)m(tin)m(uation)j(lines)h(are)f +(indicated)g(b)m(y)g(a)g(bac)m(kslash)h(c)m(haracter)g(\(`)p +Fo(\\)p Fu('\))g(as)f(the)g(last)g(c)m(haracter)i(of)150 +4902 y(a)j(line)g(in)g(the)f(\014le.)69 b(The)40 b(bac)m(kslash,)i +(newline)e(c)m(haracter)h Fq(and)f(an)m(y)g(leading)g(white)g(space)g +(on)g(the)150 5011 y(follo)m(wing)e(line)k Fu(are)36 +b(discarded.)58 b(A)37 b(maxim)m(um)f(line)h(length)f(of)h(2047)h(c)m +(haracters)g(is)e(enforced)g(after)150 5121 y(con)m(tin)m(uation)g +(lines)e(are)g(read)g(but)f(b)s(efore)g(commen)m(ts)i(are)f(stripp)s +(ed.)50 b(Eac)m(h)34 b(line)g(m)m(ust)g(end)f(with)h(a)150 +5230 y(newline)27 b(c)m(haracter;)i(that)f(is)e(newlines)h(are)g +(terminators,)h(not)f(separators.)40 b(The)26 b(follo)m(wing)i +(examples)150 5340 y(illustrate)k(this:)p eop +%%Page: 15 17 +15 16 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(15)390 366 y Fo(key)238 b(valA)142 b(valB;)g(\\)867 +470 y(valC)275 607 y Fu(sp)s(eci\014es)30 b Fq(three)35 +b Fu(lo)s(cations,)d(and)e(is)g(iden)m(tical)j(to)390 +738 y Fo(key)238 b(valA)142 b(valB;)g(valC)275 875 y +Fu(Ho)m(w)m(ev)m(er,)390 1006 y Fo(key)238 b(valA)142 +b(valB;\\)867 1110 y(valC)275 1247 y Fu(sp)s(eci\014es)30 +b(only)g Fq(t)m(w)m(o)36 b Fu(lo)s(cations,)c(and)e(is)h(iden)m(tical)h +(to)390 1378 y Fo(key)238 b(valA)142 b(valB;valC)275 +1514 y Fu(After)33 b(a)h(complete)h(line)f(has)g(b)s(een)e(read)i(from) +f(the)h(\014le,)g(including)g(con)m(tin)m(uations,)i +Fq(Amd)g Fu(deter-)150 1624 y(mines)41 b(whether)g(there)g(is)h(a)f +(commen)m(t)i(on)e(the)g(line.)74 b(A)42 b(commen)m(t)g(b)s(egins)f +(with)g(a)h(hash)e(\(\\`)p Fo(#)p Fu('"\))150 1734 y(c)m(haracter)e +(and)e(con)m(tin)m(ues)i(to)g(the)f(end)f(of)g(the)h(line.)60 +b(There)37 b(is)f(no)h(w)m(a)m(y)h(to)f(escap)s(e)g(or)g(c)m(hange)h +(the)150 1843 y(commen)m(t)31 b(lead-in)g(c)m(haracter.)275 +1980 y(Note)39 b(that)g(con)m(tin)m(uation)h(lines)f(and)e(commen)m(t)j +(supp)s(ort)c Fq(only)46 b Fu(apply)38 b(to)h(\014le)f(maps,)i(or)f +(ndbm)150 2090 y(maps)30 b(built)g(with)g(the)h Fo(mk-amd-map)c +Fu(program.)275 2226 y(When)32 b(cac)m(hing)h(is)g(enabled,)g(\014le)f +(maps)g(ha)m(v)m(e)i(a)f(default)f(cac)m(he)i(mo)s(de)e(of)g +Fo(all)g Fu(\(see)h(Section)g(5.18)150 2336 y([Automoun)m(t)e +(Filesystem],)h(page)f(42\).)150 2565 y Fk(3.1.2)63 b(ndbm)41 +b(maps)275 2760 y Fu(An)f(ndbm)g(map)h(ma)m(y)h(b)s(e)e(used)h(as)g(a)h +(fast)g(access)g(form)f(of)h(a)f(\014le)h(map.)73 b(The)41 +b(program,)j Fo(mk-)150 2869 y(amd-map)p Fu(,)34 b(con)m(v)m(erts)i(a)g +(normal)e(map)h(\014le)g(in)m(to)h(an)e(ndbm)f(database.)55 +b(This)34 b(program)h(supp)s(orts)e(the)150 2979 y(same)39 +b(con)m(tin)m(uation)i(and)e(commen)m(t)h(con)m(v)m(en)m(tions)h(that)e +(are)h(pro)m(vided)e(for)h(\014le)g(maps.)66 b(Note)40 +b(that)150 3089 y(ndbm)30 b(format)j(\014les)f(ma)m(y)h +Fq(not)i Fu(b)s(e)c(sharable)h(across)h(mac)m(hine)g(arc)m(hitectures.) +48 b(The)32 b(notion)g(of)h(sp)s(eed)150 3198 y(generally)i(only)f +(applies)f(to)i(large)f(maps;)h(a)f(small)g(map,)h(less)e(than)h(a)g +(single)g(disk)f(blo)s(c)m(k,)i(is)f(almost)150 3308 +y(certainly)e(b)s(etter)e(implemen)m(ted)h(as)f(a)h(\014le)g(map.)275 +3445 y(ndbm)20 b(maps)i(ha)m(v)m(e)i(a)f(default)f(cac)m(he)i(mo)s(de)e +(of)h(`)p Fo(all)p Fu(')f(\(see)i(Section)f(5.18)h([Automoun)m(t)f +(Filesystem],)150 3554 y(page)31 b(42\).)150 3783 y Fk(3.1.3)63 +b(NIS)40 b(maps)275 3978 y Fu(When)26 b(using)g(NIS)f(\(formerly)i +(YP\),)g(an)f Fq(Amd)k Fu(map)c(is)g(implemen)m(ted)h(directly)g(b)m(y) +f(the)h(underlying)150 4088 y(NIS)39 b(map.)68 b(Commen)m(ts)40 +b(and)f(con)m(tin)m(uation)i(lines)f(are)g Fq(not)i Fu(supp)s(orted)37 +b(in)i(the)h(automoun)m(ter)h(and)150 4197 y(m)m(ust)30 +b(b)s(e)g(stripp)s(ed)f(when)g(constructing)i(the)g(NIS)f(serv)m(er's)g +(database.)275 4334 y(NIS)h(maps)h(ha)m(v)m(e)h(a)g(default)f(cac)m(he) +i(mo)s(de)e(of)g Fo(all)f Fu(\(see)i(Section)g(5.18)h([Automoun)m(t)f +(Filesystem],)150 4444 y(page)e(42\).)275 4580 y(The)f(follo)m(wing)i +(rule)f(illustrates)h(what)f(could)g(b)s(e)f(added)g(to)i(y)m(our)f +(NIS)f(`)p Fo(Makefile)p Fu(',)f(in)i(this)g(case)150 +4690 y(causing)g(the)f(`)p Fo(amd.home)p Fu(')f(map)h(to)h(b)s(e)f +(rebuilt:)390 4821 y Fo($\(YPTSDIR\)/amd.home.time)o(:)42 +b($\(ETCDIR\)/amd.home)581 4925 y(-@sed)k(-e)h("s/#.*$$//")e(-e)i +("/^$$/d")f($\(ETCDIR\)/amd.home)d(|)k(\\)676 5029 y(awk)g('{)95 +b(\\)820 5132 y(for)46 b(\(i)i(=)f(1;)g(i)h(<=)f(NF;)g(i++\))f(\\)1010 +5236 y(if)i(\(i)f(==)g(NF\))g({)g(\\)1010 5340 y(if)h(\(substr\($$i,)c +(length\($$i\),)h(1\))i(==)g("\\\\"\))f(\\)p eop +%%Page: 16 18 +16 17 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(16)1201 366 y Fo(printf\("\045s",)45 b(substr\($$i,)g(1,) +i(length\($$i\))d(-)k(1\)\);)f(\\)1010 470 y(else)g(\\)1201 +574 y(printf\("\045s\\n",)d($$i\);)j(\\)1010 678 y(})h(\\)1010 +782 y(else)f(\\)1010 885 y(printf\("\045s)e(",)j($$i\);)e(\\)820 +989 y(}')h(|)g(\\)581 1093 y($\(MAKEDBM\))e(-)i($\(YPDBDIR\)/amd.home;) +c(\\)581 1197 y(touch)j($\(YPTSDIR\)/amd.home.time;)41 +b(\\)581 1300 y(echo)47 b("updated)e(amd.home";)g(\\)581 +1404 y(if)i([)h(!)f($\(NOPUSH\))e(];)i(then)g(\\)772 +1508 y($\(YPPUSH\))e(amd.home;)g(\\)772 1612 y(echo)h("pushed)g +(amd.home";)f(\\)581 1716 y(else)i(\\)772 1819 y(:)g(;)h(\\)581 +1923 y(fi)275 2055 y Fu(Here)20 b Fo($\(YPTSDIR\))e Fu(con)m(tains)k +(the)e(time)h(stamp)f(\014les,)j(and)d Fo($\(YPDBDIR\))d +Fu(con)m(tains)22 b(the)f(dbm)e(format)150 2164 y(NIS)30 +b(\014les.)150 2380 y Fk(3.1.4)63 b(NIS)p Fj(+)41 b Fk(maps)275 +2569 y Fu(NIS)p Fo(+)22 b Fu(maps)g(do)h(not)h(supp)s(ort)d(cac)m(he)k +(mo)s(de)d(`)p Fo(all)p Fu(')h(and,)h(when)f(cac)m(hing)h(is)f +(enabled,)i(ha)m(v)m(e)f(a)g(default)150 2679 y(cac)m(he)32 +b(mo)s(de)e(of)g(`)p Fo(inc)p Fu('.)275 2810 y(XXX:)h(FILL)f(IN)g(WITH) +g(AN)h(EXAMPLE.)150 3026 y Fk(3.1.5)63 b(Hesio)s(d)42 +b(maps)275 3215 y Fu(When)23 b(the)g(map)g(name)g(b)s(egins)g(with)g +(the)h(string)f(`)p Fo(hesiod.)p Fu(')f(lo)s(okups)g(are)i(made)g +(using)e(the)i Fq(Hesio)s(d)150 3325 y Fu(name)j(serv)m(er.)40 +b(The)26 b(string)g(follo)m(wing)j(the)e(dot)g(is)f(used)g(as)h(a)g +(name)g(quali\014er)g(and)f(is)h(prep)s(ended)d(with)150 +3434 y(the)32 b(k)m(ey)h(b)s(eing)e(lo)s(cated.)47 b(The)31 +b(en)m(tire)i(string)f(is)g(then)g(resolv)m(ed)g(in)g(the)g +Fo(automount)d Fu(con)m(text,)35 b(or)d(the)150 3544 +y Fq(amd.conf)55 b Fu(parameter)38 b(`)p Fo(hesiod_base)p +Fu(')c(\(see)39 b(Section)f(6.5.8)h([hesio)s(d)p 2640 +3544 28 4 v 32 w(base)f(P)m(arameter],)i(page)e(49\).)150 +3654 y(F)-8 b(or)31 b(example,)g(if)f(the)g(the)g(k)m(ey)h(is)f(`)p +Fo(jsp)p Fu(')g(and)g(map)f(name)h(is)g(`)p Fo(hesiod.homes)p +Fu(')e(then)h Fq(Hesio)s(d)34 b Fu(is)c(ask)m(ed)150 +3763 y(to)h(resolv)m(e)h(`)p Fo(jsp.homes.automount)p +Fu('.)275 3895 y(Hesio)s(d)39 b(maps)g(do)g(not)h(supp)s(ort)d(cac)m +(he)k(mo)s(de)e(`)p Fo(all)p Fu(')g(and,)j(when)c(cac)m(hing)j(is)e +(enabled,)j(ha)m(v)m(e)f(a)150 4004 y(default)31 b(cac)m(he)h(mo)s(de)d +(of)i(`)p Fo(inc)p Fu(')f(\(see)h(Section)g(5.18)h([Automoun)m(t)g +(Filesystem],)g(page)f(42\).)275 4136 y(The)e(follo)m(wing)j(is)f(an)f +(example)h(of)g(a)f Fq(Hesio)s(d)k Fu(map)c(en)m(try:)390 +4261 y Fo(jsp.homes.automount)43 b(HS)k(TXT)g("rfs:=/home/charm;rhost)o +(:=ch)o(arm)o(;sub)o(link)o(:=j)o(sp")390 4365 y(njw.homes.automount)c +(HS)k(TXT)g("rfs:=/home/dylan/dk2;r)o(host)o(:=d)o(ylan)o(;sub)o(lin)o +(k:=n)o(jw")p 3976 4385 42 84 v 150 4580 a Fk(3.1.6)63 +b(P)m(assw)m(ord)40 b(maps)275 4770 y Fu(The)28 b(passw)m(ord)g(map)g +(supp)s(ort)f(is)h(unlik)m(e)h(the)g(four)f(previous)g(map)g(t)m(yp)s +(es.)40 b(When)29 b(the)g(map)f(name)150 4880 y(is)c(the)g(string)f(`)p +Fo(/etc/passwd)p Fu(')f Fq(Amd)k Fu(can)e(lo)s(okup)g(a)g(user)f(name)h +(in)f(the)h(passw)m(ord)f(\014le)h(and)f(re-arrange)150 +4989 y(the)31 b(home)f(directory)h(\014eld)f(to)h(pro)s(duce)e(a)i +(usable)f(map)g(en)m(try)-8 b(.)275 5121 y Fq(Amd)38 +b Fu(assumes)d(the)g(home)g(directory)h(has)f(the)g(format)h(`)p +Fo(/)p Fq(an)m(ydir)7 b Fo(/)p Fq(dom1)g Fo(/../)p Fq(domN)j +Fo(/)p Fq(login)p Fu('.)54 b(It)150 5230 y(breaks)27 +b(this)f(string)h(in)m(to)h(a)f(map)f(en)m(try)h(where)f +Fo(${rfs})g Fu(has)g(the)h(v)-5 b(alue)27 b(`)p Fo(/)p +Fq(an)m(ydir)7 b Fo(/)p Fq(domN)j Fu(',)26 b Fo(${rhost})150 +5340 y Fu(has)k(the)h(v)-5 b(alue)31 b(`)p Fq(domN)10 +b Fo(.)p Fq(...)p Fo(.)p Fq(dom1)d Fu(',)31 b(and)f Fo(${sublink})d +Fu(has)j(the)h(v)-5 b(alue)31 b Fq(login)p Fu(.)p eop +%%Page: 17 19 +17 18 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(17)275 366 y(Th)m(us)29 b(if)h(the)h(passw)m(ord)e +(\014le)i(en)m(try)g(w)m(as)390 497 y Fo(/home/achilles/jsp)275 +634 y Fu(the)f(map)g(en)m(try)h(used)e(b)m(y)i Fq(Amd)i +Fu(w)m(ould)d(b)s(e)390 764 y Fo(rfs:=/home/achilles;rhos)o(t:=a)o +(chil)o(les)o(;sub)o(link)o(:=j)o(sp)275 901 y Fu(Similarly)-8 +b(,)31 b(if)f(the)h(passw)m(ord)e(\014le)i(en)m(try)f(w)m(as)390 +1031 y Fo(/home/cc/sugar/mjh)275 1168 y Fu(the)g(map)g(en)m(try)h(used) +e(b)m(y)i Fq(Amd)i Fu(w)m(ould)d(b)s(e)390 1298 y Fo +(rfs:=/home/sugar;rhost:=)o(suga)o(r.cc)o(;su)o(blin)o(k:=j)o(sp)150 +1527 y Fk(3.1.7)63 b(Union)42 b(maps)275 1721 y Fu(The)37 +b(union)g(map)h(supp)s(ort)e(is)i(pro)m(vided)f(sp)s(eci\014cally)i +(for)f(use)f(with)h(the)g(union)f(\014lesystem,)j(see)150 +1831 y(Section)31 b(5.20)h([Union)f(Filesystem],)h(page)f(44.)275 +1967 y(It)44 b(is)g(iden)m(ti\014ed)g(b)m(y)f(the)i(string)f(`)p +Fo(union:)p Fu(')e(whic)m(h)i(is)g(follo)m(w)m(ed)i(b)m(y)d(a)i(colon)g +(separated)f(list)h(of)150 2077 y(directories.)k(The)33 +b(directories)h(are)f(read)g(in)g(order,)g(and)f(the)i(names)e(of)i +(all)f(en)m(tries)h(are)f(recorded)g(in)150 2186 y(the)j(map)f(cac)m +(he.)58 b(Later)36 b(directories)g(tak)m(e)h(precedence)f(o)m(v)m(er)h +(earlier)g(ones.)56 b(The)35 b(union)g(\014lesystem)150 +2296 y(t)m(yp)s(e)c(then)f(uses)g(the)g(map)g(cac)m(he)i(to)f +(determine)g(the)f(union)g(of)g(the)h(names)f(in)g(all)h(the)g +(directories.)150 2524 y Fk(3.1.8)63 b(LD)m(AP)39 b(maps)275 +2719 y Fu(LD)m(AP)32 b(\(Ligh)m(t)m(w)m(eigh)m(t)j(Directory)e(Access)f +(Proto)s(col\))i(maps)d(do)g(not)h(supp)s(ort)e(cac)m(he)j(mo)s(de)e(`) +p Fo(all)p Fu(')150 2828 y(and,)f(when)f(cac)m(hing)j(is)f(enabled,)f +(ha)m(v)m(e)i(a)f(default)f(cac)m(he)i(mo)s(de)e(of)g(`)p +Fo(inc)p Fu('.)275 2965 y(F)-8 b(or)31 b(example,)g(an)f +Fq(Amd)k Fu(map)c(`)p Fo(amd.home)p Fu(')e(that)j(lo)s(oks)g(as)g +(follo)m(ws:)390 3095 y Fo(/defaults)188 b(opts:=rw,intr;type:=link)390 +3303 y(zing)428 b(-rhost:=shekel)44 b(\\)1010 3407 y(host==shekel)h(\\) +1010 3510 y(host!=shekel;type:=nfs)150 3647 y Fu(when)27 +b(con)m(v)m(erted)j(to)f(LD)m(AP)f(\(see)h(Section)g(10.3)h([amd2ldif)7 +b(],)29 b(page)g(84\),)h(will)e(result)g(in)g(the)g(follo)m(wing)150 +3756 y(LD)m(AP)j(database:)390 3887 y Fo($)47 b(amd2ldif)f(amd.home)g +(CUCS)g(<)i(amd.home)390 3991 y(dn:)f(cn=amdmap)e(timestamp,)g(CUCS)390 +4095 y(cn)620 b(:)47 b(amdmap)f(timestamp)390 4198 y(objectClass)188 +b(:)47 b(amdmapTimestamp)390 4302 y(amdmapTimestamp:)c(873071363)390 +4510 y(dn:)k(cn=amdmap)e(amd.home[/defaults],)d(CUCS)390 +4614 y(cn)477 b(:)47 b(amdmap)f(amd.home[/defaults])390 +4717 y(objectClass)f(:)i(amdmap)390 4821 y(amdmapName)93 +b(:)47 b(amd.home)390 4925 y(amdmapKey)141 b(:)47 b(/defaults)390 +5029 y(amdmapValue)e(:)i(opts:=rw,intr;type:=link)390 +5236 y(dn:)g(cn=amdmap)e(amd.home[],)g(CUCS)390 5340 +y(cn)477 b(:)47 b(amdmap)f(amd.home[])p eop +%%Page: 18 20 +18 19 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(18)390 366 y Fo(objectClass)45 b(:)i(amdmap)390 +470 y(amdmapName)93 b(:)47 b(amd.home)390 574 y(amdmapKey)141 +b(:)390 678 y(amdmapValue)45 b(:)390 885 y(dn:)i(cn=amdmap)e +(amd.home[zing],)f(CUCS)390 989 y(cn)477 b(:)47 b(amdmap)f +(amd.home[zing])390 1093 y(objectClass)f(:)i(amdmap)390 +1197 y(amdmapName)93 b(:)47 b(amd.home)390 1300 y(amdmapKey)141 +b(:)47 b(zing)390 1404 y(amdmapValue)e(:)i(-rhost:=shekel)d +(host==shekel)h(host!=shekel;type:=nfs)150 1661 y Ft(3.2)68 +b(Ho)l(w)46 b(k)l(eys)f(are)h(lo)t(ok)l(ed)f(up)275 1853 +y Fu(The)34 b(k)m(ey)i(is)f(lo)s(cated)i(in)e(the)g(map)g(whose)g(t)m +(yp)s(e)g(w)m(as)h(determined)e(when)h(the)g(automoun)m(t)h(p)s(oin)m +(t)150 1963 y(w)m(as)29 b(\014rst)e(created.)41 b(In)28 +b(general)h(the)g(k)m(ey)g(is)f(a)h(pathname)f(comp)s(onen)m(t.)41 +b(In)27 b(some)i(circumstances)g(this)150 2073 y(ma)m(y)38 +b(b)s(e)e(mo)s(di\014ed)h(b)m(y)g(v)-5 b(ariable)38 b(expansion)f +(\(see)h(Section)g(3.3.2)h([V)-8 b(ariable)39 b(Expansion],)g(page)f +(19\))150 2182 y(and)30 b(pre\014xing.)42 b(If)31 b(the)g(automoun)m(t) +h(p)s(oin)m(t)f(has)g(a)h(pre\014x,)e(sp)s(eci\014ed)g(b)m(y)h(the)h +Fq(pref)48 b Fu(option,)32 b(then)e(that)150 2292 y(is)g(prep)s(ended)f +(to)i(the)f(searc)m(h)h(k)m(ey)g(b)s(efore)f(the)h(map)f(is)g(searc)m +(hed.)275 2426 y(If)36 b(the)g(map)g(cac)m(he)i(is)f(a)g(`)p +Fo(regexp)p Fu(')e(cac)m(he)j(then)e(the)h(k)m(ey)g(is)g(treated)g(as)g +(an)f(egrep-st)m(yle)j(regular)150 2536 y(expression,)30 +b(otherwise)h(a)g(normal)f(string)h(comparison)f(is)h(made.)275 +2670 y(If)e(the)i(k)m(ey)g(cannot)g(b)s(e)e(found)g(then)h(a)h +Fq(wildcard)i Fu(matc)m(h)f(is)e(attempted.)42 b Fq(Amd)33 +b Fu(rep)s(eatedly)e(strips)150 2780 y(the)k(basename)f(from)g(the)h(k) +m(ey)-8 b(,)37 b(app)s(ends)32 b(`)p Fo(/*)p Fu(')j(and)f(attempts)h(a) +g(lo)s(okup.)52 b(Finally)-8 b(,)38 b Fq(Amd)f Fu(attempts)150 +2889 y(to)31 b(lo)s(cate)h(the)f(sp)s(ecial)g(k)m(ey)g(`)p +Fo(*)p Fu('.)275 3023 y(F)-8 b(or)37 b(example,)i(the)e(follo)m(wing)h +(sequence)f(w)m(ould)f(b)s(e)g(c)m(hec)m(k)m(ed)j(if)d(`)p +Fo(home/dylan/dk2)p Fu(')d(w)m(as)k(b)s(eing)150 3133 +y(lo)s(cated:)533 3262 y Fo(home/dylan/dk2)533 3365 y(home/dylan/*)533 +3469 y(home/*)533 3573 y(*)275 3707 y Fu(A)m(t)f(an)m(y)g(p)s(oin)m(t)f +(when)g(a)h(wildcard)f(is)g(found,)h Fq(Amd)j Fu(pro)s(ceeds)c(as)g(if) +h(an)f(exact)i(matc)m(h)g(had)e(b)s(een)150 3817 y(found)26 +b(and)g(the)h(v)-5 b(alue)28 b(\014eld)e(is)h(then)g(used)f(to)i +(resolv)m(e)h(the)e(moun)m(t)g(request,)h(otherwise)f(an)g(error)g(co)s +(de)150 3926 y(is)j(propagated)h(bac)m(k)h(to)f(the)f(k)m(ernel.)41 +b(\(see)32 b(Chapter)e(5)g([Filesystem)i(T)m(yp)s(es],)f(page)g(36\).) +150 4183 y Ft(3.3)68 b(Lo)t(cation)46 b(F)-11 b(ormat)275 +4375 y Fu(The)25 b(v)-5 b(alue)26 b(\014eld)f(from)g(the)h(lo)s(okup)f +(pro)m(vides)g(the)h(information)g(required)f(to)h(moun)m(t)f(a)h +(\014lesystem.)150 4485 y(The)k(information)h(is)f(parsed)g(according)h +(to)g(the)g(syn)m(tax)g(sho)m(wn)e(b)s(elo)m(w.)390 4614 +y Fq(lo)s(cation-list)r Fu(:)935 4717 y Fq(lo)s(cation-selection)935 +4821 y(lo)s(cation-list)35 b(white-space)i Fo(||)30 b +Fq(white-space)36 b(lo)s(cation-selection)390 4925 y(lo)s +(cation-selection)p Fu(:)935 5029 y Fq(lo)s(cation)935 +5132 y(lo)s(cation-selection)f(white-space)h(lo)s(cation)390 +5236 y(lo)s(cation)p Fu(:)935 5340 y Fq(lo)s(cation-info)p +eop +%%Page: 19 21 +19 20 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(19)935 366 y Fo(-)p Fq(lo)s(cation-info)935 +470 y Fo(-)390 574 y Fq(lo)s(cation-info)5 b Fu(:)935 +678 y Fq(sel-or-opt)935 782 y(lo)s(cation-info)g Fo(;)p +Fq(sel-or-opt)935 885 y Fo(;)390 989 y Fq(sel-or-opt)r +Fu(:)935 1093 y Fq(selection)935 1197 y(opt-ass)390 1300 +y(selection)p Fu(:)935 1404 y(selector)p Fo(==)p Fq(v)-5 +b(alue)935 1508 y Fu(selector)p Fo(!=)p Fq(v)g(alue)390 +1612 y(opt-ass)t Fu(:)935 1716 y(option)p Fo(:=)p Fq(v)g(alue)390 +1819 y(white-space)5 b Fu(:)935 1923 y(space)935 2027 +y(tab)275 2166 y(Note)32 b(that)g(unquoted)e(whitespace)i(is)g(not)f +(allo)m(w)m(ed)i(in)e(a)h(lo)s(cation)h(description.)43 +b(White)32 b(space)g(is)150 2276 y(only)e(allo)m(w)m(ed,)j(and)d(is)g +(mandatory)-8 b(,)31 b(where)f(sho)m(wn)g(with)g(non-terminal)h +Fq(white-space)p Fu(.)275 2415 y(A)47 b Fq(lo)s(cation-selection)k +Fu(is)c(a)g(list)h(of)g(p)s(ossible)e(v)m(olumes)i(with)f(whic)m(h)g +(to)h(satisfy)f(the)h(request.)150 2525 y Fq(lo)s(cation-selection)p +Fu(s)e(are)d(separated)g(b)m(y)f(the)g(`)p Fo(||)p Fu(')h(op)s(erator.) +77 b(The)41 b(e\013ect)j(of)f(this)f(op)s(erator)h(is)f(to)150 +2634 y(prev)m(en)m(t)27 b(use)g(of)g(lo)s(cation-selections)j(to)e(its) +f(righ)m(t)h(if)e(an)m(y)i(of)f(the)g(lo)s(cation-selections)j(on)d +(its)g(left)g(w)m(ere)150 2744 y(selected)e(whether)f(or)g(not)g(an)m +(y)g(of)g(them)g(w)m(ere)h(successfully)f(moun)m(ted)g(\(see)g(Section) +h(3.3.3)h([Selectors],)150 2854 y(page)31 b(20\).)275 +2993 y(The)f(lo)s(cation-selection,)35 b(and)30 b(singleton)i +Fq(lo)s(cation-list)p Fu(,)h(`)p Fo(type:=ufs;dev:=/dev/xd1g)p +Fu(')25 b(w)m(ould)150 3103 y(inform)30 b Fq(Amd)j Fu(to)e(moun)m(t)f +(a)h(UFS)g(\014lesystem)f(from)g(the)h(blo)s(c)m(k)g(sp)s(ecial)g +(device)g(`)p Fo(/dev/xd1g)p Fu('.)275 3242 y(The)20 +b Fq(sel-or-opt)k Fu(comp)s(onen)m(t)e(is)f(either)g(the)g(name)h(of)f +(an)g(option)g(required)f(b)m(y)h(a)h(sp)s(eci\014c)e(\014lesystem,)150 +3352 y(or)31 b(it)g(is)f(the)h(name)g(of)f(a)h(built-in,)g +(prede\014ned)e(selector)j(suc)m(h)e(as)h(the)g(arc)m(hitecture)h(t)m +(yp)s(e.)41 b(The)30 b(v)-5 b(alue)150 3461 y(ma)m(y)45 +b(b)s(e)f(quoted)h(with)f(double)g(quotes)i(`)p Fo(")p +Fu(',)i(for)d(example)g(`)p Fo(type:="ufs";dev:="/dev/xd)o(1g")o +Fu('.)150 3571 y(These)37 b(quotes)h(are)g(stripp)s(ed)e(when)h(the)g +(v)-5 b(alue)38 b(is)g(parsed)f(and)f(there)i(is)g(no)f(w)m(a)m(y)i(to) +f(get)g(a)g(double)150 3680 y(quote)29 b(in)m(to)g(a)g(v)-5 +b(alue)28 b(\014eld.)40 b(Double)29 b(quotes)g(are)f(used)g(to)h(get)g +(white)f(space)h(in)m(to)g(a)g(v)-5 b(alue)29 b(\014eld,)f(whic)m(h)150 +3790 y(is)i(needed)g(for)h(the)f(program)g(\014lesystem)h(\(see)g +(Section)g(5.14)h([Program)f(Filesystem],)h(page)g(40\).)150 +4024 y Fk(3.3.1)63 b(Map)41 b(Defaults)275 4221 y Fu(A)e(lo)s(cation)i +(b)s(eginning)e(with)g(a)h(dash)f(`)p Fo(-)p Fu(')h(is)f(used)g(to)i +(sp)s(ecify)e(default)g(v)-5 b(alues)40 b(for)g(subsequen)m(t)150 +4331 y(lo)s(cations.)48 b(An)m(y)33 b(previously)f(sp)s(eci\014ed)g +(defaults)g(in)g(the)h(lo)s(cation-list)i(are)e(discarded.)46 +b(The)32 b(default)150 4440 y(string)e(can)h(b)s(e)f(empt)m(y)h(in)f +(whic)m(h)g(case)h(no)f(defaults)h(apply)-8 b(.)275 4580 +y(The)24 b(lo)s(cation)i(`)p Fo(-fs:=/mnt;opts:=ro)p +Fu(')20 b(w)m(ould)k(set)h(the)g(lo)s(cal)g(moun)m(t)g(p)s(oin)m(t)f +(to)i(`)p Fo(/mnt)p Fu(')d(and)h(cause)150 4689 y(moun)m(ts)38 +b(to)h(b)s(e)f(read-only)g(b)m(y)h(default.)64 b(Defaults)40 +b(sp)s(eci\014ed)d(this)h(w)m(a)m(y)i(are)e(app)s(ended)f(to,)k(and)d +(so)150 4799 y(o)m(v)m(erride,)32 b(an)m(y)e(global)i(map)e(defaults)h +(giv)m(en)g(with)f(`)p Fo(/defaults)p Fu('\).)150 5033 +y Fk(3.3.2)63 b(V)-10 b(ariable)40 b(Expansion)275 5230 +y Fu(T)-8 b(o)35 b(allo)m(w)i(generic)g(lo)s(cation)g(sp)s +(eci\014cations)f Fq(Amd)i Fu(do)s(es)d(v)-5 b(ariable)36 +b(expansion)f(on)h(eac)m(h)g(lo)s(cation)150 5340 y(and)31 +b(also)h(on)g(some)f(of)h(the)g(option)f(strings.)44 +b(An)m(y)32 b(option)g(or)f(selector)i(app)s(earing)e(in)g(the)h(form)f +Fo($)p Fq(v)-5 b(ar)p eop +%%Page: 20 22 +20 21 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(20)150 366 y(is)39 b(replaced)h(b)m(y)g(the)f(curren)m(t) +g(v)-5 b(alue)40 b(of)g(that)g(option)f(or)h(selector.)69 +b(F)-8 b(or)40 b(example,)j(if)c(the)h(v)-5 b(alue)40 +b(of)150 476 y Fo(${key})31 b Fu(w)m(as)i(`)p Fo(bin)p +Fu(',)h Fo(${autodir})c Fu(w)m(as)j(`)p Fo(/a)p Fu(')f(and)h +Fo(${fs})e Fu(w)m(as)i(`)p Fo(${autodir}/local/${key})p +Fu(')27 b(then)150 586 y(after)e(expansion)g Fo(${fs})f +Fu(w)m(ould)h(ha)m(v)m(e)h(the)f(v)-5 b(alue)25 b(`)p +Fo(/a/local/bin)p Fu('.)36 b(An)m(y)25 b(en)m(vironmen)m(t)h(v)-5 +b(ariable)26 b(can)150 695 y(b)s(e)k(accessed)h(in)f(a)h(similar)g(w)m +(a)m(y)-8 b(.)275 835 y(Tw)m(o)29 b(pathname)h(op)s(erators)g(are)g(a)m +(v)-5 b(ailable)32 b(when)c(expanding)h(a)h(v)-5 b(ariable.)42 +b(If)29 b(the)g(v)-5 b(ariable)31 b(name)150 944 y(b)s(egins)e(with)f +(`)p Fo(/)p Fu(')h(then)g(only)g(the)h(last)g(comp)s(onen)m(t)f(of)g +(the)g(pathname)g(is)g(substituted.)40 b(F)-8 b(or)30 +b(example,)150 1054 y(if)38 b Fo(${path})e Fu(w)m(as)i(`)p +Fo(/foo/bar)p Fu(')e(then)i Fo(${/path})e Fu(w)m(ould)i(b)s(e)f +(expanded)g(to)i(`)p Fo(bar)p Fu('.)63 b(Similarly)-8 +b(,)41 b(if)d(the)150 1164 y(v)-5 b(ariable)27 b(name)f(ends)f(with)g +(`)p Fo(/)p Fu(')i(then)e(all)i(but)e(the)h(last)h(comp)s(onen)m(t)f +(of)g(the)h(pathname)e(is)h(substituted.)150 1273 y(In)k(the)g +(previous)g(example,)h Fo(${path/})e Fu(w)m(ould)h(b)s(e)f(expanded)h +(to)h(`)p Fo(/foo)p Fu('.)275 1413 y(Tw)m(o)40 b(domain)f(name)h(op)s +(erators)g(are)g(also)h(pro)m(vided.)69 b(If)39 b(the)h(v)-5 +b(ariable)41 b(name)f(b)s(egins)f(with)h(`)p Fo(.)p Fu(')150 +1522 y(then)k(only)h(the)f(domain)g(part)g(of)h(the)f(name)h(is)f +(substituted.)82 b(F)-8 b(or)45 b(example,)k(if)44 b +Fo(${rhost})f Fu(w)m(as)150 1632 y(`)p Fo(swan.doc.ic.ac.uk)p +Fu(')33 b(then)38 b Fo(${.rhost})d Fu(w)m(ould)i(b)s(e)g(expanded)f(to) +j(`)p Fo(doc.ic.ac.uk)p Fu('.)59 b(Similarly)-8 b(,)150 +1742 y(if)40 b(the)g(v)-5 b(ariable)41 b(name)f(ends)g(with)g(`)p +Fo(.)p Fu(')g(then)g(only)g(the)g(host)g(comp)s(onen)m(t)h(is)f +(substituted.)69 b(In)40 b(the)150 1851 y(previous)30 +b(example,)h Fo(${rhost.})d Fu(w)m(ould)i(b)s(e)g(expanded)f(to)j(`)p +Fo(swan)p Fu('.)275 1991 y(V)-8 b(ariable)32 b(expansion)f(is)h(a)f(t)m +(w)m(o)i(phase)e(pro)s(cess.)43 b(Before)32 b(a)f(lo)s(cation)i(is)f +(parsed,)f(all)h(references)f(to)150 2100 y(selectors,)j +Fq(eg)41 b Fo(${path})p Fu(,)31 b(are)h(expanded.)45 +b(The)31 b(lo)s(cation)j(is)e(then)g(parsed,)g(selections)h(are)g(ev)-5 +b(aluated)150 2210 y(and)42 b(option)g(assignmen)m(ts)h(recorded.)77 +b(If)42 b(there)g(w)m(ere)h(no)f(selections)i(or)e(they)h(all)g +(succeeded)g(the)150 2320 y(lo)s(cation)38 b(is)f(used)f(and)h(the)g(v) +-5 b(alues)37 b(of)g(the)g(follo)m(wing)h(options)f(are)h(expanded)e +(in)g(the)h(order)g(giv)m(en:)150 2429 y Fq(sublink)p +Fu(,)29 b Fq(rfs)p Fu(,)h Fq(fs)p Fu(,)g Fq(opts)p Fu(,)h +Fq(remopts)p Fu(,)g Fq(moun)m(t)h Fu(and)e Fq(unmoun)m(t)p +Fu(.)275 2569 y(Note)h(that)f(expansion)g(of)g(option)g(v)-5 +b(alues)31 b(is)f(done)f(after)i Fq(all)j Fu(assignmen)m(ts)d(ha)m(v)m +(e)g(b)s(een)e(completed)150 2678 y(and)d(not)h(in)g(a)g(purely)f(left) +h(to)h(righ)m(t)f(order)f(as)h(is)g(done)g(b)m(y)f(the)h(shell.)40 +b(This)26 b(generally)i(has)f(the)f(desired)150 2788 +y(e\013ect)39 b(but)e(care)h(m)m(ust)f(b)s(e)g(tak)m(en)i(if)e(one)h +(of)f(the)h(options)g(references)f(another,)j(in)d(whic)m(h)g(case)i +(the)150 2897 y(ordering)30 b(can)h(b)s(ecome)g(signi\014can)m(t.)275 +3037 y(There)e(are)i(t)m(w)m(o)h(sp)s(ecial)f(cases)g(concerning)g(v)-5 +b(ariable)31 b(expansion:)199 3177 y(1.)61 b(b)s(efore)44 +b(a)g(map)g(is)g(consulted,)k(an)m(y)d(selectors)h(in)e(the)g(name)g +(receiv)m(ed)i(from)d(the)i(k)m(ernel)g(are)330 3286 +y(expanded.)e(F)-8 b(or)32 b(example,)h(if)e(the)g(request)h(from)f +(the)g(k)m(ernel)h(w)m(as)g(for)f(`)p Fo(${arch}.bin)p +Fu(')e(and)i(the)330 3396 y(mac)m(hine)g(arc)m(hitecture)h(w)m(as)f(`)p +Fo(vax)p Fu(',)f(the)h(v)-5 b(alue)30 b(giv)m(en)i(to)f +Fo(${key})e Fu(w)m(ould)h(b)s(e)g(`)p Fo(vax.bin)p Fu('.)199 +3533 y(2.)61 b(the)40 b(v)-5 b(alue)39 b(of)h Fo(${rhost})d +Fu(is)i(expanded)g(and)g(normalized)h(b)s(efore)f(the)g(other)h +(options)g(are)f(ex-)330 3642 y(panded.)e(The)20 b(normalization)j(pro) +s(cess)e(strips)g(an)m(y)h(lo)s(cal)h(sub-domain)d(comp)s(onen)m(ts.)38 +b(F)-8 b(or)22 b(exam-)330 3752 y(ple,)h(if)d Fo(${domain})e +Fu(w)m(as)i(`)p Fo(Berkeley.EDU)p Fu(')e(and)h Fo(${rhost})f +Fu(w)m(as)j(initially)h(`)p Fo(snow.Berkeley.EDU)p Fu(',)p +3775 3772 42 84 v 330 3862 a(after)j(the)g(normalization)h(it)g(w)m +(ould)e(simply)g(b)s(e)g(`)p Fo(snow)p Fu('.)38 b(Hostname)26 +b(normalization)g(is)f(curren)m(tly)330 3971 y(done)30 +b(in)g(a)h Fq(case-dep)s(enden)m(t)i Fu(manner.)150 4206 +y Fk(3.3.3)63 b(Selectors)275 4403 y Fu(Selectors)24 +b(are)g(used)e(to)i(con)m(trol)h(the)e(use)h(of)f(a)h(lo)s(cation.)40 +b(It)23 b(is)g(p)s(ossible)g(to)h(share)f(a)h(moun)m(t)f(map)g(b)s(e-) +150 4513 y(t)m(w)m(een)h(man)m(y)g(mac)m(hines)g(in)f(suc)m(h)g(a)g(w)m +(a)m(y)i(that)e(\014lesystem)h(lo)s(cation,)j(arc)m(hitecture)e(and)d +(op)s(erating)i(sys-)150 4622 y(tem)h(di\013erences)g(are)g(hidden)e +(from)i(the)f(users.)38 b(A)25 b(selector)h(of)f(the)g(form)f(`)p +Fo(arch==sun3;os==sunos4)p Fu(')150 4732 y(w)m(ould)30 +b(only)h(apply)f(on)g(Sun-3s)f(running)g(SunOS)f(4.x.)275 +4872 y(Selectors)33 b(can)f(b)s(e)f(negated)j(b)m(y)d(using)h(`)p +Fo(!=)p Fu(')g(instead)g(of)g(`)p Fo(==)p Fu('.)46 b(F)-8 +b(or)33 b(example)g(to)f(select)i(a)e(lo)s(cation)150 +4981 y(on)e(all)i(non-V)-8 b(ax)31 b(mac)m(hines)g(the)f(selector)i(`)p +Fo(arch!=vax)p Fu(')d(w)m(ould)h(b)s(e)f(used.)275 5121 +y(Selectors)d(are)f(ev)-5 b(aluated)26 b(left)g(to)g(righ)m(t.)39 +b(If)25 b(a)g(selector)i(fails)e(then)g(that)g(lo)s(cation)i(is)e +(ignored.)39 b(Th)m(us)150 5230 y(the)34 b(selectors)i(form)e(a)g +(conjunction)h(and)e(the)i(lo)s(cations)g(form)f(a)h(disjunction.)51 +b(If)34 b(all)h(the)f(lo)s(cations)150 5340 y(are)j(ignored)g(or)g +(otherwise)g(fail)h(then)e Fq(Amd)k Fu(uses)d(the)g Fq(error)43 +b Fu(\014lesystem)37 b(\(see)h(Section)f(5.21)i([Error)p +eop +%%Page: 21 23 +21 22 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(21)150 366 y(Filesystem],)34 b(page)e(44\).)45 +b(This)31 b(is)h(equiv)-5 b(alen)m(t)33 b(to)f(ha)m(ving)g(a)g(lo)s +(cation)h(`)p Fo(type:=error)p Fu(')c(at)j(the)g(end)f(of)150 +476 y(eac)m(h)h(moun)m(t-map)e(en)m(try)-8 b(.)275 604 +y(The)39 b(default)i(v)-5 b(alue)40 b(of)h(man)m(y)f(of)g(the)h +(selectors)g(listed)g(here)f(can)h(b)s(e)e(o)m(v)m(erridden)h(b)m(y)g +(an)h Fq(Amd)150 714 y Fu(command)33 b(line)g(switc)m(h)h(or)f(in)g(an) +g Fq(Amd)j Fu(con\014guration)e(\014le.)49 b(See)33 b(Chapter)g(6)h +([Amd)e(Con\014guration)150 824 y(File],)g(page)f(46.)275 +952 y(These)f(are)g(the)h(selectors)h(curren)m(tly)e(implemen)m(ted.) +150 1157 y Fk(3.3.3.1)63 b(arc)m(h)40 b(Selector)h(V)-10 +b(ariable)275 1344 y Fu(The)38 b(mac)m(hine)i(arc)m(hitecture)g(whic)m +(h)f(w)m(as)g(automatically)j(determined)d(at)g(compile)h(time.)67 +b(The)150 1454 y(arc)m(hitecture)31 b(t)m(yp)s(e)e(can)h(b)s(e)e +(displa)m(y)m(ed)i(b)m(y)f(running)f(the)h(command)g(`)p +Fo(amd)h(-v)p Fu('.)40 b(See)30 b(Chapter)e(2)i([Sup-)150 +1563 y(p)s(orted)g(Platforms],)h(page)g(11.)150 1769 +y Fk(3.3.3.2)63 b(auto)s(dir)42 b(Selector)f(V)-10 b(ariable)275 +1955 y Fu(The)33 b(default)i(directory)g(under)e(whic)m(h)h(to)h(moun)m +(t)g(\014lesystems.)53 b(This)33 b(ma)m(y)j(b)s(e)d(c)m(hanged)i(b)m(y) +g(the)150 2065 y Fo(-a)30 b Fu(command)g(line)h(option.)41 +b(See)30 b(Section)i(3.3.4.3)g([fs)f(Option],)f(page)h(25.)150 +2270 y Fk(3.3.3.3)63 b(b)m(yte)40 b(Selector)h(V)-10 +b(ariable)275 2457 y Fu(The)32 b(mac)m(hine's)i(b)m(yte)g(ordering.)48 +b(This)32 b(is)h(either)h(`)p Fo(little)p Fu(',)e(indicating)i +(little-endian,)i(or)d(`)p Fo(big)p Fu(',)150 2566 y(indicating)28 +b(big-endian.)40 b(One)27 b(p)s(ossible)g(use)g(is)g(to)h(share)f(`)p +Fo(rwho)p Fu(')g(databases)h(\(see)g(Section)h(11.5)g([rwho)150 +2676 y(serv)m(ers],)g(page)f(91\).)41 b(Another)27 b(is)h(to)g(share)f +(ndbm)f(databases,)j(ho)m(w)m(ev)m(er)g(this)e(use)g(can)h(b)s(e)f +(considered)150 2786 y(a)k(courageous)g(juggling)g(act.)150 +2991 y Fk(3.3.3.4)63 b(cluster)41 b(Selector)g(V)-10 +b(ariable)275 3178 y Fu(This)28 b(is)i(pro)m(vided)f(as)h(a)g(ho)s(ok)g +(for)f(the)h(name)f(of)h(the)g(lo)s(cal)h(cluster.)41 +b(This)28 b(can)i(b)s(e)f(used)g(to)i(decide)150 3287 +y(whic)m(h)h(serv)m(ers)h(to)g(use)f(for)h(copies)g(of)f(replicated)i +(\014lesystems.)47 b Fo(${cluster})30 b Fu(defaults)j(to)g(the)f(v)-5 +b(alue)150 3397 y(of)31 b Fo(${domain})c Fu(unless)j(a)h(di\013eren)m +(t)g(v)-5 b(alue)31 b(is)f(set)h(with)f(the)g Fo(-C)g +Fu(command)g(line)h(option.)150 3602 y Fk(3.3.3.5)63 +b(domain)42 b(Selector)f(V)-10 b(ariable)275 3789 y Fu(The)28 +b(lo)s(cal)i(domain)f(name)g(as)g(sp)s(eci\014ed)f(b)m(y)h(the)g +Fo(-d)f Fu(command)h(line)g(option.)41 b(See)29 b(Section)g(3.3.3.6)150 +3898 y([host)i(Selector)g(V)-8 b(ariable],)33 b(page)e(21.)150 +4104 y Fk(3.3.3.6)63 b(host)42 b(Selector)f(V)-10 b(ariable)275 +4290 y Fu(The)27 b(lo)s(cal)i(hostname)f(as)g(determined)g(b)m(y)g +Fm(gethostname)p Fu(\(2\).)42 b(If)28 b(no)g(domain)f(name)h(w)m(as)h +(sp)s(eci\014ed)150 4400 y(on)20 b(the)h(command)f(line)h(and)f(the)g +(hostname)h(con)m(tains)g(a)g(p)s(erio)s(d)e(`)p Fo(.)p +Fu(')i(then)f(the)g(string)h(b)s(efore)f(the)g(p)s(erio)s(d)150 +4510 y(is)38 b(used)e(as)i(the)g(host)g(name,)h(and)e(the)h(string)g +(after)g(the)f(p)s(erio)s(d)g(is)g(assigned)h(to)g Fo(${domain})p +Fu(.)60 b(F)-8 b(or)150 4619 y(example,)35 b(if)e(the)g(hostname)g(is)h +(`)p Fo(styx.doc.ic.ac.uk)p Fu(')29 b(then)j Fo(host)g +Fu(w)m(ould)h(b)s(e)g(`)p Fo(styx)p Fu(')f(and)h Fo(domain)150 +4729 y Fu(w)m(ould)d(b)s(e)g(`)p Fo(doc.ic.ac.uk)p Fu('.)38 +b Fo(hostd)29 b Fu(w)m(ould)h(b)s(e)g(`)p Fo(styx.doc.ic.ac.uk)p +Fu('.)150 4934 y Fk(3.3.3.7)63 b(hostd)42 b(Selector)f(V)-10 +b(ariable)275 5121 y Fu(This)32 b(resolv)m(es)j(to)f(the)g +Fo(${host})e Fu(and)g Fo(${domain})f Fu(concatenated)36 +b(with)d(a)h(`)p Fo(.)p Fu(')g(inserted)f(b)s(et)m(w)m(een)150 +5230 y(them)40 b(if)h(required.)70 b(If)40 b Fo(${domain})e +Fu(is)j(an)f(empt)m(y)h(string)g(then)f Fo(${host})f +Fu(and)g Fo(${hostd})g Fu(will)i(b)s(e)150 5340 y(iden)m(tical.)p +eop +%%Page: 22 24 +22 23 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(22)150 366 y Fk(3.3.3.8)63 b(k)-7 b(arc)m(h)40 +b(Selector)h(V)-10 b(ariable)275 587 y Fu(This)36 b(is)i(pro)m(vided)g +(as)g(a)g(ho)s(ok)f(for)h(the)g(k)m(ernel)g(arc)m(hitecture.)65 +b(This)37 b(is)g(used)g(on)h(SunOS)d(4)k(and)150 697 +y(SunOS)i(5,)48 b(for)43 b(example,)48 b(to)c(distinguish)f(b)s(et)m(w) +m(een)h(di\013eren)m(t)g(`)p Fo(/usr/kvm)p Fu(')e(v)m(olumes.)81 +b Fo(${karch})150 807 y Fu(defaults)32 b(to)g(the)f(\\mac)m(hine")j(v) +-5 b(alue)32 b(gotten)g(from)f Fm(uname)p Fu(\(2\).)45 +b(If)31 b(the)h Fm(uname)p Fu(\(2\))g(system)f(call)i(is)f(not)150 +916 y(a)m(v)-5 b(ailable,)34 b(the)d(v)-5 b(alue)31 b(of)g +Fo(${karch})e Fu(defaults)i(to)g(that)h(of)f Fo(${arch})p +Fu(.)40 b(Finally)-8 b(,)33 b(a)e(di\013eren)m(t)g(v)-5 +b(alue)32 b(can)150 1026 y(b)s(e)e(set)h(with)f(the)g +Fo(-k)g Fu(command)g(line)h(option.)150 1306 y Fk(3.3.3.9)63 +b(os)42 b(Selector)f(V)-10 b(ariable)275 1527 y Fu(The)31 +b(op)s(erating)h(system.)46 b(Lik)m(e)33 b(the)f(mac)m(hine)g(arc)m +(hitecture,)j(this)d(is)g(automatically)i(determined)150 +1637 y(at)j(compile)f(time.)58 b(The)36 b(op)s(erating)g(system)g(name) +g(can)g(b)s(e)g(displa)m(y)m(ed)g(b)m(y)g(running)e(the)i(command)150 +1746 y(`)p Fo(amd)30 b(-v)p Fu('.)40 b(See)31 b(Chapter)f(2)g([Supp)s +(orted)f(Platforms],)i(page)g(11.)150 2027 y Fk(3.3.3.10)63 +b(osv)m(er)42 b(Selector)f(V)-10 b(ariable)275 2248 y +Fu(The)45 b(op)s(erating)g(system)h(v)m(ersion.)87 b(Lik)m(e)46 +b(the)g(mac)m(hine)g(arc)m(hitecture,)51 b(this)46 b(is)f +(automatically)150 2358 y(determined)31 b(at)i(compile)g(time.)46 +b(The)31 b(op)s(erating)h(system)g(name)g(can)g(b)s(e)f(displa)m(y)m +(ed)i(b)m(y)f(running)e(the)150 2467 y(command)g(`)p +Fo(amd)g(-v)p Fu('.)40 b(See)31 b(Chapter)f(2)g([Supp)s(orted)f +(Platforms],)i(page)g(11.)275 2959 y(The)f(follo)m(wing)i(selectors)g +(are)g(also)f(pro)m(vided.)42 b(Unlik)m(e)32 b(the)f(other)g +(selectors,)i(they)d(v)-5 b(ary)31 b(for)g(eac)m(h)150 +3068 y(lo)s(okup.)39 b(Note)28 b(that)f(when)e(the)h(name)h(from)f(the) +g(k)m(ernel)h(is)f(expanded)g(prior)g(to)h(a)f(map)g(lo)s(okup,)h +(these)150 3178 y(selectors)32 b(are)f(all)g(de\014ned)e(as)i(empt)m(y) +f(strings.)150 3459 y Fk(3.3.3.11)63 b(k)m(ey)40 b(Selector)h(V)-10 +b(ariable)275 3679 y Fu(The)26 b(name)h(b)s(eing)g(resolv)m(ed.)40 +b(F)-8 b(or)28 b(example,)h(if)e(`)p Fo(/home)p Fu(')f(is)h(an)g +(automoun)m(t)h(p)s(oin)m(t,)g(then)e(accessing)150 3789 +y(`)p Fo(/home/foo)p Fu(')32 b(w)m(ould)h(set)h Fo(${key})e +Fu(to)i(the)g(string)f(`)p Fo(foo)p Fu('.)50 b(The)33 +b(k)m(ey)i(is)e(pre\014xed)g(b)m(y)g(the)h Fq(pref)50 +b Fu(option)150 3899 y(set)39 b(in)g(the)g(paren)m(t)g(moun)m(t)f(p)s +(oin)m(t.)66 b(The)39 b(default)f(pre\014x)g(is)h(an)g(empt)m(y)g +(string.)66 b(If)38 b(the)h(pre\014x)f(w)m(as)150 4008 +y(`)p Fo(blah/)p Fu(')29 b(then)i Fo(${key})d Fu(w)m(ould)i(b)s(e)g +(set)h(to)g(`)p Fo(blah/foo)p Fu('.)150 4289 y Fk(3.3.3.12)63 +b(map)41 b(Selector)g(V)-10 b(ariable)275 4510 y Fu(The)29 +b(name)i(of)f(the)h(moun)m(t)f(map)g(b)s(eing)g(used.)150 +4790 y Fk(3.3.3.13)63 b(netn)m(um)m(b)s(er)42 b(Selector)f(V)-10 +b(ariable)275 5011 y Fu(This)45 b(selector)j(is)e(iden)m(tical)i(to)e +(the)h(`)p Fo(in_network)p Fu(')d(selector)j(function,)j(see)d(Section) +g(3.3.3.20)150 5121 y([in)p 256 5121 28 4 v 33 w(net)m(w)m(ork)36 +b(Selector)h(F)-8 b(unction],)39 b(page)d(23.)58 b(It)36 +b(will)g(matc)m(h)h(either)f(the)g(name)f(or)h(n)m(um)m(b)s(er)f(of)h +Fq(an)m(y)150 5230 y Fu(net)m(w)m(ork)23 b(in)m(terface)h(on)e(whic)m +(h)g(this)g(host)g(is)g(connected)h(to.)39 b(The)21 b(names)i(and)e(n)m +(um)m(b)s(ers)g(of)h(all)h(attac)m(hed)150 5340 y(in)m(terfaces)32 +b(are)f(a)m(v)-5 b(ailable)32 b(from)e(the)h(output)f(of)g(`)p +Fo(amd)g(-v)p Fu('.)p eop +%%Page: 23 25 +23 24 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(23)150 366 y Fk(3.3.3.14)63 b(net)m(w)m(ork)40 +b(Selector)h(V)-10 b(ariable)275 556 y Fu(This)45 b(selector)j(is)e +(iden)m(tical)i(to)e(the)h(`)p Fo(in_network)p Fu(')d(selector)j +(function,)j(see)d(Section)g(3.3.3.20)150 666 y([in)p +256 666 28 4 v 33 w(net)m(w)m(ork)36 b(Selector)h(F)-8 +b(unction],)39 b(page)d(23.)58 b(It)36 b(will)g(matc)m(h)h(either)f +(the)g(name)f(or)h(n)m(um)m(b)s(er)f(of)h Fq(an)m(y)150 +775 y Fu(net)m(w)m(ork)23 b(in)m(terface)h(on)e(whic)m(h)g(this)g(host) +g(is)g(connected)h(to.)39 b(The)21 b(names)i(and)e(n)m(um)m(b)s(ers)g +(of)h(all)h(attac)m(hed)150 885 y(in)m(terfaces)32 b(are)f(a)m(v)-5 +b(ailable)32 b(from)e(the)h(output)f(of)g(`)p Fo(amd)g(-v)p +Fu('.)150 1100 y Fk(3.3.3.15)63 b(path)41 b(Selector)g(V)-10 +b(ariable)275 1290 y Fu(The)26 b(full)g(pathname)h(of)g(the)g(name)f(b) +s(eing)h(resolv)m(ed.)40 b(F)-8 b(or)28 b(example)f(`)p +Fo(/home/foo)p Fu(')e(in)h(the)h(example)150 1399 y(ab)s(o)m(v)m(e.)150 +1614 y Fk(3.3.3.16)63 b(wire)41 b(Selector)g(V)-10 b(ariable)275 +1804 y Fu(This)45 b(selector)j(is)e(iden)m(tical)i(to)e(the)h(`)p +Fo(in_network)p Fu(')d(selector)j(function,)j(see)d(Section)g(3.3.3.20) +150 1914 y([in)p 256 1914 V 33 w(net)m(w)m(ork)36 b(Selector)h(F)-8 +b(unction],)39 b(page)d(23.)58 b(It)36 b(will)g(matc)m(h)h(either)f +(the)g(name)f(or)h(n)m(um)m(b)s(er)f(of)h Fq(an)m(y)150 +2023 y Fu(net)m(w)m(ork)23 b(in)m(terface)h(on)e(whic)m(h)g(this)g +(host)g(is)g(connected)h(to.)39 b(The)21 b(names)i(and)e(n)m(um)m(b)s +(ers)g(of)h(all)h(attac)m(hed)150 2133 y(in)m(terfaces)32 +b(are)f(a)m(v)-5 b(ailable)32 b(from)e(the)h(output)f(of)g(`)p +Fo(amd)g(-v)p Fu('.)275 2483 y(The)23 b(follo)m(wing)j(b)s(o)s(olean)e +(functions)g(are)g(selectors)i(whic)m(h)e(tak)m(e)i(an)e(argumen)m(t)g +Fq(AR)m(G)p Fu(.)h(They)f(return)150 2593 y(a)33 b(v)-5 +b(alue)32 b(of)h(true)f(or)g(false,)i(and)e(th)m(us)g(do)g(not)g(need)g +(to)h(b)s(e)f(compared)g(with)g(a)h(v)-5 b(alue.)47 b(Eac)m(h)33 +b(of)f(these)150 2703 y(ma)m(y)f(b)s(e)f(negated)h(b)m(y)f(prep)s +(ending)f(`)p Fo(!)p Fu(')h(to)h(their)g(name.)150 2918 +y Fk(3.3.3.17)63 b(exists)42 b(Selector)f(F)-10 b(unction)275 +3107 y Fu(If)29 b(the)h(\014le)g(listed)g(b)m(y)g Fq(AR)m(G)j +Fu(exists)e(\(via)g Fm(lstat)p Fu(\(2\)\),)h(this)e(function)g(ev)-5 +b(aluates)31 b(to)g(true.)40 b(Otherwise)150 3217 y(it)31 +b(ev)-5 b(aluates)32 b(to)f(false.)150 3432 y Fk(3.3.3.18)63 +b(false)42 b(Selector)f(F)-10 b(unction)275 3622 y Fu(Alw)m(a)m(ys)31 +b(ev)-5 b(aluates)32 b(to)f(false.)42 b Fq(AR)m(G)33 +b Fu(is)d(ignored.)150 3837 y Fk(3.3.3.19)63 b(netgrp)42 +b(Selector)f(F)-10 b(unction)275 4026 y Fu(If)30 b(the)i(curren)m(t)e +(host)i(as)f(determined)g(b)m(y)g(the)g(v)-5 b(alue)32 +b(of)f Fo(${host})e Fu(is)j(a)f(mem)m(b)s(er)g(of)g(the)g(netgroup)150 +4136 y Fq(AR)m(G)p Fu(,)g(this)g(selector)h(ev)-5 b(aluates)32 +b(to)f(true.)40 b(Otherwise)30 b(it)h(ev)-5 b(aluates)32 +b(to)f(false.)275 4267 y(F)-8 b(or)27 b(example,)h(supp)s(ose)e(y)m(ou) +h(ha)m(v)m(e)h(a)f(netgroup)f(`)p Fo(ppp-hosts)p Fu(',)g(and)g(for)h +(reasons)f(of)h(p)s(erformance,)150 4377 y(these)i(ha)m(v)m(e)h(a)f(lo) +s(cal)h(`)p Fo(/home)p Fu(')e(partition,)i(while)f(all)h(other)f(clien) +m(ts)h(on)f(the)g(faster)g(net)m(w)m(ork)h(can)f(access)150 +4487 y(a)i(shared)e(home)i(directory)-8 b(.)41 b(A)31 +b(common)g(map)f(to)h(use)f(for)g(b)s(oth)g(migh)m(t)h(lo)s(ok)g(lik)m +(e)g(the)g(follo)m(wing:)390 4612 y Fo(home/*)94 b +(netgrp\(ppp-hosts\);type:=)o(lin)o(k;fs)o(:=/l)o(oca)o(l/${)o(key})41 +b(\\)772 4716 y(!netgrp\(ppp-hosts\);type:)o(=nf)o(s;rh)o(ost=)o(ser)o +(v1;r)o(fs:=)o(/re)o(mote)o(/${k)o(ey})150 4931 y Fk(3.3.3.20)63 +b(in)p 729 4931 37 5 v 45 w(net)m(w)m(ork)40 b(Selector)h(F)-10 +b(unction)275 5121 y Fu(If)39 b(the)h(curren)m(t)g(host)g(has)g(an)m(y) +g(net)m(w)m(ork)h(in)m(terface)g(that)g(is)f(lo)s(cally)h(attac)m(hed)h +(to)f(the)f(net)m(w)m(ork)150 5230 y(sp)s(eci\014ed)28 +b(in)g Fq(AR)m(G)k Fu(\(either)d(via)g(name)g(or)f(n)m(um)m(b)s(er\),)g +(this)h(selector)h(ev)-5 b(aluates)30 b(to)f(true.)40 +b(Otherwise)28 b(it)150 5340 y(ev)-5 b(aluates)32 b(to)f(false.)p +eop +%%Page: 24 26 +24 25 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(24)275 366 y(F)-8 b(or)31 b(example,)g(supp)s(ose)e(y)m +(ou)i(ha)m(v)m(e)h(t)m(w)m(o)g(serv)m(ers)e(that)h(ha)m(v)m(e)h(an)f +(exp)s(ortable)f(`)p Fo(/opt)p Fu(')g(that)h(smaller)150 +476 y(clien)m(ts)j(can)f(NFS)g(moun)m(t.)47 b(The)33 +b(t)m(w)m(o)h(serv)m(ers)e(are)h(sa)m(y)-8 b(,)35 b(`)p +Fo(serv1)p Fu(')d(on)g(net)m(w)m(ork)i(`)p Fo(foo-net.site.com)p +Fu(')150 586 y(and)g(`)p Fo(serv2)p Fu(')g(on)h(net)m(w)m(ork)g(`)p +Fo(123.4.5.0)p Fu('.)52 b(Y)-8 b(ou)35 b(can)h(write)f(a)g(map)f(to)i +(b)s(e)e(used)g(b)m(y)g(all)i(clien)m(ts)g(that)150 695 +y(will)31 b(attempt)g(to)g(moun)m(t)g(the)f(closest)i(one)f(as)f(follo) +m(ws:)390 820 y Fo(opt)47 b(in_network\(foo-net.site.)o(com\))o(;rh)o +(ost:)o(=ser)o(v1;)o(rfs:)o(=/op)o(t)42 b(\\)581 924 +y(in_network\(123.4.5.0\);rh)o(ost:)o(=se)o(rv2;)o(rfs:)o(=/o)o(pt)g +(\\)581 1027 y(rhost:=fallback-server)150 1239 y Fk(3.3.3.21)63 +b(true)41 b(Selector)g(F)-10 b(unction)275 1428 y Fu(Alw)m(a)m(ys)31 +b(ev)-5 b(aluates)32 b(to)f(true.)41 b Fq(AR)m(G)33 b +Fu(is)e(ignored.)150 1640 y Fk(3.3.4)63 b(Map)41 b(Options)275 +1828 y Fu(Options)27 b(are)h(parsed)f(concurren)m(tly)h(with)g +(selectors.)41 b(The)28 b(di\013erence)g(is)g(that)g(when)f(an)h +(option)g(is)150 1938 y(seen)k(the)g(string)h(follo)m(wing)g(the)f(`)p +Fo(:=)p Fu(')g(is)h(recorded)e(for)h(later)h(use.)46 +b(As)32 b(a)h(minim)m(um)e(the)h Fq(t)m(yp)s(e)37 b Fu(option)150 +2047 y(m)m(ust)27 b(b)s(e)f(sp)s(eci\014ed.)39 b(Eac)m(h)28 +b(\014lesystem)f(t)m(yp)s(e)g(has)g(other)g(options)h(whic)m(h)f(m)m +(ust)f(also)i(b)s(e)f(sp)s(eci\014ed.)39 b(See)150 2157 +y(Chapter)30 b(5)h([Filesystem)h(T)m(yp)s(es],)e(page)h(36,)g(for)g +(details)g(on)f(the)h(\014lesystem)f(sp)s(eci\014c)h(options.)275 +2287 y(Sup)s(er\015uous)c(option)k(sp)s(eci\014cations)g(are)f(ignored) +h(and)f(are)g(not)h(rep)s(orted)f(as)g(errors.)275 2418 +y(The)f(follo)m(wing)j(options)f(apply)f(to)h(more)g(than)f(one)g +(\014lesystem)h(t)m(yp)s(e.)150 2630 y Fk(3.3.4.1)63 +b(addopts)42 b(Option)275 2818 y Fu(This)57 b(option)i(adds)f +(additional)h(options)g(to)g(default)g(options)f(normally)h(sp)s +(eci\014ed)f(in)g(the)150 2928 y(`)p Fo(/defaults)p Fu(')40 +b(en)m(try)j(or)f(the)h(defaults)f(of)h(the)f(k)m(ey)h(en)m(try)g(b)s +(eing)f(pro)s(cessed)f(\(See)i(Section)g(3.3.4.4)150 +3037 y([opts)26 b(Option],)h(page)g(25\).)41 b(Normally)27 +b(when)e(y)m(ou)h(sp)s(ecify)g(`)p Fo(opts)p Fu(')f(in)h(b)s(oth)f(the) +h(`)p Fo(/defaults)p Fu(')e(and)i(the)150 3147 y(map)34 +b(en)m(try)-8 b(,)37 b(the)e(latter)i(o)m(v)m(errides)e(the)g(former)g +(completely)-8 b(.)56 b(But)35 b(with)g(`)p Fo(addopts)p +Fu(')e(it)i(will)h(app)s(end)150 3256 y(the)31 b(options)f(and)g(o)m(v) +m(erride)h(an)m(y)g(con\015icting)h(ones.)275 3387 y(Options)e(whic)m +(h)h(start)g(with)g(`)p Fo(no)p Fu(')f(will)i(o)m(v)m(erride)g(those)f +(with)g(the)g(same)g(name)g(that)g(do)g(not)g(start)150 +3496 y(with)j(`)p Fo(no)p Fu(')g(and)f(vice)i(v)m(erse.)53 +b(Sp)s(ecial)34 b(handling)g(is)g(giv)m(en)h(to)g(in)m(v)m(erted)g +(options)f(suc)m(h)g(as)g(`)p Fo(soft)p Fu(')g(and)150 +3606 y(`)p Fo(hard)p Fu(',)c(`)p Fo(bg)p Fu(')g(and)g(`)p +Fo(fg)p Fu(',)h(`)p Fo(ro)p Fu(')f(and)g(`)p Fo(rw)p +Fu(',)g(etc.)275 3736 y(F)-8 b(or)31 b(example,)g(if)f(the)h(default)f +(options)h(sp)s(eci\014ed)f(w)m(ere)390 3861 y Fo +(opts:=rw,nosuid,intr,rsi)o(ze=1)o(024,)o(wsi)o(ze=1)o(024,)o(quo)o +(ta,p)o(osix)275 3991 y Fu(and)f(the)i(ones)f(sp)s(eci\014ed)g(in)g(a)h +(map)f(en)m(try)h(w)m(ere)390 4116 y Fo(addopts:=grpid,suid,ro,r)o +(size)o(=204)o(8,q)o(uota)o(,noi)o(ntr)275 4246 y Fu(then)f(the)g +(actual)i(options)f(used)e(w)m(ould)h(b)s(e)390 4371 +y Fo(wsize=1024,posix,grpid,s)o(uid,)o(ro,r)o(siz)o(e=20)o(48,q)o(uot)o +(a,no)o(intr)150 4583 y Fk(3.3.4.2)63 b(dela)m(y)40 b(Option)275 +4771 y Fu(The)20 b(dela)m(y)-8 b(,)24 b(in)d(seconds,)i(b)s(efore)e(an) +f(attempt)j(will)e(b)s(e)f(made)h(to)h(moun)m(t)f(from)f(the)h(curren)m +(t)g(lo)s(cation.)150 4881 y(Auxiliary)31 b(data,)g(suc)m(h)f(as)g(net) +m(w)m(ork)h(address,)f(\014le)g(handles)g(and)g(so)g(on)g(are)h +(computed)f(regardless)h(of)150 4990 y(this)f(v)-5 b(alue.)275 +5121 y(A)27 b(dela)m(y)h(can)g(b)s(e)f(used)f(to)i(implemen)m(t)g(the)g +(notion)g(of)f(primary)g(and)g(secondary)g(\014le)h(serv)m(ers.)39 +b(The)150 5230 y(secondary)c(serv)m(ers)h(w)m(ould)f(ha)m(v)m(e)h(a)g +(dela)m(y)g(of)f(a)h(few)f(seconds,)i(th)m(us)d(giving)i(the)g(primary) +e(serv)m(ers)i(a)150 5340 y(c)m(hance)31 b(to)h(resp)s(ond)c(\014rst.)p +eop +%%Page: 25 27 +25 26 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(25)150 366 y Fk(3.3.4.3)63 b(fs)42 b(Option)275 +562 y Fu(The)29 b(lo)s(cal)j(moun)m(t)e(p)s(oin)m(t.)41 +b(The)30 b(seman)m(tics)i(of)e(this)g(option)h(v)-5 b(ary)31 +b(b)s(et)m(w)m(een)g(\014lesystems.)275 700 y(F)-8 b(or)32 +b(NFS)g(and)g(UFS)f(\014lesystems)i(the)f(v)-5 b(alue)32 +b(of)g Fo(${fs})f Fu(is)h(used)f(as)h(the)g(lo)s(cal)i(moun)m(t)e(p)s +(oin)m(t.)45 b(F)-8 b(or)150 809 y(other)22 b(\014lesystem)g(t)m(yp)s +(es)f(it)i(has)e(other)h(meanings)g(whic)m(h)f(are)h(describ)s(ed)f(in) +g(the)h(section)g(describing)g(the)150 919 y(resp)s(ectiv)m(e)29 +b(\014lesystem)f(t)m(yp)s(e.)41 b(It)28 b(is)g(imp)s(ortan)m(t)g(that)h +(this)f(string)g(uniquely)f(iden)m(ti\014es)h(the)h(\014lesystem)150 +1029 y(b)s(eing)23 b(moun)m(ted.)39 b(T)-8 b(o)24 b(satisfy)g(this)f +(requiremen)m(t,)j(it)e(should)f(con)m(tain)i(the)f(name)f(of)h(the)g +(host)g(on)f(whic)m(h)150 1138 y(the)31 b(\014lesystem)f(is)h(residen)m +(t)f(and)g(the)h(pathname)f(of)g(the)h(\014lesystem)g(on)f(the)h(lo)s +(cal)g(or)g(remote)g(host.)275 1276 y(The)26 b(reason)h(for)f +(requiring)g(the)h(hostname)g(is)g(clear)h(if)e(replicated)i +(\014lesystems)f(are)g(considered.)39 b(If)150 1385 y(a)30 +b(\014leserv)m(er)f(go)s(es)h(do)m(wn)f(and)g(a)g(replacemen)m(t)i +(\014lesystem)f(is)f(moun)m(ted)g(then)g(the)h Fq(lo)s(cal)k +Fu(moun)m(t)29 b(p)s(oin)m(t)150 1495 y Fq(m)m(ust)d +Fu(b)s(e)e(di\013eren)m(t)i(from)e(that)h(of)g(the)g(\014lesystem)g +(whic)m(h)f(is)h(h)m(ung.)38 b(Some)24 b(enco)s(ding)h(of)g(the)g +(\014lesystem)150 1605 y(name)30 b(is)h(required)e(if)i(more)f(than)g +(one)h(\014lesystem)g(is)f(to)h(b)s(e)f(moun)m(ted)g(from)g(an)m(y)h +(giv)m(en)g(host.)275 1742 y(If)21 b(the)i(hostname)f(is)h(\014rst)e +(in)h(the)h(path)f(then)g(all)h(moun)m(ts)f(from)g(a)h(particular)g +(host)f(will)h(b)s(e)e(gathered)150 1852 y(b)s(elo)m(w)26 +b(a)g(single)h(directory)-8 b(.)40 b(If)26 b(that)g(serv)m(er)g(go)s +(es)h(do)m(wn)e(then)h(the)g(h)m(ung)f(moun)m(t)h(p)s(oin)m(ts)g(are)g +(less)g(lik)m(ely)150 1961 y(to)31 b(b)s(e)e(acciden)m(tally)k +(referenced,)d(for)g(example)h(when)e Fm(getcwd)p Fu(\(3\))j(tra)m(v)m +(erses)g(the)e(namespace)h(to)f(\014nd)150 2071 y(the)h(pathname)f(of)g +(the)h(curren)m(t)f(directory)-8 b(.)275 2209 y(The)28 +b(`)p Fo(fs)p Fu(')h(option)h(defaults)f(to)h Fo +(${autodir}/${rhost}${rfs)o(})p Fu(.)k(In)29 b(addition,)h(`)p +Fo(rhost)p Fu(')e(defaults)150 2318 y(to)23 b(the)g(lo)s(cal)h(host)e +(name)h(\()p Fo(${host})p Fu(\))e(and)h(`)p Fo(rfs)p +Fu(')g(defaults)h(to)g(the)g(v)-5 b(alue)23 b(of)f Fo(${path})p +Fu(,)h(whic)m(h)f(is)h(the)f(full)150 2428 y(path)32 +b(of)g(the)g(requested)f(\014le;)i(`)p Fo(/home/foo)p +Fu(')d(in)h(the)h(example)h(ab)s(o)m(v)m(e)g(\(see)g(Section)f(3.3.3)i +([Selectors],)150 2537 y(page)42 b(20\).)75 b Fo(${autodir})39 +b Fu(defaults)i(to)h(`)p Fo(/a)p Fu(')g(but)e(ma)m(y)i(b)s(e)f(c)m +(hanged)h(with)f(the)h Fo(-a)e Fu(command)i(line)150 +2647 y(option.)55 b(Sun's)33 b(automoun)m(ter)j(defaults)f(to)h(`)p +Fo(/tmp_mnt)p Fu('.)52 b(Note)37 b(that)e(there)g(is)g(no)g(`)p +Fo(/)p Fu(')g(b)s(et)m(w)m(een)h(the)150 2757 y Fo(${rhost})28 +b Fu(and)i Fo(${rfs})f Fu(since)h Fo(${rfs})f Fu(b)s(egins)h(with)g(a)h +(`)p Fo(/)p Fu('.)150 2987 y Fk(3.3.4.4)63 b(opts)42 +b(Option)275 3183 y Fu(The)37 b(options)h(to)h(pass)e(to)i(the)f(moun)m +(t)g(system)g(call.)65 b(A)38 b(leading)h(`)p Fo(-)p +Fu(')f(is)g(silen)m(tly)h(ignored.)63 b(The)150 3292 +y(moun)m(t)38 b(options)h(supp)s(orted)d(generally)j(corresp)s(ond)e +(to)i(those)g(used)e(b)m(y)h Fm(moun)m(t)p Fu(\(8\))h(and)f(are)g +(listed)150 3402 y(b)s(elo)m(w.)j(Some)30 b(additional)i +(pseudo-options)e(are)h(in)m(terpreted)f(b)m(y)h Fq(Amd)i +Fu(and)d(are)g(also)i(listed.)275 3539 y(Unless)k(sp)s(eci\014cally)h +(o)m(v)m(erridden,)h(eac)m(h)f(of)g(the)f(system)g(default)h(moun)m(t)f +(options)g(applies.)59 b(An)m(y)150 3649 y(options)33 +b(not)g(recognized)h(are)f(ignored.)48 b(If)33 b(no)f(options)h(list)h +(is)e(supplied)g(the)h(string)g(`)p Fo(rw,defaults)p +Fu(')150 3759 y(is)g(used)f(and)g(all)h(the)g(system)g(default)f(moun)m +(t)h(options)g(apply)-8 b(.)48 b(Options)32 b(whic)m(h)g(are)h(not)g +(applicable)150 3868 y(for)e(a)g(particular)g(op)s(erating)h(system)f +(are)g(silen)m(tly)i(ignored.)42 b(F)-8 b(or)32 b(example,)g(only)f +(4.4BSD)h(is)f(kno)m(wn)150 3978 y(to)g(implemen)m(t)g(the)g +Fo(compress)d Fu(and)i Fo(spongy)e Fu(options.)150 4142 +y Fo(acdirmax=)p Fq(n)630 4252 y Fu(Set)j(the)f(maxim)m(um)g(directory) +h(attribute)g(cac)m(he)h(timeout)g(to)f Fq(n)p Fu(.)150 +4414 y Fo(acdirmin=)p Fq(n)630 4524 y Fu(Set)g(the)f(minim)m(um)g +(directory)h(attribute)g(cac)m(he)h(timeout)f(to)g Fq(n)p +Fu(.)150 4686 y Fo(acregmax=)p Fq(n)630 4796 y Fu(Set)g(the)f(maxim)m +(um)g(\014le)h(attribute)g(cac)m(he)h(timeout)f(to)g +Fq(n)p Fu(.)150 4958 y Fo(acregmin=)p Fq(n)630 5068 y +Fu(Set)g(the)f(minim)m(um)g(\014le)g(attribute)h(cac)m(he)h(timeout)g +(to)f Fq(n)p Fu(.)150 5230 y Fo(actimeo=)p Fq(n)630 5340 +y Fu(Set)g(the)f(o)m(v)m(erall)j(attribute)e(cac)m(he)h(timeout)f(to)g +Fq(n)p Fu(.)p eop +%%Page: 26 28 +26 27 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(26)150 366 y Fo(auto)150 476 y(ignore)192 +b Fu(Ignore)31 b(this)f(moun)m(t)g(b)m(y)g Fm(df)p Fu(\(1\).)150 +638 y Fo(cache)240 b Fu(Allo)m(w)32 b(data)f(to)g(b)s(e)e(cac)m(hed)j +(from)e(a)h(remote)g(serv)m(er)g(for)f(this)g(moun)m(t.)150 +799 y Fo(compress)96 b Fu(Use)31 b(NFS)f(compression)g(proto)s(col.)150 +961 y Fo(defperm)144 b Fu(Ignore)34 b(the)g(p)s(ermission)f(mo)s(de)h +(bits,)g(and)g(default)g(\014le)g(p)s(ermissions)f(to)h(0555,)j(UID)d +(0,)630 1070 y(and)c(GID)h(0.)41 b(Useful)30 b(for)g(CD-R)m(OMs)h +(formatted)g(as)g(ISO-9660.)150 1232 y Fo(dev)336 b Fu(Allo)m(w)32 +b(lo)s(cal)f(sp)s(ecial)g(devices)g(on)g(this)f(\014lesystem.)150 +1394 y Fo(dumbtimr)96 b Fu(\(XXX:)31 b(a)g(dum)m(b)e(timer?\))150 +1555 y Fo(fsid)288 b Fu(Set)31 b(ID)f(of)h(\014lesystem.)150 +1717 y Fo(grpid)240 b Fu(Use)31 b(BSD)f(directory)h(group-id)f(seman)m +(tics.)150 1878 y Fo(int)150 1988 y(intr)288 b Fu(Allo)m(w)32 +b(k)m(eyb)s(oard)e(in)m(terrupts)f(on)i(hard)e(moun)m(ts.)150 +2149 y Fo(multi)240 b Fu(P)m(erform)30 b(m)m(ulti-comp)s(onen)m(t)i(lo) +s(okup)e(on)g(\014les.)150 2311 y Fo(maxgroups)630 2421 +y Fu(Set)h(the)f(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(groups)f(to)h +(allo)m(w)h(for)e(this)g(moun)m(t.)150 2582 y Fo(nfsv3)240 +b Fu(Use)31 b(NFS)f(V)-8 b(ersion)31 b(3)g(for)f(this)g(moun)m(t.)150 +2744 y Fo(noac)288 b Fu(T)-8 b(urn)29 b(o\013)i(the)f(attribute)h(cac)m +(he.)150 2905 y Fo(noauto)192 b Fu(\(XXX:)31 b(No)g(automatic)i +(what?\))150 3067 y Fo(nocache)144 b Fu(Do)31 b(not)g(allo)m(w)h(data)f +(to)g(b)s(e)f(cac)m(hed)h(from)f(a)h(remote)g(serv)m(er)g(for)f(this)g +(moun)m(t.)150 3228 y Fo(noconn)192 b Fu(Don't)31 b(mak)m(e)h(a)e +(connection)i(on)e(datagram)i(transp)s(orts.)150 3390 +y Fo(nocto)240 b Fu(No)31 b(close-to-op)s(en)h(consistency)-8 +b(.)150 3551 y Fo(nodefperm)630 3661 y Fu(Do)38 b(not)f(ignore)h(the)f +(p)s(ermission)f(mo)s(de)h(bits.)61 b(Useful)37 b(for)g(CD-R)m(OMS)g +(formatted)h(as)630 3771 y(ISO-9660.)150 3932 y Fo(nodev)150 +4042 y(nodevs)192 b Fu(Don't)31 b(allo)m(w)h(lo)s(cal)g(sp)s(ecial)f +(devices)g(on)f(this)g(\014lesystem.)150 4203 y Fo(noint)240 +b Fu(Do)31 b(not)g(allo)m(w)h(k)m(eyb)s(oard)e(in)m(terrupts)g(for)g +(this)g(moun)m(t)150 4365 y Fo(nosub)240 b Fu(Disallo)m(w)32 +b(moun)m(ts)f(b)s(eneath)f(this)g(moun)m(t.)150 4527 +y Fo(nosuid)192 b Fu(Don't)31 b(allo)m(w)h(set-uid)f(or)f(set-gid)h +(executables)h(on)f(this)f(\014lesystem.)150 4688 y Fo(noversion)630 +4798 y Fu(Strip)25 b(the)i(extension)f(`)p Fo(;#)p Fu(')h(from)e(the)i +(v)m(ersion)f(string)g(of)h(\014les)f(recorded)g(on)g(an)g(ISO-9660)630 +4907 y(CD-R)m(OM.)150 5069 y Fo(overlay)144 b Fu(Ov)m(erla)m(y)32 +b(this)e(moun)m(t)g(on)h(top)f(of)h(an)f(existing)h(moun)m(t,)g(if)f +(an)m(y)-8 b(.)150 5230 y Fo(pgthresh=)p Fq(n)630 5340 +y Fu(Set)31 b(the)f(paging)h(threshold)f(to)h Fq(n)f +Fu(kilob)m(ytes.)p eop +%%Page: 27 29 +27 28 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(27)150 366 y Fo(port=)p Fq(n)189 b Fu(Set)31 +b(the)f(NFS)g(p)s(ort)g(to)h Fq(n)p Fu(.)150 513 y Fo(posix)240 +b Fu(T)-8 b(urn)29 b(on)h(POSIX)g(static)i(pathconf)e(for)g(moun)m(ts.) +150 659 y Fo(proto=)p Fq(s)156 b Fu(Use)31 b(transp)s(ort)e(proto)s +(col)j Fq(s)h Fu(for)e(NFS)f(\(can)h(b)s(e)f Fo("tcp")f +Fu(or)h Fo("udp")p Fu(\).)150 806 y Fo(quota)240 b Fu(Enable)30 +b(quota)h(c)m(hec)m(king)i(on)d(this)g(moun)m(t.)150 +952 y Fo(rdonly)150 1062 y(ro)384 b Fu(Moun)m(t)31 b(this)f +(\014lesystem)h(readonly)-8 b(.)150 1208 y Fo(resvport)96 +b Fu(Use)27 b(a)h(reserv)m(ed)f(p)s(ort)f(\(smaller)i(than)f(1024\))i +(for)e(remote)h(NFS)f(moun)m(ts.)39 b(Most)28 b(systems)630 +1318 y(assume)k(that,)i(but)e(some)h(allo)m(w)h(for)f(moun)m(ts)f(to)i +(o)s(ccur)e(on)h(non-reserv)m(ed)f(p)s(orts.)47 b(This)630 +1427 y(causes)c(problems)f(when)g(suc)m(h)h(a)g(system)g(tries)g(to)g +(NFS)g(moun)m(t)g(one)g(that)g(requires)630 1537 y(reserv)m(ed)31 +b(p)s(orts.)40 b(It)30 b(is)g(recommended)g(that)h(this)g(option)f(alw) +m(a)m(ys)i(b)s(e)e(on.)150 1683 y Fo(retrans=)p Fq(n)630 +1793 y Fu(The)39 b(n)m(um)m(b)s(er)g(of)h(NFS)g(retransmits)g(made)g(b) +s(efore)g(a)g(user)f(error)h(is)g(generated)h(b)m(y)f(a)630 +1902 y(`)p Fo(soft)p Fu(')25 b(moun)m(ted)h(\014lesystem,)i(and)d(b)s +(efore)h(a)g(`)p Fo(hard)p Fu(')g(moun)m(ted)g(\014lesystem)g(rep)s +(orts)g(`)p Fo(NFS)630 2012 y(server)j Fq(y)m(o)m(y)m(o)37 +b Fo(not)29 b(responding)f(still)h(trying)p Fu('.)150 +2158 y Fo(retry)240 b Fu(Set)31 b(the)f(NFS)g(retry)h(coun)m(ter.)150 +2305 y Fo(rrip)288 b Fu(Uses)31 b(the)f(Ro)s(c)m(k)h(Ridge)g(In)m(terc) +m(hange)h(Proto)s(col)f(\(RRIP\))g(extensions)g(to)g(ISO-9660.)150 +2451 y Fo(rsize=)p Fq(n)141 b Fu(The)25 b(NFS)h(read)g(pac)m(k)m(et)i +(size.)40 b(Y)-8 b(ou)26 b(ma)m(y)h(need)e(to)i(set)f(this)g(if)g(y)m +(ou)g(are)h(using)e(NFS/UDP)630 2561 y(through)30 b(a)g(gatew)m(a)m(y)j +(or)e(a)g(slo)m(w)g(link.)150 2707 y Fo(rw)384 b Fu(Allo)m(w)32 +b(reads)e(and)f(writes)i(on)f(this)g(\014lesystem.)150 +2853 y Fo(soft)288 b Fu(Giv)m(e)32 b(up)d(after)i Fq(retrans)j +Fu(retransmissions.)150 3000 y Fo(spongy)192 b Fu(Lik)m(e)31 +b(`)p Fo(soft)p Fu(')f(for)g(status)h(requests,)f(and)g(`)p +Fo(hard)p Fu(')g(for)g(data)h(transfers.)150 3146 y Fo(suid)288 +b Fu(Allo)m(w)32 b(set-uid)e(programs)g(on)g(this)h(moun)m(t.)150 +3292 y Fo(symttl)192 b Fu(T)-8 b(urn)29 b(of)i(the)f(sym)m(b)s(olic)h +(link)f(cac)m(he)i(time-to-liv)m(e.)150 3439 y Fo(sync)288 +b Fu(P)m(erform)30 b(sync)m(hronous)g(\014lesystem)g(op)s(erations)h +(on)f(this)h(moun)m(t.)150 3585 y Fo(tcp)336 b Fu(Use)33 +b(TCP/IP)e(instead)h(of)h(UDP/IP)-8 b(,)33 b(ignored)f(if)h(the)f(NFS)g +(implemen)m(tation)i(do)s(es)e(not)630 3695 y(supp)s(ort)d(TCP/IP)g +(moun)m(ts.)150 3841 y Fo(timeo=)p Fq(n)141 b Fu(The)30 +b(NFS)g(timeout,)i(in)e(ten)m(th-seconds,)h(b)s(efore)f(a)h(request)f +(is)h(retransmitted.)150 3987 y Fo(vers=)p Fq(n)189 b +Fu(Use)31 b(NFS)f(proto)s(col)h(v)m(ersion)g(n)m(um)m(b)s(er)e +Fq(n)h Fu(\(can)h(b)s(e)f(2)h(or)f(3\).)150 4134 y Fo(wsize=)p +Fq(n)141 b Fu(The)23 b(NFS)h(write)g(pac)m(k)m(et)i(size.)39 +b(Y)-8 b(ou)24 b(ma)m(y)h(need)e(to)i(set)f(this)g(if)f(y)m(ou)i(are)f +(using)f(NFS/UDP)630 4243 y(through)30 b(a)g(gatew)m(a)m(y)j(or)e(a)g +(slo)m(w)g(link.)275 4390 y(The)c(follo)m(wing)j(options)e(are)g +(implemen)m(ted)h(b)m(y)f Fq(Amd)p Fu(,)g(rather)g(than)g(b)s(eing)f +(passed)h(to)h(the)f(k)m(ernel.)150 4536 y Fo(nounmount)630 +4646 y Fu(Con\014gures)g(the)h(moun)m(t)f(so)h(that)h(its)f +(time-to-liv)m(e)j(will)d(nev)m(er)g(expire.)40 b(This)28 +b(is)h(also)h(the)630 4755 y(default)h(for)f(some)g(\014lesystem)h(t)m +(yp)s(es.)150 4902 y Fo(ping=)p Fq(n)189 b Fu(The)45 +b(in)m(terv)-5 b(al,)50 b(in)45 b(seconds,)k(b)s(et)m(w)m(een)d(k)m +(eep-aliv)m(e)i(pings.)85 b(When)45 b(four)f(consecutiv)m(e)630 +5011 y(pings)30 b(ha)m(v)m(e)i(failed)f(the)g(moun)m(t)f(p)s(oin)m(t)h +(is)g(mark)m(ed)f(as)h(h)m(ung.)41 b(This)30 b(in)m(terv)-5 +b(al)32 b(defaults)e(to)630 5121 y(30)f(seconds.)39 b(If)28 +b(the)g(ping)f(in)m(terv)-5 b(al)29 b(is)f(less)g(than)g(zero,)h(no)f +(pings)f(are)h(sen)m(t)h(and)e(the)h(host)630 5230 y(is)35 +b(assumed)f(to)i(b)s(e)e(alw)m(a)m(ys)j(up.)53 b(By)36 +b(default,)g(pings)f(are)g(not)g(sen)m(t)h(for)e(an)h(NFS/TCP)630 +5340 y(moun)m(t.)p eop +%%Page: 28 30 +28 29 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(Moun)m(t)31 +b(Maps)2536 b(28)150 366 y Fo(retry=)p Fq(n)141 b Fu(The)30 +b(n)m(um)m(b)s(er)f(of)h(times)h(to)h(retry)e(the)g(moun)m(t)h(system)f +(call.)150 526 y Fo(utimeout=)p Fq(n)630 635 y Fu(The)37 +b(in)m(terv)-5 b(al,)41 b(in)c(seconds,)i(b)m(y)f(whic)m(h)f(the)h +(moun)m(t's)f(time-to-liv)m(e)k(is)d(extended)f(after)630 +745 y(an)42 b(unmoun)m(t)f(attempt)i(has)e(failed.)76 +b(In)41 b(fact)i(the)f(in)m(terv)-5 b(al)43 b(is)f(extended)g(b)s +(efore)g(the)630 855 y(unmoun)m(t)d(is)h(attempted)i(to)e(a)m(v)m(oid)i +(thrashing.)70 b(The)39 b(default)i(v)-5 b(alue)40 b(is)h(120)g +(seconds)630 964 y(\(t)m(w)m(o)32 b(min)m(utes\))f(or)f(as)h(set)g(b)m +(y)f(the)h Fo(-w)e Fu(command)h(line)h(option.)150 1188 +y Fk(3.3.4.5)63 b(remopts)42 b(Option)275 1381 y Fu(This)28 +b(option)h(has)g(the)g(same)h(use)f(as)g Fo(${opts})e +Fu(but)h(applies)i(only)f(when)f(the)h(remote)h(host)f(is)h(on)f(a)150 +1491 y(non-lo)s(cal)j(net)m(w)m(ork.)43 b(F)-8 b(or)31 +b(example,)h(when)e(using)h(NFS)f(across)i(a)f(gatew)m(a)m(y)i(it)f(is) +f(often)g(necessary)g(to)150 1600 y(use)e(smaller)g(v)-5 +b(alues)29 b(for)g(the)g(data)g(read)g(and)f(write)h(sizes.)41 +b(This)28 b(can)h(simply)g(b)s(e)f(done)g(b)m(y)h(sp)s(ecifying)150 +1710 y(the)44 b(small)g(v)-5 b(alues)44 b(in)g Fq(remopts)p +Fu(.)81 b(When)43 b(a)i(non-lo)s(cal)f(host)g(is)g(accessed,)49 +b(the)44 b(smaller)g(sizes)h(will)150 1819 y(automatically)33 +b(b)s(e)d(used.)275 1954 y Fq(Amd)25 b Fu(determines)d(whether)g(a)h +(host)f(is)g(lo)s(cal)i(b)m(y)e(examining)h(the)f(net)m(w)m(ork)i(in)m +(terface)g(con\014guration)150 2063 y(at)37 b(startup.)58 +b(An)m(y)36 b(in)m(terface)i(c)m(hanges)f(made)f(after)h +Fq(Amd)i Fu(has)d(b)s(een)g(started)g(will)h(not)f(b)s(e)g(noticed.)150 +2173 y(The)30 b(lik)m(ely)i(e\013ect)g(will)e(b)s(e)g(that)h(a)g(host)f +(ma)m(y)h(incorrectly)h(b)s(e)e(declared)g(non-lo)s(cal.)275 +2308 y(Unless)g(otherwise)h(set,)g(the)f(v)-5 b(alue)31 +b(of)g Fo(${remopts})c Fu(is)k(the)f(same)h(as)g(the)f(v)-5 +b(alue)31 b(of)g Fo(${opts})p Fu(.)150 2532 y Fk(3.3.4.6)63 +b(sublink)42 b(Option)275 2724 y Fu(The)c(sub)s(directory)h(within)f +(the)i(moun)m(ted)f(\014lesystem)h(to)g(whic)m(h)f(the)h(reference)f +(should)g(p)s(oin)m(t.)150 2834 y(This)f(can)h(b)s(e)f(used)g(to)h +(prev)m(en)m(t)g(duplicate)h(moun)m(ts)e(in)h(cases)g(where)f(m)m +(ultiple)i(directories)f(in)g(the)150 2943 y(same)31 +b(moun)m(ted)f(\014lesystem)h(are)f(used.)150 3168 y +Fk(3.3.4.7)63 b(t)m(yp)s(e)41 b(Option)275 3360 y Fu(The)35 +b(\014lesystem)h(t)m(yp)s(e)g(to)h(b)s(e)e(used.)57 b(See)36 +b(Chapter)f(5)h([Filesystem)i(T)m(yp)s(es],)f(page)g(36,)h(for)e(a)g +(full)150 3470 y(description)30 b(of)h(eac)m(h)g(t)m(yp)s(e.)p +eop +%%Page: 29 31 +29 30 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(29)150 366 y Fr(4)80 +b Fi(Amd)61 b Fr(Command)53 b(Line)g(Options)275 611 +y Fu(Man)m(y)37 b(of)f Fq(Amd)t Fu('s)g(parameters)h(can)g(b)s(e)e(set) +i(from)f(the)h(command)f(line.)60 b(The)36 b(command)g(line)h(is)150 +720 y(also)31 b(used)f(to)h(sp)s(ecify)f(automoun)m(t)h(p)s(oin)m(ts)f +(and)g(maps.)275 858 y(The)f(general)j(format)e(of)h(a)g(command)f +(line)h(is)390 990 y Fo(amd)47 b([)p Fq(options)t Fo(])g([{)g +Fq(directory)56 b(map-name)d Fo([-)p Fq(map-options)t +Fo(])47 b(})h(...])275 1128 y Fu(F)-8 b(or)32 b(eac)m(h)h(directory)g +(and)e(map-name)h(giv)m(en)h(or)f(sp)s(eci\014ed)f(in)h(the)g(`)p +Fo(amd.conf)p Fu(')e(\014le,)j Fq(Amd)i Fu(estab-)150 +1238 y(lishes)27 b(an)g(automoun)m(t)g(p)s(oin)m(t.)40 +b(The)26 b Fq(map-options)31 b Fu(ma)m(y)c(b)s(e)f(an)m(y)h(sequence)h +(of)f(options)g(or)f(selectors|)150 1347 y(see)33 b(Section)g(3.3)h +([Lo)s(cation)f(F)-8 b(ormat],)35 b(page)e(18.)48 b(The)32 +b Fq(map-options)k Fu(apply)c(only)g(to)i Fq(Amd)t Fu('s)d(moun)m(t)150 +1457 y(p)s(oin)m(t.)275 1595 y(`)p Fo(type:=toplvl;cache:=mapd)o(efa)o +(ult;)o(fs:)o(=${m)o(ap})p Fu(')c(is)34 b(the)g(default)f(v)-5 +b(alue)34 b(for)g(the)g(map)f(op-)150 1704 y(tions.)64 +b(Default)39 b(options)g(for)e(a)i(map)e(are)i(read)f(from)f(a)i(sp)s +(ecial)f(en)m(try)h(in)e(the)i(map)e(whose)h(k)m(ey)h(is)150 +1814 y(the)30 b(string)f(`)p Fo(/defaults)p Fu('.)39 +b(When)29 b(default)h(options)g(are)g(giv)m(en)h(they)f(are)g(prep)s +(ended)d(to)k(an)m(y)f(options)150 1923 y(sp)s(eci\014ed)d(in)h(the)g +(moun)m(t-map)g(lo)s(cations)h(as)f(explained)g(in)g(Section)g(3.3.1)i +([Map)e(Defaults],)i(page)f(19.)275 2061 y(The)g Fq(options)35 +b Fu(are)c(an)m(y)f(com)m(bination)i(of)f(those)f(listed)h(b)s(elo)m +(w.)275 2199 y(Once)23 b(the)g(command)g(line)h(has)e(b)s(een)h +(parsed,)h(the)f(automoun)m(t)h(p)s(oin)m(ts)f(are)h(moun)m(ted.)38 +b(The)23 b(moun)m(t)150 2309 y(p)s(oin)m(ts)36 b(are)g(created)h(if)g +(they)f(do)g(not)g(already)h(exist,)h(in)e(whic)m(h)g(case)h(they)f +(will)g(b)s(e)g(remo)m(v)m(ed)h(when)150 2418 y Fq(Amd)29 +b Fu(exits.)40 b(Finally)-8 b(,)29 b Fq(Amd)g Fu(disasso)s(ciates)e +(itself)g(from)f(its)g(con)m(trolling)i(terminal)f(and)e(forks)h(in)m +(to)h(the)150 2528 y(bac)m(kground.)275 2666 y(Note:)42 +b(Ev)m(en)30 b(if)h Fq(Amd)i Fu(has)d(b)s(een)g(built)g(with)g(`)p +Fo(-DDEBUG)p Fu(')f(\(via)i Fo(configure)d(--enable-debug)p +Fu(\),)f(it)150 2775 y(will)37 b(still)g(bac)m(kground)f(itself)h(and)f +(disasso)s(ciate)i(itself)f(from)f(the)h(con)m(trolling)h(terminal.)60 +b(T)-8 b(o)36 b(use)h(a)150 2885 y(debugger)26 b(it)g(is)g(necessary)g +(to)h(sp)s(ecify)f(`)p Fo(-D)k(nodaemon)p Fu(')23 b(on)j(the)g(command) +g(line.)40 b(Ho)m(w)m(ev)m(er,)29 b(ev)m(en)d(with)150 +2994 y(all)34 b(of)g(this,)h(moun)m(ts)e(and)g(unmoun)m(ts)f(are)i(p)s +(erformed)e(in)h(the)h(bac)m(kground,)g(and)f Fq(Amd)k +Fu(will)c(alw)m(a)m(ys)150 3104 y(fork)i(b)s(efore)f(doing)h(them.)55 +b(Therefore,)36 b(debugging)f(what)g(happ)s(ens)e(closely)k(during)d +(un/moun)m(ts)g(is)150 3214 y(more)d(c)m(hallenging.)275 +3351 y Fq(All)i Fu(of)c Fq(Amd)t Fu('s)f(command)h(options)g(\(sa)m(v)m +(e)i Fo(-F)d Fu(and)h Fo(-T)p Fu(\))f(can)i(b)s(e)e(sp)s(eci\014ed)g +(in)h(the)g(`)p Fo(amd.conf)p Fu(')f(\014le.)150 3461 +y(See)f(Chapter)e(6)i([Amd)f(Con\014guration)g(File],)j(page)e(46.)41 +b(If)25 b Fq(Amd)30 b Fu(is)c(in)m(v)m(ok)m(ed)i(without)e(an)m(y)h +(command)150 3571 y(line)k(options,)g(it)g(will)f(default)h(to)g(using) +f(the)g(con\014guration)h(\014le)g(`)p Fo(/etc/amd.conf)p +Fu(',)c(if)j(one)h(exists.)150 3836 y Ft(4.1)68 b Fh(-a)44 +b Fg(directory)275 4032 y Fu(Sp)s(eci\014es)d(the)i(default)g(moun)m(t) +f(directory)-8 b(.)78 b(This)42 b(option)g(c)m(hanges)i(the)e(v)-5 +b(ariable)44 b Fo(${autodir})150 4142 y Fu(whic)m(h)30 +b(otherwise)h(defaults)f(to)h(`)p Fo(/a)p Fu('.)41 b(F)-8 +b(or)31 b(example,)g(some)g(sites)g(prefer)f(`)p Fo(/amd)p +Fu(')g(or)g(`)p Fo(/n)p Fu('.)390 4274 y Fo(amd)47 b(-a)g(/amd)g(...) +150 4540 y Ft(4.2)68 b Fh(-c)44 b Fg(cac)l(he-in)l(terv)-8 +b(al)275 4736 y Fu(Selects)36 b(the)g(p)s(erio)s(d,)h(in)e(seconds,)i +(for)f(whic)m(h)g(a)g(name)g(is)g(cac)m(hed)g(b)m(y)g +Fq(Amd)p Fu(.)57 b(If)35 b(no)h(reference)g(is)150 4845 +y(made)30 b(to)h(the)g(v)m(olume)f(in)g(this)g(p)s(erio)s(d,)g +Fq(Amd)j Fu(discards)c(the)i(v)m(olume)g(name)f(to)h(\014lesystem)f +(mapping.)275 4983 y(Once)36 b(the)h(last)h(reference)f(to)h(a)f +(\014lesystem)g(has)f(b)s(een)g(remo)m(v)m(ed,)k Fq(Amd)g +Fu(attempts)d(to)h(unmoun)m(t)150 5093 y(the)28 b(\014lesystem.)40 +b(If)28 b(the)g(unmoun)m(t)f(fails)h(the)g(in)m(terv)-5 +b(al)29 b(is)f(extended)g(b)m(y)g(a)g(further)f(p)s(erio)s(d)f(as)j(sp) +s(eci\014ed)150 5202 y(b)m(y)h(the)h(`)p Fo(-w)p Fu(')f(command)g(line) +h(option)g(or)f(b)m(y)g(the)h(`)p Fo(utimeout)p Fu(')e(moun)m(t)h +(option.)275 5340 y(The)f(default)i Fq(cac)m(he-in)m(terv)-5 +b(al)37 b Fu(is)30 b(300)i(seconds)e(\(\014v)m(e)h(min)m(utes\).)p +eop +%%Page: 30 32 +30 31 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(30)150 366 y Ft(4.3)68 +b Fh(-d)44 b Fg(domain)275 568 y Fu(Sp)s(eci\014es)34 +b(the)i(host's)g(domain.)56 b(This)35 b(sets)h(the)f(in)m(ternal)i(v)-5 +b(ariable)36 b Fo(${domain})d Fu(and)i(a\013ects)i(the)150 +677 y Fo(${hostd})28 b Fu(v)-5 b(ariable.)275 821 y(If)30 +b(this)i(option)f(is)h(not)f(sp)s(eci\014ed)g(and)g(the)g(hostname)h +(already)f(con)m(tains)i(the)e(lo)s(cal)i(domain)e(then)150 +930 y(that)g(is)f(used,)g(otherwise)h(the)g(default)f(v)-5 +b(alue)31 b(of)g Fo(${domain})c Fu(is)k(`)p Fo(unknown.domain)p +Fu('.)275 1074 y(F)-8 b(or)30 b(example,)h(if)e(the)h(lo)s(cal)h +(domain)f(w)m(as)g(`)p Fo(doc.ic.ac.uk)p Fu(',)d Fq(Amd)33 +b Fu(could)c(b)s(e)g(started)i(as)f(follo)m(ws:)390 1211 +y Fo(amd)47 b(-d)g(doc.ic.ac.uk)e(...)150 1490 y Ft(4.4)68 +b Fh(-k)44 b Fg(k)l(ernel-arc)l(hitecture)275 1692 y +Fu(Sp)s(eci\014es)29 b(the)i(k)m(ernel)g(arc)m(hitecture)h(of)f(the)f +(system.)41 b(This)30 b(is)h(usually)f(the)g(output)g(of)h(`)p +Fo(uname)e(-m)p Fu(')150 1801 y(\(the)i(\\mac)m(hine")h(v)-5 +b(alue)31 b(gotten)h(from)e Fm(uname)p Fu(\(2\)\).)41 +b(If)30 b(the)h Fm(uname)p Fu(\(2\))g(system)f(call)i(is)f(not)f(a)m(v) +-5 b(ailable,)150 1911 y(the)31 b(v)-5 b(alue)30 b(of)h +Fo(${karch})d Fu(defaults)i(to)i(that)f(of)f Fo(${arch})p +Fu(.)275 2054 y(The)f(only)i(e\013ect)h(of)e(this)h(option)f(is)h(to)g +(set)g(the)f(v)-5 b(ariable)32 b Fo(${karch})p Fu(.)275 +2198 y(This)d(option)i(w)m(ould)f(b)s(e)g(used)f(as)i(follo)m(ws:)390 +2335 y Fo(amd)47 b(-k)g(`arch)f(-k`)h(...)150 2614 y +Ft(4.5)68 b Fh(-l)44 b Fg(log-option)275 2816 y Fu(Selects)31 +b(the)g(form)e(of)i(logging)h(to)f(b)s(e)f(made.)41 b(Sev)m(eral)31 +b(sp)s(ecial)g Fq(log-options)36 b Fu(are)31 b(recognized.)199 +2959 y(1.)61 b(If)39 b Fq(log-option)i Fu(is)e(the)g(string)g(`)p +Fo(syslog)p Fu(',)i Fq(Amd)h Fu(will)e(use)e(the)i Fm(syslog)p +Fu(\(3\))h(mec)m(hanism.)67 b(If)39 b(y)m(our)330 3069 +y(system)31 b(supp)s(orts)d(syslog)j(facilities,)i(then)d(the)h +(default)f(facilit)m(y)j(used)c(is)i(`)p Fo(LOG_DAEMON)p +Fu('.)199 3208 y(2.)61 b(When)43 b(using)g(syslog,)48 +b(if)43 b(y)m(ou)h(wish)f(to)h(c)m(hange)h(the)e(facilit)m(y)-8 +b(,)50 b(app)s(end)42 b(its)h(name)h(to)g(the)g(log)330 +3317 y(option)e(name,)i(delimited)e(b)m(y)f(a)h(single)g(colon.)75 +b(F)-8 b(or)42 b(example,)j(if)c Fq(log-options)47 b +Fu(is)41 b(the)h(string)330 3427 y(`)p Fo(syslog:local7)p +Fu(')27 b(then)j Fm(Amd)e Fu(will)j(log)g(messages)g(via)f +Fm(syslog)p Fu(\(3\))i(using)e(the)g(`)p Fo(LOG_LOCAL7)p +Fu(')d(fa-)330 3536 y(cilit)m(y)-8 b(.)41 b(If)23 b(the)g(facilit)m(y)j +(name)d(sp)s(eci\014ed)g(is)g(not)h(recognized,)i Fq(Amd)h +Fu(will)c(default)h(to)g(`)p Fo(LOG_DAEMON)p Fu('.)330 +3646 y(Note:)48 b(while)33 b(y)m(ou)g(can)h(use)f(an)m(y)g(syslog)h +(facilit)m(y)h(a)m(v)-5 b(ailable)36 b(on)d(y)m(our)g(system,)h(it)g +(is)f(generally)i(a)330 3756 y(bad)30 b(idea)h(to)g(use)f(those)h +(reserv)m(ed)f(for)g(other)h(services)g(suc)m(h)f(as)h(`)p +Fo(kern)p Fu(',)f(`)p Fo(lpr)p Fu(',)g(`)p Fo(cron)p +Fu(',)g(etc.)199 3895 y(3.)61 b(If)35 b Fq(log-option)j +Fu(is)e(the)g(string)g(`)p Fo(/dev/stderr)p Fu(',)f Fq(Amd)k +Fu(will)d(use)f(standard)g(error,)j(whic)m(h)d(is)h(also)330 +4004 y(the)27 b(default)f(target)i(for)e(log)i(messages.)40 +b(T)-8 b(o)27 b(implemen)m(t)g(this,)h Fq(Amd)h Fu(sim)m(ulates)f(the)e +(e\013ect)i(of)f(the)330 4114 y(`)p Fo(/dev/fd)p Fu(')i(driv)m(er.)275 +4286 y(An)m(y)k(other)g(string)g(is)h(tak)m(en)g(as)f(a)h(\014lename)f +(to)h(use)f(for)g(logging.)51 b(Log)34 b(messages)g(are)g(app)s(ended) +150 4396 y(to)g(the)g(\014le)g(if)g(it)g(already)g(exists,)h(otherwise) +f(a)g(new)g(\014le)f(is)h(created.)52 b(The)33 b(\014le)h(is)f(op)s +(ened)g(once)i(and)150 4505 y(then)30 b(held)g(op)s(en,)g(rather)g +(than)g(b)s(eing)g(re-op)s(ened)g(for)g(eac)m(h)i(message.)275 +4649 y(Normally)-8 b(,)42 b(when)37 b(long-running)h(daemons)h(hold)f +(an)g(op)s(en)g(\014le)h(descriptor)g(on)f(a)h(log)h(\014le,)h(it)e(is) +150 4758 y(imp)s(ossible)c(to)h(\\rotate")h(the)e(log)i(\014le)e(and)f +(compress)h(older)g(logs)i(on)e(a)g(daily)h(basis.)54 +b(The)35 b(daemon)150 4868 y(needs)g(to)i(b)s(e)e(told)h(to)g(discard)f +(\(via)i Fm(close)p Fu(\(2\)\))i(its)d(\014le)f(handle,)i(and)e(re-op)s +(en)h(the)g(log)g(\014le.)57 b(This)35 b(is)150 4978 +y(done)30 b(using)g Fo(amq)g(-l)f Fq(log-option)p Fu(.)43 +b(See)31 b(Section)g(7.4.3)h([Amq)e(-l)h(option],)h(page)f(57.)275 +5121 y(If)24 b(the)h(`)p Fo(syslog)p Fu(')f(option)h(is)g(sp)s +(eci\014ed)f(but)g(the)h(system)g(do)s(es)g(not)g(supp)s(ort)e(syslog)j +(or)e(if)h(the)g(named)150 5230 y(\014le)34 b(cannot)h(b)s(e)e(op)s +(ened)h(or)g(created,)i Fq(Amd)h Fu(will)e(use)f(standard)f(error.)52 +b(Error)33 b(messages)i(generated)150 5340 y(b)s(efore)30 +b Fq(Amd)j Fu(has)d(\014nished)f(parsing)h(the)h(command)f(line)h(are)f +(prin)m(ted)g(on)h(standard)e(error.)p eop +%%Page: 31 33 +31 32 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(31)275 366 y(Since)35 +b Fq(Amd)j Fu(tends)d(to)h(generate)h(a)e(lot)h(of)g(logging)h +(information)e(\(esp)s(ecially)i(if)e(debugging)h(w)m(as)150 +476 y(turned)29 b(on\),)h(and)g(due)f(to)i(it)f(b)s(eing)g(an)f(imp)s +(ortan)m(t)h(program)g(running)e(on)i(the)g(system,)h(it)f(is)g +(usually)150 586 y(b)s(est)g(to)h(log)h(to)f(a)f(separate)i(disk)e +(\014le.)40 b(In)30 b(that)h(case)g Fq(Amd)j Fu(w)m(ould)c(b)s(e)g +(started)h(as)f(follo)m(ws:)390 743 y Fo(amd)47 b(-l)g(/var/log/amd)e +(...)150 1071 y Ft(4.6)68 b Fh(-n)275 1292 y Fu(Normalizes)28 +b(the)e(remote)i(hostname)f(b)s(efore)f(using)g(it.)40 +b(Normalization)29 b(is)e(done)f(b)m(y)g(replacing)i(the)150 +1402 y(v)-5 b(alue)24 b(of)g Fo(${rhost})e Fu(with)i(the)g(\(generally) +h(fully)f(quali\014ed\))g(primary)f(name)h(returned)f(b)m(y)g(a)i +(hostname)150 1511 y(lo)s(okup.)275 1674 y(This)h(option)i(should)f(b)s +(e)g(used)g(if)g(sev)m(eral)i(names)f(are)g(used)f(to)h(refer)f(to)i(a) +f(single)g(host)g(in)f(a)h(moun)m(t)150 1784 y(map.)150 +2112 y Ft(4.7)68 b Fh(-o)44 b Fg(op-sys-v)l(er)275 2333 +y Fu(Ov)m(erride)20 b(the)h(compiled-in)g(v)m(ersion)h(n)m(um)m(b)s(er) +d(of)i(the)g(op)s(erating)g(system,)i(with)e Fq(op-sys-v)m(er)p +Fu(.)38 b(Useful)150 2442 y(when)26 b(the)h(built-in)g(v)m(ersion)g(is) +g(not)g(desired)g(for)g(bac)m(kw)m(ard)g(compatibilit)m(y)i(reasons.)40 +b(F)-8 b(or)27 b(example,)i(if)150 2552 y(the)g(built-in)f(v)m(ersion)g +(is)h(`)p Fo(2.5.1)p Fu(',)f(y)m(ou)h(can)f(o)m(v)m(erride)i(it)e(to)h +(`)p Fo(5.5.1)p Fu(',)g(and)e(use)h(older)h(maps)f(that)g(w)m(ere)150 +2662 y(written)i(with)h(the)f(latter)i(in)e(mind.)150 +2990 y Ft(4.8)68 b Fh(-p)275 3211 y Fu(Causes)29 b Fq(Amd)t +Fu('s)g(pro)s(cess)g(id)g(to)i(b)s(e)e(prin)m(ted)g(on)g(standard)g +(output.)40 b(This)29 b(can)h(b)s(e)f(redirected)h(to)h(a)150 +3320 y(suitable)g(\014le)f(for)g(use)h(with)f(kill:)390 +3477 y Fo(amd)47 b(-p)g(>)h(/var/run/amd.pid)43 b(...)275 +3640 y Fu(This)34 b(option)j(only)f(has)f(an)h(a\013ect)h(if)f +Fq(Amd)i Fu(is)e(running)e(in)i(daemon)f(mo)s(de.)57 +b(If)35 b Fq(Amd)k Fu(is)c(started)150 3750 y(with)30 +b(the)h Fo(-D)e(nodaemon)g Fu(debug)g(\015ag,)i(this)f(option)h(is)g +(ignored.)150 4078 y Ft(4.9)68 b Fh(-r)275 4299 y Fu(T)-8 +b(ells)23 b Fq(Amd)i Fu(to)f(restart)f(existing)h(moun)m(ts)e(\(see)i +(Section)f(5.25)h([Inheritance)f(Filesystem],)j(page)d(45\).)150 +4627 y Ft(4.10)68 b Fh(-t)44 b Fg(timeout.retransmit)275 +4848 y Fu(Sp)s(eci\014es)30 b(the)h(RPC)f Fq(timeout)k +Fu(and)c Fq(retransmit)j Fu(in)m(terv)-5 b(als)32 b(used)e(b)m(y)h(the) +g(k)m(ernel)h(to)f(comm)m(unicate)150 4958 y(to)g Fq(Amd)p +Fu(.)40 b(These)30 b(are)h(used)f(to)h(set)g(the)f(`)p +Fo(timeo)p Fu(')g(and)f(`)p Fo(retrans)p Fu(')g(moun)m(t)i(options.)275 +5121 y Fq(Amd)c Fu(relies)f(on)e(the)h(k)m(ernel)g(RPC)f(retransmit)h +(mec)m(hanism)g(to)h(trigger)f(moun)m(t)g(retries.)39 +b(The)24 b(v)-5 b(alue)150 5230 y(of)38 b(this)g(parameter)h(c)m +(hanges)g(the)f(retry)h(in)m(terv)-5 b(al.)65 b(T)-8 +b(o)s(o)38 b(long)h(an)f(in)m(terv)-5 b(al)39 b(giv)m(es)h(p)s(o)s(or)d +(in)m(teractiv)m(e)150 5340 y(resp)s(onse,)30 b(to)s(o)h(short)f(an)g +(in)m(terv)-5 b(al)32 b(causes)e(excessiv)m(e)j(retries.)p +eop +%%Page: 32 34 +32 33 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(32)150 366 y Ft(4.11)68 +b Fh(-v)275 559 y Fu(Prin)m(t)30 b(v)m(ersion)h(information)f(on)h +(standard)e(error)h(and)g(then)g(exit.)42 b(The)30 b(output)g(is)g(of)g +(the)h(form:)390 688 y Fo(Copyright)45 b(\(c\))i(1997-1998)e(Erez)i +(Zadok)390 792 y(Copyright)e(\(c\))i(1990)g(Jan-Simon)e(Pendry)390 +896 y(Copyright)g(\(c\))i(1990)g(Imperial)e(College)h(of)h(Science,)f +(Technology)f(&)i(Medicine)390 999 y(Copyright)e(\(c\))i(1990)g(The)g +(Regents)f(of)h(the)g(University)e(of)i(California.)390 +1103 y(am-utils)f(version)f(6.0a15)h(\(build)h(61\).)390 +1207 y(Built)f(by)i(ezk@cs.columbia.edu)42 b(on)47 b(date)g(Wed)g(Oct)g +(22)g(15:21:03)e(EDT)i(1997.)390 1311 y(cpu=sparc)e(\(big-endian\),)f +(arch=sun4,)h(karch=sun4u.)390 1415 y(full_os=solaris2.5.1,)d(os=sos5,) +k(osver=5.5.1,)e(vendor=sun.)390 1518 y(Map)j(support)f(for:)g(root,)h +(passwd,)f(union,)g(nisplus,)f(nis,)i(ndbm,)f(file,)h(error.)390 +1622 y(AMFS:)f(nfs,)h(link,)f(nfsx,)h(nfsl,)f(host,)g(linkx,)h +(program,)e(union,)h(inherit,)676 1726 y(ufs,)h(lofs,)f(hsfs,)h(pcfs,)f +(auto,)g(direct,)g(toplvl,)g(error.)390 1830 y(FS:)h(autofs,)f +(cachefs,)f(cdfs,)i(lofs,)f(nfs,)h(nfs3,)f(pcfs,)g(tfs,)h(tmpfs,)f +(ufs.)390 1933 y(Network)g(1:)h(wire="mcl-lab-net.cs.col)o(umbi)o(a.ed) +o(u")41 b(\(netnumber=128.59.13\).)390 2037 y(Network)46 +b(2:)h(wire="14-net.cs.columbia)o(.edu)o(")42 b +(\(netnumber=128.59.14\).)390 2141 y(Network)k(3:)h +(wire="old-net.cs.columbi)o(a.ed)o(u")42 b(\(netnumber=128.59.16\).)275 +2276 y Fu(The)35 b(information)h(includes)f(the)h(v)m(ersion)g(n)m(um)m +(b)s(er,)g(n)m(um)m(b)s(er)e(of)i(times)g Fq(Amd)j Fu(w)m(as)d +(compiled)g(on)150 2385 y(the)45 b(lo)s(cal)h(system,)i(release)e(date) +f(and)f(name)h(of)f(the)h(release.)84 b(F)-8 b(ollo)m(wing)47 +b(come)f(the)f(cpu)f(t)m(yp)s(e,)150 2495 y(b)m(yte)i(ordering,)j(and)c +(the)h(arc)m(hitecture)h(and)e(k)m(ernel)h(arc)m(hitecture)h(as)f +Fo(${arch})d Fu(and)i Fo(${karch})p Fu(,)150 2604 y(resp)s(ectiv)m(ely) +-8 b(.)85 b(The)44 b(next)h(line)g(lists)g(the)g(full)f(name)h(of)g +(the)g(system,)j(the)d(v)-5 b(ariables)45 b Fo(${os})f +Fu(and)150 2714 y Fo(${osver})p Fu(,)28 b(and)i(the)h(v)m(endor's)f +(name.)41 b(See)30 b(Chapter)g(2)h([Supp)s(orted)d(Platforms],)k(page)f +(11.)275 2849 y(Then)43 b(come)i(a)f(list)h(of)f(map)g(t)m(yp)s(es)g +(supp)s(orted,)i(\014lesystems)e(in)m(ternally)h(supp)s(orted)e(b)m(y)h +Fq(Amd)150 2958 y Fu(\(AMFS\),)30 b(and)f(generic)h(\014lesystems)f(a)m +(v)-5 b(ailable)31 b(\(FS\).)f(Finally)g(all)g(kno)m(wn)e(net)m(w)m +(orks)i(\(if)f(an)m(y\))h(of)f(this)150 3068 y(host)43 +b(are)h(listed)g(b)m(y)f(name)h(and)e(n)m(um)m(b)s(er.)79 +b(They)43 b(are)g(a)m(v)-5 b(ailable)46 b(via)e(the)g(v)-5 +b(ariables)44 b Fo(${wire})d Fu(or)150 3177 y Fo(${network})p +Fu(,)24 b(and)h Fo(${netnumber})d Fu(\(see)27 b(Section)f(3.3.3)i +([Selectors],)g(page)f(20\))g(or)e(the)h(`)p Fo(in_network)p +Fu(')150 3287 y(selector)32 b(function)e(\(see)h(Section)h(3.3.3.20)h +([in)p 1775 3287 28 4 v 33 w(net)m(w)m(ork)e(Selector)h(F)-8 +b(unction],)31 b(page)g(23\).)150 3545 y Ft(4.12)68 b +Fh(-w)44 b Fg(w)l(ait-timeout)275 3738 y Fu(Selects)35 +b(the)g(in)m(terv)-5 b(al)36 b(in)e(seconds)g(b)s(et)m(w)m(een)i +(unmoun)m(t)d(attempts)j(after)f(the)g(initial)g(time-to-liv)m(e)150 +3847 y(has)30 b(expired.)275 3982 y(This)f(defaults)i(to)g(120)g +(seconds)g(\(t)m(w)m(o)h(min)m(utes\).)150 4240 y Ft(4.13)68 +b Fh(-x)44 b Fg(opts)275 4432 y Fu(Sp)s(eci\014es)26 +b(the)h(t)m(yp)s(e)g(and)g(v)m(erb)s(osit)m(y)h(of)f(log)h(messages.)41 +b Fq(opts)31 b Fu(is)c(a)g(comma)h(separated)g(list)f(selected)150 +4542 y(from)j(the)g(follo)m(wing)i(options:)150 4702 +y Fo(fatal)240 b Fu(F)-8 b(atal)33 b(errors)150 4861 +y Fo(error)240 b Fu(Non-fatal)32 b(errors)150 5021 y +Fo(user)288 b Fu(Non-fatal)32 b(user)e(errors)150 5180 +y Fo(warn)288 b Fu(Reco)m(v)m(erable)33 b(errors)150 +5340 y Fo(warning)144 b Fu(Alias)31 b(for)f Fo(warn)p +eop +%%Page: 33 35 +33 34 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(33)150 366 y Fo(info)288 +b Fu(Information)30 b(messages)150 512 y Fo(map)336 b +Fu(Moun)m(t)31 b(map)f(usage)150 657 y Fo(stats)240 b +Fu(Additional)31 b(statistics)150 803 y Fo(all)336 b +Fu(All)31 b(of)g(the)f(ab)s(o)m(v)m(e)275 948 y(Initially)k(a)f(set)h +(of)g(default)f(logging)i(\015ags)e(is)h(enabled.)49 +b(This)32 b(is)i(as)f(if)g(`)p Fo(-x)d(all,nomap,nostats)p +Fu(')150 1058 y(had)f(b)s(een)g(selected.)42 b(The)30 +b(command)f(line)h(is)g(parsed)f(and)h(logging)h(is)f(con)m(trolled)h +(b)m(y)f(the)g Fo(-x)f Fu(option.)150 1167 y(The)d(v)m(ery)i(\014rst)e +(set)i(of)f(logging)i(\015ags)e(is)g(sa)m(v)m(ed)h(and)e(can)i(not)f(b) +s(e)f(subsequen)m(tly)h(disabled)f(using)h Fq(Amq)p Fu(.)150 +1277 y(This)j(default)g(set)h(of)g(options)f(is)h(useful)e(for)h +(general)i(pro)s(duction)d(use.)275 1404 y(The)21 b(`)p +Fo(info)p Fu(')h(messages)i(include)e(details)h(of)g(what)f(is)h(moun)m +(ted)f(and)g(unmoun)m(ted)g(and)f(when)h(\014lesys-)150 +1514 y(tems)35 b(ha)m(v)m(e)i(timed)e(out.)55 b(If)34 +b(y)m(ou)h(w)m(an)m(t)h(to)g(ha)m(v)m(e)g(the)f(default)h(set)f(of)g +(messages)h(without)f(the)h(`)p Fo(info)p Fu(')150 1623 +y(messages)c(then)e(y)m(ou)h(simply)f(need)h(`)p Fo(-x)f(noinfo)p +Fu('.)40 b(The)30 b(messages)i(giv)m(en)f(b)m(y)g(`)p +Fo(user)p Fu(')f(relate)i(to)f(errors)150 1733 y(in)i(the)h(moun)m(t)f +(maps,)h(so)f(these)h(are)g(useful)e(when)h(new)f(maps)h(are)h +(installed.)50 b(The)33 b(follo)m(wing)i(table)150 1843 +y(lists)c(the)f(syslog)i(priorities)e(used)g(for)g(eac)m(h)i(of)e(the)h +(message)g(t)m(yp)s(es.)150 1988 y Fo(fatal)240 b Fu(`)p +Fo(LOG_CRIT)p Fu(')150 2133 y Fo(error)g Fu(`)p Fo(LOG_ERR)p +Fu(')150 2279 y Fo(user)288 b Fu(`)p Fo(LOG_WARNING)p +Fu(')150 2424 y Fo(warning)144 b Fu(`)p Fo(LOG_WARNING)p +Fu(')150 2570 y Fo(info)288 b Fu(`)p Fo(LOG_INFO)p Fu(')150 +2715 y Fo(debug)240 b Fu(`)p Fo(LOG_DEBUG)p Fu(')150 +2860 y Fo(map)336 b Fu(`)p Fo(LOG_DEBUG)p Fu(')150 3006 +y Fo(stats)240 b Fu(`)p Fo(LOG_INFO)p Fu(')275 3151 y(The)38 +b(options)g(can)h(b)s(e)f(pre\014xed)g(b)m(y)g(the)h(string)f(`)p +Fo(no)p Fu(')h(to)g(indicate)g(that)h(this)e(option)h(should)f(b)s(e) +150 3261 y(turned)j(o\013.)75 b(F)-8 b(or)42 b(example,)k(to)c(obtain)g +(all)h(but)e(`)p Fo(info)p Fu(')g(messages)h(the)g(option)g(`)p +Fo(-x)30 b(all,noinfo)p Fu(')150 3370 y(w)m(ould)g(b)s(e)g(used.)275 +3498 y(If)39 b Fq(Amd)k Fu(w)m(as)d(built)g(with)f(debugging)h(enabled) +g(the)g Fo(debug)e Fu(option)i(is)g(automatically)j(enabled)150 +3607 y(regardless)31 b(of)f(the)h(command)f(line)h(options.)150 +3844 y Ft(4.14)68 b Fh(-y)44 b Fg(NIS-domain)275 4029 +y Fu(Selects)32 b(an)f(alternate)i(NIS)d(domain.)43 b(This)31 +b(is)g(useful)f(for)h(debugging)h(and)e(cross-domain)i(shared)150 +4139 y(moun)m(ting.)50 b(If)32 b(this)i(\015ag)f(is)g(sp)s(eci\014ed,)h +Fq(Amd)i Fu(immediately)f(attempts)f(to)g(bind)e(to)i(a)f(serv)m(er)h +(for)f(this)150 4248 y(domain.)150 4485 y Ft(4.15)68 +b Fh(-C)44 b Fg(cluster-name)275 4670 y Fu(Sp)s(eci\014es)24 +b(the)h(name)g(of)g(the)h(cluster)f(of)g(whic)m(h)g(the)g(lo)s(cal)h +(mac)m(hine)g(is)f(a)g(mem)m(b)s(er.)39 b(The)24 b(only)h(e\013ect)150 +4780 y(is)37 b(to)h(set)g(the)g(v)-5 b(ariable)38 b Fo(${cluster})p +Fu(.)59 b(The)37 b Fq(cluster-name)43 b Fu(is)37 b(will)h(usually)f +(obtained)g(b)m(y)h(running)150 4890 y(another)d(command)f(whic)m(h)g +(uses)h(a)g(database)g(to)g(map)g(the)f(lo)s(cal)i(hostname)f(in)m(to)h +(a)f(cluster)g(name.)150 4999 y Fo(${cluster})30 b Fu(can)i(then)h(b)s +(e)e(used)h(as)h(a)g(selector)h(to)f(restrict)g(moun)m(ting)g(of)g +(replicated)g(data.)48 b(If)32 b(this)150 5109 y(option)g(is)g(not)f +(giv)m(en,)j Fo(${cluster})28 b Fu(has)k(the)f(same)h(v)-5 +b(alue)32 b(as)g Fo(${domain})p Fu(.)42 b(This)31 b(w)m(ould)g(b)s(e)g +(used)g(as)150 5218 y(follo)m(ws:)390 5340 y Fo(amd)47 +b(-C)g(`clustername`)d(...)p eop +%%Page: 34 36 +34 35 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(34)150 366 y Ft(4.16)68 +b Fh(-D)44 b Fg(opts)275 578 y Fu(Con)m(trols)g(the)g(v)m(erb)s(osit)m +(y)h(and)f(co)m(v)m(erage)j(of)d(the)h(debugging)f(trace;)52 +b Fq(opts)c Fu(is)c(a)h(comma)f(sepa-)150 687 y(rated)31 +b(list)h(of)f(debugging)g(options.)43 b(The)31 b Fo(-D)f +Fu(option)i(is)f(only)g(a)m(v)-5 b(ailable)33 b(if)e +Fq(Amd)j Fu(w)m(as)e(compiled)f(with)150 797 y(`)p Fo(-DDEBUG)p +Fu(',)j(or)h(con\014gured)e(with)h Fo(configure)28 b(--enable-debug)p +Fu(.)49 b(The)34 b(memory)g(debugging)h(facil-)150 906 +y(ities)41 b(\(`)p Fo(mem)p Fu('\))f(are)g(only)h(a)m(v)-5 +b(ailable)42 b(if)e Fq(Amd)j Fu(w)m(as)d(compiled)g(with)g(`)p +Fo(-DDEBUG_MEM)p Fu(')d(\(in)j(addition)g(to)150 1016 +y(`)p Fo(-DDEBUG)p Fu('\),)30 b(or)g(con\014gured)g(with)g +Fo(configure)d(--enable-debug=mem)p Fu(.)275 1169 y(The)32 +b(most)h(common)g(options)g(to)g(use)f(are)h(`)p Fo(-D)d(trace)p +Fu(')i(and)g(`)p Fo(-D)e(test)p Fu(')i(\(whic)m(h)g(turns)g(on)g(all)i +(the)150 1279 y(useful)c(debug)f(options\).)42 b(As)30 +b(usual,)g(ev)m(ery)h(option)g(can)g(b)s(e)f(pre\014xed)f(with)h(`)p +Fo(no)p Fu(')g(to)h(turn)e(it)i(o\013.)150 1466 y Fo(all)336 +b Fu(all)31 b(options)150 1644 y Fo(amq)336 b Fu(register)31 +b(for)f(amq)150 1822 y Fo(daemon)192 b Fu(en)m(ter)31 +b(daemon)f(mo)s(de)150 2000 y Fo(fork)288 b Fu(fork)30 +b(serv)m(er)150 2178 y Fo(full)288 b Fu(program)30 b(trace)150 +2356 y Fo(info)288 b Fu(info)36 b(service)i(sp)s(eci\014c)e(debugging)g +(\(hesio)s(d,)i(nis,)g(etc.\))61 b(In)35 b(the)i(case)h(of)e(hesio)s(d) +g(maps,)630 2466 y(turns)29 b(on)h(the)h(hesio)s(d)f(RES)p +1617 2466 28 4 v 32 w(DEBUG)h(in)m(ternal)g(debugging)g(option.)150 +2644 y Fo(mem)336 b Fu(trace)32 b(memory)e(allo)s(cations)150 +2822 y Fo(mtab)288 b Fu(use)30 b(lo)s(cal)i(`)p Fo(./mtab)p +Fu(')d(\014le)150 3000 y Fo(str)336 b Fu(debug)30 b(string)g(m)m +(unging)150 3178 y Fo(test)288 b Fu(full)30 b(debug)g(but)f(no)i +(daemon)150 3356 y Fo(trace)240 b Fu(proto)s(col)31 b(trace)275 +3543 y(Y)-8 b(ou)24 b(ma)m(y)h(also)g(refer)f(to)h(the)f(program)g +(source)h(for)f(a)g(more)g(detailed)i(explanation)f(of)f(the)h(a)m(v)-5 +b(ailable)150 3652 y(options.)150 3956 y Ft(4.17)68 b +Fh(-F)44 b Fg(conf-\014le)275 4167 y Fu(Sp)s(ecify)32 +b(an)i Fq(Amd)j Fu(con\014guration)d(\014le)f Fq(conf-\014le)39 +b Fu(to)c(use.)50 b(F)-8 b(or)34 b(a)g(description)g(of)g(the)g(format) +g(and)150 4277 y(syn)m(tax,)d(see)g(Chapter)e(6)i([Amd)f +(Con\014guration)f(File],)j(page)f(46.)42 b(This)29 b(con\014guration)h +(\014le)h(is)f(used)f(to)150 4387 y(sp)s(ecify)23 b(an)m(y)h(options)f +(in)g(lieu)h(of)f(t)m(yping)h(man)m(y)f(of)h(them)f(on)g(the)h(command) +f(line.)39 b(The)22 b(`)p Fo(amd.conf)p Fu(')g(\014le)150 +4496 y(includes)31 b(directiv)m(es)i(for)e(ev)m(ery)h(command)f(line)g +(option)h Fq(Amd)i Fu(has,)e(and)e(man)m(y)i(more)f(that)h(are)g(only) +150 4606 y(a)m(v)-5 b(ailable)39 b(via)e(the)g(con\014guration)g +(\014le)g(facilit)m(y)-8 b(.)62 b(The)36 b(con\014guration)i(\014le)e +(sp)s(eci\014ed)g(b)m(y)h(this)f(option)150 4715 y(is)31 +b(pro)s(cessed)f(after)h(all)h(other)f(options)g(had)f(b)s(een)h(pro)s +(cessed,)f(regardless)h(of)g(the)g(actual)h(lo)s(cation)h(of)150 +4825 y(this)d(option)h(on)f(the)h(command)f(line.)150 +5129 y Ft(4.18)68 b Fh(-H)275 5340 y Fu(Prin)m(t)30 b(a)h(brief)f(help) +f(and)h(usage)h(string.)p eop +%%Page: 35 37 +35 36 bop 150 -116 a Fu(Chapter)30 b(4:)41 b Fq(Amd)33 +b Fu(Command)d(Line)g(Options)1859 b(35)150 366 y Ft(4.19)68 +b Fh(-O)44 b Fg(op-sys-name)275 559 y Fu(Ov)m(erride)27 +b(the)h(compiled-in)g(name)g(of)f(the)h(op)s(erating)g(system,)h(with)e +Fq(op-sys-name)p Fu(.)40 b(Useful)28 b(when)150 669 y(the)37 +b(built-in)h(name)f(is)g(not)h(desired)f(for)g(bac)m(kw)m(ard)g +(compatibilit)m(y)j(reasons.)61 b(F)-8 b(or)39 b(example,)g(if)f(the) +150 778 y(build)31 b(in)h(name)g(is)h(`)p Fo(sunos5)p +Fu(',)e(y)m(ou)i(can)f(o)m(v)m(erride)i(it)e(to)h(the)g(old)f(name)g(`) +p Fo(sos5)p Fu(',)h(and)e(use)h(older)g(maps)150 888 +y(whic)m(h)e(w)m(ere)h(written)f(with)g(the)h(latter)h(in)e(mind.)150 +1145 y Ft(4.20)68 b Fh(-S)275 1338 y Fu(Do)41 b Fq(not)i +Fu(lo)s(c)m(k)e(the)g(running)e(executable)j(pages)f(of)g +Fq(Amd)i Fu(in)m(to)f(memory)-8 b(.)71 b(T)-8 b(o)41 +b(impro)m(v)m(e)h Fq(Amd)t Fu('s)150 1447 y(p)s(erformance,)d(systems)f +(that)g(supp)s(ort)e(the)i Fm(plo)s(c)m(k)p Fu(\(3\))h(call)g(lo)s(c)m +(k)g(the)f Fq(Amd)i Fu(pro)s(cess)e(in)m(to)g(memory)-8 +b(.)150 1557 y(This)34 b(w)m(a)m(y)i(there)f(is)g(less)g(c)m(hance)h +(the)f(op)s(erating)h(system)f(will)g(sc)m(hedule,)h(page)g(out,)h(and) +d(sw)m(ap)h(the)150 1667 y Fq(Amd)29 b Fu(pro)s(cess)d(as)g(needed.)40 +b(This)25 b(tends)h(to)h(impro)m(v)m(e)g Fq(Amd)t Fu('s)e(p)s +(erformance,)i(at)g(the)f(cost)i(of)e(reserving)150 1776 +y(the)34 b(memory)g(used)f(b)m(y)h(the)g Fq(Amd)j Fu(pro)s(cess)c +(\(making)i(it)f(una)m(v)-5 b(ailable)35 b(for)f(other)g(pro)s +(cesses\).)52 b(If)33 b(this)150 1886 y(b)s(eha)m(vior)d(is)h(not)f +(desired,)h(use)f(the)g Fo(-S)g Fu(option.)150 2143 y +Ft(4.21)68 b Fh(-T)44 b Fg(tag)275 2336 y Fu(Sp)s(ecify)26 +b(a)h(tag)h(to)g(use)e(with)h(`)p Fo(amd.conf)p Fu('.)37 +b(All)28 b(map)e(en)m(tries)i(tagged)g(with)f Fq(tag)36 +b Fu(will)27 b(b)s(e)f(pro)s(cessed.)150 2445 y(Map)31 +b(en)m(tries)i(that)e(are)h(not)g(tagged)g(are)g(alw)m(a)m(ys)h(pro)s +(cessed.)43 b(Map)31 b(en)m(tries)h(that)g(are)g(tagged)h(with)e(a)150 +2555 y(tag)h(other)e(than)g Fq(tag)40 b Fu(will)30 b(not)h(b)s(e)f(pro) +s(cessed.)p eop +%%Page: 36 38 +36 37 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(36)150 366 y Fr(5)80 b(Filesystem)53 +b(T)l(yp)t(es)275 614 y Fu(T)-8 b(o)24 b(moun)m(t)g(a)h(v)m(olume,)h +Fq(Amd)h Fu(m)m(ust)d(b)s(e)f(told)i(the)f(t)m(yp)s(e)g(of)h +(\014lesystem)f(to)h(b)s(e)e(used.)38 b(Eac)m(h)25 b(\014lesystem)150 +724 y(t)m(yp)s(e)31 b(t)m(ypically)h(requires)e(additional)h +(information)g(suc)m(h)f(as)g(the)h(\014leserv)m(er)g(name)f(for)g +(NFS.)275 863 y(F)-8 b(rom)35 b(the)g(p)s(oin)m(t)f(of)h(view)g(of)g +Fq(Amd)p Fu(,)g(a)g Fq(\014lesystem)g Fu(is)g(an)m(ything)g(that)g(can) +g(resolv)m(e)h(an)e(incoming)150 973 y(name)28 b(lo)s(okup.)40 +b(An)28 b(imp)s(ortan)m(t)g(feature)h(is)f(supp)s(ort)e(for)i(m)m +(ultiple)h(\014lesystem)g(t)m(yp)s(es.)40 b(Some)28 b(of)g(these)150 +1082 y(\014lesystems)34 b(are)g(implemen)m(ted)g(in)f(the)h(lo)s(cal)h +(k)m(ernel)f(and)f(some)h(on)f(remote)h(\014leserv)m(ers,)h(whilst)f +(the)150 1192 y(others)c(are)h(implemen)m(ted)g(in)m(ternally)g(b)m(y)g +Fq(Amd)p Fu(.)275 1331 y(The)f(t)m(w)m(o)i(common)f(\014lesystem)g(t)m +(yp)s(es)g(are)g(UFS)f(and)g(NFS.)h(F)-8 b(our)31 b(other)g(user)f +(accessible)j(\014lesys-)150 1441 y(tems)c(\(`)p Fo(link)p +Fu(',)f(`)p Fo(program)p Fu(',)g(`)p Fo(auto)p Fu(')g(and)f(`)p +Fo(direct)p Fu('\))h(are)h(also)g(implemen)m(ted)g(in)m(ternally)g(b)m +(y)f Fq(Amd)k Fu(and)150 1550 y(these)26 b(are)g(describ)s(ed)f(b)s +(elo)m(w.)39 b(There)25 b(are)h(t)m(w)m(o)h(additional)f(\014lesystem)g +(t)m(yp)s(es)g(in)m(ternal)g(to)h Fq(Amd)h Fu(whic)m(h)150 +1660 y(are)h(not)g(directly)g(accessible)i(to)e(the)g(user)f(\(`)p +Fo(inherit)p Fu(')f(and)h(`)p Fo(error)p Fu('\).)40 b(Their)28 +b(use)g(is)h(describ)s(ed)f(since)150 1769 y(they)j(ma)m(y)g(still)g +(ha)m(v)m(e)g(an)g(e\013ect)h(visible)e(to)h(the)g(user.)150 +2038 y Ft(5.1)68 b(Net)l(w)l(ork)47 b(Filesystem)f(\(`)p +Fh(nfs)p Ft('\))275 2236 y Fu(The)29 b Fq(nfs)34 b Fu(\(`)p +Fo(type:=nfs)p Fu('\))29 b(\014lesystem)h(t)m(yp)s(e)h(pro)m(vides)f +(access)i(to)f(Sun's)e(NFS.)150 2375 y(The)h(follo)m(wing)i(options)e +(m)m(ust)h(b)s(e)e(sp)s(eci\014ed:)150 2568 y Fo(rhost)240 +b Fu(the)24 b(remote)g(\014leserv)m(er.)39 b(This)22 +b(m)m(ust)i(b)s(e)e(an)i(en)m(try)f(in)g(the)h(hosts)f(database.)40 +b(IP)23 b(addresses)630 2678 y(are)g(not)f(accepted.)40 +b(The)21 b(default)i(v)-5 b(alue)23 b(is)f(tak)m(en)i(from)d(the)i(lo)s +(cal)g(host)g(name)f(\()p Fo(${host})p Fu(\))630 2787 +y(if)30 b(no)h(other)f(v)-5 b(alue)31 b(is)f(sp)s(eci\014ed.)150 +2951 y Fo(rfs)336 b Fu(the)25 b(remote)h(\014lesystem.)39 +b(If)25 b(no)g(v)-5 b(alue)25 b(is)g(sp)s(eci\014ed)g(for)f(this)h +(option,)i(an)e(in)m(ternal)h(default)630 3061 y(of)31 +b Fo(${path})d Fu(is)i(used.)275 3227 y(NFS)e(moun)m(ts)h(require)g(a)g +(t)m(w)m(o)h(stage)g(pro)s(cess.)40 b(First,)30 b(the)f +Fq(\014le)g(handle)k Fu(of)c(the)g(remote)h(\014le)f(system)150 +3337 y(m)m(ust)36 b(b)s(e)g(obtained)h(from)e(the)i(serv)m(er.)59 +b(Then)35 b(a)i(moun)m(t)f(system)g(call)i(m)m(ust)e(b)s(e)g(done)g(on) +g(the)h(lo)s(cal)150 3446 y(system.)45 b Fq(Amd)35 b +Fu(k)m(eeps)e(a)f(cac)m(he)h(of)f(\014le)g(handles)g(for)f(remote)i +(\014le)f(systems.)45 b(The)32 b(cac)m(he)h(en)m(tries)g(ha)m(v)m(e)150 +3556 y(a)e(lifetime)h(of)e(a)h(few)f(min)m(utes.)275 +3695 y(If)d(a)g(required)g(\014le)g(handle)g(is)h(not)g(in)f(the)g(cac) +m(he,)j Fq(Amd)h Fu(sends)26 b(a)i(request)f(to)i(the)e(remote)h(serv)m +(er)g(to)150 3805 y(obtain)22 b(it.)39 b Fq(Amd)24 b(do)s(es)e(not)i +Fu(w)m(ait)f(for)f(a)g(resp)s(onse;)i(it)e(notes)g(that)h(one)f(of)g +(the)g(lo)s(cations)h(needs)f(retrying,)150 3914 y(but)33 +b(con)m(tin)m(ues)i(with)e(an)m(y)h(remaining)f(lo)s(cations.)52 +b(When)33 b(the)h(\014le)g(handle)f(b)s(ecomes)h(a)m(v)-5 +b(ailable,)37 b(and)150 4024 y(assuming)29 b(none)g(of)g(the)g(other)g +(lo)s(cations)i(w)m(as)e(successfully)g(moun)m(ted,)h +Fq(Amd)i Fu(will)d(retry)g(the)h(moun)m(t.)150 4134 y(This)37 +b(mec)m(hanism)g(allo)m(ws)i(sev)m(eral)g(NFS)f(\014lesystems)f(to)h(b) +s(e)f(moun)m(ted)h(in)f(parallel.)63 b(The)37 b(\014rst)g(one)150 +4243 y(whic)m(h)30 b(resp)s(onds)f(with)h(a)g(v)-5 b(alid)31 +b(\014le)g(handle)f(will)g(b)s(e)g(used.)150 4382 y(An)g(NFS)g(en)m +(try)h(migh)m(t)g(b)s(e:)390 4516 y Fo(jsp)95 b +(host!=charm;type:=nfs;r)o(host)o(:=c)o(harm)o(;rfs)o(:=/)o(home)o +(/cha)o(rm;)o(subl)o(ink:)o(=js)o(p)275 4655 y Fu(The)37 +b(moun)m(t)h(system)g(call)h(and)e(an)m(y)h(unmoun)m(t)f(attempts)i +(are)f(alw)m(a)m(ys)h(done)f(in)f(a)h(new)g(task)g(to)150 +4764 y(a)m(v)m(oid)32 b(the)e(p)s(ossibilit)m(y)h(of)g(blo)s(c)m(king)g +Fq(Amd)p Fu(.)150 5033 y Ft(5.2)68 b(Net)l(w)l(ork)47 +b(Host)e(Filesystem)h(\(`)p Fh(host)p Ft('\))275 5230 +y Fu(The)37 b Fq(host)k Fu(\(`)p Fo(type:=host)p Fu('\))36 +b(\014lesystem)j(allo)m(ws)g(access)h(to)f(the)f(en)m(tire)h(exp)s(ort) +f(tree)h(of)g(an)f(NFS)150 5340 y(serv)m(er.)45 b(The)31 +b(implemen)m(tation)i(is)f(la)m(y)m(ered)h(ab)s(o)m(v)m(e)g(the)f(`)p +Fo(nfs)p Fu(')f(implemen)m(tation)j(so)d(k)m(eep-aliv)m(es)k(w)m(ork)p +eop +%%Page: 37 39 +37 38 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(37)150 366 y(in)29 b(the)h(same)g(w)m(a)m(y)-8 +b(.)42 b(The)29 b(only)h(option)g(whic)m(h)f(needs)g(to)i(b)s(e)e(sp)s +(eci\014ed)g(is)g(`)p Fo(rhost)p Fu(')g(whic)m(h)g(is)h(the)g(name)150 +476 y(of)h(the)f(\014leserv)m(er)h(to)g(moun)m(t.)275 +617 y(The)20 b(`)p Fo(host)p Fu(')h(\014lesystem)h(t)m(yp)s(e)g(w)m +(orks)f(b)m(y)g(querying)g(the)h(moun)m(t)f(daemon)h(on)f(the)h(giv)m +(en)g(\014leserv)m(er)g(to)150 727 y(obtain)f(its)h(exp)s(ort)e(list.) +39 b Fq(Amd)23 b Fu(then)e(obtains)g(\014lehandles)g(for)f(eac)m(h)i +(of)f(the)h(exp)s(orted)e(\014lesystems.)38 b(An)m(y)150 +836 y(errors)33 b(at)h(this)g(stage)h(cause)f(that)g(particular)g +(\014lesystem)g(to)g(b)s(e)f(ignored.)50 b(Finally)35 +b(eac)m(h)g(\014lesystem)150 946 y(is)e(moun)m(ted.)50 +b(Again,)35 b(errors)e(are)g(logged)i(but)e(ignored.)49 +b(One)33 b(common)h(reason)f(for)g(moun)m(ts)g(to)h(fail)150 +1055 y(is)i(that)g(the)g(moun)m(t)f(p)s(oin)m(t)h(do)s(es)f(not)h +(exist.)58 b(Although)35 b Fq(Amd)k Fu(attempts)d(to)h(automatically)h +(create)150 1165 y(the)k(moun)m(t)f(p)s(oin)m(t,)k(it)d(ma)m(y)g(b)s(e) +f(on)h(a)g(remote)h(\014lesystem)e(to)i(whic)m(h)e Fq(Amd)k +Fu(do)s(es)c(not)h(ha)m(v)m(e)h(write)150 1275 y(p)s(ermission.)275 +1416 y(When)23 b(an)g(attempt)h(to)g(unmoun)m(t)e(a)i(`)p +Fo(host)p Fu(')f(\014lesystem)g(moun)m(t)g(fails,)j Fq(Amd)g +Fu(remoun)m(ts)d(an)m(y)h(\014lesys-)150 1525 y(tems)31 +b(whic)m(h)g(had)g(successfully)g(b)s(een)f(unmoun)m(ted.)41 +b(T)-8 b(o)32 b(do)f(this)g Fq(Amd)j Fu(queries)d(the)g(moun)m(t)g +(daemon)150 1635 y(again)k(and)e(obtains)h(a)h(fresh)e(cop)m(y)h(of)g +(the)g(exp)s(ort)g(list.)52 b Fq(Amd)37 b Fu(then)c(tries)i(to)f(moun)m +(t)g(an)m(y)g(exp)s(orted)150 1744 y(\014lesystems)d(whic)m(h)f(are)g +(not)h(curren)m(tly)f(moun)m(ted.)275 1885 y(Sun's)36 +b(automoun)m(ter)j(pro)m(vides)f(a)h(sp)s(ecial)f(`)p +Fo(-hosts)p Fu(')f(map.)64 b(T)-8 b(o)38 b(ac)m(hiev)m(e)j(the)d(same)h +(e\013ect)g(with)150 1995 y Fq(Amd)33 b Fu(requires)d(t)m(w)m(o)i +(steps.)41 b(First)30 b(a)h(moun)m(t)f(map)g(m)m(ust)h(b)s(e)e(created) +j(as)e(follo)m(ws:)390 2130 y Fo(*)334 b(type:=host;rhost:=${key})o +(;fs)o(:=${)o(auto)o(dir)o(}/${)o(rhos)o(t}/)o(root)150 +2271 y Fu(and)30 b(then)g(start)h Fq(Amd)i Fu(with)d(the)h(follo)m +(wing)h(command)390 2407 y Fo(amd)47 b(/net)g(net.map)150 +2548 y Fu(where)41 b(`)p Fo(net.map)p Fu(')f(is)i(the)f(name)h(of)g +(map)f(describ)s(ed)f(ab)s(o)m(v)m(e.)75 b(Note)43 b(that)f(the)g(v)-5 +b(alue)42 b(of)g Fo(${fs})e Fu(is)150 2657 y(o)m(v)m(erridden)27 +b(in)h(the)f(map.)39 b(This)27 b(is)g(done)h(to)g(a)m(v)m(oid)h(a)e +(clash)h(b)s(et)m(w)m(een)g(the)g(moun)m(t)f(tree)h(and)f(an)m(y)h +(other)150 2767 y(\014lesystem)j(already)g(moun)m(ted)f(from)g(the)g +(same)h(\014leserv)m(er.)275 2908 y(If)i(di\013eren)m(t)i(moun)m(t)f +(options)g(are)h(needed)e(for)h(di\013eren)m(t)h(hosts)f(then)f +(additional)i(en)m(tries)g(can)g(b)s(e)150 3017 y(added)30 +b(to)h(the)f(map,)h(for)f(example)390 3153 y Fo(host2)333 +b(opts:=ro,nosuid,soft)150 3294 y Fu(w)m(ould)30 b(soft)h(moun)m(t)f(`) +p Fo(host2)p Fu(')g(read-only)-8 b(.)150 3567 y Ft(5.3)68 +b(Net)l(w)l(ork)47 b(Filesystem)f(Group)e(\(`)p Fh(nfsx)p +Ft('\))275 3767 y Fu(The)37 b Fq(nfsx)42 b Fu(\(`)p Fo(type:=nfsx)p +Fu('\))36 b(\014lesystem)i(allo)m(ws)h(a)f(group)f(of)h(\014lesystems)g +(to)g(b)s(e)f(moun)m(ted)g(from)150 3876 y(a)42 b(single)g(NFS)g(serv)m +(er.)75 b(The)41 b(implemen)m(tation)i(is)f(la)m(y)m(ered)h(ab)s(o)m(v) +m(e)f(the)g(`)p Fo(nfs)p Fu(')f(implemen)m(tation)j(so)150 +3986 y(k)m(eep-aliv)m(es)33 b(w)m(ork)e(in)f(the)g(same)h(w)m(a)m(y)-8 +b(.)275 4127 y(The)29 b(options)i(are)g(the)f(same)h(as)g(for)f(the)h +(`)p Fo(nfs)p Fu(')f(\014lesystem)g(with)g(one)h(di\013erence.)150 +4268 y(The)f(follo)m(wing)i(options)e(m)m(ust)h(b)s(e)e(sp)s +(eci\014ed:)150 4437 y Fo(rhost)240 b Fu(the)24 b(remote)g(\014leserv)m +(er.)39 b(This)22 b(m)m(ust)i(b)s(e)e(an)i(en)m(try)f(in)g(the)h(hosts) +f(database.)40 b(IP)23 b(addresses)630 4547 y(are)g(not)f(accepted.)40 +b(The)21 b(default)i(v)-5 b(alue)23 b(is)f(tak)m(en)i(from)d(the)i(lo)s +(cal)g(host)g(name)f(\()p Fo(${host})p Fu(\))630 4656 +y(if)30 b(no)h(other)f(v)-5 b(alue)31 b(is)f(sp)s(eci\014ed.)150 +4822 y Fo(rfs)336 b Fu(as)31 b(a)h(list)f(of)h(\014lesystems)f(to)h +(moun)m(t.)42 b(The)31 b(list)g(is)h(in)e(the)h(form)g(of)g(a)h(comma)f +(separated)630 4932 y(strings.)150 5101 y(F)-8 b(or)31 +b(example:)390 5236 y Fo(pub)95 b(type:=nfsx;rhost:=gould)o(;\\)629 +5340 y(rfs:=/public,/,graphics)o(,use)o(net)o(;fs:)o(=${a)o(uto)o(dir}) +o(/${r)o(hos)o(t}/r)o(oot)p eop +%%Page: 38 40 +38 39 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(38)275 366 y(The)31 b(\014rst)h(string)g +(de\014nes)g(the)g(ro)s(ot)h(of)g(the)f(tree,)i(and)e(is)g(applied)g +(as)h(a)g(pre\014x)e(to)i(the)g(remaining)150 476 y(mem)m(b)s(ers)27 +b(of)g(the)h(list)g(whic)m(h)f(de\014ne)g(the)h(individual)f +(\014lesystems.)40 b(The)27 b(\014rst)f(string)i(is)f +Fq(not)j Fu(used)d(as)h(a)150 586 y(\014lesystem)f(name.)39 +b(A)27 b(parallel)g(op)s(eration)g(is)f(used)g(to)h(determine)g(the)f +(lo)s(cal)i(moun)m(t)e(p)s(oin)m(ts)h(to)g(ensure)150 +695 y(a)k(consisten)m(t)g(la)m(y)m(out)i(of)d(a)h(tree)g(of)g(moun)m +(ts.)275 829 y(Here,)56 b(the)51 b Fq(three)56 b Fu(\014lesystems,)g(`) +p Fo(/public)p Fu(',)e(`)p Fo(/public/graphics)p Fu(')47 +b(and)j(`)p Fo(/public/usenet)p Fu(',)150 938 y(w)m(ould)30 +b(b)s(e)g(moun)m(ted.)275 1072 y(A)i(lo)s(cal)i(moun)m(t)e(p)s(oin)m +(t,)h Fo(${fs})p Fu(,)f Fq(m)m(ust)j Fu(b)s(e)c(sp)s(eci\014ed.)47 +b(The)32 b(default)g(lo)s(cal)i(moun)m(t)e(p)s(oin)m(t)h(will)g(not)150 +1181 y(w)m(ork)20 b(correctly)i(in)e(the)g(general)i(case.)38 +b(A)21 b(suggestion)g(is)f(to)h(use)f(`)p Fo +(fs:=${autodir}/${rhost}/ro)o(ot)p Fu('.)p 3765 1199 +42 81 v 150 1436 a Ft(5.4)68 b(Unix)45 b(Filesystem)i(\(`)p +Fh(ufs)p Ft(',)d(`)p Fh(xfs)p Ft(',)h(or)g(`)p Fh(efs)p +Ft('\))275 1627 y Fu(The)d Fq(ufs)k Fu(\(`)p Fo(type:=ufs)p +Fu('\))c(\014lesystem)h(t)m(yp)s(e)g(pro)m(vides)g(access)i(to)f(the)f +(system's)g(standard)f(disk)150 1737 y(\014lesystem|usually)30 +b(a)h(deriv)-5 b(ativ)m(e)32 b(of)f(the)f(Berk)m(eley)i(F)-8 +b(ast)32 b(Filesystem.)150 1871 y(The)e(follo)m(wing)i(option)f(m)m +(ust)f(b)s(e)g(sp)s(eci\014ed:)150 2052 y Fo(dev)336 +b Fu(the)31 b(blo)s(c)m(k)f(sp)s(ecial)h(device)h(to)f(b)s(e)f(moun)m +(ted.)275 2209 y(A)g(UFS)g(en)m(try)h(migh)m(t)g(b)s(e:)390 +2337 y Fo(jsp)142 b(host==charm;type:=ufs;dev:)o(=/d)o(ev/s)o(d0d;)o +(sub)o(link)o(:=js)o(p)275 2470 y Fu(UFS)42 b(is)h(the)g(default)g +(Unix)g(disk-based)f(\014le)h(system,)j(whic)m(h)d(Am-utils)g(pic)m(ks) +g(up)f(during)g(the)150 2580 y(auto)s(con\014guration)27 +b(phase.)39 b(Some)26 b(systems)g(ha)m(v)m(e)h(more)g(than)e(one)i(t)m +(yp)s(e,)g(suc)m(h)f(as)g(IRIX,)g(that)h(comes)150 2690 +y(with)i(EFS)g(\(Exten)m(t)h(File)h(System\))e(and)g(XFS)g(\(Extended)g +(File)h(System\).)41 b(In)28 b(those)i(cases,)h(y)m(ou)e(ma)m(y)150 +2799 y(explicitly)j(set)f(the)f(\014le)h(system)f(t)m(yp)s(e,)h(b)m(y)f +(using)g(en)m(tries)i(suc)m(h:)390 2927 y Fo(ez1)142 +b(type:=efs;dev:=/dev/xd0a)390 3031 y(ez2)g(type:=xfs;dev:=/dev/sd3c) +150 3285 y Ft(5.5)68 b(Cac)l(hing)46 b(Filesystem)g(\(`)p +Fh(cachefs)p Ft('\))275 3477 y Fu(The)36 b Fq(cac)m(hefs)41 +b Fu(\(`)p Fo(type:=cachefs)p Fu('\))35 b(\014lesystem)i(cac)m(hes)h +(\014les)e(from)g(one)h(lo)s(cation)i(on)m(to)e(another,)150 +3586 y(presumably)j(pro)m(viding)h(faster)g(access.)73 +b(It)41 b(is)g(particularly)h(useful)e(to)i(cac)m(he)g(from)f(a)g +(larger)h(and)150 3696 y(remote)31 b(\(slo)m(w)m(er\))h(NFS)f +(partition)g(to)g(a)g(smaller)g(and)e(lo)s(cal)j(\(faster\))f(UFS)g +(directory)-8 b(.)150 3829 y(The)30 b(follo)m(wing)i(options)e(m)m(ust) +h(b)s(e)e(sp)s(eci\014ed:)150 4011 y Fo(cachedir)96 b +Fu(the)31 b(directory)f(where)g(the)h(cac)m(he)h(is)e(stored.)150 +4168 y Fo(rfs)336 b Fu(the)31 b(path)f(name)g(to)h(the)g(\\bac)m(k)g +(\014le)g(system")g(to)g(b)s(e)f(cac)m(hed)h(from.)150 +4326 y Fo(fs)384 b Fu(the)35 b(\\fron)m(t)g(\014le)f(system")h(moun)m +(t)g(p)s(oin)m(t)f(to)h(the)g(cac)m(hed)h(\014les,)f(where)f +Fq(Amd)k Fu(will)d(set)g(a)630 4435 y(sym)m(b)s(olic)c(link)f(p)s(oin)m +(ting)h(to.)275 4593 y(A)f(Cac)m(heFS)h(en)m(try)g(for,)f(sa)m(y)-8 +b(,)32 b(the)e(`)p Fo(/import)p Fu(')f Fq(Amd)34 b Fu(moun)m(t)c(p)s +(oin)m(t,)h(migh)m(t)g(b)s(e:)390 4720 y Fo(copt)94 b +(type:=cachefs;cachedir:=/c)o(ach)o(e;rf)o(s:=/)o(imp)o(ort/)o(opt;)o +(fs:)o(=/n/)o(impo)o(rt/)o(copt)275 4854 y Fu(Access)23 +b(to)h(the)f(pathname)g(`)p Fo(/import/copt)p Fu(')d(will)j(follo)m(w)h +(a)f(sym)m(b)s(olic)h(link)e(to)i(`)p Fo(/n/import/copt)p +Fu('.)150 4963 y(The)30 b(latter)i(is)e(the)h(moun)m(t)f(p)s(oin)m(t)h +(for)f(a)h(cac)m(hing)h(\014le)e(system,)h(that)g(cac)m(hes)h(from)e(`) +p Fo(/import/opt)p Fu(')e(to)150 5073 y(`)p Fo(/cache)p +Fu('.)275 5206 y Fm(Ca)m(v)m(eats)p Fu(:)199 5340 y(1.)61 +b(This)30 b(\014le)g(system)h(is)f(curren)m(tly)g(only)h(implemen)m +(ted)g(for)f(Solaris)h(2.x!)p eop +%%Page: 39 41 +39 40 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(39)199 366 y(2.)61 b(Before)49 b(b)s(eing)e(used)g +(for)h(the)g(\014rst)f(time,)54 b(the)48 b(cac)m(he)h(directory)g +Fq(m)m(ust)g Fu(b)s(e)f(initialized)h(with)330 476 y(`)p +Fo(cfsadmin)28 b(-c)i Fq(cac)m(hedir)7 b Fu('.)42 b(See)30 +b(the)h(man)m(ual)f(page)i(for)e Fm(cfsadmin)p Fu(\(1M\))h(for)f(more)g +(information.)199 604 y(3.)61 b(The)37 b(\\bac)m(k)h(\014le)f(system")h +(moun)m(ted)f(m)m(ust)g(b)s(e)g(a)h(complete)g(\014le)g(system,)h(not)e +(a)h(sub)s(directory)330 713 y(thereof;)31 b(otherwise)g(y)m(ou)g(will) +f(get)i(an)e(error)g(\\In)m(v)-5 b(alid)31 b(Argumen)m(t".)199 +841 y(4.)61 b(If)22 b Fq(Amd)j Fu(ab)s(orts)e(abnormally)-8 +b(,)24 b(the)f(state)h(of)f(the)f(cac)m(he)i(ma)m(y)f(b)s(e)f +(inconsisten)m(t,)k(requiring)c(running)330 950 y(the)27 +b(command)g(`)p Fo(fsck)i(-F)h(cachefs)e Fq(cac)m(hedir)7 +b Fu('.)41 b(Otherwise)26 b(y)m(ou)i(will)f(get)h(the)f(error)g(\\No)h +(Space)330 1060 y(Left)j(on)f(Device".)150 1297 y Ft(5.6)68 +b(CD-R)l(OM)45 b(Filesystem)h(\(`)p Fh(cdfs)p Ft('\))275 +1482 y Fu(The)28 b Fq(cdfs)k Fu(\(`)p Fo(type:=cdfs)p +Fu('\))27 b(\014lesystem)i(moun)m(ts)f(a)h(CD-R)m(OM)h(with)e(an)g +(ISO9660)i(format)f(\014lesys-)150 1592 y(tem)i(on)f(it.)150 +1720 y(The)g(follo)m(wing)i(option)f(m)m(ust)f(b)s(e)g(sp)s(eci\014ed:) +150 1883 y Fo(dev)336 b Fu(the)31 b(blo)s(c)m(k)f(sp)s(ecial)h(device)h +(to)f(b)s(e)f(moun)m(ted.)275 2029 y(A)g(cdfs)g(en)m(try)g(migh)m(t)i +(b)s(e:)390 2151 y Fo(cdfs)285 b(os==sunos4;type:=cdfs;dev)o(:=/d)o +(ev/s)o(r0)41 b(\\)867 2255 y(os==sunos5;type:=cdfs;dev)o(:=/d)o(ev/d)o +(sk/)o(c0t6)o(d0s2)150 2491 y Ft(5.7)68 b(Lo)t(opbac)l(k)45 +b(Filesystem)h(\(`)p Fh(lofs)p Ft('\))275 2677 y Fu(The)36 +b Fq(lofs)k Fu(\(`)p Fo(type:=lofs)p Fu('\))35 b(\014lesystem)i(is)g +(also)g(called)h(the)e(lo)s(opbac)m(k)i(\014lesystem.)60 +b(It)36 b(moun)m(ts)h(a)150 2787 y(lo)s(cal)d(directory)f(on)f +(another,)i(th)m(us)e(pro)m(viding)h(moun)m(t-time)g(binding)f(to)h +(another)g(lo)s(cation)h(\(unlik)m(e)150 2896 y(sym)m(b)s(olic)d +(links\).)275 3024 y(The)25 b(lo)s(opbac)m(k)h(\014lesystem)g(is)f +(particularly)i(useful)d(within)h(the)h(con)m(text)h(of)f(a)g(c)m(hro)s +(ot-ed)g(directory)150 3133 y(\(via)31 b Fm(c)m(hro)s(ot)p +Fu(\(2\)\),)j(to)d(pro)m(vide)f(access)i(to)f(directories)g(otherwise)g +(inaccessible.)150 3261 y(The)f(follo)m(wing)i(option)f(m)m(ust)f(b)s +(e)g(sp)s(eci\014ed:)150 3425 y Fo(rfs)336 b Fu(the)31 +b(pathname)f(to)h(b)s(e)f(moun)m(ted)g(on)g(top)h(of)f +Fo(${fs})p Fu(.)275 3570 y(Usually)-8 b(,)36 b(the)e(FTP)g(serv)m(er)h +(runs)e(in)h(a)g(c)m(hro)s(ot-ed)i(en)m(vironmen)m(t,)g(for)e(securit)m +(y)h(reasons.)52 b(In)34 b(this)150 3680 y(example,)27 +b(lofs)f(is)g(used)e(to)j(pro)m(vide)e(a)h(sub)s(directory)e(within)h +(a)h(user's)f(home)h(directory)-8 b(,)27 b(also)g(a)m(v)-5 +b(ailable)150 3789 y(for)30 b(public)g(ftp.)390 3911 +y Fo(lofs)285 b(type:=lofs;rfs:=/home/ezk)o(/myf)o(tpdi)o(r;f)o(s:=/)o +(usr/)o(ftp)o(/pub)o(/ezk)150 4148 y Ft(5.8)68 b(Memory/RAM)45 +b(Filesystem)h(\(`)p Fh(mfs)p Ft('\))275 4334 y Fu(The)d +Fq(mfs)48 b Fu(\(`)p Fo(type:=mfs)p Fu('\))43 b(\014lesystem)i(is)f(a)m +(v)-5 b(ailable)47 b(in)d(4.4BSD,)i(Lin)m(ux,)i(and)c(other)h(systems.) +150 4443 y(It)38 b(creates)h(a)g(\014lesystem)f(in)f(a)i(p)s(ortion)e +(of)h(the)g(system's)h(memory)-8 b(,)40 b(th)m(us)d(pro)m(viding)h(v)m +(ery)h(fast)f(\014le)150 4553 y(\(v)m(olatile\))c(access.)275 +4680 y(XXX:)d(THIS)e(FILESYSTEM)g(IS)h(NOT)g(IMPLEMENTED)g(YET!)150 +4917 y Ft(5.9)68 b(Null)46 b(Filesystem)g(\(`)p Fh(nullfs)p +Ft('\))275 5103 y Fu(The)31 b Fq(n)m(ullfs)k Fu(\(`)p +Fo(type:=nullfs)p Fu('\))29 b(\014lesystem)j(is)g(a)m(v)-5 +b(ailable)34 b(from)e(4.4BSD,)h(and)e(is)h(v)m(ery)g(similar)g(to)150 +5212 y(the)f(lo)s(opbac)m(k)g(\014lesystem,)g Fq(lofs)p +Fu(.)275 5340 y(XXX:)g(THIS)e(FILESYSTEM)g(IS)h(NOT)g(IMPLEMENTED)g +(YET!)p eop +%%Page: 40 42 +40 41 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(40)150 366 y Ft(5.10)68 b(Flopp)l(y)45 +b(Filesystem)h(\(`)p Fh(pcfs)p Ft('\))275 560 y Fu(The)35 +b Fq(p)s(cfs)k Fu(\(`)p Fo(type:=pcfs)p Fu('\))c(\014lesystem)h(moun)m +(ts)g(a)h(\015opp)m(y)f(previously)g(formatted)g(for)g(the)h(MS-)150 +670 y(DOS)30 b(format.)150 805 y(The)g(follo)m(wing)i(option)f(m)m(ust) +f(b)s(e)g(sp)s(eci\014ed:)150 991 y Fo(dev)336 b Fu(the)31 +b(blo)s(c)m(k)f(sp)s(ecial)h(device)h(to)f(b)s(e)f(moun)m(ted.)275 +1151 y(A)g(p)s(cfs)f(en)m(try)i(migh)m(t)g(b)s(e:)390 +1281 y Fo(pcfs)285 b(os==sunos4;type:=pcfs;dev)o(:=/d)o(ev/f)o(d0)41 +b(\\)867 1385 y(os==sunos5;type:=pcfs;dev)o(:=/d)o(ev/d)o(isk)o(ette) +150 1644 y Ft(5.11)68 b(T)-11 b(ranslucen)l(t)45 b(Filesystem)h(\(`)p +Fh(tfs)p Ft('\))275 1838 y Fu(The)29 b Fq(tfs)34 b Fu(\(`)p +Fo(type:=tfs)p Fu('\))29 b(\014lesystem)i(is)g(an)f(older)g(v)m(ersion) +h(of)g(the)f(4.4BSD)i Fq(unionfs)p Fu(.)275 1973 y(XXX:)f(THIS)e +(FILESYSTEM)g(IS)h(NOT)g(IMPLEMENTED)g(YET!)150 2232 +y Ft(5.12)68 b(Shared)45 b(Memory)p Fh(+)p Ft(Sw)l(ap)g(Filesystem)h +(\(`)p Fh(tmpfs)p Ft('\))275 2426 y Fu(The)37 b Fq(tmpfs)j +Fu(\(`)p Fo(type:=tmpfs)p Fu('\))c(\014lesystem)i(shares)f(memory)h(b)s +(et)m(w)m(een)g(a)g(the)g(sw)m(ap)f(device)i(and)150 +2535 y(the)e(rest)g(of)g(the)g(system.)60 b(It)37 b(is)g(generally)h +(used)f(to)g(pro)m(vide)g(a)g(fast)h(access)g(`)p Fo(/tmp)p +Fu(')e(directory)-8 b(,)40 b(one)150 2645 y(that)33 b(uses)f(memory)g +(that)g(is)h(otherwise)f(un)m(used.)45 b(This)32 b(\014lesystem)g(is)g +(a)m(v)-5 b(ailable)35 b(in)d(SunOS)e(4.x)j(and)150 2754 +y(5.x.)275 2890 y(XXX:)e(THIS)e(FILESYSTEM)g(IS)h(NOT)g(IMPLEMENTED)g +(YET!)150 3149 y Ft(5.13)68 b(User)46 b(ID)f(Mapping)f(Filesystem)j +(\(`)p Fh(umapfs)p Ft('\))275 3343 y Fu(The)21 b Fq(umapfs)j +Fu(\(`)p Fo(type:=umapfs)p Fu('\))19 b(\014lesystem)j(maps)f(User)g +(IDs)h(of)g(\014le)f(o)m(wnership,)i(and)e(is)h(a)m(v)-5 +b(ailable)150 3452 y(from)30 b(4.4BSD.)275 3588 y(XXX:)h(THIS)e +(FILESYSTEM)g(IS)h(NOT)g(IMPLEMENTED)g(YET!)150 3847 +y Ft(5.14)68 b(Program)46 b(Filesystem)g(\(`)p Fh(program)p +Ft('\))275 4040 y Fu(The)34 b Fq(program)g Fu(\(`)p Fo(type:=program)p +Fu('\))f(\014lesystem)i(t)m(yp)s(e)g(allo)m(ws)h(a)f(program)g(to)h(b)s +(e)e(run)f(whenev)m(er)150 4150 y(a)f(moun)m(t)f(or)h(unmoun)m(t)e(is)h +(required.)44 b(This)30 b(allo)m(ws)j(easy)f(addition)g(of)f(supp)s +(ort)f(for)h(other)h(\014lesystem)150 4260 y(t)m(yp)s(es,)g(suc)m(h)g +(as)g(MIT's)f(Remote)i(Virtual)f(Disk)h(\(R)-10 b(VD\))32 +b(whic)m(h)g(has)f(a)h(programmatic)h(in)m(terface)g(via)150 +4369 y(the)e(commands)f(`)p Fo(rvdmount)p Fu(')e(and)i(`)p +Fo(rvdunmount)p Fu('.)150 4504 y(The)g(follo)m(wing)i(options)e(m)m +(ust)h(b)s(e)e(sp)s(eci\014ed:)150 4690 y Fo(mount)240 +b Fu(the)31 b(program)f(whic)m(h)g(will)h(p)s(erform)d(the)j(moun)m(t.) +150 4851 y Fo(unmount)144 b Fu(the)31 b(program)f(whic)m(h)g(will)h(p)s +(erform)d(the)j(unmoun)m(t.)275 5011 y(The)23 b(exit)h(co)s(de)g(from)f +(these)h(t)m(w)m(o)h(programs)e(is)h(in)m(terpreted)g(as)g(a)f(Unix)h +(error)f(co)s(de.)39 b(As)23 b(usual,)i(exit)150 5121 +y(co)s(de)34 b(zero)h(indicates)g(success.)52 b(T)-8 +b(o)35 b(execute)g(the)g(program)f Fq(Amd)j Fu(splits)d(the)g(string)g +(on)g(whitespace)150 5230 y(to)f(create)h(an)e(arra)m(y)h(of)g +(substrings.)45 b(Single)33 b(quotes)f(`)p Fo(')p Fu(')h(can)g(b)s(e)e +(used)h(to)h(quote)g(whitespace)g(if)f(that)150 5340 +y(is)e(required)g(in)g(an)g(argumen)m(t.)41 b(There)30 +b(is)h(no)f(w)m(a)m(y)h(to)g(escap)s(e)g(or)g(c)m(hange)g(the)g(quote)g +(c)m(haracter.)p eop +%%Page: 41 43 +41 42 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(41)275 366 y(T)-8 b(o)37 b(run)e(the)i(program)g +(`)p Fo(rvdmount)p Fu(')e(with)i(a)g(host)g(name)g(and)g(\014lesystem)g +(as)g(argumen)m(ts)g(w)m(ould)150 476 y(b)s(e)73 b(sp)s(eci\014ed)g(b)m +(y)g(`)p Fo(fs:=${autodir}${path};mou)o(nt:=)o("/e)o(tc/r)o(vdmo)o(unt) +24 b(rvdmount)k(fserver)150 586 y(${fs}")p Fu('.)275 +745 y(The)41 b(\014rst)h(elemen)m(t)h(in)f(the)h(arra)m(y)f(is)h(tak)m +(en)g(as)f(the)h(pathname)f(of)g(the)g(program)g(to)h(execute.)150 +854 y(The)36 b(other)h(mem)m(b)s(ers)e(of)i(the)g(arra)m(y)g(form)f +(the)g(argumen)m(t)h(v)m(ector)h(to)f(b)s(e)f(passed)g(to)h(the)g +(program,)150 964 y Fq(including)28 b(argumen)m(t)h(zero)p +Fu(.)41 b(This)27 b(means)i(that)g(the)g(split)f(string)h(m)m(ust)f(ha) +m(v)m(e)i(at)f(least)h(t)m(w)m(o)f(elemen)m(ts.)150 1074 +y(The)34 b(program)h(is)g(directly)h(executed)f(b)m(y)g +Fq(Amd)p Fu(,)h(not)f(via)g(a)h(shell.)54 b(This)34 b(means)h(that)g +(scripts)g(m)m(ust)150 1183 y(b)s(egin)30 b(with)g(a)h +Fo(#!)f Fu(in)m(terpreter)g(sp)s(eci\014cation.)275 1342 +y(If)f(a)h(\014lesystem)g(t)m(yp)s(e)g(is)g(to)h(b)s(e)e(hea)m(vily)i +(used,)f(it)g(ma)m(y)h(b)s(e)e(w)m(orth)m(while)h(adding)g(a)g(new)g +(\014lesystem)150 1452 y(t)m(yp)s(e)h(in)m(to)g Fq(Amd)p +Fu(,)f(but)g(for)g(most)g(uses)g(the)h(program)f(\014lesystem)h(should) +e(su\016ce.)275 1611 y(When)39 b(the)i(program)e(is)h(run,)i(standard)d +(input)g(and)g(standard)g(error)h(are)g(inherited)g(from)g(the)150 +1721 y(curren)m(t)32 b(v)-5 b(alues)33 b(used)e(b)m(y)h +Fq(Amd)p Fu(.)46 b(Standard)31 b(output)h(is)g(a)g(duplicate)h(of)g +(standard)e(error.)46 b(The)31 b(v)-5 b(alue)150 1830 +y(sp)s(eci\014ed)30 b(with)g(the)g Fo(-l)g Fu(command)g(line)h(option)g +(has)f(no)g(e\013ect)i(on)e(standard)g(error.)150 2149 +y Ft(5.15)68 b(Sym)l(b)t(olic)45 b(Link)g(Filesystem)h(\(`)p +Fh(link)p Ft('\))275 2366 y Fu(Eac)m(h)d(\014lesystem)h(t)m(yp)s(e)f +(creates)i(a)e(sym)m(b)s(olic)h(link)f(to)h(p)s(oin)m(t)f(from)f(the)i +(v)m(olume)g(name)f(to)h(the)150 2476 y(ph)m(ysical)33 +b(moun)m(t)f(p)s(oin)m(t.)46 b(The)32 b(`)p Fo(link)p +Fu(')f(\014lesystem)h(do)s(es)g(the)h(same)f(without)g(an)m(y)h(other)f +(side)g(e\013ects.)150 2586 y(This)e(allo)m(ws)h(an)m(y)g(part)f(of)h +(the)f(mac)m(hines)h(name)g(space)g(to)g(b)s(e)e(accessed)j(via)f +Fq(Amd)p Fu(.)275 2745 y(One)j(common)g(use)g(for)h(the)f(symlink)g +(\014lesystem)h(is)g(`)p Fo(/homes)p Fu(')e(whic)m(h)h(can)h(b)s(e)f +(made)g(to)i(con)m(tain)150 2854 y(an)29 b(en)m(try)f(for)h(eac)m(h)h +(user)d(whic)m(h)i(p)s(oin)m(ts)f(to)i(their)e(\(auto-moun)m(ted\))j +(home)d(directory)-8 b(.)41 b(Although)29 b(this)150 +2964 y(ma)m(y)i(seem)g(rather)f(exp)s(ensiv)m(e,)h(it)g(pro)m(vides)f +(a)h(great)g(deal)g(of)g(administrativ)m(e)h(\015exibilit)m(y)-8 +b(.)150 3123 y(The)30 b(follo)m(wing)i(option)f(m)m(ust)f(b)s(e)g +(de\014ned:)150 3319 y Fo(fs)384 b Fu(The)32 b(v)-5 b(alue)34 +b(of)f Fq(fs)j Fu(option)d(sp)s(eci\014es)g(the)g(destination)g(of)g +(the)h(link,)f(as)g(mo)s(di\014ed)f(b)m(y)h(the)630 3429 +y Fq(sublink)26 b Fu(option.)38 b(If)22 b Fq(sublink)k +Fu(is)c(non-n)m(ull,)h(it)f(is)g(app)s(ended)e(to)j Fo(${fs}/)d +Fu(and)h(the)h(resulting)630 3538 y(string)30 b(is)h(used)e(as)i(the)g +(target.)275 3735 y(The)f(`)p Fo(link)p Fu(')f(\014lesystem)i(can)g(b)s +(e)f(though)m(t)h(of)g(as)g(iden)m(tical)h(to)f(the)g(`)p +Fo(ufs)p Fu(')f(\014lesystem)h(but)f(without)150 3844 +y(actually)i(moun)m(ting)f(an)m(ything.)275 4004 y(An)f(example)h(en)m +(try)f(migh)m(t)h(b)s(e:)390 4157 y Fo(jsp)142 b +(host==charm;type:=link;fs:)o(=/h)o(ome/)o(char)o(m;s)o(ubli)o(nk:=)o +(jsp)275 4316 y Fu(whic)m(h)30 b(w)m(ould)g(return)f(a)i(sym)m(b)s +(olic)g(link)f(p)s(oin)m(ting)g(to)i(`)p Fo(/home/charm/jsp)p +Fu('.)150 4635 y Ft(5.16)68 b(Sym)l(b)t(olic)45 b(Link)g(Filesystem)h +(I)t(I)f(\(`)p Fh(linkx)p Ft('\))275 4852 y Fu(The)28 +b Fq(linkx)34 b Fu(\(`)p Fo(type:=linkx)p Fu('\))27 b(\014lesystem)i(t) +m(yp)s(e)g(is)g(iden)m(tical)h(to)f(`)p Fo(link)p Fu(')f(with)h(the)g +(exception)g(that)150 4962 y(the)i(target)g(of)g(the)g(link)f(m)m(ust)g +(exist.)42 b(Existence)31 b(is)f(c)m(hec)m(k)m(ed)j(with)d(the)g +Fm(lstat)p Fu(\(2\))j(system)e(call.)275 5121 y(The)d(`)p +Fo(linkx)p Fu(')h(\014lesystem)g(t)m(yp)s(e)h(is)f(particularly)h +(useful)f(for)g(wildcard)g(map)g(en)m(tries.)41 b(In)28 +b(this)i(case,)150 5230 y(a)e(list)h(of)f(p)s(ossible)f(targets)j(can)e +(b)s(e)f(giv)m(en)i(and)e Fq(Amd)k Fu(will)d(c)m(ho)s(ose)h(the)f +(\014rst)g(one)g(whic)m(h)f(exists)i(on)f(the)150 5340 +y(lo)s(cal)k(mac)m(hine.)p eop +%%Page: 42 44 +42 43 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(42)150 366 y Ft(5.17)68 b(NFS-Link)44 +b(Filesystem)j(\(`)p Fh(nfsl)p Ft('\))275 556 y Fu(The)24 +b Fq(nfsl)j Fu(\(`)p Fo(type:=nfsl)p Fu('\))c(\014lesystem)i(t)m(yp)s +(e)g(is)g(a)g(com)m(bination)g(of)g(t)m(w)m(o)h(others:)38 +b(`)p Fo(link)p Fu(')24 b(and)g(`)p Fo(nfs)p Fu('.)150 +666 y(If)34 b(the)g(lo)s(cal)i(host)e(name)g(is)h(equal)g(to)g(the)f(v) +-5 b(alue)35 b(of)f Fo(${rhost})p Fu(,)f(or)i(if)f(the)g(target)i +(pathname)e(listed)150 775 y(in)j Fo(${fs})g Fu(exists,)j(`)p +Fo(nfsl)p Fu(')d(will)i(b)s(eha)m(v)m(e)f(exactly)h(as)f(`)p +Fo(type:=link)p Fu(',)g(and)f(refer)h(to)g(the)g(target)i(as)e(a)150 +885 y(sym)m(b)s(olic)24 b(link.)38 b(If)24 b(the)f(lo)s(cal)i(host)f +(name)g(is)f(not)h(equal)g(to)h(the)f(v)-5 b(alue)24 +b(of)g Fo(${rhost})p Fu(,)f(or)g(if)h(the)g(target)h(of)150 +995 y(the)e(link)h(do)s(es)f(not)g(exist,)j Fq(Amd)g +Fu(will)e(treat)g(it)g(as)g(`)p Fo(type:=nfs)p Fu(',)f(and)f(will)i +(moun)m(t)f(a)h(remote)g(pathname)150 1104 y(for)30 b(it.)275 +1236 y(The)23 b(`)p Fo(nfsl)p Fu(')h(\014lesystem)g(t)m(yp)s(e)g(is)g +(particularly)h(useful)e(as)i(a)f(shorthand)f(for)h(the)g(more)g(cum)m +(b)s(ersome)150 1345 y(and)g(y)m(et)i(one)f(of)g(the)g(most)g(p)s +(opular)f Fq(Amd)j Fu(en)m(tries.)40 b(F)-8 b(or)26 b(example,)g(y)m +(ou)g(can)f(simplify)f(all)i(map)e(en)m(tries)150 1455 +y(that)31 b(lo)s(ok)g(lik)m(e:)390 1581 y Fo(zing)190 +b(-fs:=/n/shekel/u/zing)42 b(\\)772 1685 y(host!=shekel;type:=nfs;r)o +(hos)o(t:=s)o(heke)o(l;r)o(fs:=)o(${fs)o(})g(\\)772 1788 +y(host==shekel;type:=link)275 1920 y Fu(or)390 2046 y +Fo(zing)190 b(-fs:=/n/shekel/u/zing)42 b(\\)772 2150 +y(exists\(${fs}\);type:=link)f(\\)772 2253 y +(!exists\(${fs}\);type:=nfs)o(;rh)o(ost:)o(=she)o(kel)o(;rfs)o(:=${)o +(fs})275 2385 y Fu(in)m(to)31 b(a)g(shorter)f(form)390 +2511 y Fo(zing)190 b(type:=nfsl;fs:=/n/shekel)o(/u/)o(zing)o(;rho)o +(st:)o(=she)o(kel;)o(rfs)o(:=${)o(fs})275 2643 y Fu(Not)27 +b(just)f(do)s(es)g(it)h(mak)m(e)g(the)g(maps)f(smaller)h(and)f +(simpler,)h(but)f(it)h(a)m(v)m(oids)h(p)s(ossible)e(mistak)m(es)h(that) +150 2752 y(often)k(happ)s(en)d(when)i(forgetting)i(to)f(set)g(up)e(the) +h(t)m(w)m(o)i(en)m(tries)f(\(one)g(for)f(`)p Fo(type:=nfs)p +Fu(')e(and)i(the)h(other)150 2862 y(for)f(`)p Fo(type:=link)p +Fu('\))f(necessary)h(to)h(p)s(erform)e(transparen)m(t)i(moun)m(ts)f(of) +h(existing)g(or)f(remote)i(moun)m(ts.)150 3111 y Ft(5.18)68 +b(Automoun)l(t)45 b(Filesystem)i(\(`)p Fh(auto)p Ft('\))275 +3300 y Fu(The)34 b Fq(auto)41 b Fu(\(`)p Fo(type:=auto)p +Fu('\))33 b(\014lesystem)j(t)m(yp)s(e)f(creates)i(a)e(new)g(automoun)m +(t)h(p)s(oin)m(t)f(b)s(elo)m(w)g(an)g(ex-)150 3410 y(isting)g(automoun) +m(t)h(p)s(oin)m(t.)53 b(T)-8 b(op-lev)m(el)37 b(automoun)m(t)e(p)s(oin) +m(ts)g(app)s(ear)f(as)h(system)f(moun)m(t)h(p)s(oin)m(ts.)53 +b(An)150 3520 y(automoun)m(t)28 b(moun)m(t)g(p)s(oin)m(t)f(can)h(also)h +(app)s(ear)e(as)g(a)h(sub-directory)g(of)f(an)h(existing)g(automoun)m +(t)h(p)s(oin)m(t.)150 3629 y(This)f(allo)m(ws)h(some)g(additional)g +(structure)f(to)h(b)s(e)f(added,)h(for)f(example)h(to)g(mimic)g(the)f +(moun)m(t)h(tree)g(of)150 3739 y(another)i(mac)m(hine.)275 +3870 y(The)e(follo)m(wing)j(options)f(ma)m(y)g(b)s(e)f(sp)s(eci\014ed:) +150 4046 y Fo(cache)240 b Fu(sp)s(eci\014es)36 b(whether)g(the)h(data)g +(in)f(this)h(moun)m(t-map)f(should)g(b)s(e)g(cac)m(hed.)60 +b(The)36 b(default)630 4156 y(v)-5 b(alue)32 b(is)g(`)p +Fo(none)p Fu(',)g(in)f(whic)m(h)h(case)g(no)g(cac)m(hing)h(is)f(done)f +(in)h(order)f(to)i(conserv)m(e)f(memory)-8 b(.)630 4265 +y(Ho)m(w)m(ev)m(er,)37 b(b)s(etter)d(p)s(erformance)g(and)f(reliabilit) +m(y)j(can)e(b)s(e)g(obtained)g(b)m(y)g(cac)m(hing)i(some)630 +4375 y(or)30 b(all)i(of)e(a)h(moun)m(t-map.)630 4507 +y(If)22 b(the)g(cac)m(he)i(option)f(sp)s(eci\014es)f(`)p +Fo(all)p Fu(',)i(the)e(en)m(tire)h(map)f(is)h(en)m(umerated)f(when)f +(the)i(moun)m(t)630 4616 y(p)s(oin)m(t)30 b(is)h(created.)630 +4748 y(If)j(the)g(cac)m(he)i(option)f(sp)s(eci\014es)f(`)p +Fo(inc)p Fu(',)h(cac)m(hing)h(is)e(done)g(incremen)m(tally)i(as)e(and)g +(when)630 4858 y(data)g(is)f(required.)49 b(Some)34 b(map)f(t)m(yp)s +(es)g(do)g(not)h(supp)s(ort)d(cac)m(he)k(mo)s(de)e(`)p +Fo(all)p Fu(',)h(in)f(whic)m(h)630 4967 y(case)e(`)p +Fo(inc)p Fu(')f(is)h(used)e(whenev)m(er)i(`)p Fo(all)p +Fu(')f(is)g(requested.)630 5099 y(Cac)m(hing)h(can)g(b)s(e)e(en)m +(tirely)j(disabled)e(b)m(y)g(using)g(cac)m(he)i(mo)s(de)e(`)p +Fo(none)p Fu('.)630 5230 y(If)k(the)g(cac)m(he)i(option)f(sp)s +(eci\014es)f(`)p Fo(regexp)p Fu(')f(then)h(the)g(en)m(tire)h(map)f +(will)h(b)s(e)f(en)m(umerated)630 5340 y(and)j(eac)m(h)h(k)m(ey)g(will) +g(b)s(e)e(treated)i(as)g(an)f(egrep-st)m(yle)i(regular)f(expression.)61 +b(The)36 b(order)p eop +%%Page: 43 45 +43 44 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(43)630 366 y(in)32 b(whic)m(h)h(a)g(cac)m(hed)h +(map)e(is)h(searc)m(hed)g(do)s(es)g(not)g(corresp)s(ond)e(to)j(the)f +(ordering)f(in)h(the)630 476 y(source)39 b(map)f(so)h(the)g(regular)f +(expressions)h(should)e(b)s(e)h(m)m(utually)h(exclusiv)m(e)h(to)f(a)m +(v)m(oid)630 586 y(confusion.)630 724 y(Eac)m(h)g(moun)m(t)f(map)f(t)m +(yp)s(e)i(has)e(a)i(default)f(cac)m(he)i(t)m(yp)s(e,)g(usually)e(`)p +Fo(inc)p Fu(',)h(whic)m(h)f(can)h(b)s(e)630 834 y(selected)32 +b(b)m(y)e(sp)s(ecifying)g(`)p Fo(mapdefault)p Fu('.)630 +972 y(The)j(cac)m(he)j(mo)s(de)d(for)h(a)g(moun)m(t)g(map)f(can)h(only) +g(b)s(e)g(selected)h(on)f(the)g(command)f(line.)630 1081 +y(Starting)e Fq(Amd)i Fu(with)d(the)h(command:)870 1214 +y Fo(amd)47 b(/homes)f(hesiod.homes)e(-cache:=inc)630 +1352 y Fu(will)27 b(cause)g(`)p Fo(/homes)p Fu(')f(to)h(b)s(e)f +(automoun)m(ted)i(using)e(the)h Fq(Hesio)s(d)j Fu(name)d(serv)m(er)g +(with)g(lo)s(cal)630 1462 y(incremen)m(tal)32 b(cac)m(hing)f(of)g(all)g +(successfully)g(resolv)m(ed)g(names.)630 1600 y(All)45 +b(cac)m(hed)g(data)g(is)f(forgotten)h(whenev)m(er)f Fq(Amd)j +Fu(receiv)m(es)f(a)f(`)p Fo(SIGHUP)p Fu(')d(signal)j(and,)630 +1710 y(if)g(cac)m(he)h(`)p Fo(all)p Fu(')f(mo)s(de)f(w)m(as)h +(selected,)50 b(the)45 b(cac)m(he)i(will)e(b)s(e)f(reloaded.)84 +b(This)44 b(can)i(b)s(e)630 1819 y(used)36 b(to)h(inform)f +Fq(Amd)k Fu(that)e(a)f(map)f(has)h(b)s(een)f(up)s(dated.)58 +b(In)36 b(addition,)j(whenev)m(er)e(a)630 1929 y(cac)m(he)30 +b(lo)s(okup)e(fails)g(and)g Fq(Amd)j Fu(needs)d(to)h(examine)g(a)g +(map,)f(the)h(map's)f(mo)s(dify)f(time)i(is)630 2039 +y(examined.)40 b(If)28 b(the)h(cac)m(he)h(is)f(out)f(of)h(date)g(with)f +(resp)s(ect)h(to)g(the)g(map)f(then)g(it)h(is)g(\015ushed)630 +2148 y(as)i(if)f(a)h(`)p Fo(SIGHUP)p Fu(')e(had)h(b)s(een)f(receiv)m +(ed.)630 2286 y(An)24 b(additional)i(option)f(\(`)p Fo(sync)p +Fu('\))f(ma)m(y)h(b)s(e)f(sp)s(eci\014ed)g(to)h(force)h +Fq(Amd)h Fu(to)e(c)m(hec)m(k)h(the)f(map's)630 2396 y(mo)s(dify)h(time) +h(whenev)m(er)g(a)g(cac)m(hed)h(en)m(try)f(is)g(b)s(eing)f(used.)39 +b(F)-8 b(or)28 b(example,)g(an)f(incremen-)630 2506 y(tal,)32 +b(sync)m(hronized)e(cac)m(he)i(w)m(ould)e(b)s(e)g(created)h(b)m(y)f +(the)h(follo)m(wing)h(command:)870 2638 y Fo(amd)47 b(/homes)f +(hesiod.homes)e(-cache:=inc,sync)150 2805 y(fs)384 b +Fu(sp)s(eci\014es)30 b(the)h(name)f(of)h(the)f(moun)m(t)g(map)g(to)i +(use)e(for)g(the)g(new)g(moun)m(t)h(p)s(oin)m(t.)630 +2943 y(Arguably)37 b(this)g(should)f(ha)m(v)m(e)i(b)s(een)e(sp)s +(eci\014ed)g(with)h(the)g Fo(${rfs})e Fu(option)j(but)e(w)m(e)i(are)630 +3053 y(no)m(w)30 b(stuc)m(k)h(with)f(it)h(due)f(to)h(historical)h +(acciden)m(t.)150 3220 y Fo(pref)288 b Fu(alters)31 b(the)g(name)g +(that)g(is)g(lo)s(ok)m(ed)g(up)f(in)g(the)h(moun)m(t)f(map.)41 +b(If)30 b Fo(${pref})p Fu(,)f(the)i Fq(pre\014x)p Fu(,)f(is)630 +3330 y(non-n)m(ull)35 b(then)f(it)i(is)f(prep)s(ended)e(to)i(the)h +(name)f(requested)f(b)m(y)h(the)h(k)m(ernel)f Fq(b)s(efore)40 +b Fu(the)630 3439 y(map)30 b(is)g(searc)m(hed.)275 3610 +y(The)19 b(serv)m(er)i(`)p Fo(dylan.doc.ic.ac.uk)p Fu(')16 +b(has)k(t)m(w)m(o)h(user)f(disks:)35 b(`)p Fo(/dev/dsk/2s0)p +Fu(')17 b(and)j(`)p Fo(/dev/dsk/5s0)p Fu('.)p 3848 3630 +42 84 v 150 3720 a(These)51 b(are)i(accessed)f(as)g(`)p +Fo(/home/dylan/dk2)p Fu(')c(and)j(`)p Fo(/home/dylan/dk5)p +Fu(')d(resp)s(ectiv)m(ely)-8 b(.)107 b(Since)150 3829 +y(`)p Fo(/home)p Fu(')40 b(is)h(already)g(an)g(automoun)m(t)h(p)s(oin)m +(t,)i(this)d(naming)f(is)h(ac)m(hiev)m(ed)i(with)e(the)g(follo)m(wing)h +(map)150 3939 y(en)m(tries:)390 4075 y Fo(dylan)380 b +(type:=auto;fs:=${map};pref)o(:=${)o(key)o(}/)390 4179 +y(dylan/dk2)188 b(type:=ufs;dev:=/dev/dsk/2s)o(0)390 +4283 y(dylan/dk5)g(type:=ufs;dev:=/dev/dsk/5s)o(0)150 +4559 y Ft(5.19)68 b(Direct)46 b(Automoun)l(t)f(Filesystem)h(\(`)p +Fh(direct)p Ft('\))275 4760 y Fu(The)29 b Fq(direct)j +Fu(\(`)p Fo(type:=direct)p Fu('\))27 b(\014lesystem)j(is)g(almost)h +(iden)m(tical)h(to)e(the)g(automoun)m(t)g(\014lesystem.)150 +4869 y(Instead)j(of)f(app)s(earing)h(to)g(b)s(e)f(a)i(directory)f(of)g +(moun)m(t)f(p)s(oin)m(ts,)i(it)f(app)s(ears)f(as)h(a)g(sym)m(b)s(olic)g +(link)g(to)h(a)150 4979 y(moun)m(ted)f(\014lesystem.)49 +b(The)33 b(moun)m(t)g(is)g(done)g(at)h(the)f(time)h(the)f(link)g(is)g +(accessed.)50 b(See)33 b(Section)h(5.18)150 5088 y([Automoun)m(t)d +(Filesystem],)h(page)f(42)h(for)e(a)h(list)g(of)f(required)g(options.) +275 5230 y(Direct)35 b(automoun)m(t)g(p)s(oin)m(ts)f(are)h(created)g(b) +m(y)f(sp)s(ecifying)g(the)h(`)p Fo(direct)p Fu(')e(\014lesystem)h(t)m +(yp)s(e)h(on)f(the)150 5340 y(command)c(line:)p eop +%%Page: 44 46 +44 45 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(44)390 366 y Fo(amd)47 b(...)g(/usr/man)e +(auto.direct)g(-type:=direct)275 508 y Fu(where)29 b(`)p +Fo(auto.direct)p Fu(')f(w)m(ould)i(con)m(tain)i(an)e(en)m(try)h(suc)m +(h)f(as:)390 643 y Fo(usr/man)189 b(-type:=nfs;rfs:=/usr/man)41 +b(\\)915 747 y(rhost:=man-server1)91 b(rhost:=man-server2)275 +888 y Fu(In)32 b(this)h(example,)i(`)p Fo(man-server1)p +Fu(')30 b(and)j(`)p Fo(man-server2)p Fu(')d(are)k(\014le)f(serv)m(ers)g +(whic)m(h)g(exp)s(ort)g(copies)150 997 y(of)g(the)g(man)m(ual)g(pages.) +49 b(Note)35 b(that)e(the)g(k)m(ey)h(whic)m(h)e(is)h(lo)s(ok)m(ed)h(up) +e(is)h(the)g(name)g(of)g(the)g(automoun)m(t)150 1107 +y(p)s(oin)m(t)d(without)h(the)f(leading)h(`)p Fo(/)p +Fu('.)150 1381 y Ft(5.20)68 b(Union)46 b(Filesystem)g(\(`)p +Fh(union)p Ft('\))275 1580 y Fu(The)32 b Fq(union)g Fu(\(`)p +Fo(type:=union)p Fu('\))f(\014lesystem)i(t)m(yp)s(e)g(allo)m(ws)h(the)f +(con)m(ten)m(ts)i(of)e(sev)m(eral)h(directories)g(to)150 +1690 y(b)s(e)c(merged)g(and)g(made)g(visible)h(in)f(a)g(single)h +(directory)-8 b(.)42 b(This)29 b(can)i(b)s(e)f(used)f(to)i(o)m(v)m +(ercome)i(one)d(of)h(the)150 1799 y(ma)5 b(jor)31 b(limitations)i(of)e +(the)h(Unix)e(moun)m(t)i(mec)m(hanism)f(whic)m(h)g(only)g(allo)m(ws)h +(complete)h(directories)f(to)150 1909 y(b)s(e)e(moun)m(ted.)275 +2050 y(F)-8 b(or)33 b(example,)h(supp)s(osing)d(`)p Fo(/tmp)p +Fu(')h(and)g(`)p Fo(/var/tmp)p Fu(')f(w)m(ere)i(to)h(b)s(e)e(merged)h +(in)m(to)g(a)g(new)f(directory)150 2160 y(called)37 b(`)p +Fo(/mtmp)p Fu(',)f(with)f(\014les)g(in)g(`)p Fo(/var/tmp)p +Fu(')f(taking)i(precedence.)57 b(The)35 b(follo)m(wing)i(command)e +(could)150 2269 y(b)s(e)30 b(used)f(to)i(ac)m(hiev)m(e)i(this)d +(e\013ect:)390 2405 y Fo(amd)47 b(...)g(/mtmp)f(union:/tmp:/var/tmp)d +(-type:=union)275 2546 y Fu(Curren)m(tly)-8 b(,)28 b(the)g(unioned)f +(directories)i(m)m(ust)f Fq(not)i Fu(b)s(e)e(automoun)m(ted.)40 +b(That)28 b(w)m(ould)g(cause)g(a)h(dead-)150 2655 y(lo)s(c)m(k.)59 +b(This)35 b(seriously)i(limits)f(the)h(curren)m(t)f(usefulness)f(of)h +(this)g(\014lesystem)g(t)m(yp)s(e)h(and)e(the)i(problem)150 +2765 y(will)31 b(b)s(e)e(addressed)h(in)g(a)h(future)e(release)j(of)e +Fq(Amd)p Fu(.)275 2906 y(Files)24 b(created)g(in)f(the)g(union)f +(directory)i(are)f(actually)i(created)f(in)f(the)g(last)h(named)f +(directory)-8 b(.)39 b(This)150 3016 y(is)d(done)g(b)m(y)g(creating)h +(a)f(wildcard)g(en)m(try)g(whic)m(h)g(p)s(oin)m(ts)g(to)g(the)g +(correct)h(directory)-8 b(.)59 b(The)35 b(wildcard)150 +3125 y(en)m(try)g(is)g(visible)h(if)f(the)g(union)f(directory)h(is)g +(listed,)i(so)f(allo)m(wing)g(y)m(ou)g(to)f(see)h(whic)m(h)f(directory) +g(has)150 3235 y(priorit)m(y)-8 b(.)275 3376 y(The)34 +b(\014les)i(visible)g(in)f(the)h(union)e(directory)i(are)g(computed)f +(at)h(the)g(time)g Fq(Amd)j Fu(is)c(started,)j(and)150 +3485 y(are)g(not)g(k)m(ept)h(up-to-date)g(with)f(resp)s(ect)f(to)i(the) +f(underlying)f(directories.)64 b(Similarly)-8 b(,)41 +b(if)d(a)g(link)g(is)150 3595 y(remo)m(v)m(ed,)32 b(for)e(example)h +(with)f(the)g(`)p Fo(rm)p Fu(')h(command,)f(it)h(will)g(b)s(e)e(lost)j +(forev)m(er.)150 3869 y Ft(5.21)68 b(Error)46 b(Filesystem)g(\(`)p +Fh(error)p Ft('\))275 4068 y Fu(The)35 b Fq(error)42 +b Fu(\(`)p Fo(type:=error)p Fu('\))34 b(\014lesystem)j(t)m(yp)s(e)f(is) +g(used)f(in)m(ternally)i(as)g(a)f(catc)m(h-all)j(in)d(the)g(case)150 +4178 y(where)23 b(none)h(of)f(the)h(other)g(\014lesystems)g(w)m(as)g +(selected,)i(or)e(some)g(other)g(error)f(o)s(ccurred.)38 +b(Lo)s(okups)23 b(and)150 4287 y(moun)m(ts)30 b(alw)m(a)m(ys)i(fail)f +(with)f(\\No)i(suc)m(h)e(\014le)g(or)h(directory".)41 +b(All)31 b(other)g(op)s(erations)f(trivially)i(succeed.)275 +4428 y(The)d(error)h(\014lesystem)h(is)f(not)h(directly)g(accessible.) +150 4702 y Ft(5.22)68 b(T)-11 b(op-lev)l(el)46 b(Filesystem)g(\(`)p +Fh(toplvl)p Ft('\))275 4902 y Fu(The)24 b Fq(toplvl)29 +b Fu(\(`)p Fo(type:=toplvl)p Fu('\))22 b(\014lesystems)j(is)g(deriv)m +(ed)f(from)g(the)h(`)p Fo(auto)p Fu(')f(\014lesystem)h(and)f(is)h(used) +150 5011 y(to)h(moun)m(t)g(the)g(top-lev)m(el)i(automoun)m(t)f(no)s +(des.)38 b(Requests)26 b(of)g(this)f(t)m(yp)s(e)h(are)g(automatically)j +(generated)150 5121 y(from)h(the)g(command)g(line)g(argumen)m(ts)h(and) +f(can)g(also)h(b)s(e)f(passed)f(in)h(b)m(y)g(using)g(the)g +Fo(-M)g Fu(option)g(of)h(the)150 5230 y Fq(Amq)h Fu(command.)41 +b(That)30 b(option)h(is)g(insecure,)f(and)g(is)g(una)m(v)-5 +b(ailable)32 b(unless)e(am-utils)h(w)m(as)g(con\014gured)150 +5340 y(with)f(`)p Fo(--with-amq-mount)p Fu('.)p eop +%%Page: 45 47 +45 46 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Filesystem)32 +b(T)m(yp)s(es)2351 b(45)150 366 y Ft(5.23)68 b(Ro)t(ot)46 +b(Filesystem)g(\(`)p Fh(root)p Ft('\))275 559 y Fu(The)24 +b Fq(ro)s(ot)k Fu(\(`)p Fo(type:=root)p Fu('\))c(\014lesystem)i(t)m(yp) +s(e)f(acts)i(as)e(an)h(in)m(ternal)g(placeholder)g(on)m(to)g(whic)m(h)g +Fq(Amd)150 669 y Fu(can)37 b(pin)f(`)p Fo(toplvl)p Fu(')f(moun)m(ts.)60 +b(Only)36 b(one)h(no)s(de)f(of)h(this)g(t)m(yp)s(e)g(need)f(ev)m(er)i +(exist)f(and)f(one)h(is)g(created)150 778 y(automatically)c(during)c +(startup.)41 b(The)30 b(e\013ect)h(of)g(ha)m(ving)g(more)f(than)h(one)f +(ro)s(ot)h(no)s(de)f(is)g(unde\014ned.)275 913 y(The)f(ro)s(ot)i +(\014lesystem)g(is)f(not)h(directly)g(accessible.)150 +1170 y Ft(5.24)68 b(Autofs)45 b(Filesystem)h(\(`)p Fh(autofs)p +Ft('\))275 1363 y Fu(The)23 b Fq(autofs)28 b Fu(\(`)p +Fo(type:=autofs)p Fu('\))22 b(\014lesystem)j(uses)e(Sun's)g(k)m +(ernel-based)i(automoun)m(ter)f(supp)s(orting)150 1472 +y(\014lesystem)31 b(for)f Fq(Amd)t Fu('s)f(moun)m(t)i(p)s(oin)m(ts.)40 +b(Hence)31 b(it)g(is)g(another)f(t)m(yp)s(e)h(of)f(top)h(lev)m(el)h +(\014lesystem.)275 1607 y(The)44 b(autofs)h(\014lesystem)g(is)g(not)g +(directly)h(accessible)h(from)d Fq(Amd)k Fu(maps,)g(but)c(only)h(from)g +(the)150 1716 y(`)p Fo(amd.conf)p Fu(')29 b(\014le)h(\(see)h(Section)h +(6.4.4)g([moun)m(t)p 1762 1716 28 4 v 33 w(t)m(yp)s(e)e(P)m(arameter],) +j(page)e(47\).)275 1851 y(Note)37 b(that)f(Autofs)g(supp)s(ort)e(is)i +(still)h(v)m(ery)f(early)-8 b(.)58 b(See)36 b(the)g(distribution)f +(\014le)h(`)p Fo(README.autofs)p Fu(')150 1961 y(for)30 +b(detail)i(of)e(what)g(w)m(orks)h(and)f(what)g(do)s(es)g(not.)150 +2218 y Ft(5.25)68 b(Inheritance)46 b(Filesystem)g(\(`)p +Fh(inherit)p Ft('\))275 2410 y Fu(The)22 b Fq(inheritance)29 +b Fu(\(`)p Fo(type:=inherit)p Fu('\))21 b(\014lesystem)j(is)f(not)g +(directly)h(accessible.)40 b(Instead,)25 b(in)m(ternal)150 +2520 y(moun)m(t)38 b(no)s(des)g(of)g(this)g(t)m(yp)s(e)g(are)h +(automatically)i(generated)e(when)e Fq(Amd)k Fu(is)e(started)f(with)g +(the)h Fo(-r)150 2630 y Fu(option.)i(A)m(t)29 b(this)g(time)g(the)g +(system)g(moun)m(t)g(table)h(is)f(scanned)f(to)h(lo)s(cate)i(an)m(y)e +(\014lesystems)g(whic)m(h)g(are)150 2739 y(already)c(moun)m(ted.)39 +b(If)24 b(an)m(y)i(reference)f(to)g(these)h(\014lesystems)f(is)f(made)h +(through)f Fq(Amd)k Fu(then)d(instead)g(of)150 2849 y(attempting)30 +b(to)g(moun)m(t)f(it,)h Fq(Amd)i Fu(sim)m(ulates)e(the)f(moun)m(t)g +(and)f Fq(inherits)33 b Fu(the)c(\014lesystem.)40 b(This)29 +b(allo)m(ws)150 2958 y(a)38 b(new)f(v)m(ersion)g(of)h +Fq(Amd)i Fu(to)e(b)s(e)f(installed)h(on)g(a)f(liv)m(e)i(system)e +(simply)g(b)m(y)h(killing)g(the)f(old)h(daemon)150 3068 +y(with)30 b(`)p Fo(SIGTERM)p Fu(')f(and)h(starting)h(the)f(new)g(one.) +275 3203 y(This)d(\014lesystem)i(t)m(yp)s(e)f(is)g(not)h(generally)g +(visible)g(externally)-8 b(,)31 b(but)c(it)i(is)f(p)s(ossible)g(that)h +(the)f(output)150 3312 y(from)40 b(`)p Fo(amq)30 b(-m)p +Fu(')40 b(ma)m(y)i(list)f(`)p Fo(inherit)p Fu(')e(as)i(the)g +(\014lesystem)g(t)m(yp)s(e.)72 b(This)40 b(happ)s(ens)f(when)h(an)g +(inherit)150 3422 y(op)s(eration)31 b(cannot)g(b)s(e)f(completed)h(for) +f(some)h(reason,)g(usually)f(b)s(ecause)g(a)h(\014leserv)m(er)g(is)f +(do)m(wn.)p eop +%%Page: 46 48 +46 47 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(46)150 366 y Fr(6)80 b(Amd)54 b(Con\014guration)d(File)275 +607 y Fu(The)29 b(`)p Fo(amd.conf)p Fu(')f(\014le)i(is)g(the)g +(con\014guration)g(\014le)g(for)f Fq(Amd)p Fu(,)h(as)g(part)f(of)h(the) +g(am-utils)h(suite.)41 b(This)150 717 y(\014le)30 b(con)m(tains)i(run)m +(time)e(con\014guration)h(information)g(for)f(the)g Fq(Amd)k +Fu(automoun)m(ter)d(program.)150 980 y Ft(6.1)68 b(File)46 +b(F)-11 b(ormat)275 1174 y Fu(The)26 b(`)p Fo(amd.conf)p +Fu(')g(\014le)h(consists)g(of)h(sections)g(and)f(parameters.)40 +b(A)27 b(section)h(b)s(egins)f(with)g(the)g(name)150 +1284 y(of)h(the)h(section)g(in)f(square)g(brac)m(k)m(ets)i(`)p +Fo([])p Fu(')e(and)f(con)m(tin)m(ues)j(un)m(til)e(the)h(next)f(section) +h(b)s(egins)f(or)g(the)h(end)150 1394 y(of)i(the)f(\014le)h(is)f(reac)m +(hed.)41 b(Sections)31 b(con)m(tain)h(parameters)f(of)f(the)h(form)f(`) +p Fo(name)f(=)h(value)p Fu('.)275 1530 y(The)20 b(\014le)g(is)h +(line-based)f(|)h(that)g(is,)i(eac)m(h)e(newline-terminated)h(line)e +(represen)m(ts)h(either)g(a)g(commen)m(t,)150 1640 y(a)31 +b(section)g(name)g(or)f(a)h(parameter.)41 b(No)31 b(line-con)m(tin)m +(uation)i(syn)m(tax)e(is)f(a)m(v)-5 b(ailable.)275 1777 +y(Section)31 b(names,)f(parameter)h(names)f(and)g(their)h(v)-5 +b(alues)30 b(are)h(case)g(sensitiv)m(e.)275 1913 y(Only)43 +b(the)i(\014rst)f(equals)g(sign)h(in)f(a)h(parameter)g(is)f +(signi\014can)m(t.)84 b(Whitespace)46 b(b)s(efore)e(or)g(after)150 +2023 y(the)33 b(\014rst)g(equals)h(sign)f(is)g(discarded.)49 +b(Leading,)34 b(trailing)h(and)d(in)m(ternal)i(whitespace)g(in)f +(section)i(and)150 2132 y(parameter)41 b(names)g(is)f(irrelev)-5 +b(an)m(t.)73 b(Leading)41 b(and)f(trailing)h(whitespace)h(in)e(a)h +(parameter)g(v)-5 b(alue)41 b(is)150 2242 y(discarded.)56 +b(In)m(ternal)36 b(whitespace)g(within)f(a)h(parameter)g(v)-5 +b(alue)36 b(is)f(not)h(allo)m(w)m(ed,)j(unless)c(the)h(whole)150 +2352 y(parameter)31 b(v)-5 b(alue)31 b(is)f(quoted)h(with)f(double)g +(quotes)g(as)h(in)f(`)p Fo(name)g(=)g("some)f(value")p +Fu('.)275 2488 y(An)m(y)i(line)g(b)s(eginning)g(with)g(a)h(p)s(ound)d +(sign)i(`)p Fo(#)p Fu(')h(is)f(ignored,)h(as)f(are)h(lines)f(con)m +(taining)i(only)f(white-)150 2598 y(space.)275 2735 y(The)40 +b(v)-5 b(alues)42 b(follo)m(wing)g(the)g(equals)f(sign)g(in)g +(parameters)g(are)h(all)g(either)f(a)h(string)f(\(no)g(quotes)150 +2844 y(needed)35 b(if)g(string)g(do)s(es)f(not)h(include)g(spaces\))h +(or)f(a)g(b)s(o)s(olean,)i(whic)m(h)d(ma)m(y)i(b)s(e)e(giv)m(en)i(as)g +(`)p Fo(yes)p Fu('/`)p Fo(no)p Fu('.)150 2954 y(Case)31 +b(is)f(signi\014can)m(t)h(in)f(all)i(v)-5 b(alues.)41 +b(Some)30 b(items)h(suc)m(h)f(as)h(cac)m(he)h(timeouts)f(are)g(n)m +(umeric.)150 3217 y Ft(6.2)68 b(The)45 b(Global)g(Section)275 +3411 y Fu(The)36 b(global)j(section)g(m)m(ust)e(b)s(e)g(sp)s(eci\014ed) +f(as)i(`)p Fo([global])p Fu('.)60 b(P)m(arameters)39 +b(in)e(this)g(section)h(either)150 3521 y(apply)31 b(to)i +Fq(Amd)i Fu(as)d(a)g(whole,)g(or)g(to)g(all)h(other)f(regular)g(map)f +(sections)i(whic)m(h)f(follo)m(w.)46 b(There)31 b(should)150 +3631 y(b)s(e)f(only)g(one)h(global)h(section)f(de\014ned)e(in)h(one)h +(con\014guration)g(\014le.)275 3767 y(It)g(is)h(highly)g(recommended)f +(that)i(this)e(section)i(b)s(e)f(sp)s(eci\014ed)f(\014rst)g(in)g(the)h +(con\014guration)g(\014le.)45 b(If)150 3877 y(it)27 b(is)g(not,)h(then) +f(regular)g(map)g(sections)h(whic)m(h)e(precede)h(it)h(will)f(not)g +(use)g(global)h(v)-5 b(alues)27 b(de\014ned)f(later.)150 +4140 y Ft(6.3)68 b(Regular)46 b(Map)f(Sections)275 4334 +y Fu(P)m(arameters)35 b(in)f(regular)h(\(non-global\))h(sections)f +(apply)f(to)h(a)g(single)g(map)f(en)m(try)-8 b(.)53 b(F)-8 +b(or)35 b(example,)150 4444 y(if)30 b(the)f(map)h(section)g(`)p +Fo([/homes])p Fu(')e(is)i(de\014ned,)f(then)g(all)i(parameters)f(follo) +m(wing)h(it)f(will)g(b)s(e)f(applied)g(to)150 4554 y(the)i(`)p +Fo(/homes)p Fu(')e Fq(Amd)p Fu(-managed)h(moun)m(t)h(p)s(oin)m(t.)150 +4816 y Ft(6.4)68 b(Common)45 b(P)l(arameters)275 5011 +y Fu(These)27 b(parameters)h(can)h(b)s(e)e(sp)s(eci\014ed)g(either)i +(in)e(the)h(global)i(or)e(a)g(map-sp)s(eci\014c)g(section.)41 +b(En)m(tries)150 5121 y(sp)s(eci\014ed)36 b(in)h(a)h(map-sp)s(eci\014c) +f(section)h(o)m(v)m(erride)g(the)g(default)f(v)-5 b(alue)38 +b(or)f(one)g(de\014ned)f(in)h(the)h(global)150 5230 y(section.)k(If)29 +b(suc)m(h)h(a)g(common)g(parameter)g(is)g(sp)s(eci\014ed)g(only)f(in)h +(the)g(global)h(section,)h(it)e(is)g(applicable)150 5340 +y(to)h(all)g(regular)g(map)f(sections)h(that)g(follo)m(w.)p +eop +%%Page: 47 49 +47 48 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(47)150 366 y Fk(6.4.1)63 b Fj(browsable_dirs)42 +b Fk(P)m(arameter)275 568 y Fu(\(t)m(yp)s(e=string,)30 +b(default=`)p Fo(no)p Fu('\).)41 b(If)30 b(`)p Fo(yes)p +Fu(',)g(then)g Fq(Amd)t Fu('s)f(top-lev)m(el)k(moun)m(t)d(p)s(oin)m(ts) +g(will)h(b)s(e)e(bro)m(ws-)150 678 y(able)39 b(to)g Fm(readdir)p +Fu(\(3\))f(calls.)65 b(This)38 b(means)g(y)m(ou)g(could)g(run)f(for)h +(example)h Fm(ls)p Fu(\(1\))g(and)f(see)g(what)g(k)m(eys)150 +787 y(are)29 b(a)m(v)-5 b(ailable)31 b(to)f(moun)m(t)f(in)f(that)i +(directory)-8 b(.)41 b(Not)30 b(all)f(en)m(tries)h(are)f(made)g +(visible)g(to)h Fm(readdir)p Fu(\(3\):)41 b(the)150 897 +y(`)p Fo(/defaults)p Fu(')31 b(en)m(try)-8 b(,)34 b(wildcard)e(en)m +(tries,)i(and)e(those)h(with)g(a)g(`)p Fo(/)p Fu(')g(in)f(them)h(are)g +(not)g(included.)46 b(If)33 b(y)m(ou)150 1007 y(sp)s(ecify)c(`)p +Fo(full)p Fu(')f(to)i(this)f(option,)h(all)g(but)e(the)i(`)p +Fo(/defaults)p Fu(')d(en)m(try)i(will)g(b)s(e)g(visible.)40 +b(Note)31 b(that)f(if)f(y)m(ou)150 1116 y(run)g(a)j(command)e(whic)m(h) +h(will)g(attempt)h(to)g Fm(stat)p Fu(\(2\))h(the)e(en)m(tries,)h(suc)m +(h)f(as)g(often)g(done)g(b)m(y)f(`)p Fo(ls)g(-l)p Fu(')h(or)150 +1226 y(`)p Fo(ls)f(-F)p Fu(',)d Fq(Amd)i Fu(will)e(attempt)h(to)f(moun) +m(t)f Fq(ev)m(ery)35 b Fu(en)m(try)26 b(in)g(that)h(map.)39 +b(This)26 b(is)g(often)h(called)h(a)e(\\moun)m(t)150 +1335 y(storm".)150 1578 y Fk(6.4.2)63 b Fj(map_options)42 +b Fk(P)m(arameter)275 1779 y Fu(\(t)m(yp)s(e=string,)29 +b(default)f(no)g(options\).)41 b(This)27 b(option)i(is)f(the)h(same)f +(as)h(sp)s(ecifying)f(map)g(options)g(on)150 1889 y(the)j(command)f +(line)g(to)i Fq(Amd)p Fu(,)e(suc)m(h)g(as)g(`)p Fo(cache:=all)p +Fu('.)150 2131 y Fk(6.4.3)63 b Fj(map_type)42 b Fk(P)m(arameter)275 +2333 y Fu(\(t)m(yp)s(e=string,)e(default)e(searc)m(h)h(all)g(map)e(t)m +(yp)s(es\).)64 b(If)38 b(sp)s(eci\014ed,)h Fq(Amd)i Fu(will)e +(initialize)h(the)e(map)150 2442 y(only)33 b(for)f(the)h(t)m(yp)s(e)g +(giv)m(en.)49 b(This)32 b(is)g(useful)g(to)i(a)m(v)m(oid)g(the)f +(default)g(map)f(searc)m(h)h(t)m(yp)s(e)g(used)f(b)m(y)h +Fq(Amd)150 2552 y Fu(whic)m(h)g(tak)m(es)i(longer)f(and)f(can)h(ha)m(v) +m(e)h(undesired)d(side-e\013ects)j(suc)m(h)e(as)h(initializing)h(NIS)e +(ev)m(en)h(if)g(not)150 2662 y(used.)40 b(P)m(ossible)31 +b(v)-5 b(alues)31 b(are)150 2835 y(`)p Fo(file)p Fu(')238 +b(plain)30 b(\014les)150 3003 y(`)p Fo(hesiod)p Fu(')142 +b(Hesio)s(d)30 b(name)h(service)g(from)f(MIT)150 3171 +y(`)p Fo(ldap)p Fu(')238 b(Ligh)m(t)m(w)m(eigh)m(t)33 +b(Directory)f(Access)f(Proto)s(col)150 3340 y(`)p Fo(ndbm)p +Fu(')238 b(\(New\))31 b(dbm)e(st)m(yle)j(hash)e(\014les)150 +3508 y(`)p Fo(nis)p Fu(')286 b(Net)m(w)m(ork)32 b(Information)e +(Services)h(\(v)m(ersion)g(2\))150 3677 y(`)p Fo(nisplus)p +Fu(')94 b(Net)m(w)m(ork)32 b(Information)e(Services)h(Plus)f(\(v)m +(ersion)h(3\))150 3845 y(`)p Fo(passwd)p Fu(')142 b(lo)s(cal)32 +b(passw)m(ord)d(\014les)150 4014 y(`)p Fo(union)p Fu(')190 +b(union)30 b(maps)150 4256 y Fk(6.4.4)63 b Fj(mount_type)42 +b Fk(P)m(arameter)275 4458 y Fu(\(t)m(yp)s(e=string,)c(default=`)p +Fo(nfs)p Fu('\).)58 b(All)37 b Fq(Amd)i Fu(moun)m(t)d(t)m(yp)s(es)g +(default)g(to)h(NFS.)g(That)f(is,)i Fq(Amd)h Fu(is)150 +4567 y(an)31 b(NFS)h(serv)m(er)g(on)f(the)h(map)f(moun)m(t)h(p)s(oin)m +(ts,)f(for)h(the)g(lo)s(cal)g(host)g(it)g(is)g(running)d(on.)44 +b(If)32 b(`)p Fo(autofs)p Fu(')e(is)150 4677 y(sp)s(eci\014ed,)g +Fq(Amd)j Fu(will)e(b)s(e)f(an)g(autofs)h(serv)m(er)f(for)g(those)h +(moun)m(t)g(p)s(oin)m(ts.)150 4919 y Fk(6.4.5)63 b Fj(search_path)42 +b Fk(P)m(arameter)275 5121 y Fu(\(t)m(yp)s(e=string,)28 +b(default)g(no)g(searc)m(h)h(path\).)40 b(This)27 b(pro)m(vides)g(a)i +(\(colon-delimited\))h(searc)m(h)f(path)e(for)150 5230 +y(\014le)k(maps.)41 b(Using)30 b(a)i(searc)m(h)f(path,)f(sites)i(can)f +(allo)m(w)h(for)e(lo)s(cal)i(map)e(customizations)j(and)d(o)m(v)m +(errides,)150 5340 y(and)g(can)g(distributed)g(maps)g(in)g(sev)m(eral)i +(lo)s(cations)f(as)g(needed.)p eop +%%Page: 48 50 +48 49 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(48)150 366 y Ft(6.5)68 b(Global)46 b(P)l(arameters)275 +563 y Fu(The)29 b(follo)m(wing)j(parameters)f(are)g(applicable)g(to)g +(the)g(`)p Fo([global])p Fu(')d(section)k(only)-8 b(.)150 +794 y Fk(6.5.1)63 b Fj(arch)41 b Fk(P)m(arameter)275 +991 y Fu(\(t)m(yp)s(e=string,)28 b(default)f(to)h(compiled)f(in)g(v)-5 +b(alue\).)40 b(Allo)m(ws)28 b(y)m(ou)g(to)f(o)m(v)m(erride)i(the)e(v)-5 +b(alue)27 b(of)g(the)h Fq(arc)m(h)150 1100 y(Amd)33 b +Fu(v)-5 b(ariable.)150 1332 y Fk(6.5.2)63 b Fj(auto_dir)42 +b Fk(P)m(arameter)275 1528 y Fu(\(t)m(yp)s(e=string,)47 +b(default=`)p Fo(/a)p Fu('\).)79 b(Same)44 b(as)f(the)h +Fo(-a)f Fu(option)h(to)g Fq(Amd)p Fu(.)79 b(This)42 b(sets)i(the)f +(priv)-5 b(ate)150 1638 y(directory)31 b(where)f Fq(Amd)j +Fu(will)e(create)h(sub-directories)e(for)g(its)h(real)g(moun)m(t)g(p)s +(oin)m(ts.)150 1870 y Fk(6.5.3)63 b Fj(cache_duration)42 +b Fk(P)m(arameter)275 2066 y Fu(\(t)m(yp)s(e=n)m(umeric,)g +(default=300\).)72 b(Same)40 b(as)g(the)g Fo(-c)f Fu(option)i(to)g +Fq(Amd)p Fu(.)68 b(Sets)41 b(the)f(duration)f(in)150 +2176 y(seconds)30 b(that)h(lo)s(ok)m(ed)h(up)d(map)h(en)m(tries)h +(remain)f(in)g(the)h(cac)m(he.)150 2407 y Fk(6.5.4)63 +b Fj(cluster)41 b Fk(P)m(arameter)275 2604 y Fu(\(t)m(yp)s(e=string,)27 +b(default)f(no)g(cluster\).)39 b(Same)26 b(as)g(the)g +Fo(-C)g Fu(option)g(to)g Fq(Amd)p Fu(.)39 b(Sp)s(eci\014es)25 +b(the)h(alternate)150 2713 y(HP-UX)31 b(cluster)g(to)g(use.)150 +2945 y Fk(6.5.5)63 b Fj(debug_options)42 b Fk(P)m(arameter)275 +3141 y Fu(\(t)m(yp)s(e=string,)36 b(default)f(no)f(debug)g(options\).) +55 b(Same)35 b(as)g(the)g Fo(-D)f Fu(option)h(to)g Fq(Amd)p +Fu(.)54 b(Sp)s(ecify)34 b(an)m(y)150 3251 y(debugging)40 +b(options)g(for)g Fq(Amd)p Fu(.)69 b(W)-8 b(orks)41 b(only)f(if)g +(am-utils)g(w)m(as)h(con\014gured)e(for)g(debugging)h(using)150 +3360 y(the)45 b Fo(--enable-debug)d Fu(option.)85 b(The)45 +b(`)p Fo(mem)p Fu(')g(option)g(alone)i(can)e(b)s(e)g(turned)f(on)h(via) +g Fo(--enable-)150 3470 y(debug=mem)p Fu(.)g(Otherwise)32 +b(debugging)h(options)g(are)g(ignored.)47 b(Options)32 +b(are)h(comma)h(delimited,)g(and)150 3579 y(can)24 b(b)s(e)e(preceded)h +(b)m(y)g(the)h(string)f(`)p Fo(no)p Fu(')g(to)h(negate)h(their)e +(meaning.)38 b(Y)-8 b(ou)24 b(can)g(get)g(the)g(list)f(of)h(supp)s +(orted)150 3689 y(debugging)30 b(options)h(b)m(y)f(running)f +Fo(amd)g(-v)p Fu(.)41 b(P)m(ossible)31 b(v)-5 b(alues)30 +b(are:)150 3854 y(`)p Fo(all)p Fu(')286 b(all)31 b(options)150 +4017 y(`)p Fo(amq)p Fu(')286 b(register)31 b(for)f(amq)150 +4180 y(`)p Fo(daemon)p Fu(')142 b(en)m(ter)31 b(daemon)f(mo)s(de)150 +4343 y(`)p Fo(fork)p Fu(')238 b(fork)30 b(serv)m(er)150 +4507 y(`)p Fo(full)p Fu(')238 b(program)30 b(trace)150 +4670 y(`)p Fo(mem)p Fu(')286 b(trace)32 b(memory)e(allo)s(cations)150 +4833 y(`)p Fo(mtab)p Fu(')238 b(use)30 b(lo)s(cal)i(`)p +Fo(./mtab)p Fu(')d(\014le)150 4996 y(`)p Fo(str)p Fu(')286 +b(debug)30 b(string)g(m)m(unging)150 5159 y(`)p Fo(test)p +Fu(')238 b(full)30 b(debug)g(but)f(no)i(daemon)150 5322 +y(`)p Fo(trace)p Fu(')190 b(proto)s(col)31 b(trace)p +eop +%%Page: 49 51 +49 50 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(49)150 366 y Fk(6.5.6)63 b Fj(dismount_interval)43 +b Fk(P)m(arameter)275 560 y Fu(\(t)m(yp)s(e=n)m(umeric,)34 +b(default=120\).)51 b(Same)33 b(as)h(the)f Fo(-w)g Fu(option)g(to)h +Fq(Amd)p Fu(.)49 b(Sp)s(ecify)33 b(in)g(seconds,)h(the)150 +670 y(time)d(b)s(et)m(w)m(een)g(attempts)g(to)h(dismoun)m(t)e(\014le)g +(systems)g(that)h(ha)m(v)m(e)h(exceeded)f(their)g(cac)m(hed)g(times.) +150 895 y Fk(6.5.7)63 b Fj(fully_qualified_hosts)43 b +Fk(P)m(arameter)275 1089 y Fu(\(t)m(yp)s(e=string,)27 +b(default=`)p Fo(no)p Fu('\).)39 b(If)26 b(`)p Fo(yes)p +Fu(',)h Fq(Amd)i Fu(will)d(p)s(erform)f(RPC)g(authen)m(tication)j +(using)e(fully-)150 1199 y(quali\014ed)32 b(host)h(names.)48 +b(This)32 b(is)g(necessary)h(for)g(some)g(systems,)h(and)e(esp)s +(ecially)h(when)f(p)s(erforming)150 1308 y(cross-domain)k(moun)m(ting.) +56 b(F)-8 b(or)37 b(this)e(function)g(to)h(w)m(ork,)i(the)d +Fq(Amd)k Fu(v)-5 b(ariable)36 b(`)p Fo(${hostd})p Fu(')e(is)h(used,)150 +1418 y(requiring)30 b(that)h(`)p Fo(${domain})p Fu(')d(not)j(b)s(e)f(n) +m(ull.)150 1644 y Fk(6.5.8)63 b Fj(hesiod_base)42 b Fk(P)m(arameter)275 +1837 y Fu(\(t)m(yp)s(e=string,)30 b(default=`)p Fo(automount)p +Fu('\).)39 b(Sp)s(ecify)30 b(the)h(base)f(name)h(for)f(hesio)s(d)g +(maps.)150 2063 y Fk(6.5.9)63 b Fj(karch)41 b Fk(P)m(arameter)275 +2257 y Fu(\(t)m(yp)s(e=string,)35 b(default)f(to)h(k)-5 +b(arc)m(h)34 b(of)g(the)h(system\).)52 b(Same)34 b(as)g(the)g +Fo(-k)g Fu(option)g(to)h Fq(Amd)p Fu(.)51 b(Allo)m(ws)150 +2366 y(y)m(ou)32 b(to)h(o)m(v)m(erride)f(the)g(k)m(ernel-arc)m +(hitecture)j(of)d(y)m(our)f(system.)45 b(Useful)32 b(for)g(example)g +(on)g(Sun)e(\(Sparc\))150 2476 y(mac)m(hines,)j(where)e(y)m(ou)i(can)f +(build)f(one)h Fq(Amd)j Fu(binary)-8 b(,)32 b(and)f(run)g(it)h(on)g(m)m +(ultiple)g(mac)m(hines,)i(y)m(et)f(y)m(ou)150 2585 y(w)m(an)m(t)27 +b(eac)m(h)h(one)f(to)g(get)h(the)e(correct)i Fq(k)-5 +b(arc)m(h)27 b Fu(v)-5 b(ariable)27 b(set)g(\(for)g(example,)h(sun4c,)f +(sun4m,)g(sun4u,)f(etc.\))150 2695 y(Note)35 b(that)g(if)e(not)i(sp)s +(eci\014ed,)f Fq(Amd)j Fu(will)d(use)f Fm(uname)p Fu(\(2\))i(to)f +(\014gure)g(out)g(the)g(k)m(ernel)g(arc)m(hitecture)i(of)150 +2805 y(the)31 b(mac)m(hine.)150 3030 y Fk(6.5.10)63 b +Fj(ldap_base)42 b Fk(P)m(arameter)275 3224 y Fu(\(t)m(yp)s(e=string,)30 +b(default)h(not)g(set\).)41 b(Sp)s(ecify)30 b(the)g(base)h(name)f(for)h +(LD)m(AP)-8 b(.)150 3450 y Fk(6.5.11)63 b Fj(ldap_cache_maxmem)43 +b Fk(P)m(arameter)275 3643 y Fu(\(t)m(yp)s(e=n)m(umeric,)f +(default=131072\).)70 b(Sp)s(ecify)39 b(the)h(maxim)m(um)f(memory)g +Fq(Amd)k Fu(should)38 b(use)h(to)150 3753 y(cac)m(he)32 +b(LD)m(AP)f(en)m(tries.)150 3979 y Fk(6.5.12)63 b Fj +(ldap_cache_seconds)43 b Fk(P)m(arameter)275 4172 y Fu(\(t)m(yp)s(e=n)m +(umeric,)29 b(default=0\).)41 b(Sp)s(ecify)28 b(the)h(n)m(um)m(b)s(er)f +(of)h(seconds)g(to)g(k)m(eep)h(en)m(tries)f(in)g(the)g(cac)m(he.)150 +4398 y Fk(6.5.13)63 b Fj(ldap_hostports)43 b Fk(P)m(arameter)275 +4592 y Fu(\(t)m(yp)s(e=string,)32 b(default)g(not)f(set\).)46 +b(Sp)s(ecify)31 b(LD)m(AP-sp)s(eci\014c)h(v)-5 b(alues)32 +b(suc)m(h)f(as)h(coun)m(try)g(and)f(orga-)150 4701 y(nization.)150 +4927 y Fk(6.5.14)63 b Fj(local_domain)43 b Fk(P)m(arameter)275 +5121 y Fu(\(t)m(yp)s(e=string,)28 b(default)h(no)e(sub-domain\).)40 +b(Same)28 b(as)g(the)g Fo(-d)f Fu(option)h(to)h Fq(Amd)p +Fu(.)39 b(Sp)s(ecify)28 b(the)g(lo)s(cal)150 5230 y(domain)23 +b(name.)38 b(If)22 b(this)h(option)h(is)f(not)g(giv)m(en)h(the)f +(domain)g(name)f(is)h(determined)g(from)f(the)h(hostname,)150 +5340 y(b)m(y)30 b(remo)m(ving)h(the)g(\014rst)f(comp)s(onen)m(t)g(of)h +(the)f(fully-quali\014ed)h(host)f(name.)p eop +%%Page: 50 52 +50 51 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(50)150 366 y Fk(6.5.15)63 b Fj(log_file)42 +b Fk(P)m(arameter)275 560 y Fu(\(t)m(yp)s(e=string,)29 +b(default=`)p Fo(stderr)p Fu('\).)39 b(Same)28 b(as)h(the)f +Fo(-l)g Fu(option)h(to)g Fq(Amd)p Fu(.)39 b(Sp)s(ecify)28 +b(a)g(\014le)h(name)f(to)150 670 y(log)h Fq(Amd)i Fu(ev)m(en)m(ts)e +(to.)40 b(If)28 b(the)g(string)f(`)p Fo(/dev/stderr)p +Fu(')e(is)j(sp)s(eci\014ed,)g Fq(Amd)j Fu(will)d(send)f(its)h(ev)m(en)m +(ts)h(to)g(the)150 779 y(standard)h(error)g(\014le)g(descriptor.)275 +915 y(If)48 b(the)h(string)g(`)p Fo(syslog)p Fu(')f(is)h(giv)m(en,)55 +b Fq(Amd)d Fu(will)d(record)g(its)g(ev)m(en)m(ts)h(with)f(the)g(system) +g(logger)150 1024 y Fm(syslogd)p Fu(\(8\).)100 b(If)49 +b(y)m(our)g(system)h(supp)s(orts)e(syslog)i(facilities,)57 +b(then)49 b(the)h(default)f(facilit)m(y)j(used)d(is)150 +1134 y(`)p Fo(LOG_DAEMON)p Fu('.)275 1270 y(When)38 b(using)f(syslog,) +42 b(if)c(y)m(ou)g(wish)g(to)h(c)m(hange)g(the)g(facilit)m(y)-8 +b(,)43 b(app)s(end)36 b(its)j(name)f(to)h(the)f(option)150 +1379 y(name,)g(delimited)g(b)m(y)e(a)h(single)g(colon.)61 +b(F)-8 b(or)37 b(example,)i(if)e(it)g(is)f(the)h(string)g(`)p +Fo(syslog:local7)p Fu(')c(then)150 1489 y Fq(Amd)40 b +Fu(will)d(log)h(messages)f(via)h Fm(syslog)p Fu(\(3\))h(using)d(the)h +(`)p Fo(LOG_LOCAL7)p Fu(')d(facilit)m(y)-8 b(.)63 b(If)36 +b(the)h(facilit)m(y)i(name)150 1598 y(sp)s(eci\014ed)27 +b(is)h(not)h(recognized,)h Fq(Amd)h Fu(will)d(default)h(to)f(`)p +Fo(LOG_DAEMON)p Fu('.)38 b(Note:)j(while)28 b(y)m(ou)g(can)h(use)f(an)m +(y)150 1708 y(syslog)k(facilit)m(y)i(a)m(v)-5 b(ailable)33 +b(on)f(y)m(our)f(system,)h(it)g(is)f(generally)i(a)f(bad)f(idea)h(to)g +(use)f(those)h(reserv)m(ed)f(for)150 1818 y(other)g(services)g(suc)m(h) +f(as)g(`)p Fo(kern)p Fu(',)g(`)p Fo(lpr)p Fu(',)h(`)p +Fo(cron)p Fu(',)f(etc.)150 2044 y Fk(6.5.16)63 b Fj(log_options)42 +b Fk(P)m(arameter)275 2237 y Fu(\(t)m(yp)s(e=string,)33 +b(default)f(no)g(logging)i(options\).)46 b(Same)32 b(as)h(the)f +Fo(-x)g Fu(option)g(to)h Fq(Amd)p Fu(.)45 b(Sp)s(ecify)32 +b(an)m(y)150 2347 y(logging)f(options)e(for)f Fq(Amd)p +Fu(.)40 b(Options)28 b(are)h(comma)h(delimited,)g(and)e(can)h(b)s(e)f +(preceded)g(b)m(y)h(the)g(string)150 2457 y(`)p Fo(no)p +Fu(')34 b(to)h(negate)g(their)g(meaning.)52 b(The)33 +b(`)p Fo(debug)p Fu(')h(logging)h(option)g(is)f(only)g(a)m(v)-5 +b(ailable)37 b(if)d(am-utils)h(w)m(as)150 2566 y(con\014gured)c(with)h +Fo(--enable-debug)p Fu(.)43 b(Y)-8 b(ou)32 b(can)h(get)g(the)g(list)g +(of)f(supp)s(orted)e(debugging)j(options)f(b)m(y)150 +2676 y(running)d Fo(amd)g(-v)p Fu(.)40 b(P)m(ossible)31 +b(v)-5 b(alues)31 b(are:)150 2837 y(`)p Fo(all)p Fu(')286 +b(all)31 b(messages)150 2997 y(`)p Fo(debug)p Fu(')190 +b(debug)30 b(messages)150 3158 y(`)p Fo(error)p Fu(')190 +b(non-fatal)31 b(system)g(errors)150 3318 y(`)p Fo(fatal)p +Fu(')190 b(fatal)32 b(errors)150 3479 y(`)p Fo(info)p +Fu(')238 b(information)150 3639 y(`)p Fo(map)p Fu(')286 +b(map)30 b(errors)150 3800 y(`)p Fo(stats)p Fu(')190 +b(additional)31 b(statistical)i(information)150 3960 +y(`)p Fo(user)p Fu(')238 b(non-fatal)31 b(user)f(errors)150 +4120 y(`)p Fo(warn)p Fu(')238 b(w)m(arnings)150 4281 +y(`)p Fo(warning)p Fu(')94 b(w)m(arnings)150 4507 y Fk(6.5.17)63 +b Fj(nfs_retransmit_counter)44 b Fk(P)m(arameter)275 +4701 y Fu(\(t)m(yp)s(e=n)m(umeric,)23 b(default=110\).)39 +b(Same)21 b(as)g(the)h Fq(coun)m(ter)28 b Fu(part)21 +b(of)g(the)g Fo(-t)g Fq(in)m(terv)-5 b(al.coun)m(ter)29 +b Fu(option)150 4810 y(to)i Fq(Amd)p Fu(.)40 b(Sp)s(eci\014es)30 +b(the)g(retransmit)h(coun)m(ter's)g(v)-5 b(alue)31 b(in)f +Fq(ten)m(ths)k Fu(of)d(seconds.)150 5037 y Fk(6.5.18)63 +b Fj(nfs_retry_interval)43 b Fk(P)m(arameter)275 5230 +y Fu(\(t)m(yp)s(e=n)m(umeric,)30 b(default=8\).)41 b(Same)31 +b(as)f(the)g Fq(in)m(terv)-5 b(al)35 b Fu(part)30 b(of)g(the)g +Fo(-t)g Fq(in)m(terv)-5 b(al.coun)m(ter)38 b Fu(option)150 +5340 y(to)31 b Fq(Amd)p Fu(.)40 b(Sp)s(eci\014es)30 b(the)g(in)m(terv) +-5 b(al)32 b(in)e Fq(ten)m(ths)35 b Fu(of)30 b(seconds,)h(b)s(et)m(w)m +(een)g(NFS/RPC/UDP)g(retries.)p eop +%%Page: 51 53 +51 52 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(51)150 366 y Fk(6.5.19)63 b Fj(nis_domain)42 +b Fk(P)m(arameter)275 574 y Fu(\(t)m(yp)s(e=string,)23 +b(default)f(to)g(lo)s(cal)g(NIS)f(domain)g(name\).)38 +b(Same)21 b(as)h(the)f Fo(-y)g Fu(option)h(to)g Fq(Amd)p +Fu(.)37 b(Sp)s(ecify)150 684 y(an)e(alternativ)m(e)j(NIS)c(domain)h +(from)g(whic)m(h)g(to)h(fetc)m(h)g(the)g(NIS)e(maps.)55 +b(The)35 b(default)g(is)g(the)h(system)150 794 y(domain)30 +b(name.)41 b(This)30 b(option)g(is)h(ignored)f(if)h(NIS)e(supp)s(ort)g +(is)h(not)h(a)m(v)-5 b(ailable.)150 1049 y Fk(6.5.20)63 +b Fj(normalize_hostnames)43 b Fk(P)m(arameter)275 1257 +y Fu(\(t)m(yp)s(e=b)s(o)s(olean,)33 b(default=`)p Fo(no)p +Fu('\).)46 b(Same)33 b(as)f(the)g Fo(-n)g Fu(option)h(to)g +Fq(Amd)p Fu(.)45 b(If)32 b(`)p Fo(yes)p Fu(',)h(then)e(the)i(name)150 +1366 y(referred)28 b(to)h(b)m(y)f Fo(${rhost})e Fu(is)i(normalized)h +(relativ)m(e)h(to)f(the)g(host)f(database)h(b)s(efore)f(b)s(eing)g +(used.)39 b(The)150 1476 y(e\013ect)32 b(is)e(to)h(translate)h(aliases) +g(in)m(to)f(\\o\016cial")i(names.)150 1731 y Fk(6.5.21)63 +b Fj(os)41 b Fk(P)m(arameter)275 1939 y Fu(\(t)m(yp)s(e=string,)g +(default)e(to)h(compiled)f(in)f(v)-5 b(alue\).)67 b(Same)39 +b(as)g(the)g Fo(-O)g Fu(option)g(to)g Fq(Amd)p Fu(.)66 +b(Allo)m(ws)150 2048 y(y)m(ou)38 b(to)h(o)m(v)m(erride)g(the)f +(compiled-in)g(name)g(of)g(the)g(op)s(erating)h(system.)63 +b(Useful)38 b(when)f(the)h(built-in)150 2158 y(name)32 +b(is)f(not)h(desired)f(for)h(bac)m(kw)m(ard)g(compatibilit)m(y)i +(reasons.)45 b(F)-8 b(or)32 b(example,)h(if)e(the)h(built-in)g(name)150 +2267 y(is)f(`)p Fo(sunos5)p Fu(',)f(y)m(ou)i(can)f(o)m(v)m(erride)h(it) +g(to)g(`)p Fo(sos5)p Fu(',)f(and)f(use)h(older)g(maps)g(whic)m(h)f(w)m +(ere)i(written)f(with)g(the)150 2377 y(latter)h(in)e(mind.)150 +2632 y Fk(6.5.22)63 b Fj(osver)42 b Fk(P)m(arameter)275 +2840 y Fu(\(t)m(yp)s(e=string,)f(default)e(to)h(compiled)f(in)f(v)-5 +b(alue\).)67 b(Same)39 b(as)g(the)g Fo(-o)g Fu(option)g(to)g +Fq(Amd)p Fu(.)66 b(Allo)m(ws)150 2949 y(y)m(ou)33 b(to)h(o)m(v)m +(erride)g(the)f(compiled-in)h(v)m(ersion)f(n)m(um)m(b)s(er)f(of)h(the)g +(op)s(erating)g(system.)49 b(Useful)33 b(when)f(the)150 +3059 y(built-in)27 b(v)m(ersion)h(is)f(not)h(desired)f(for)g(bac)m(kw)m +(ard)h(compatibilit)m(y)h(reasons.)40 b(F)-8 b(or)28 +b(example,)h(if)e(the)h(build)150 3169 y(in)j(v)m(ersion)i(is)f(`)p +Fo(2.5.1)p Fu(',)f(y)m(ou)h(can)g(o)m(v)m(erride)h(it)f(to)h(`)p +Fo(5.5.1)p Fu(',)e(and)h(use)f(older)h(maps)f(that)i(w)m(ere)f(written) +150 3278 y(with)e(the)h(latter)g(in)f(mind.)150 3533 +y Fk(6.5.23)63 b Fj(pid_file)42 b Fk(P)m(arameter)275 +3741 y Fu(\(t)m(yp)s(e=string,)48 b(default=`)p Fo(/dev/stdout)p +Fu('\).)79 b(Sp)s(ecify)43 b(a)i(\014le)f(to)h(store)f(the)h(pro)s +(cess)e(ID)i(of)f(the)150 3851 y(running)39 b(daemon)i(in)m(to.)74 +b(If)41 b(not)g(sp)s(eci\014ed,)i Fq(Amd)h Fu(will)e(prin)m(t)e(its)i +(pro)s(cess)f(id)f(on)m(to)j(the)e(standard)150 3960 +y(output.)h(Useful)31 b(for)f(killing)i Fq(Amd)i Fu(after)d(it)h(had)e +(run.)41 b(Note)32 b(that)f(the)g(PID)g(of)g(a)h(running)d +Fq(Amd)34 b Fu(can)150 4070 y(also)d(b)s(e)f(retriev)m(ed)h(via)g +Fq(Amq)i Fu(\(see)e(Section)g(7.4.7)h([Amq)f(-p)f(option],)h(page)g +(58\).)275 4220 y(This)i(\014le)i(is)g(used)f(only)h(if)f(the)h(`)p +Fo(print_pid)p Fu(')e(option)i(is)g(on)f(\(see)i(Section)f(6.5.26)i +([prin)m(t)p 3426 4220 28 4 v 33 w(pid)d(P)m(a-)150 4329 +y(rameter],)d(page)h(52\).)150 4584 y Fk(6.5.24)63 b +Fj(plock)42 b Fk(P)m(arameter)275 4792 y Fu(\(t)m(yp)s(e=b)s(o)s +(olean,)49 b(default=`)p Fo(yes)p Fu('\).)85 b(Same)45 +b(as)h(the)f Fo(-S)g Fu(option)g(to)h Fq(Amd)p Fu(.)85 +b(If)45 b(`)p Fo(yes)p Fu(',)k(lo)s(c)m(k)d(the)150 4902 +y(running)32 b(executable)k(pages)f(of)f Fq(Amd)j Fu(in)m(to)e(memory) +-8 b(.)52 b(T)-8 b(o)34 b(impro)m(v)m(e)h Fq(Amd)t Fu('s)e(p)s +(erformance,)i(systems)150 5011 y(that)25 b(supp)s(ort)e(the)i +Fm(plo)s(c)m(k)p Fu(\(3\))h(call)g(can)f(lo)s(c)m(k)h(the)f +Fq(Amd)j Fu(pro)s(cess)c(in)m(to)h(memory)-8 b(.)40 b(This)23 +b(w)m(a)m(y)j(there)f(is)g(less)150 5121 y(c)m(hance)k(the)f(op)s +(erating)h(system)f(will)h(sc)m(hedule,)g(page)f(out,)h(and)f(sw)m(ap)g +(the)g Fq(Amd)j Fu(pro)s(cess)d(as)g(needed.)150 5230 +y(This)k(impro)m(v)m(es)i Fq(Amd)t Fu('s)e(p)s(erformance,)h(at)h(the)f +(cost)h(of)f(reserving)g(the)g(memory)g(used)f(b)m(y)g(the)i +Fq(Amd)150 5340 y Fu(pro)s(cess)c(\(making)h(it)g(una)m(v)-5 +b(ailable)32 b(for)e(other)g(pro)s(cesses\).)p eop +%%Page: 52 54 +52 53 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(52)150 366 y Fk(6.5.25)63 b Fj(portmap_program)43 +b Fk(P)m(arameter)275 558 y Fu(\(t)m(yp)s(e=n)m(umeric,)24 +b(default=300019\).)42 b(Sp)s(ecify)22 b(an)h(alternate)i(P)m(ort-mapp) +s(er)d(RPC)h(program)f(n)m(um-)150 668 y(b)s(er,)33 b(other)h(than)f +(the)h(o\016cial)h(n)m(um)m(b)s(er.)48 b(This)33 b(is)h(useful)e(when)h +(running)e(m)m(ultiple)j Fq(Amd)j Fu(pro)s(cesses.)150 +777 y(F)-8 b(or)27 b(example,)h(y)m(ou)e(can)h(run)d(another)j +Fq(Amd)i Fu(in)c(\\test")j(mo)s(de,)f(without)f(a\013ecting)i(the)e +(primary)g Fq(Amd)150 887 y Fu(pro)s(cess)f(in)f(an)m(y)i(w)m(a)m(y)-8 +b(.)40 b(F)-8 b(or)26 b(safet)m(y)g(reasons,)g(the)f(alternate)i +(program)e(n)m(um)m(b)s(ers)e(that)j(can)f(b)s(e)g(sp)s(eci\014ed)150 +996 y(m)m(ust)33 b(b)s(e)g(in)h(the)g(range)f(300019-300029,)41 +b(inclusiv)m(e.)51 b Fq(Amq)36 b Fu(has)d(an)g(option)i +Fo(-P)e Fu(whic)m(h)g(can)h(b)s(e)f(used)150 1106 y(to)f(sp)s(ecify)f +(an)h(alternate)h(program)e(n)m(um)m(b)s(er)g(of)g(an)h +Fq(Amd)i Fu(to)f(con)m(tact.)46 b(In)31 b(this)g(w)m(a)m(y)-8 +b(,)34 b(amq)d(can)h(fully)150 1216 y(con)m(trol)g(an)m(y)f(n)m(um)m(b) +s(er)e(of)h Fq(Amd)j Fu(pro)s(cesses)e(running)d(on)j(the)f(same)h +(host.)150 1436 y Fk(6.5.26)63 b Fj(print_pid)42 b Fk(P)m(arameter)275 +1628 y Fu(\(t)m(yp)s(e=b)s(o)s(olean,)31 b(default=`)p +Fo(no)p Fu('\).)44 b(Same)31 b(as)g(the)h Fo(-p)e Fu(option)i(to)f +Fq(Amd)p Fu(.)43 b(If)31 b(`)p Fo(yes)p Fu(',)g Fq(Amd)j +Fu(will)d(prin)m(t)150 1737 y(its)g(pro)s(cess)f(ID)g(up)s(on)f +(starting.)150 1958 y Fk(6.5.27)63 b Fj(print_version)43 +b Fk(P)m(arameter)275 2150 y Fu(\(t)m(yp)s(e=b)s(o)s(olean,)c +(default=`)p Fo(no)p Fu('\).)60 b(Same)37 b(as)h(the)f +Fo(-v)f Fu(option)i(to)f Fq(Amd)p Fu(,)i(but)d(the)h(v)m(ersion)g(prin) +m(ts)150 2259 y(and)d Fq(Amd)k Fu(con)m(tin)m(ues)e(to)g(run.)53 +b(If)34 b(`)p Fo(yes)p Fu(',)i Fq(Amd)i Fu(will)d(prin)m(t)g(its)g(v)m +(ersion)h(information)f(string,)h(whic)m(h)150 2369 y(includes)30 +b(some)h(con\014guration)g(and)e(compilation)j(v)-5 b(alues.)150 +2590 y Fk(6.5.28)63 b Fj(restart_mounts)43 b Fk(P)m(arameter)275 +2781 y Fu(\(t)m(yp)s(e=b)s(o)s(olean,)35 b(default=`)p +Fo(no)p Fu('\).)51 b(Same)34 b(as)h(the)f Fo(-r)f Fu(option)h(to)h +Fq(Amd)p Fu(.)51 b(If)33 b(`)p Fo(yes)p Fu(')h Fq(Amd)j +Fu(will)d(scan)150 2891 y(the)f(moun)m(t)f(table)i(to)f(determine)f +(whic)m(h)h(\014le)f(systems)h(are)f(curren)m(tly)h(moun)m(ted.)47 +b(Whenev)m(er)33 b(one)g(of)150 3001 y(these)e(w)m(ould)f(ha)m(v)m(e)i +(b)s(een)d(auto-moun)m(ted,)j Fq(Amd)h Fu(inherits)d(it.)150 +3221 y Fk(6.5.29)63 b Fj(selectors_on_default)44 b Fk(P)m(arameter)275 +3413 y Fu(\(t)m(yp)s(e=b)s(o)s(olean,)j(default=`)p Fo(no)p +Fu('\).)81 b(If)43 b(`)p Fo(yes)p Fu(',)k(then)d(the)g(`)p +Fo(/defaults)p Fu(')d(en)m(try)j(of)g(maps)f(will)i(b)s(e)150 +3523 y(lo)s(ok)m(ed)27 b(for)f(and)g(an)m(y)h(selectors)g(pro)s(cessed) +f(b)s(efore)g(setting)h(defaults)g(for)f(all)h(other)f(k)m(eys)h(in)f +(that)h(map.)150 3632 y(Useful)c(when)f(y)m(ou)h(w)m(an)m(t)g(to)h(set) +f(di\013eren)m(t)g(options)h(for)e(a)h(complete)i(map)d(based)g(on)h +(some)g(parameters.)150 3742 y(F)-8 b(or)33 b(example,)i(y)m(ou)e(ma)m +(y)g(w)m(an)m(t)h(to)f(b)s(etter)g(the)g(NFS)f(p)s(erformance)g(o)m(v)m +(er)i(slo)m(w)g(slip-based)e(net)m(w)m(orks)150 3851 +y(as)f(follo)m(ws:)390 3979 y Fo(/defaults)45 b(\\)581 +4083 y(wire==slip-net;opts:=int)o(r,rs)o(ize)o(=102)o(4,ws)o(ize)o +(=102)o(4)d(\\)581 4186 y(wire!=slip-net;opts:=int)o(r,rs)o(ize)o(=819) +o(2,ws)o(ize)o(=819)o(2)150 4407 y Fk(6.5.30)63 b Fj +(show_statfs_entries)43 b Fk(P)m(arameter)275 4599 y +Fu(\(t)m(yp)s(e=b)s(o)s(olean\),)g(default=`)p Fo(no)p +Fu('\).)71 b(If)40 b(`)p Fo(yes)p Fu(',)i(then)e(all)h(maps)f(whic)m(h) +g(are)h(bro)m(wsable)f(will)h(also)150 4708 y(sho)m(w)d(the)g(n)m(um)m +(b)s(er)f(of)h(en)m(tries)g(\(k)m(eys\))i(they)e(ha)m(v)m(e)h(when)e +Fm(df)p Fu(\(1\))h(runs.)62 b(\(This)37 b(is)h(accomplished)h(b)m(y)150 +4818 y(returning)29 b(non-zero)i(v)-5 b(alues)31 b(to)g(the)g +Fm(statfs)p Fu(\(2\))h(system)e(call\).)150 5039 y Fk(6.5.31)63 +b Fj(unmount_on_exit)43 b Fk(P)m(arameter)275 5230 y +Fu(\(t)m(yp)s(e=b)s(o)s(olean\),)j(default=`)p Fo(no)p +Fu('\).)79 b(If)42 b(`)p Fo(yes)p Fu(',)k(then)c Fq(Amd)k +Fu(will)d(attempt)h(to)f(unmoun)m(t)f(all)i(\014le)150 +5340 y(systems)c(whic)m(h)g(it)g(kno)m(ws)g(ab)s(out.)70 +b(Normally)41 b(it)f(lea)m(v)m(es)j(all)e(\(esp.)69 b(NFS\))41 +b(moun)m(ted)f(\014le)g(systems)p eop +%%Page: 53 55 +53 54 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(53)150 366 y(in)m(tact.)78 b(Note)44 b(that)f +Fq(Amd)i Fu(do)s(es)d(not)h(kno)m(w)f(ab)s(out)g(\014le)h(systems)f +(moun)m(ted)g(b)s(efore)g(it)h(starts)g(up,)150 476 y(unless)27 +b(the)h(`)p Fo(restart_mounts)p Fu(')c(option)29 b(is)f(used)f(\(see)h +(Section)h(6.5.28)h([restart)p 2939 476 28 4 v 33 w(moun)m(ts)e(P)m +(arameter],)150 586 y(page)j(52\).)150 837 y Ft(6.6)68 +b(Regular)46 b(Map)f(P)l(arameters)275 1027 y Fu(The)29 +b(follo)m(wing)j(parameters)f(are)g(applicable)g(only)g(to)g(regular)f +(map)g(sections.)150 1245 y Fk(6.6.1)63 b(map)p 701 1245 +37 5 v 44 w(name)41 b(P)m(arameter)275 1435 y Fu(\(t)m(yp)s(e=string,) +30 b(m)m(ust)h(b)s(e)e(sp)s(eci\014ed\).)41 b(Name)31 +b(of)f(the)h(map)f(where)g(the)g(k)m(eys)h(are)g(lo)s(cated.)150 +1653 y Fk(6.6.2)63 b(tag)40 b(P)m(arameter)275 1843 y +Fu(\(t)m(yp)s(e=string,)34 b(default)g(no)g(tag\).)51 +b(Eac)m(h)35 b(map)e(en)m(try)h(in)f(the)h(con\014guration)g(\014le)f +(can)h(b)s(e)f(tagged.)150 1953 y(If)e(no)h(tag)h(is)e(sp)s(eci\014ed,) +h(that)g(map)f(section)i(will)f(alw)m(a)m(ys)i(b)s(e)d(pro)s(cessed)g +(b)m(y)g Fq(Amd)p Fu(.)44 b(If)31 b(it)i(is)e(sp)s(eci\014ed,)150 +2062 y(then)g Fq(Amd)i Fu(will)f(pro)s(cess)e(the)h(map)g(if)g(the)g +Fo(-T)f Fu(option)h(w)m(as)g(giv)m(en)h(to)g Fq(Amd)p +Fu(,)f(and)f(the)h(v)-5 b(alue)31 b(giv)m(en)h(to)150 +2172 y(that)f(command-line)g(option)g(matc)m(hes)g(that)g(in)f(the)h +(map)f(section.)150 2423 y Ft(6.7)68 b(amd.conf)45 b(Examples)275 +2613 y Fu(The)30 b(follo)m(wing)j(is)e(the)g(actual)i +Fo(amd.conf)28 b Fu(\014le)k(I)e(use)h(at)h(the)f(Computer)g(Science)g +(Departmen)m(t)i(of)150 2723 y(Colum)m(bia)e(Univ)m(ersit)m(y)-8 +b(.)390 2849 y Fo(#)47 b(GLOBAL)g(OPTIONS)e(SECTION)390 +2953 y([)i(global)g(])390 3057 y(normalize_hostnames)c(=)190 +b(no)390 3161 y(print_pid)45 b(=)668 b(no)390 3264 y(#pid_file)45 +b(=)668 b(/var/run/amd.pid)390 3368 y(restart_mounts)44 +b(=)429 b(yes)390 3472 y(#unmount_on_exit)43 b(=)334 +b(yes)390 3576 y(auto_dir)46 b(=)715 b(/n)390 3680 y(log_file)46 +b(=)715 b(/var/log/amd)390 3783 y(log_options)45 b(=)572 +b(all)390 3887 y(#debug_options)44 b(=)429 b(all)390 +3991 y(plock)46 b(=)859 b(no)390 4095 y(selectors_on_default)42 +b(=)143 b(yes)390 4198 y(#)47 b(config.guess)e(picks)h(up)h("sunos5")f +(and)h(I)g(don't)g(want)f(to)i(edit)e(my)h(maps)g(yet)390 +4302 y(os)g(=)1002 b(sos5)390 4406 y(#)47 b(if)h(you)f(print_version)d +(after)i(setting)g(up)h("os",)f(it)i(will)e(show)h(it.)390 +4510 y(print_version)d(=)477 b(no)390 4614 y(map_type)46 +b(=)715 b(file)390 4717 y(search_path)45 b(=)572 b +(/etc/amdmaps:/usr/lib/amd)o(:/us)o(r/l)o(ocal)o(/AMD)o(/li)o(b)390 +4821 y(browsable_dirs)44 b(=)429 b(yes)390 4925 y +(fully_qualified_hosts)42 b(=)95 b(no)390 5132 y(#)47 +b(DEFINE)g(AN)g(AMD)g(MOUNT)f(POINT)390 5236 y([)h(/u)h(])390 +5340 y(map_name)e(=)715 b(amd.u)p eop +%%Page: 54 56 +54 55 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Amd)30 b(Con\014guration)g +(File)2094 b(54)390 470 y Fo([)47 b(/proj)g(])390 574 +y(map_name)f(=)715 b(amd.proj)390 782 y([)47 b(/src)g(])390 +885 y(map_name)f(=)715 b(amd.src)390 1093 y([)47 b(/misc)g(])390 +1197 y(map_name)f(=)715 b(amd.misc)390 1404 y([)47 b(/import)f(])390 +1508 y(map_name)g(=)715 b(amd.import)390 1716 y([)47 +b(/tftpboot/.amd)d(])390 1819 y(tag)j(=)954 b(tftpboot)390 +1923 y(map_name)46 b(=)715 b(amd.tftpboot)p eop +%%Page: 55 57 +55 56 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Run-time)30 +b(Administration)2035 b(55)150 366 y Fr(7)80 b(Run-time)53 +b(Administration)150 733 y Ft(7.1)68 b(Starting)46 b +Fg(Amd)275 928 y Fq(Amd)40 b Fu(is)e(b)s(est)f(started)h(from)f(`)p +Fo(/etc/rc.local)p Fu(')e(on)j(BSD)f(systems,)j(or)e(from)f(the)h +(appropriate)150 1038 y(start-lev)m(el)33 b(script)d(in)g(`)p +Fo(/etc/init.d)p Fu(')e(on)i(System)h(V)f(systems.)390 +1169 y Fo(if)47 b([)h(-f)f(/usr/local/sbin/ctl-amd)41 +b(];)47 b(then)581 1272 y(/usr/local/sbin/ctl-amd)41 +b(start;)46 b(\(echo)h(-n)g(')g(amd'\))g(>)g(/dev/console)390 +1376 y(fi)150 1513 y Fu(The)31 b(shell)i(script,)f(`)p +Fo(ctl-amd)p Fu(')f(is)h(used)f(to)i(start,)g(stop,)g(or)f(restart)g +Fq(Amd)p Fu(.)45 b(It)32 b(is)g(a)h(relativ)m(ely)h(generic)150 +1622 y(script.)49 b(All)34 b(options)g(y)m(ou)f(w)m(an)m(t)i(to)f(set)f +(should)g(not)g(b)s(e)g(made)g(in)g(this)g(script,)i(but)d(rather)h(up) +s(dated)150 1732 y(in)d(the)h(`)p Fo(amd.conf)p Fu(')d(\014le.)41 +b(See)31 b(Chapter)e(6)i([Amd)f(Con\014guration)g(File],)i(page)f(46.) +275 1869 y(If)f(y)m(ou)g(do)h(not)g(wish)e(to)j(use)e(an)g +Fq(Amd)k Fu(con\014guration)d(\014le,)f(y)m(ou)h(ma)m(y)g(start)h +Fq(Amd)h Fu(man)m(ually)-8 b(.)42 b(F)-8 b(or)150 1978 +y(example,)31 b(getting)h(the)f(map)f(en)m(tries)h(via)g(NIS:)390 +2109 y Fo(amd)47 b(-r)g(-l)g(/var/log/amd)e(`ypcat)h(-k)h(auto.master`) +150 2372 y Ft(7.2)68 b(Stopping)45 b Fg(Amd)275 2567 +y Fq(Amd)33 b Fu(stops)d(in)g(resp)s(onse)g(to)h(t)m(w)m(o)h(signals.) +150 2729 y(`)p Fo(SIGTERM)p Fu(')94 b(causes)28 b(the)h(top-lev)m(el)h +(automoun)m(t)e(p)s(oin)m(ts)g(to)h(b)s(e)e(unmoun)m(ted)g(and)h(then)f +Fq(Amd)k Fu(to)e(exit.)630 2839 y(An)m(y)45 b(automoun)m(ted)g +(\014lesystems)g(are)h(left)f(moun)m(ted.)84 b(They)44 +b(can)h(b)s(e)g(reco)m(v)m(ered)h(b)m(y)630 2948 y(restarting)31 +b Fq(Amd)i Fu(with)e(the)f Fo(-r)g Fu(command)g(line)h(option.)150 +3110 y(`)p Fo(SIGINT)p Fu(')142 b(causes)28 b Fq(Amd)j +Fu(to)d(attempt)h(to)f(unmoun)m(t)f(an)m(y)g(\014lesystems)h(whic)m(h)g +(it)g(has)f(automoun)m(ted,)630 3220 y(in)g(addition)g(to)g(the)g +(actions)h(of)f(`)p Fo(SIGTERM)p Fu('.)39 b(This)26 b(signal)h(is)g +(primarily)g(used)f(for)g(debug-)630 3329 y(ging.)275 +3492 y(Actions)31 b(tak)m(en)g(for)f(other)h(signals)g(are)g +(unde\014ned.)275 3629 y(The)d(easiest)j(and)d(safest)i(w)m(a)m(y)g(to) +g(stop)f Fq(Amd)p Fu(,)g(without)g(ha)m(ving)h(to)g(\014nd)d(its)j(pro) +s(cess)e(ID)i(b)m(y)f(hand,)150 3738 y(is)h(to)i(use)e(the)g(`)p +Fo(ctl-amd)p Fu(')f(script,)i(as)f(with:)390 3869 y Fo(ctl-amd)46 +b(stop)150 4132 y Ft(7.3)68 b(Restarting)47 b Fg(Amd)275 +4327 y Fu(Before)32 b Fq(Amd)i Fu(can)e(b)s(e)e(started,)j(it)f(is)f +(vital)i(to)f(ensure)e(that)i(no)f(other)h Fq(Amd)i Fu(pro)s(cesses)d +(are)h(man-)150 4436 y(aging)h(an)m(y)f(of)g(the)g(moun)m(t)g(p)s(oin)m +(ts,)g(and)f(that)h(the)g(previous)g(pro)s(cess\(es\))g(ha)m(v)m(e)h +(terminated)f(cleanly)-8 b(.)150 4546 y(When)31 b(a)h(terminating)g +(signal)f(is)h(set)f(to)h Fq(Amd)p Fu(,)f(the)h(automoun)m(ter)g(do)s +(es)f Fq(not)i Fu(terminate)f(righ)m(t)g(then.)150 4655 +y(Rather,)h(it)f(starts)g(b)m(y)g(unmoun)m(ting)f(all)h(of)g(its)g +(managed)h(moun)m(t)e(moun)m(ts)h(in)f(the)h(bac)m(kground,)h(and)150 +4765 y(then)e(terminates.)44 b(It)31 b(usually)g(tak)m(es)i(a)e(few)g +(seconds)g(for)g(this)g(pro)s(cess)g(to)h(happ)s(en,)e(but)g(it)i(can)f +(tak)m(e)150 4875 y(an)40 b(arbitrarily)g(longer)g(time.)70 +b(If)39 b(t)m(w)m(o)i(or)f(more)g Fq(Amd)j Fu(pro)s(cesses)c(attempt)i +(to)g(manage)g(the)f(same)150 4984 y(moun)m(t)30 b(p)s(oin)m(t,)h(it)g +(usually)f(will)h(result)f(in)g(a)h(system)f(lo)s(c)m(kup.)275 +5121 y(The)38 b(easiest)j(and)e(safest)h(w)m(a)m(y)g(to)g(restart)g +Fq(Amd)p Fu(,)h(without)e(ha)m(ving)h(to)g(\014nd)e(its)i(pro)s(cess)f +(ID)g(b)m(y)150 5230 y(hand,)34 b(sending)f(it)h(the)g(`)p +Fo(SIGTERM)p Fu(')f(signal,)i(w)m(aiting)h(for)d Fq(Amd)k +Fu(to)e(die)e(cleanly)-8 b(,)37 b(and)c(v)m(erifying)i(so,)g(is)150 +5340 y(to)c(use)f(the)h(`)p Fo(ctl-amd)p Fu(')e(script,)h(as)h(with:)p +eop +%%Page: 56 58 +56 57 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Run-time)30 +b(Administration)2035 b(56)390 366 y Fo(ctl-amd)46 b(restart)275 +508 y Fu(The)27 b(script)h(will)g(lo)s(cate)i(the)e(pro)s(cess)f(ID)h +(of)g Fq(Amd)p Fu(,)g(kill)h(it,)g(and)e(w)m(ait)i(for)f(it)h(to)f(die) +g(cleanly)h(b)s(efore)150 618 y(starting)35 b(a)g(new)f(instance)h(of)g +(the)f(automoun)m(ter.)54 b(`)p Fo(ctl-amd)p Fu(')33 +b(will)h(w)m(ait)i(for)e(a)h(total)h(of)f(30)g(seconds)150 +727 y(for)30 b Fq(Amd)j Fu(to)f(die,)e(and)g(will)h(c)m(hec)m(k)h(once) +f(ev)m(ery)g(5)g(seconds)f(if)g(it)h(had.)150 1002 y +Ft(7.4)68 b(Con)l(trolling)47 b Fg(Amd)275 1202 y Fu(It)35 +b(is)g(sometimes)h(desirable)f(or)g(necessary)h(to)g(exercise)g +(external)g(con)m(trol)h(o)m(v)m(er)f(some)g(of)f Fq(Amd)t +Fu('s)150 1312 y(in)m(ternal)h(state.)58 b(T)-8 b(o)36 +b(supp)s(ort)e(this)i(requiremen)m(t,)h Fq(Amd)i Fu(implemen)m(ts)d(an) +f(RPC)g(in)m(terface)j(whic)m(h)d(is)150 1421 y(used)30 +b(b)m(y)g(the)g Fq(Amq)j Fu(program.)40 b(A)31 b(v)-5 +b(ariet)m(y)31 b(of)g(information)g(is)f(a)m(v)-5 b(ailable.)275 +1563 y Fq(Amq)27 b Fu(generally)g(applies)f(an)g(op)s(eration,)h(sp)s +(eci\014ed)e(b)m(y)h(a)g(single)h(letter)g(option,)g(to)f(a)h(list)f +(of)g(moun)m(t)150 1672 y(p)s(oin)m(ts.)39 b(The)25 b(default)g(op)s +(eration)h(is)f(to)i(obtain)e(statistics)j(ab)s(out)d(eac)m(h)h(moun)m +(t)g(p)s(oin)m(t.)39 b(This)24 b(is)i(similar)150 1782 +y(to)h(the)g(output)f(sho)m(wn)g(ab)s(o)m(v)m(e)i(but)d(includes)h +(information)h(ab)s(out)f(the)h(n)m(um)m(b)s(er)e(and)h(t)m(yp)s(e)h +(of)f(accesses)150 1891 y(to)31 b(eac)m(h)h(moun)m(t)e(p)s(oin)m(t.)150 +2130 y Fk(7.4.1)63 b Ff(Amq)44 b Fk(default)d(information)275 +2329 y Fu(With)d(no)h(argumen)m(ts,)i Fq(Amq)f Fu(obtains)f(a)f(brief)g +(list)h(of)g(all)g(existing)g(moun)m(ts)g(created)g(b)m(y)f +Fq(Amd)p Fu(.)150 2439 y(This)25 b(is)i(di\013eren)m(t)g(from)e(the)i +(list)g(displa)m(y)m(ed)g(b)m(y)f Fm(df)p Fu(\(1\))g(since)h(the)g +(latter)g(only)g(includes)f(system)g(moun)m(t)150 2549 +y(p)s(oin)m(ts.)150 2690 y(The)k(output)g(from)g(this)g(option)h +(includes)f(the)g(follo)m(wing)i(information:)225 2832 +y Fs(\017)60 b Fu(the)31 b(automoun)m(t)g(p)s(oin)m(t,)225 +2970 y Fs(\017)60 b Fu(the)31 b(\014lesystem)f(t)m(yp)s(e,)225 +3108 y Fs(\017)60 b Fu(the)31 b(moun)m(t)f(map)g(or)g(moun)m(t)h +(information,)225 3246 y Fs(\017)60 b Fu(the)31 b(in)m(ternal,)g(or)f +(system)h(moun)m(t)f(p)s(oin)m(t.)150 3416 y(F)-8 b(or)31 +b(example:)390 3551 y Fo(/)572 b(root)143 b("root")952 +b(sky:\(pid75\))390 3655 y(/homes)332 b(toplvl)47 b +(/usr/local/etc/amd.home)o(s)89 b(/homes)390 3759 y(/home)380 +b(toplvl)47 b(/usr/local/etc/amd.home)136 b(/home)390 +3863 y(/homes/jsp)k(nfs)191 b(charm:/home/charm)424 b +(/a/charm/home/charm/jsp)390 3967 y(/homes/phjk)92 b(nfs)191 +b(toytown:/home/toytown)232 b(/a/toytown/home/toytown/ai)o(/phj)o(k)p +4071 3987 42 84 v 150 4108 a Fu(If)30 b(an)g(argumen)m(t)h(is)f(giv)m +(en)i(then)e(statistics)i(for)e(that)h(v)m(olume)g(name)g(will)g(b)s(e) +e(output.)41 b(F)-8 b(or)31 b(example:)390 4244 y Fo(What)428 +b(Uid)143 b(Getattr)46 b(Lookup)g(RdDir)142 b(RdLnk)f(Statfs)46 +b(Mounted@)390 4348 y(/homes)332 b(0)239 b(1196)190 b(512)g(22)286 +b(0)333 b(30)238 b(90/09/14)46 b(12:32:55)p 3924 4356 +42 71 v 390 4451 a(/homes/jsp)140 b(0)239 b(0)334 b(0)286 +b(0)334 b(1180)189 b(0)286 b(90/10/13)46 b(12:56:58)p +3924 4472 42 84 v 150 4621 a(What)288 b Fu(the)31 b(v)m(olume)g(name.) +150 4788 y Fo(Uid)336 b Fu(ignored.)150 4954 y Fo(Getattr)144 +b Fu(the)32 b(coun)m(t)h(of)f(NFS)g Fq(getattr)40 b Fu(requests)32 +b(on)g(this)f(no)s(de.)45 b(This)31 b(should)g(only)h(b)s(e)f(non-zero) +630 5064 y(for)f(directory)h(no)s(des.)150 5230 y Fo(Lookup)192 +b Fu(the)33 b(coun)m(t)g(of)g(NFS)f Fq(lo)s(okup)j Fu(requests)d(on)h +(this)f(no)s(de.)47 b(This)31 b(should)h(only)g(b)s(e)g(non-zero)630 +5340 y(for)e(directory)h(no)s(des.)p eop +%%Page: 57 59 +57 58 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Run-time)30 +b(Administration)2035 b(57)150 366 y Fo(RdDir)240 b Fu(the)31 +b(coun)m(t)h(of)g(NFS)f Fq(readdir)37 b Fu(requests)31 +b(on)g(this)g(no)s(de.)43 b(This)30 b(should)g(only)i(b)s(e)e(non-zero) +630 476 y(for)g(directory)h(no)s(des.)150 634 y Fo(RdLnk)240 +b Fu(the)45 b(coun)m(t)g(of)g(NFS)f Fq(readlink)50 b +Fu(requests)45 b(on)f(this)h(no)s(de.)82 b(This)44 b(should)g(b)s(e)g +(zero)h(for)630 744 y(directory)31 b(no)s(des.)150 902 +y Fo(Statfs)192 b Fu(the)36 b(coun)m(t)h(of)f(NFS)g Fq(statfs)k +Fu(requests)c(on)f(this)h(no)s(de.)57 b(This)35 b(should)g(only)h(b)s +(e)f(non-zero)630 1011 y(for)30 b(top-lev)m(el)j(automoun)m(t)e(p)s +(oin)m(ts.)150 1169 y Fo(Mounted@)96 b Fu(the)31 b(date)g(and)e(time)i +(the)g(v)m(olume)g(name)g(w)m(as)f(\014rst)g(referenced.)150 +1391 y Fk(7.4.2)63 b Ff(Amq)44 b Fj(-f)d Fk(option)275 +1583 y Fu(The)36 b Fo(-f)h Fu(option)g(causes)h Fq(Amd)i +Fu(to)e(\015ush)d(the)j(in)m(ternal)g(moun)m(t)f(map)g(cac)m(he.)62 +b(This)37 b(is)g(useful)f(for)150 1693 y(example)42 b(in)f(Hesio)s(d)g +(maps)g(since)g Fq(Amd)j Fu(will)e(not)f(automatically)j(notice)f(when) +d(they)h(ha)m(v)m(e)i(b)s(een)150 1803 y(up)s(dated.)38 +b(The)27 b(map)g(cac)m(he)i(can)e(also)h(b)s(e)f(sync)m(hronized)g +(with)g(the)g(map)g(source)g(b)m(y)g(using)g(the)h(`)p +Fo(sync)p Fu(')150 1912 y(option)j(\(see)g(Section)g(5.18)h([Automoun)m +(t)f(Filesystem],)i(page)e(42\).)150 2134 y Fk(7.4.3)63 +b Ff(Amq)44 b Fj(-l)d Fk(option)275 2326 y Fu(T)-8 b(ell)27 +b Fq(Amd)i Fu(to)d(use)g Fq(log)p 1053 2326 28 4 v 34 +w(\014le)31 b Fu(as)c(the)f(log)h(\014le)f(name.)40 b(F)-8 +b(or)27 b(securit)m(y)g(reasons,)g(this)f Fq(m)m(ust)i +Fu(b)s(e)d(the)i(same)150 2436 y(log)g(\014le)f(whic)m(h)g +Fq(Amd)j Fu(used)d(when)f(started.)40 b(This)25 b(option)h(is)h +(therefore)f(only)g(useful)g(to)h(refresh)e Fq(Amd)t +Fu('s)150 2545 y(op)s(en)g(\014le)g(handle)g(on)h(the)f(log)i(\014le,)g +(so)f(that)g(it)g(can)f(b)s(e)g(rotated)i(and)e(compressed)g(via)h +(daily)g(cron)f(jobs.)150 2767 y Fk(7.4.4)63 b Ff(Amq)44 +b Fj(-h)d Fk(option)275 2959 y Fu(By)28 b(default)g(the)g(lo)s(cal)h +(host)f(is)g(used.)39 b(In)28 b(an)f(HP-UX)i(cluster)f(the)g(ro)s(ot)h +(serv)m(er)f(is)g(used)f(since)h(that)150 3069 y(is)g(the)g(only)g +(place)h(in)f(the)g(cluster)h(where)e Fq(Amd)k Fu(will)d(b)s(e)g +(running.)38 b(T)-8 b(o)28 b(query)g Fq(Amd)j Fu(on)d(another)g(host) +150 3179 y(the)j Fo(-h)e Fu(option)i(should)f(b)s(e)f(used.)150 +3401 y Fk(7.4.5)63 b Ff(Amq)44 b Fj(-m)d Fk(option)275 +3593 y Fu(The)31 b Fo(-m)g Fu(option)i(displa)m(ys)f(similar)g +(information)g(ab)s(out)g(moun)m(ted)g(\014lesystems,)g(rather)g(than)g +(au-)150 3702 y(tomoun)m(t)f(p)s(oin)m(ts.)41 b(The)30 +b(output)g(includes)g(the)g(follo)m(wing)i(information:)225 +3836 y Fs(\017)60 b Fu(the)31 b(moun)m(t)f(information,)225 +3970 y Fs(\017)60 b Fu(the)31 b(moun)m(t)f(p)s(oin)m(t,)225 +4104 y Fs(\017)60 b Fu(the)31 b(\014lesystem)f(t)m(yp)s(e,)225 +4237 y Fs(\017)60 b Fu(the)31 b(n)m(um)m(b)s(er)e(of)h(references)h(to) +g(this)f(\014lesystem,)225 4371 y Fs(\017)60 b Fu(the)31 +b(serv)m(er)f(hostname,)225 4505 y Fs(\017)60 b Fu(the)31 +b(state)g(of)g(the)f(\014le)h(serv)m(er,)225 4639 y Fs(\017)60 +b Fu(an)m(y)31 b(error)f(whic)m(h)g(has)g(o)s(ccurred.)275 +4797 y(F)-8 b(or)31 b(example:)390 4925 y Fo("root")523 +b(truth:\(pid602\))235 b(root)142 b(1)48 b(localhost)d(is)i(up)390 +5029 y(hesiod.home)283 b(/home)667 b(toplvl)46 b(1)i(localhost)d(is)i +(up)390 5132 y(hesiod.vol)331 b(/vol)715 b(toplvl)46 +b(1)i(localhost)d(is)i(up)390 5236 y(hesiod.homes)235 +b(/homes)619 b(toplvl)46 b(1)i(localhost)d(is)i(up)390 +5340 y(amy:/home/amy)187 b(/a/amy/home/amy)g(nfs)j(5)48 +b(amy)f(is)g(up)p eop +%%Page: 58 60 +58 59 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Run-time)30 +b(Administration)2035 b(58)390 366 y Fo(swan:/home/swan)91 +b(/a/swan/home/swan)g(nfs)190 b(0)48 b(swan)e(is)i(up)f(\(Permission)d +(denied\))p 3971 387 42 84 v 390 470 a(ex:/home/ex)283 +b(/a/ex/home/ex)g(nfs)190 b(0)48 b(ex)f(is)g(down)275 +624 y Fu(When)26 b(the)h(reference)g(coun)m(t)g(is)f(zero)i(the)e +(\014lesystem)h(is)g(not)g(moun)m(ted)f(but)g(the)g(moun)m(t)h(p)s(oin) +m(t)g(and)150 733 y(serv)m(er)k(information)f(is)h(still)g(b)s(eing)f +(main)m(tained)h(b)m(y)f Fq(Amd)p Fu(.)150 996 y Fk(7.4.6)63 +b Ff(Amq)44 b Fj(-M)d Fk(option)275 1208 y Fu(The)26 +b Fo(-M)g Fu(option)h(passes)f(a)h(new)f(map)g(en)m(try)h(to)g +Fq(Amd)j Fu(and)c(w)m(aits)h(for)g(it)g(to)g(b)s(e)f(ev)-5 +b(aluated,)29 b(p)s(ossibly)150 1317 y(causing)36 b(a)h(moun)m(t.)58 +b(F)-8 b(or)37 b(example,)h(the)e(follo)m(wing)i(command)e(w)m(ould)f +(cause)i(`)p Fo(/home/toytown)p Fu(')c(on)150 1427 y(host)d(`)p +Fo(toytown)p Fu(')f(to)i(b)s(e)f(moun)m(ted)g(lo)s(cally)i(on)f(`)p +Fo(/mnt/toytown)p Fu('.)390 1575 y Fo(amq)47 b(-M)g('/mnt/toytown)d +(type:=nfs;rfs:=/home/toyt)o(own;)o(rhos)o(t:=)o(toyt)o(own;)o(fs:)o +(=${k)o(ey}')p 4023 1595 V 275 1728 a Fq(Amd)h Fu(applies)e(some)h +(simple)f(securit)m(y)g(c)m(hec)m(ks)h(b)s(efore)f(allo)m(wing)i(this)d +(op)s(eration.)79 b(The)42 b(c)m(hec)m(k)150 1838 y(tests)c(whether)f +(the)h(incoming)g(request)f(is)h(from)f(a)h(privileged)g(UDP)f(p)s(ort) +g(on)h(the)f(lo)s(cal)i(mac)m(hine.)150 1947 y(\\P)m(ermission)31 +b(denied")f(is)h(returned)e(if)h(the)h(c)m(hec)m(k)h(fails.)275 +2101 y(This)e(option)h(is)g(v)m(ery)h(insecure)f(as)g(it)h(is)f +(vulnerable)f(to)i(attac)m(ks)i(suc)m(h)c(as)i(IP)e(Sp)s(o)s(o\014ng.) +41 b(In)31 b(other)150 2211 y(w)m(ords,)g(it)g(is)h(relativ)m(ely)h +(easy)f(for)e(an)h(attac)m(k)m(er)j(who)d(really)h(w)m(an)m(ts)f(to,)i +(to)e(mak)m(e)h(y)m(our)f Fq(Amd)j Fu(pro)s(cess)150 +2320 y(moun)m(t)e(an)m(y)g(\014lesystem)g(from)f(the)h(In)m(ternet!)45 +b(Therefore,)32 b(the)f Fq(complete)39 b Fu(co)s(de)32 +b(whic)m(h)f(supp)s(orts)f(the)150 2430 y Fo(-M)e Fu(option)h(in)f +Fq(Amd)k Fu(and)c Fq(Amq)i Fu(is)f(turned)e(o\013)i(b)m(y)g(default.)40 +b(T)-8 b(o)29 b(turn)f(it)h(on,)g(y)m(ou)g(ha)m(v)m(e)h(to)f +(recon\014gure)150 2539 y(am-utils)j(with)f Fo(configure)d +(--enable-amq-mount)p Fu(.)38 b(Think)30 b(t)m(wice)j(b)s(efore)e +(doing)g(so,)h(and)f(use)g(this)150 2649 y(option)g(only)f(if)h(y)m(ou) +f(absolutely)i(need)e(to.)275 2803 y(A)37 b(future)g(release)i(of)f +Fq(Amd)i Fu(will)e(include)g(co)s(de)g(to)g(allo)m(w)h(the)f +Fm(moun)m(t)p Fu(\(8\))h(command)f(to)g(moun)m(t)150 +2912 y(automoun)m(t)31 b(p)s(oin)m(ts:)390 3060 y Fo(mount)46 +b(-t)i(amd)e(/vol)h(hesiod.vol)275 3214 y Fu(This)32 +b(will)j(then)e(allo)m(w)i Fq(Amd)i Fu(to)d(b)s(e)g(con)m(trolled)h +(from)e(the)h(standard)f(system)h(\014lesystem)g(moun)m(t)150 +3323 y(list.)150 3586 y Fk(7.4.7)63 b Ff(Amq)44 b Fj(-p)d +Fk(option)275 3797 y Fu(Return)30 b(the)i(pro)s(cess)f(ID)g(of)h(the)g +(remote)g(or)f(lo)s(cally)i(running)d Fq(Amd)p Fu(.)43 +b(Useful)32 b(when)e(y)m(ou)i(need)f(to)150 3907 y(send)i(a)i(signal)g +(to)g(the)f(lo)s(cal)i Fq(Amd)h Fu(pro)s(cess,)e(and)e(w)m(ould)h +(rather)h(not)f(ha)m(v)m(e)h(to)g(searc)m(h)g(through)f(the)150 +4016 y(pro)s(cess)c(table.)42 b(This)29 b(option)i(is)f(used)g(in)g +(the)h(`)p Fo(ctl-amd)p Fu(')d(script.)150 4279 y Fk(7.4.8)63 +b Ff(Amq)44 b Fj(-P)d Fk(option)275 4491 y Fu(Con)m(tact)e(an)e +(alternate)j(running)c Fq(Amd)41 b Fu(that)d(had)f(registered)i(itself) +f(on)g(a)g(di\013eren)m(t)g(RPC)f Fq(pro-)150 4600 y(gram)p +357 4600 28 4 v 33 w(n)m(um)m(b)s(er)h Fu(and)31 b(apply)h(all)i(other) +e(op)s(erations)h(to)g(that)g(instance)g(of)f(the)h(automoun)m(ter.)47 +b(This)32 b(is)150 4710 y(useful)h(when)g(y)m(ou)h(run)f(m)m(ultiple)h +(copies)h(of)f Fq(Amd)p Fu(,)g(and)f(need)h(to)h(manage)f(eac)m(h)h +(one)g(separately)-8 b(.)52 b(If)150 4819 y(not)39 b(sp)s(eci\014ed,)i +Fq(Amq)g Fu(will)f(use)f(the)g(default)h(program)f(n)m(um)m(b)s(er)e +(for)i Fq(Amd)p Fu(,)i(300019.)70 b(F)-8 b(or)40 b(securit)m(y)150 +4929 y(reasons,)c(the)f(only)g(alternate)h(program)f(n)m(um)m(b)s(ers)e +Fq(Amd)38 b Fu(can)d(use)f(range)h(from)f(300019)k(to)d(300029,)150 +5039 y(inclusiv)m(e.)275 5192 y(F)-8 b(or)31 b(example,)g(to)g(kill)g +(an)f(alternate)i(running)d Fq(Amd)t Fu(:)390 5340 y +Fo(kill)47 b(`amq)f(-p)h(-P)h(300020`)p eop +%%Page: 59 61 +59 60 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Run-time)30 +b(Administration)2035 b(59)150 366 y Fk(7.4.9)63 b Ff(Amq)44 +b Fj(-s)d Fk(option)275 582 y Fu(The)27 b Fo(-s)g Fu(option)h(displa)m +(ys)g(global)h(statistics.)42 b(If)27 b(an)m(y)h(other)h(options)f(are) +g(sp)s(eci\014ed)f(or)h(an)m(y)g(\014lesys-)150 692 y(tems)j(named)f +(then)g(this)g(option)h(is)f(ignored.)41 b(F)-8 b(or)31 +b(example:)390 843 y Fo(requests)93 b(stale)238 b(mount)f(mount)g +(unmount)390 947 y(deferred)93 b(fhandles)h(ok)381 b(failed)189 +b(failed)390 1051 y(1054)285 b(1)430 b(487)333 b(290)g(7017)150 +1244 y Fu(`)p Fo(Deferred)28 b(requests)p Fu(')630 1354 +y(are)f(those)h(for)f(whic)m(h)g(an)g(immediate)h(reply)e(could)i(not)f +(b)s(e)f(constructed.)40 b(F)-8 b(or)28 b(example,)630 +1464 y(this)i(w)m(ould)g(happ)s(en)f(if)h(a)h(bac)m(kground)f(moun)m(t) +h(w)m(as)f(required.)150 1646 y(`)p Fo(Stale)f(filehandles)p +Fu(')630 1755 y(coun)m(ts)i(the)h(n)m(um)m(b)s(er)d(of)i(times)h(the)f +(k)m(ernel)h(passes)e(a)i(stale)g(\014lehandle)f(to)g +Fq(Amd)p Fu(.)42 b(Large)630 1865 y(n)m(um)m(b)s(ers)29 +b(indicate)i(problems.)150 2047 y(`)p Fo(Mount)e(ok)p +Fu(')65 b(coun)m(ts)31 b(the)f(n)m(um)m(b)s(er)f(of)i(automoun)m(ts)g +(whic)m(h)f(w)m(ere)h(successful.)150 2230 y(`)p Fo(Mount)e(failed)p +Fu(')630 2339 y(coun)m(ts)i(the)f(n)m(um)m(b)s(er)f(of)i(automoun)m(ts) +g(whic)m(h)f(failed.)150 2522 y(`)p Fo(Unmount)f(failed)p +Fu(')630 2631 y(coun)m(ts)35 b(the)g(n)m(um)m(b)s(er)e(of)i(times)g(a)g +(\014lesystem)g(could)g(not)f(b)s(e)g(unmoun)m(ted.)53 +b(V)-8 b(ery)35 b(large)630 2741 y(n)m(um)m(b)s(ers)44 +b(here)h(indicate)h(that)g(the)f(time)h(b)s(et)m(w)m(een)g(unmoun)m(t)e +(attempts)i(should)f(b)s(e)630 2850 y(increased.)150 +3120 y Fk(7.4.10)63 b Ff(Amq)45 b Fj(-T)c Fk(option)275 +3336 y Fu(The)21 b Fo(-T)g Fu(option)h(causes)h(the)f +Fq(Amq)i Fu(to)e(con)m(tact)i Fq(Amd)h Fu(using)c(the)h(TCP)f(transp)s +(ort)g(only)h(\(connection)150 3445 y(orien)m(ted\).)42 +b(Normally)-8 b(,)32 b Fq(Amq)g Fu(will)f(use)f(TCP)f(\014rst,)h(and)g +(if)g(that)h(failed,)h(will)e(try)h(UDP)-8 b(.)150 3715 +y Fk(7.4.11)63 b Ff(Amq)45 b Fj(-U)c Fk(option)275 3931 +y Fu(The)29 b Fo(-U)h Fu(option)h(causes)g(the)g Fq(Amq)h +Fu(to)f(con)m(tact)i Fq(Amd)g Fu(using)d(the)h(UDP)g(transp)s(ort)e +(only)i(\(connec-)150 4040 y(tionless\).)42 b(Normally)-8 +b(,)32 b Fq(Amq)g Fu(will)f(use)f(TCP)f(\014rst,)h(and)g(if)g(that)h +(failed,)h(will)e(try)h(UDP)-8 b(.)150 4310 y Fk(7.4.12)63 +b Ff(Amq)45 b Fj(-u)c Fk(option)275 4526 y Fu(The)27 +b Fo(-u)h Fu(option)g(causes)h(the)f(time-to-liv)m(e)k(in)m(terv)-5 +b(al)29 b(of)f(the)h(named)f(moun)m(t)g(p)s(oin)m(ts)g(to)h(b)s(e)e +(expired,)150 4635 y(th)m(us)k(causing)h(an)f(unmoun)m(t)f(attempt.)44 +b(This)31 b(is)g(the)h(only)f(safe)h(w)m(a)m(y)g(to)g(unmoun)m(t)e(an)h +(automoun)m(ted)150 4745 y(\014lesystem.)63 b(It)38 b(is)f(not)h(p)s +(ossible)f(to)i(unmoun)m(t)d(a)i(\014lesystem)g(whic)m(h)g(has)f(b)s +(een)g(moun)m(ted)g(with)h(the)150 4855 y(`)p Fo(nounmount)p +Fu(')28 b(\015ag.)150 5124 y Fk(7.4.13)63 b Ff(Amq)45 +b Fj(-v)c Fk(option)275 5340 y Fu(The)29 b Fo(-v)h Fu(option)h(displa)m +(ys)f(the)h(v)m(ersion)g(of)f Fq(Amd)k Fu(in)c(a)h(similar)f(w)m(a)m(y) +i(to)f Fq(Amd)t Fu('s)e Fo(-v)h Fu(option.)p eop +%%Page: 60 62 +60 61 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Run-time)30 +b(Administration)2035 b(60)150 366 y Fk(7.4.14)63 b(Other)41 +b Ff(Amq)k Fk(options)275 559 y Fu(Tw)m(o)40 b(other)g(op)s(erations)h +(are)f(implemen)m(ted.)70 b(These)40 b(mo)s(dify)g(the)g(state)h(of)g +Fq(Amd)i Fu(as)d(a)g(whole,)150 669 y(rather)31 b(than)h(an)m(y)g +(particular)g(\014lesystem.)44 b(The)32 b Fo(-x)f Fu(and)g +Fo(-D)f Fu(options)i(ha)m(v)m(e)h(exactly)h(the)d(same)h(e\013ect)150 +778 y(as)f Fq(Amd)t Fu('s)e(corresp)s(onding)g(command)i(line)f +(options.)275 913 y(When)37 b Fq(Amd)k Fu(receiv)m(es)f(a)e +Fo(-x)g Fu(\015ag)g(it)g(limits)h(the)f(log)h(options)g(b)s(eing)e(mo)s +(di\014ed)g(to)i(those)f(whic)m(h)150 1022 y(w)m(ere)27 +b(not)g(enabled)g(at)h(startup.)39 b(This)26 b(prev)m(en)m(ts)h(a)h +(user)e(turning)g Fq(o\013)45 b Fu(an)m(y)27 b(logging)i(option)e(whic) +m(h)g(w)m(as)150 1132 y(sp)s(eci\014ed)32 b(at)h(startup,)g(though)g +(an)m(y)g(whic)m(h)f(ha)m(v)m(e)i(b)s(een)e(turned)f(on)h(since)h(then) +g(can)g(still)g(b)s(e)f(turned)150 1242 y(o\013.)41 b(The)30 +b Fo(-D)g Fu(option)h(has)f(a)g(similar)h(b)s(eha)m(vior.)p +eop +%%Page: 61 63 +61 62 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(61)150 366 y Fr(8)80 b(FSinfo)275 623 y Fu(XXX:)31 +b(this)f(c)m(hapter)h(should)e(b)s(e)h(review)m(ed)h(b)m(y)f(someone)h +(kno)m(wledgeable)h(with)f(fsinfo.)150 898 y Ft(8.1)68 +b Fg(FSinfo)51 b Ft(o)l(v)l(erview)275 1098 y Fq(FSinfo)31 +b Fu(is)c(a)h(\014lesystem)f(managemen)m(t)i(to)s(ol.)40 +b(It)27 b(has)g(b)s(een)g(designed)g(to)g(w)m(ork)h(with)e +Fq(Amd)k Fu(to)e(help)150 1208 y(system)36 b(administrators)f(k)m(eep)i +(trac)m(k)f(of)g(the)g(ev)m(er)g(increasing)g(\014lesystem)g(namespace) +g(under)e(their)150 1317 y(con)m(trol.)275 1459 y(The)k(purp)s(ose)g +(of)h Fq(FSinfo)44 b Fu(is)39 b(to)h(generate)g(all)h(the)e(imp)s +(ortan)m(t)g(standard)g(\014lesystem)g(data)h(\014les)150 +1569 y(from)33 b(a)g(single)h(set)f(of)h(input)e(data.)49 +b(Starting)34 b(with)e(a)i(single)g(data)f(source)h(guaran)m(tees)g +(that)g(all)g(the)150 1678 y(generated)d(\014les)f(are)h +(self-consisten)m(t.)42 b(One)30 b(of)g(the)h(p)s(ossible)e(output)h +(data)h(formats)f(is)g(a)h(set)f(of)h Fq(Amd)150 1788 +y Fu(maps)f(whic)m(h)g(can)h(b)s(e)e(used)h(amongst)h(the)g(set)g(of)f +(hosts)g(describ)s(ed)g(in)g(the)g(input)g(data.)275 +1930 y Fq(FSinfo)i Fu(implemen)m(ts)e(a)f(declarativ)m(e)i(language.)41 +b(This)28 b(language)i(is)f(sp)s(eci\014cally)g(designed)f(for)h(de-) +150 2039 y(scribing)22 b(\014lesystem)g(namespace)g(and)f(ph)m(ysical)i +(la)m(y)m(outs.)39 b(The)21 b(basic)i(declaration)g(de\014nes)e(a)h +(moun)m(ted)150 2149 y(\014lesystem)32 b(including)g(its)g(device)h +(name,)f(moun)m(t)g(p)s(oin)m(t,)h(and)e(all)i(the)f(v)m(olumes)g(and)g +(access)h(p)s(ermis-)150 2258 y(sions.)58 b Fq(FSinfo)41 +b Fu(reads)36 b(this)g(information)h(and)f(builds)f(an)h(in)m(ternal)h +(map)f(of)h(the)f(en)m(tire)i(net)m(w)m(ork)f(of)150 +2368 y(hosts.)g(Using)21 b(this)g(map,)h(man)m(y)f(di\013eren)m(t)g +(data)h(formats)f(can)g(b)s(e)f(pro)s(duced)f(including)h(`)p +Fo(/etc/fstab)p Fu(',)150 2477 y(`)p Fo(/etc/exports)p +Fu(',)28 b Fq(Amd)33 b Fu(moun)m(t)d(maps)g(and)g(`)p +Fo(/etc/bootparams)p Fu('.)150 2753 y Ft(8.2)68 b(Using)46 +b Fg(FSinfo)275 2953 y Fu(The)27 b(basic)i(strategy)h(when)e(using)f +Fq(FSinfo)33 b Fu(is)c(to)g(gather)g(all)g(the)g(information)g(ab)s +(out)f(all)h(disks)f(on)150 3063 y(all)35 b(mac)m(hines)g(in)m(to)g +(one)f(set)h(of)f(declarations.)53 b(F)-8 b(or)35 b(eac)m(h)g(mac)m +(hine)g(b)s(eing)e(managed,)j(the)e(follo)m(wing)150 +3172 y(data)d(is)f(required:)225 3314 y Fs(\017)60 b +Fu(Hostname)225 3452 y Fs(\017)g Fu(List)31 b(of)f(all)h(\014lesystems) +g(and,)f(optionally)-8 b(,)32 b(their)f(moun)m(t)f(p)s(oin)m(ts.)225 +3590 y Fs(\017)60 b Fu(Names)31 b(of)f(v)m(olumes)h(stored)g(on)f(eac)m +(h)i(\014lesystem.)225 3728 y Fs(\017)60 b Fu(NFS)30 +b(exp)s(ort)g(information)h(for)f(eac)m(h)i(v)m(olume.)225 +3867 y Fs(\017)60 b Fu(The)30 b(list)h(of)f(static)i(\014lesystem)f +(moun)m(ts.)275 4037 y(The)h(follo)m(wing)j(information)f(can)f(also)i +(b)s(e)d(en)m(tered)i(in)m(to)h(the)e(same)h(con\014guration)f(\014les) +h(so)f(that)150 4147 y(all)e(data)g(can)g(b)s(e)f(k)m(ept)h(in)f(one)g +(place.)225 4288 y Fs(\017)60 b Fu(List)31 b(of)f(net)m(w)m(ork)h(in)m +(terfaces)225 4426 y Fs(\017)60 b Fu(IP)30 b(address)f(of)i(eac)m(h)h +(in)m(terface)225 4565 y Fs(\017)60 b Fu(Hardw)m(are)31 +b(address)e(of)i(eac)m(h)g(in)m(terface)225 4703 y Fs(\017)60 +b Fu(Dumpset)30 b(to)h(whic)m(h)f(eac)m(h)i(\014lesystem)f(b)s(elongs) +225 4841 y Fs(\017)60 b Fu(and)30 b(more)g Fl(:)15 b(:)g(:)275 +5011 y Fu(T)-8 b(o)26 b(generate)h Fq(Amd)i Fu(moun)m(t)d(maps,)h(the)f +(automoun)m(t)h(tree)f(m)m(ust)g(also)h(b)s(e)e(de\014ned)g(\(see)i +(Section)g(8.8)150 5121 y([FSinfo)41 b(automoun)m(t)g(de\014nitions],)i +(page)e(69\).)73 b(This)40 b(will)g(ha)m(v)m(e)i(b)s(een)e(designed)g +(at)i(the)e(time)i(the)150 5230 y(v)m(olume)f(names)f(w)m(ere)g(allo)s +(cated.)72 b(Some)40 b(v)m(olume)h(names)f(will)g(not)g(b)s(e)g +(automoun)m(ted,)j(so)d Fq(FSinfo)150 5340 y Fu(needs)30 +b(an)g(explicit)i(list)f(of)g(whic)m(h)f(v)m(olumes)h(should)e(b)s(e)h +(automoun)m(ted.)p eop +%%Page: 62 64 +62 63 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(62)275 366 y(Hostnames)41 b(are)g(required)f(at)i(sev)m(eral)g +(places)f(in)g(the)f Fq(FSinfo)46 b Fu(language.)73 b(It)41 +b(is)f(imp)s(ortan)m(t)h(to)150 476 y(stic)m(k)33 b(to)g(either)g +(fully)e(quali\014ed)h(names)g(or)g(unquali\014ed)f(names.)46 +b(Using)32 b(a)h(mixture)f(of)g(the)g(t)m(w)m(o)i(will)150 +586 y(inevitably)d(result)g(in)f(confusion.)275 739 y(Sometimes)d(v)m +(olumes)h(need)f(to)g(b)s(e)g(referenced)g(whic)m(h)f(are)i(not)f +(de\014ned)f(in)g(the)i(set)f(of)g(hosts)g(b)s(eing)150 +848 y(managed)g(with)f Fq(FSinfo)p Fu(.)39 b(The)26 b(required)f +(action)j(is)e(to)h(add)f(a)g(dumm)m(y)f(set)i(of)g(de\014nitions)e +(for)h(the)h(host)150 958 y(and)i(v)m(olume)i(names)e(required.)40 +b(Since)30 b(the)g(\014les)g(generated)h(for)e(those)h(particular)h +(hosts)e(will)i(not)f(b)s(e)150 1068 y(used)g(on)g(them,)g(the)h(exact) +h(v)-5 b(alues)31 b(used)e(is)i(not)f(critical.)150 1372 +y Ft(8.3)68 b Fg(FSinfo)51 b Ft(grammar)275 1583 y Fq(FSinfo)37 +b Fu(has)c(a)h(relativ)m(ely)h(simple)e(grammar.)49 b(Distinct)35 +b(syn)m(tactic)g(constructs)f(exist)f(for)g(eac)m(h)i(of)150 +1693 y(the)j(di\013eren)m(t)f(t)m(yp)s(es)h(of)f(data,)k(though)c(they) +g(share)g(a)h(common)g(\015a)m(v)m(or.)63 b(Sev)m(eral)38 +b(con)m(v)m(en)m(tions)i(are)150 1802 y(used)30 b(in)g(the)g(grammar)h +(fragmen)m(ts)g(b)s(elo)m(w.)275 1956 y(The)g(notation,)k +Fq(list\()9 b Fo(xxx)p Fq(\))p Fu(,)34 b(indicates)f(a)g(list)g(of)g +(zero)g(or)f(more)h Fo(xxx)p Fu('s.)46 b(The)32 b(notation,)j +Fq(opt\()9 b Fo(xxx)p Fq(\))p Fu(,)150 2065 y(indicates)44 +b(zero)h(or)e(one)h Fo(xxx)p Fu(.)79 b(Items)43 b(in)g(double)g +(quotes,)48 b Fq(eg)k Fo("host")p Fu(,)45 b(represen)m(t)e(input)g(tok) +m(ens.)150 2175 y(Items)36 b(in)g(angle)h(brac)m(k)m(ets,)j +Fq(eg)45 b Fo(<)p Fq(hostname)p Fo(>)p Fu(,)37 b(represen)m(t)f +(strings)g(in)g(the)h(input.)57 b(Strings)36 b(need)g(not)150 +2284 y(b)s(e)28 b(in)h(double)f(quotes,)i(except)g(to)g(di\013eren)m +(tiate)h(them)e(from)f(reserv)m(ed)h(w)m(ords.)40 b(Quoted)29 +b(strings)f(ma)m(y)150 2394 y(include)34 b(the)h(usual)f(set)h(of)g(C)f +(\\)p Fo(\\)p Fu(")h(escap)s(e)g(sequences)g(with)g(one)f(exception:)51 +b(a)35 b(bac)m(kslash-newline-)150 2504 y(whitespace)29 +b(sequence)g(is)f(squashed)f(in)m(to)i(a)g(single)g(space)f(c)m +(haracter.)42 b(T)-8 b(o)29 b(defeat)g(this)f(feature,)h(put)f(a)150 +2613 y(further)h(bac)m(kslash)i(at)g(the)g(start)g(of)f(the)h(second)f +(line.)275 2766 y(A)m(t)40 b(the)g(outermost)g(lev)m(el)h(of)e(the)h +(grammar,)i(the)e(input)e(consists)i(of)g(a)g(sequence)f(of)h(host)g +(and)150 2876 y(automoun)m(t)34 b(declarations.)51 b(These)33 +b(declarations)h(are)g(all)g(parsed)f(b)s(efore)f(they)i(are)g +(analyzed.)50 b(This)150 2986 y(means)30 b(they)h(can)f(app)s(ear)g(in) +g(an)m(y)h(order)f(and)g(cyclic)i(host)e(references)h(are)g(p)s +(ossible.)390 3133 y Fo(fsinfo)285 b(:)47 b Fq(list\()9 +b Fo(fsinfo_attr)p Fq(\))47 b Fo(;)390 3341 y(fsinfo_attr)e(:)i(host)g +(|)g(automount)f(;)150 3645 y Ft(8.4)68 b Fg(FSinfo)51 +b Ft(host)45 b(de\014nitions)275 3856 y Fu(A)c(host)g(declaration)i +(consists)e(of)h(three)f(parts:)62 b(a)42 b(set)f(of)h(mac)m(hine)g +(attribute)g(data,)i(a)e(list)g(of)150 3966 y(\014lesystems)33 +b(ph)m(ysically)g(attac)m(hed)i(to)e(the)g(mac)m(hine,)i(and)d(a)h +(list)g(of)g(additional)h(statically)h(moun)m(ted)150 +4075 y(\014lesystems.)390 4223 y Fo(host)381 b(:)47 b("host")f +(host_data)g Fq(list\()9 b Fo(filesystem)p Fq(\))47 b(list\()9 +b Fo(mount)p Fq(\))49 b Fo(;)275 4376 y Fu(Eac)m(h)43 +b(host)f(m)m(ust)g(b)s(e)g(declared)h(in)f(this)h(w)m(a)m(y)g(exactly)h +(once.)78 b(Suc)m(h)42 b(things)g(as)h(the)f(hardw)m(are)150 +4486 y(address,)29 b(the)g(arc)m(hitecture)h(and)f(op)s(erating)g +(system)g(t)m(yp)s(es)g(and)f(the)h(cluster)h(name)f(are)g(all)h(sp)s +(eci\014ed)150 4595 y(within)g(the)g Fq(host)h(data)p +Fu(.)275 4748 y(All)g(the)g(disks)f(the)h(mac)m(hine)g(has)g(should)e +(then)i(b)s(e)f(describ)s(ed)g(in)g(the)h Fq(list)g(of)g(\014lesystems) +p Fu(.)42 b(When)150 4858 y(describing)28 b(disks,)g(y)m(ou)h(can)f(sp) +s(ecify)g(what)g Fq(v)m(olname)35 b Fu(the)28 b(disk/partition)h +(should)e(ha)m(v)m(e)j(and)d(all)i(suc)m(h)150 4968 y(en)m(tries)i(are) +f(built)g(up)f(in)m(to)i(a)f(dictionary)h(whic)m(h)f(can)g(then)g(b)s +(e)f(used)g(for)h(building)f(the)h(automoun)m(ter)150 +5077 y(maps.)275 5230 y(The)f Fq(list)h(of)g(moun)m(ts)j +Fu(sp)s(eci\014es)c(all)i(the)f(\014lesystems)g(that)g(should)e(b)s(e)h +(statically)k(moun)m(ted)c(on)h(the)150 5340 y(mac)m(hine.)p +eop +%%Page: 63 65 +63 64 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(63)150 366 y Ft(8.5)68 b Fg(FSinfo)51 b Ft(host)45 +b(attributes)275 565 y Fu(The)28 b(host)h(data,)h Fq(host)p +1059 565 28 4 v 33 w(data)p Fu(,)g(alw)m(a)m(ys)h(includes)d(the)h +Fq(hostname)p Fu(.)41 b(In)28 b(addition,)h(sev)m(eral)i(other)e(host) +150 675 y(attributes)i(can)g(b)s(e)e(giv)m(en.)390 809 +y Fo(host_data)141 b(:)47 b(<)p Fq(hostname)p Fo(>)963 +913 y(|)g("{")g Fq(list\()9 b Fo(host_attrs)p Fq(\))48 +b Fo("}")f(<)p Fq(hostname)p Fo(>)963 1017 y(;)390 1224 +y(host_attrs)93 b(:)47 b(host_attr)e("=")i(<)p Fq(string)p +Fo(>)963 1328 y(|)g(netif)963 1432 y(;)390 1639 y(host_attr)141 +b(:)47 b("config")963 1743 y(|)g("arch")963 1847 y(|)g("os")963 +1951 y(|)g("cluster")963 2055 y(;)275 2195 y Fu(The)29 +b Fq(hostname)36 b Fu(is,)31 b(t)m(ypically)-8 b(,)33 +b(the)d(fully)g(quali\014ed)g(hostname)h(of)g(the)f(mac)m(hine.)275 +2335 y(Examples:)390 2470 y Fo(host)47 b(dylan.doc.ic.ac.uk)390 +2678 y(host)g({)581 2781 y(os)g(=)h(hpux)581 2885 y(arch)f(=)g(hp300) +390 2989 y(})g(dougal.doc.ic.ac.uk)275 3129 y Fu(The)29 +b(options)i(that)g(can)g(b)s(e)e(giv)m(en)j(as)e(host)h(attributes)g +(are)g(sho)m(wn)e(b)s(elo)m(w.)150 3365 y Fk(8.5.1)63 +b(netif)41 b(Option)275 3564 y Fu(This)h(de\014nes)g(the)h(set)h(of)f +(net)m(w)m(ork)h(in)m(terfaces)g(con\014gured)e(on)h(the)h(mac)m(hine.) +79 b(The)42 b(in)m(terface)150 3673 y(attributes)k(collected)h(b)m(y)e +Fq(FSinfo)50 b Fu(are)45 b(the)h(IP)f(address,)j(subnet)c(mask)h(and)g +(hardw)m(are)g(address.)150 3783 y(Multiple)39 b(in)m(terfaces)g(ma)m +(y)g(b)s(e)f(de\014ned)f(for)g(hosts)i(with)e(sev)m(eral)j(in)m +(terfaces)f(b)m(y)f(an)g(en)m(try)h(for)f(eac)m(h)150 +3893 y(in)m(terface.)k(The)30 b(v)-5 b(alues)31 b(giv)m(en)g(are)g +(sanit)m(y)g(c)m(hec)m(k)m(ed,)i(but)c(are)i(curren)m(tly)g(un)m(used)e +(for)h(an)m(ything)h(else.)390 4027 y Fo(netif)333 b(:)47 +b("netif")f(<)p Fq(string)p Fo(>)h("{")g Fq(list\()9 +b Fo(netif_attrs)p Fq(\))47 b Fo("}")g(;)390 4235 y(netif_attrs)e(:)i +(netif_attr)e("=")i(<)p Fq(string)p Fo(>)g(;)390 4442 +y(netif_attr)93 b(:)47 b("inaddr")f(|)h("netmask")e(|)j("hwaddr")d(;) +275 4583 y Fu(Examples:)390 4717 y Fo(netif)h(ie0)h({)581 +4821 y(inaddr)94 b(=)47 b(129.31.81.37)581 4925 y(netmask)f(=)h +(0xfffffe00)581 5029 y(hwaddr)94 b(=)47 b("08:00:20:01:a6:a5")390 +5132 y(})390 5340 y(netif)f(ec0)h({)h(})p eop +%%Page: 64 66 +64 65 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(64)150 366 y Fk(8.5.2)63 b(con\014g)41 b(Option)275 +562 y Fu(This)e(option)i(allo)m(ws)g(y)m(ou)g(to)f(sp)s(ecify)g +(con\014guration)h(v)-5 b(ariables)41 b(for)f(the)g(startup)g(scripts)g +(\(`)p Fo(rc)p Fu(')150 671 y(scripts\).)h(A)30 b(simple)h(string)f +(should)f(immediately)j(follo)m(w)g(the)e(k)m(eyw)m(ord.)275 +809 y(Example:)390 940 y Fo(config)46 b("NFS_SERVER=true")390 +1044 y(config)g("ZEPHYR=true")275 1181 y Fu(This)29 b(option)i(is)f +(curren)m(tly)h(unsupp)s(orted.)150 1411 y Fk(8.5.3)63 +b(arc)m(h)40 b(Option)275 1606 y Fu(This)29 b(de\014nes)h(the)g(arc)m +(hitecture)i(of)f(the)f(mac)m(hine.)42 b(F)-8 b(or)31 +b(example:)390 1737 y Fo(arch)47 b(=)g(hp300)275 1874 +y Fu(This)32 b(is)i(in)m(tended)f(to)h(b)s(e)f(of)h(use)f(when)f +(building)h(arc)m(hitecture)i(sp)s(eci\014c)e(moun)m(tmaps,)h(ho)m(w)m +(ev)m(er,)150 1984 y(the)d(option)f(is)h(curren)m(tly)f(unsupp)s +(orted.)150 2214 y Fk(8.5.4)63 b(os)41 b(Option)275 2409 +y Fu(This)29 b(de\014nes)h(the)g(op)s(erating)h(system)f(t)m(yp)s(e)h +(of)g(the)f(host.)41 b(F)-8 b(or)31 b(example:)390 2540 +y Fo(os)47 b(=)h(hpux)275 2678 y Fu(This)30 b(information)h(is)g(used)f +(when)g(creating)i(the)f(`)p Fo(fstab)p Fu(')f(\014les,)h(for)f +(example)i(in)f(c)m(ho)s(osing)g(whic)m(h)150 2787 y(format)g(to)g(use) +f(for)g(the)h(`)p Fo(fstab)p Fu(')e(en)m(tries)i(within)f(the)h +(\014le.)150 3017 y Fk(8.5.5)63 b(cluster)41 b(Option)275 +3212 y Fu(This)29 b(is)i(used)e(for)h(sp)s(ecifying)g(in)h(whic)m(h)f +(cluster)g(the)h(mac)m(hine)g(b)s(elongs.)41 b(F)-8 b(or)31 +b(example:)390 3343 y Fo(cluster)46 b(=)h("theory")275 +3481 y Fu(The)29 b(cluster)h(is)g(in)m(tended)g(to)h(b)s(e)e(used)h +(when)f(generating)i(the)f(automoun)m(t)h(maps,)f(although)g(it)h(is) +150 3590 y(curren)m(tly)f(unsupp)s(orted.)150 3854 y +Ft(8.6)68 b Fg(FSinfo)51 b Ft(\014lesystems)275 4050 +y Fu(The)29 b(list)i(of)g(ph)m(ysically)g(attac)m(hed)h(\014lesystems)e +(follo)m(ws)h(the)g(mac)m(hine)g(attributes.)41 b(These)30 +b(should)150 4159 y(de\014ne)e(all)h(the)f(\014lesystems)h(a)m(v)-5 +b(ailable)31 b(from)d(this)g(mac)m(hine,)i(whether)d(exp)s(orted)h(or)h +(not.)40 b(In)28 b(addition)150 4269 y(to)44 b(the)f(device)h(name,)j +(\014lesystems)c(ha)m(v)m(e)i(sev)m(eral)f(attributes,)j(suc)m(h)c(as)h +(\014lesystem)f(t)m(yp)s(e,)k(moun)m(t)150 4378 y(options,)31 +b(and)f(`)p Fo(fsck)p Fu(')f(pass)h(n)m(um)m(b)s(er)f(whic)m(h)i(are)f +(needed)g(to)h(generate)h(`)p Fo(fstab)p Fu(')e(en)m(tries.)390 +4510 y Fo(filesystem)93 b(:)47 b("fs")g(<)p Fq(device)p +Fo(>)h("{")f Fq(list\()9 b Fo(fs_data)p Fq(\))48 b Fo("}")f(;)390 +4717 y(fs_data)237 b(:)47 b(fs_data_attr)e("=")i(<)p +Fq(string)p Fo(>)963 4821 y(|)g(mount)963 4925 y(;)390 +5132 y(fs_data_attr)963 5236 y(:)g("fstype")f(|)h("opts")f(|)i +("passno")963 5340 y(|)f("freq")f(|)i("dumpset")d(|)i("log")p +eop +%%Page: 65 67 +65 66 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(65)963 366 y Fo(;)275 500 y Fu(Here,)26 b Fo(<)p Fq(device)p +Fo(>)g Fu(is)f(the)g(device)h(name)f(of)h(the)f(disk)g(\(for)g +(example,)i(`)p Fo(/dev/dsk/2s0)p Fu('\).)36 b(The)25 +b(device)150 610 y(name)k(is)f(used)g(for)g(building)g(the)h(moun)m(t)f +(maps)g(and)g(for)h(the)f(`)p Fo(fstab)p Fu(')g(\014le.)40 +b(The)28 b(attributes)h(that)h(can)150 719 y(b)s(e)g(sp)s(eci\014ed)f +(are)i(sho)m(wn)f(in)g(the)h(follo)m(wing)g(section.)275 +853 y(The)e Fq(FSinfo)35 b Fu(con\014guration)c(\014le)f(for)g +Fo(dylan.doc.ic.ac.uk)c Fu(is)k(listed)h(b)s(elo)m(w.)390 +981 y Fo(host)47 b(dylan.doc.ic.ac.uk)390 1189 y(fs)g(/dev/dsk/0s0)e({) +772 1293 y(fstype)h(=)h(swap)390 1396 y(})390 1604 y(fs)g(/dev/dsk/0s0) +e({)772 1708 y(fstype)h(=)h(hfs)772 1812 y(opts)f(=)i(rw,noquota,grpid) +772 1915 y(passno)e(=)h(0;)772 2019 y(freq)f(=)i(1;)772 +2123 y(mount)e(/)i({)f(})390 2227 y(})390 2434 y(fs)g(/dev/dsk/1s0)e({) +772 2538 y(fstype)h(=)h(hfs)772 2642 y(opts)f(=)i(defaults)772 +2746 y(passno)e(=)h(1;)772 2849 y(freq)f(=)i(1;)772 2953 +y(mount)e(/usr)h({)1154 3057 y(local)f({)1535 3161 y(exportfs)g +("dougal)g(eden)g(dylan)h(zebedee)f(brian")1535 3264 +y(volname)g(/nfs/hp300/local)1154 3368 y(})772 3472 y(})390 +3576 y(})390 3783 y(fs)h(/dev/dsk/2s0)e({)772 3887 y(fstype)h(=)h(hfs) +772 3991 y(opts)f(=)i(defaults)772 4095 y(passno)e(=)h(1;)772 +4198 y(freq)f(=)i(1;)772 4302 y(mount)e(default)g({)1154 +4406 y(exportfs)f("toytown_clients)f(hangers_on")1154 +4510 y(volname)h(/home/dylan/dk2)772 4614 y(})390 4717 +y(})390 4925 y(fs)i(/dev/dsk/3s0)e({)772 5029 y(fstype)h(=)h(hfs)772 +5132 y(opts)f(=)i(defaults)772 5236 y(passno)e(=)h(1;)772 +5340 y(freq)f(=)i(1;)p eop +%%Page: 66 68 +66 67 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(66)772 366 y Fo(mount)46 b(default)g({)1154 470 y(exportfs)f +("toytown_clients)f(hangers_on")1154 574 y(volname)h(/home/dylan/dk3) +772 678 y(})390 782 y(})390 989 y(fs)i(/dev/dsk/5s0)e({)772 +1093 y(fstype)h(=)h(hfs)772 1197 y(opts)f(=)i(defaults)772 +1300 y(passno)e(=)h(1;)772 1404 y(freq)f(=)i(1;)772 1508 +y(mount)e(default)g({)1154 1612 y(exportfs)f("toytown_clients)f +(hangers_on")1154 1716 y(volname)h(/home/dylan/dk5)772 +1819 y(})390 1923 y(})150 2125 y Fk(8.6.1)63 b(fst)m(yp)s(e)41 +b(Option)275 2310 y Fu(This)32 b(sp)s(eci\014es)i(the)f(t)m(yp)s(e)h +(of)g(\014lesystem)g(b)s(eing)f(declared)h(and)f(will)h(b)s(e)f(placed) +h(in)m(to)g(the)g(`)p Fo(fstab)p Fu(')150 2420 y(\014le)27 +b(as)f(is.)40 b(The)26 b(v)-5 b(alue)27 b(of)f(this)h(option)g(will)f +(b)s(e)g(handed)f(to)j Fo(mount)d Fu(as)h(the)h(\014lesystem)g(t)m(yp)s +(e|it)g(should)150 2529 y(ha)m(v)m(e)32 b(suc)m(h)e(v)-5 +b(alues)30 b(as)h Fo(4.2)p Fu(,)f Fo(nfs)f Fu(or)i Fo(swap)p +Fu(.)39 b(The)30 b(v)-5 b(alue)31 b(is)f(not)h(examined)f(for)h +(correctness.)275 2656 y(There)21 b(is)g(one)h(sp)s(ecial)g(case.)39 +b(If)21 b(the)h(\014lesystem)g(t)m(yp)s(e)f(is)h(sp)s(eci\014ed)f(as)g +(`)p Fo(export)p Fu(')g(then)g(the)h(\014lesystem)150 +2766 y(information)j(will)g(not)g(b)s(e)f(added)h(to)g(the)g(host's)g +(`)p Fo(fstab)p Fu(')f(information,)i(but)e(it)i(will)f(still)h(b)s(e)e +(visible)h(on)150 2875 y(the)32 b(net)m(w)m(ork.)48 b(This)31 +b(is)h(useful)g(for)g(de\014ning)f(hosts)h(whic)m(h)g(con)m(tain)i +(referenced)e(v)m(olumes)h(but)e(whic)m(h)150 2985 y(are)g(not)f(under) +f(full)h(con)m(trol)i(of)f Fq(FSinfo)p Fu(.)275 3112 +y(Example:)390 3233 y Fo(fstype)46 b(=)i(swap)150 3435 +y Fk(8.6.2)63 b(opts)41 b(Option)275 3620 y Fu(This)i(de\014nes)g(an)m +(y)i(options)g(that)g(should)e(b)s(e)h(giv)m(en)h(to)g +Fm(moun)m(t)p Fu(\(8\))h(in)e(the)g(`)p Fo(fstab)p Fu(')g(\014le.)82 +b(F)-8 b(or)150 3730 y(example:)390 3851 y Fo(opts)47 +b(=)g(rw,nosuid,grpid)150 4052 y Fk(8.6.3)63 b(passno)42 +b(Option)275 4238 y Fu(This)34 b(de\014nes)g(the)h Fm(fsc)m(k)p +Fu(\(8\))h(pass)f(n)m(um)m(b)s(er)e(in)i(whic)m(h)f(to)i(c)m(hec)m(k)g +(the)g(\014lesystem.)54 b(This)34 b(v)-5 b(alue)36 b(will)150 +4347 y(b)s(e)30 b(placed)h(in)m(to)g(the)f(`)p Fo(fstab)p +Fu(')g(\014le.)275 4474 y(Example:)390 4595 y Fo(passno)46 +b(=)i(1)150 4797 y Fk(8.6.4)63 b(freq)41 b(Option)275 +4982 y Fu(This)36 b(de\014nes)g(the)h(in)m(terv)-5 b(al)38 +b(\(in)f(da)m(ys\))g(b)s(et)m(w)m(een)h(dumps.)58 b(The)36 +b(v)-5 b(alue)38 b(is)f(placed)g(as)g(is)g(in)m(to)h(the)150 +5092 y(`)p Fo(fstab)p Fu(')29 b(\014le.)275 5219 y(Example:)390 +5340 y Fo(freq)47 b(=)g(3)p eop +%%Page: 67 69 +67 68 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(67)150 366 y Fk(8.6.5)63 b(moun)m(t)41 b(Option)275 +552 y Fu(This)g(de\014nes)h(the)h(moun)m(tp)s(oin)m(t)f(at)i(whic)m(h)e +(to)h(place)h(the)f(\014lesystem.)77 b(If)42 b(the)h(moun)m(tp)s(oin)m +(t)g(of)150 662 y(the)e(\014lesystem)f(is)h(sp)s(eci\014ed)f(as)g +Fo(default)p Fu(,)i(then)e(the)g(\014lesystem)h(will)g(b)s(e)f(moun)m +(ted)g(in)g(the)h(auto-)150 771 y(moun)m(ter's)c(tree)h(under)e(its)h +(v)m(olume)h(name)f(and)g(the)g(moun)m(t)g(will)h(automatically)i(b)s +(e)c(inherited)h(b)m(y)150 881 y(the)31 b(automoun)m(ter.)275 +1009 y(F)-8 b(ollo)m(wing)34 b(the)e(moun)m(tp)s(oin)m(t,)g(namespace)h +(information)f(for)f(the)h(\014lesystem)g(ma)m(y)h(b)s(e)e(describ)s +(ed.)150 1118 y(The)f(options)h(that)g(can)f(b)s(e)g(giv)m(en)h(here)g +(are)f Fo(exportfs)p Fu(,)f Fo(volname)f Fu(and)i Fo(sel)p +Fu(.)275 1246 y(The)f(format)i(is:)390 1368 y Fo(mount)333 +b(:)47 b("mount")f(vol_tree)g(;)390 1575 y(vol_tree)189 +b(:)47 b Fq(list\()9 b Fo(vol_tree_attr)p Fq(\))47 b +Fo(;)390 1783 y(vol_tree_attr)963 1887 y(:)95 b(<)p Fq(string)p +Fo(>)47 b("{")g Fq(list\()9 b Fo(vol_tree_info)p Fq(\))47 +b Fo(vol_tree)e("}")i(;)390 2094 y(vol_tree_info)963 +2198 y(:)g("exportfs")e(<)p Fq(exp)s(ort-data)p Fo(>)963 +2302 y(|)i("volname")e(<)p Fq(v)m(olname)p Fo(>)963 2406 +y(|)i("sel")g(<)p Fq(selector-list)p Fo(>)963 2509 y(;)275 +2637 y Fu(Example:)390 2759 y Fo(mount)f(default)g({)581 +2863 y(exportfs)f("dylan)i(dougal)f(florence)f(zebedee")581 +2967 y(volname)h(/vol/andrew)390 3070 y(})275 3198 y +Fu(In)29 b(the)i(ab)s(o)m(v)m(e)h(example,)f(the)g(\014lesystem)f +(curren)m(tly)h(b)s(eing)f(declared)h(will)g(ha)m(v)m(e)g(an)g(en)m +(try)f(placed)150 3308 y(in)m(to)23 b(the)g(`)p Fo(exports)p +Fu(')d(\014le)j(allo)m(wing)h(the)e(\014lesystem)h(to)g(b)s(e)e(exp)s +(orted)h(to)h(the)g(mac)m(hines)g Fo(dylan)p Fu(,)f Fo(dougal)p +Fu(,)150 3417 y Fo(florence)41 b Fu(and)i Fo(zebedee)p +Fu(.)78 b(The)43 b(v)m(olume)h(name)f(b)m(y)h(whic)m(h)f(the)g +(\014lesystem)h(will)g(b)s(e)f(referred)f(to)150 3527 +y(remotely)-8 b(,)29 b(is)d(`)p Fo(/vol/andrew)p Fu('.)36 +b(By)27 b(declaring)g(the)f(moun)m(tp)s(oin)m(t)g(to)h(b)s(e)e +Fo(default)p Fu(,)g(the)h(\014lesystem)h(will)150 3636 +y(b)s(e)32 b(moun)m(ted)h(on)g(the)g(lo)s(cal)h(mac)m(hine)f(in)g(the)g +(automoun)m(ter)g(tree,)i(where)d Fq(Amd)k Fu(will)d(automatically)150 +3746 y(inherit)d(the)h(moun)m(t)f(as)h(`)p Fo(/vol/andrew)p +Fu('.)150 3892 y(`)p Fo(exportfs)p Fu(')630 4001 y(a)38 +b(string)g(de\014ning)e(whic)m(h)i(mac)m(hines)g(the)g(\014lesystem)f +(ma)m(y)i(b)s(e)e(exp)s(orted)g(to.)63 b(This)37 b(is)630 +4111 y(copied,)g(as)f(is,)g(in)m(to)h(the)e(`)p Fo(exports)p +Fu(')f(\014le|no)h(sanit)m(y)h(c)m(hec)m(king)h(is)e(p)s(erformed)f(on) +h(this)630 4221 y(string.)150 4366 y(`)p Fo(volname)p +Fu(')94 b(a)33 b(string)g(whic)m(h)g(declares)h(the)f(remote)h(name)f +(b)m(y)f(whic)m(h)h(to)h(reference)f(the)g(\014lesystem.)630 +4476 y(The)27 b(string)g(is)g(en)m(tered)g(in)m(to)i(a)e(dictionary)h +(and)e(allo)m(ws)j(y)m(ou)e(to)h(refer)f(to)h(this)f(\014lesystem)630 +4585 y(in)j(other)h(places)g(b)m(y)f(this)g(v)m(olume)i(name.)150 +4731 y(`)p Fo(sel)p Fu(')286 b(a)28 b(string)f(whic)m(h)g(is)g(placed)h +(in)m(to)g(the)g(automoun)m(ter)g(maps)e(as)i(a)f(selector)i(for)e(the) +h(\014lesys-)630 4841 y(tem.)150 5045 y Fk(8.6.6)63 b(dumpset)41 +b(Option)275 5230 y Fu(This)20 b(pro)m(vides)i(supp)s(ort)e(for)h(Imp)s +(erial)g(College's)j(lo)s(cal)e(\014le)g(bac)m(kup)f(to)s(ols)i(and)e +(is)g(not)h(do)s(cumen)m(ted)150 5340 y(further)29 b(here.)p +eop +%%Page: 68 70 +68 69 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(68)150 366 y Fk(8.6.7)63 b(log)41 b(Option)275 592 +y Fu(Sp)s(eci\014es)28 b(the)i(log)h(device)f(for)g(the)g(curren)m(t)f +(\014lesystem.)41 b(This)29 b(is)g(ignored)h(if)g(not)f(required)g(b)m +(y)h(the)150 702 y(particular)h(\014lesystem)f(t)m(yp)s(e.)150 +1042 y Ft(8.7)68 b Fg(FSinfo)51 b Ft(static)46 b(moun)l(ts)275 +1268 y Fu(Eac)m(h)32 b(host)g(ma)m(y)h(also)g(ha)m(v)m(e)g(a)f(n)m(um)m +(b)s(er)f(of)h(statically)j(moun)m(ted)d(\014lesystems.)46 +b(F)-8 b(or)32 b(example,)i(the)150 1378 y(host)i(ma)m(y)g(b)s(e)g(a)g +(diskless)g(w)m(orkstation)h(in)e(whic)m(h)h(case)h(it)f(will)g(ha)m(v) +m(e)h(no)f Fo(fs)f Fu(declarations.)59 b(In)35 b(this)150 +1487 y(case)28 b(the)f Fo(mount)f Fu(declaration)i(is)f(used)g(to)g +(determine)g(from)g(where)g(its)g(\014lesystems)g(will)g(b)s(e)g(moun)m +(ted.)150 1597 y(In)f(addition)i(to)g(b)s(eing)f(added)f(to)i(the)g(`)p +Fo(fstab)p Fu(')e(\014le,)i(this)f(information)h(can)f(also)h(b)s(e)f +(used)f(to)i(generate)150 1706 y(a)j(suitable)g(`)p Fo(bootparams)p +Fu(')d(\014le.)390 1868 y Fo(mount)333 b(:)47 b("mount")f(<)p +Fq(v)m(olname)p Fo(>)i Fq(list\()9 b Fo(localinfo)p Fq(\))48 +b Fo(;)390 2076 y(localinfo)141 b(:)47 b(localinfo_attr)d(<)p +Fq(string)p Fo(>)j(;)390 2283 y(localinfo_attr)963 2387 +y(:)g("as")963 2491 y(|)g("from")963 2595 y(|)g("fstype")963 +2698 y(|)g("opts")963 2802 y(;)275 2970 y Fu(The)30 b(\014lesystem)i +(sp)s(eci\014ed)e(to)i(b)s(e)e(moun)m(ted)h(will)h(b)s(e)e(searc)m(hed) +i(for)f(in)g(the)g(dictionary)h(of)f(v)m(olume)150 3080 +y(names)f(built)g(when)g(scanning)g(the)h(list)g(of)f(hosts')h +(de\014nitions.)275 3247 y(The)e(attributes)i(ha)m(v)m(e)h(the)f(follo) +m(wing)g(seman)m(tics:)150 3456 y(`)p Fo(from)e Fq(mac)m(hine)5 +b Fu(')630 3566 y(moun)m(t)30 b(the)h(\014lesystem)g(from)e(the)i(mac)m +(hine)g(with)f(the)h(hostname)f(of)h Fq(mac)m(hine)p +Fu(.)150 3759 y(`)p Fo(as)f Fq(moun)m(tp)s(oin)m(t)r +Fu(')630 3868 y(moun)m(t)37 b(the)g(\014lesystem)h(lo)s(cally)g(as)g +(the)f(name)g(giv)m(en,)j(in)d(case)h(this)f(is)g(di\013eren)m(t)g +(from)630 3978 y(the)31 b(adv)m(ertised)g(v)m(olume)g(name)f(of)h(the)f +(\014lesystem.)150 4170 y(`)p Fo(opts)f Fq(options)t +Fu(')630 4280 y(nativ)m(e)j Fm(moun)m(t)p Fu(\(8\))f(options.)150 +4472 y(`)p Fo(fstype)e Fq(t)m(yp)s(e)5 b Fu(')630 4582 +y(t)m(yp)s(e)31 b(of)f(\014lesystem)h(to)g(b)s(e)f(moun)m(ted.)275 +4791 y(An)g(example:)390 4953 y Fo(mount)46 b(/export/exec/hp300/local) +c(as)47 b(/usr/local)275 5121 y Fu(If)31 b(the)h(moun)m(tp)s(oin)m(t)g +(sp)s(eci\014ed)g(is)g(either)g(`)p Fo(/)p Fu(')g(or)g(`)p +Fo(swap)p Fu(',)g(the)h(mac)m(hine)f(will)h(b)s(e)e(considered)h(to)h +(b)s(e)150 5230 y(b)s(o)s(oting)f(o\013)h(the)f(net)g(and)g(this)g +(will)g(b)s(e)g(noted)g(for)g(use)g(in)g(generating)h(a)g(`)p +Fo(bootparams)p Fu(')d(\014le)i(for)g(the)150 5340 y(host)e(whic)m(h)h +(o)m(wns)f(the)g(\014lesystems.)p eop +%%Page: 69 71 +69 70 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(69)150 366 y Ft(8.8)68 b(De\014ning)45 b(an)g Fg(Amd)50 +b Ft(Moun)l(t)45 b(Map)f(in)h Fg(FSinfo)275 572 y Fu(The)30 +b(maps)h(used)g(b)m(y)g Fq(Amd)k Fu(can)c(b)s(e)g(constructed)h(from)f +Fq(FSinfo)36 b Fu(b)m(y)31 b(de\014ning)f(all)j(the)e(automoun)m(t)150 +682 y(trees.)41 b Fq(FSinfo)35 b Fu(tak)m(es)d(all)f(the)g +(de\014nitions)f(found)f(and)g(builds)h(one)g(map)g(for)g(eac)m(h)i +(top)f(lev)m(el)h(tree.)275 829 y(The)21 b(automoun)m(t)i(tree)f(is)g +(usually)g(de\014ned)f(last.)38 b(A)22 b(single)h(automoun)m(t)g +(con\014guration)f(will)g(usually)150 939 y(apply)h(to)h(an)f(en)m +(tire)h(managemen)m(t)h(domain.)38 b(One)23 b Fo(automount)d +Fu(declaration)25 b(is)e(needed)g(for)g(eac)m(h)i Fq(Amd)150 +1048 y Fu(automoun)m(t)d(p)s(oin)m(t.)37 b Fq(FSinfo)26 +b Fu(determines)20 b(whether)h(the)g(automoun)m(t)h(p)s(oin)m(t)e(is)h +Fq(direct)j Fu(\(see)e(Section)f(5.19)150 1158 y([Direct)j(Automoun)m +(t)f(Filesystem],)j(page)d(43\))h(or)e Fq(indirect)j +Fu(\(see)e(Section)g(5.22)h([T)-8 b(op-lev)m(el)25 b(Filesystem],)150 +1268 y(page)i(44\).)41 b(Direct)28 b(automoun)m(t)f(p)s(oin)m(ts)g(are) +g(distinguished)e(b)m(y)i(the)g(fact)g(that)g(there)g(is)g(no)f +(underlying)150 1377 y Fq(automoun)m(t)p 586 1377 28 +4 v 34 w(tree)p Fu(.)390 1519 y Fo(automount)141 b(:)47 +b("automount")e Fq(opt\()9 b Fo(auto_opts)p Fq(\))47 +b Fo(automount_tree)d(;)390 1726 y(auto_opts)141 b(:)47 +b("opts")f(<)p Fq(moun)m(t-options)p Fo(>)i(;)390 1934 +y(automount_tree)963 2038 y(:)f Fq(list\()9 b Fo(automount_attr)p +Fq(\))963 2142 y Fo(;)390 2349 y(automount_attr)963 2453 +y(:)47 b(<)p Fq(string)p Fo(>)g("=")g(<)p Fq(v)m(olname)p +Fo(>)963 2557 y(|)g(<)p Fq(string)p Fo(>)g("->")g(<)p +Fq(symlink)p Fo(>)963 2660 y(|)g(<)p Fq(string)p Fo(>)g("{")g +(automount_tree)d("}")963 2764 y(;)275 2912 y Fu(If)31 +b Fo(<)p Fq(moun)m(t-options)p Fo(>)i Fu(is)f(giv)m(en,)i(then)e(it)h +(is)f(the)g(string)h(to)g(b)s(e)e(placed)i(in)f(the)g(maps)g(for)g +Fq(Amd)j Fu(for)150 3021 y(the)c Fo(opts)e Fu(option.)275 +3169 y(A)j Fq(map)j Fu(is)e(t)m(ypically)h(a)f(tree)g(of)g +(\014lesystems,)h(for)e(example)h(`)p Fo(home)p Fu(')f(normally)h(con)m +(tains)h(a)f(tree)g(of)150 3278 y(\014lesystems)e(represen)m(ting)f +(other)h(mac)m(hines)g(in)f(the)g(net)m(w)m(ork.)275 +3426 y(A)i(map)f(can)h(either)h(b)s(e)e(giv)m(en)i(as)f(a)g(name)g +(represen)m(ting)h(an)e(already)i(de\014ned)e(v)m(olume)h(name,)h(or) +150 3536 y(it)i(can)f(b)s(e)f(a)i(tree.)52 b(A)34 b(tree)h(is)f +(represen)m(ted)g(b)m(y)g(placing)h(braces)f(after)h(the)f(name.)52 +b(F)-8 b(or)34 b(example,)i(to)150 3645 y(de\014ne)30 +b(a)g(tree)h(`)p Fo(/vol)p Fu(',)f(the)h(follo)m(wing)h(map)e(w)m(ould) +g(b)s(e)g(de\014ned:)390 3787 y Fo(automount)45 b(/vol)i({)g(})275 +3934 y Fu(Within)30 b(a)h(tree,)g(the)g(only)f(items)h(that)g(can)g +(app)s(ear)f(are)g(more)h(maps.)40 b(F)-8 b(or)31 b(example:)390 +4076 y Fo(automount)45 b(/vol)i({)581 4180 y(andrew)f({)h(})581 +4284 y(X11)g({)g(})390 4387 y(})275 4535 y Fu(In)33 b(this)i(case,)i +Fq(FSinfo)i Fu(will)c(lo)s(ok)g(for)f(v)m(olumes)i(named)e(`)p +Fo(/vol/andrew)p Fu(')e(and)i(`)p Fo(/vol/X11)p Fu(')f(and)h(a)150 +4645 y(map)39 b(en)m(try)h(will)g(b)s(e)g(generated)g(for)g(eac)m(h.)70 +b(If)39 b(the)h(v)m(olumes)g(are)g(de\014ned)f(more)h(than)f(once,)k +(then)150 4754 y Fq(FSinfo)35 b Fu(will)30 b(generate)i(a)f(series)g +(of)f(alternate)i(en)m(tries)g(for)e(them)g(in)g(the)h(maps.)275 +4902 y(Instead)39 b(of)h(a)h(tree,)i(either)d(a)g(link)g(\()p +Fq(name)45 b Fo(->)40 b Fq(destination)p Fu(\))h(or)f(a)g(reference)g +(can)g(b)s(e)g(sp)s(eci\014ed)150 5011 y(\()p Fq(name)32 +b Fo(=)27 b Fq(destination)p Fu(\).)40 b(A)27 b(link)g(creates)h(a)f +(sym)m(b)s(olic)h(link)e(to)i(the)f(string)f(sp)s(eci\014ed,)h(without) +g(further)150 5121 y(pro)s(cessing)k(the)h(en)m(try)-8 +b(.)45 b(A)31 b(reference)h(will)g(examine)g(the)g(destination)g +(\014lesystem)g(and)f(optimize)i(the)150 5230 y(reference.)52 +b(F)-8 b(or)35 b(example,)g(to)g(create)h(an)e(en)m(try)g(for)f +Fo(njw)h Fu(in)f(the)h(`)p Fo(/homes)p Fu(')f(map,)i(either)f(of)g(the) +h(t)m(w)m(o)150 5340 y(forms)30 b(can)g(b)s(e)g(used:)p +eop +%%Page: 70 72 +70 71 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(70)390 366 y Fo(automount)45 b(/homes)h({)581 470 y(njw)h(->)g +(/home/dylan/njw)390 574 y(})275 712 y Fu(or)390 844 +y Fo(automount)e(/homes)h({)581 948 y(njw)h(=)g(/home/dylan/njw)390 +1052 y(})275 1190 y Fu(In)30 b(the)i(\014rst)e(example,)j(when)d(`)p +Fo(/homes/njw)p Fu(')f(is)i(referenced)h(from)e Fq(Amd)p +Fu(,)i(a)f(link)h(will)f(b)s(e)g(created)150 1299 y(leading)41 +b(to)h(`)p Fo(/home/dylan/njw)p Fu(')37 b(and)j(the)g(automoun)m(ter)i +(will)f(b)s(e)f(referenced)g(a)h(second)g(time)g(to)150 +1409 y(resolv)m(e)32 b(this)e(\014lename.)41 b(The)30 +b(map)g(en)m(try)g(w)m(ould)h(b)s(e:)390 1541 y Fo(njw)47 +b(type:=link;fs:=/home/dyl)o(an/n)o(jw)275 1679 y Fu(In)40 +b(the)h(second)g(example,)j(the)d(destination)h(directory)g(is)e +(analyzed)i(and)f(found)e(to)j(b)s(e)e(in)h(the)150 1789 +y(\014lesystem)35 b(`)p Fo(/home/dylan)p Fu(')d(whic)m(h)i(has)g +(previously)g(b)s(een)g(de\014ned)f(in)h(the)h(maps.)52 +b(Hence)36 b(the)e(map)150 1898 y(en)m(try)d(will)f(lo)s(ok)h(lik)m(e:) +390 2030 y Fo(njw)47 b(rhost:=dylan;rfs:=/home/)o(dyla)o(n;s)o(ubli)o +(nk:=)o(njw)275 2168 y Fu(Creating)31 b(only)f(one)h(sym)m(b)s(olic)f +(link,)h(and)f(one)g(access)i(to)f Fq(Amd)p Fu(.)150 +2434 y Ft(8.9)68 b Fg(FSinfo)51 b Ft(Command)46 b(Line)f(Options)275 +2630 y Fq(FSinfo)34 b Fu(is)d(started)f(from)g(the)h(command)f(line)h +(b)m(y)f(using)g(the)h(command:)390 2763 y Fo(fsinfo)46 +b([)p Fq(options)t Fo(])h Fq(\014les)52 b Fo(...)275 +2900 y Fu(The)33 b(input)h(to)h Fq(FSinfo)k Fu(is)34 +b(a)h(single)g(set)g(of)f(de\014nitions)g(of)g(mac)m(hines)h(and)f +(automoun)m(t)h(maps.)52 b(If)150 3010 y(m)m(ultiple)38 +b(\014les)f(are)h(giv)m(en)g(on)f(the)g(command-line,)j(then)d(the)g +(\014les)h(are)f(concatenated)j(together)e(to)150 3120 +y(form)27 b(the)h(input)f(source.)40 b(The)28 b(\014les)f(are)i(passed) +e(individually)g(through)h(the)g(C)f(pre-pro)s(cessor)g(b)s(efore)150 +3229 y(b)s(eing)j(parsed.)275 3367 y(Sev)m(eral)25 b(options)h +(de\014ne)e(a)h(pre\014x)f(for)g(the)h(name)g(of)g(an)g(output)f +(\014le.)39 b(If)25 b(the)g(pre\014x)f(is)h(not)g(sp)s(eci\014ed)150 +3477 y(no)j(output)g(of)h(that)g(t)m(yp)s(e)g(is)f(pro)s(duced.)39 +b(The)28 b(su\016x)f(used)h(will)h(corresp)s(ond)e(either)i(to)g(the)g +(hostname)150 3586 y(to)h(whic)m(h)f(a)g(\014le)h(b)s(elongs,)f(or)h +(to)g(the)f(t)m(yp)s(e)g(of)h(output)e(if)i(only)f(one)g(\014le)h(is)f +(pro)s(duced.)39 b(Dumpsets)29 b(and)150 3696 y(the)j(`)p +Fo(bootparams)p Fu(')e(\014le)i(are)g(in)g(the)g(latter)h(class.)46 +b(T)-8 b(o)33 b(put)e(the)h(output)f(in)m(to)i(a)g(sub)s(directory)d +(simply)150 3806 y(put)35 b(a)g(`)p Fo(/)p Fu(')h(at)g(the)f(end)g(of)h +(the)f(pre\014x,)h(making)f(sure)g(that)h(the)f(directory)h(has)f +(already)h(b)s(een)f(made)150 3915 y(b)s(efore)30 b(running)f +Fq(Fsinfo)p Fu(.)150 4146 y Fk(8.9.1)63 b Fj(-a)41 b +Ff(auto)s(dir)275 4342 y Fu(Sp)s(eci\014es)d(the)i(directory)g(name)f +(in)g(whic)m(h)g(to)h(place)g(the)g(automoun)m(ter's)g(moun)m(tp)s(oin) +m(ts.)68 b(This)150 4452 y(defaults)33 b(to)h(`)p Fo(/a)p +Fu('.)49 b(Some)33 b(sites)h(ha)m(v)m(e)g(the)g(auto)s(dir)f(set)g(to)h +(b)s(e)f(`)p Fo(/amd)p Fu(',)g(and)g(this)g(w)m(ould)g(b)s(e)f(ac)m +(hiev)m(ed)150 4561 y(b)m(y:)390 4694 y Fo(fsinfo)46 +b(-a)h(/amd)g(...)150 4925 y Fk(8.9.2)63 b Fj(-b)41 b +Ff(b)s(o)s(otparams)275 5121 y Fu(This)23 b(sp)s(eci\014es)h(the)g +(pre\014x)f(for)i(the)f(`)p Fo(bootparams)p Fu(')e(\014lename.)39 +b(If)24 b(it)g(is)h(not)f(giv)m(en,)j(then)d(the)g(\014le)h(will)150 +5230 y(not)37 b(b)s(e)g(generated.)62 b(The)37 b(`)p +Fo(bootparams)p Fu(')e(\014le)i(will)h(b)s(e)e(constructed)i(for)f(the) +g(destination)h(mac)m(hine)150 5340 y(and)h(will)i(b)s(e)e(placed)i(in) +m(to)g(a)f(\014le)g(named)g(`)p Fo(bootparams)p Fu(')e(and)h +(pre\014xed)g(b)m(y)h(this)g(string.)69 b(The)40 b(\014le)p +eop +%%Page: 71 73 +71 72 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(71)150 366 y(generated)37 b(con)m(tains)h(a)e(list)h(of)g(en)m(tries) +g(describing)f(eac)m(h)h(diskless)g(clien)m(t)g(that)g(can)g(b)s(o)s +(ot)f(from)g(the)150 476 y(destination)31 b(mac)m(hine.)275 +626 y(As)k(an)h(example,)i(to)f(create)g(a)g(`)p Fo(bootparams)p +Fu(')c(\014le)j(in)g(the)g(directory)g(`)p Fo(generic)p +Fu(',)g(the)g(follo)m(wing)150 736 y(w)m(ould)30 b(b)s(e)g(used:)390 +880 y Fo(fsinfo)46 b(-b)h(generic/)f(...)150 1136 y Fk(8.9.3)63 +b Fj(-d)41 b Ff(dumpsets)275 1344 y Fu(This)24 b(sp)s(eci\014es)i(the)g +(pre\014x)e(for)i(the)f(`)p Fo(dumpsets)p Fu(')f(\014le.)40 +b(If)25 b(it)h(is)g(not)g(sp)s(eci\014ed,)g(then)f(the)h(\014le)g(will) +g(not)150 1454 y(b)s(e)f(generated.)41 b(The)25 b(\014le)h(will)g(b)s +(e)g(for)f(the)i(destination)f(mac)m(hine)h(and)e(will)i(b)s(e)e +(placed)h(in)m(to)h(a)g(\014lename)150 1564 y(`)p Fo(dumpsets)p +Fu(',)e(pre\014xed)f(b)m(y)h(this)g(string.)39 b(The)24 +b(`)p Fo(dumpsets)p Fu(')g(\014le)h(is)g(for)g(use)g(b)m(y)g(Imp)s +(erial)g(College's)i(lo)s(cal)150 1673 y(bac)m(kup)j(system.)275 +1823 y(F)-8 b(or)31 b(example,)h(to)g(create)g(a)f(`)p +Fo(dumpsets)p Fu(')e(\014le)i(in)g(the)g(directory)g(`)p +Fo(generic)p Fu(',)f(then)g(y)m(ou)i(w)m(ould)e(use)150 +1933 y(the)h(follo)m(wing:)390 2077 y Fo(fsinfo)46 b(-d)h(generic/)f +(...)150 2333 y Fk(8.9.4)63 b Fj(-e)41 b Ff(exp)s(ortfs)275 +2542 y Fu(De\014nes)e(the)i(pre\014x)d(for)i(the)g(`)p +Fo(exports)p Fu(')f(\014les.)69 b(If)39 b(it)i(is)f(not)g(giv)m(en,)j +(then)d(the)g(\014le)g(will)g(not)h(b)s(e)150 2651 y(generated.)f(F)-8 +b(or)28 b(eac)m(h)f(mac)m(hine)g(de\014ned)e(in)h(the)h +(con\014guration)g(\014les)f(as)g(ha)m(ving)h(disks,)g(an)f(`)p +Fo(exports)p Fu(')150 2761 y(\014le)35 b(is)g(constructed)g(and)g(giv)m +(en)h(a)f(\014lename)g(determined)g(b)m(y)g(the)g(name)g(of)g(the)g +(mac)m(hine,)i(pre\014xed)150 2870 y(with)25 b(this)g(string.)38 +b(If)25 b(a)g(mac)m(hine)h(is)f(de\014ned)f(as)h(diskless,)h(then)f(no) +g(`)p Fo(exports)p Fu(')e(\014le)i(will)h(b)s(e)e(created)i(for)150 +2980 y(it.)41 b(The)29 b(\014les)h(con)m(tain)h(en)m(tries)f(for)g +(directories)h(on)e(the)h(mac)m(hine)h(that)f(ma)m(y)g(b)s(e)f(exp)s +(orted)h(to)g(clien)m(ts.)275 3130 y(Example:)54 b(T)-8 +b(o)37 b(create)i(the)e(`)p Fo(exports)p Fu(')f(\014les)h(for)f(eac)m +(h)j(diskfull)d(mac)m(hine)i(and)e(place)i(them)f(in)m(to)150 +3240 y(the)31 b(directory)f(`)p Fo(exports)p Fu(':)390 +3384 y Fo(fsinfo)46 b(-e)h(exports/)f(...)150 3640 y +Fk(8.9.5)63 b Fj(-f)41 b Ff(fstab)275 3848 y Fu(This)32 +b(de\014nes)h(the)h(pre\014x)e(for)h(the)h(`)p Fo(fstab)p +Fu(')f(\014les.)50 b(The)33 b(\014les)g(will)h(only)g(b)s(e)f(created)h +(if)g(this)f(pre\014x)150 3958 y(is)c(de\014ned.)38 b(F)-8 +b(or)30 b(eac)m(h)f(mac)m(hine)h(de\014ned)d(in)h(the)h +(con\014guration)g(\014les,)g(a)g(`)p Fo(fstab)p Fu(')e(\014le)i(is)g +(created)g(with)150 4067 y(the)h(\014lename)h(determined)f(b)m(y)g +(pre\014xing)f(this)i(string)f(with)g(the)g(name)h(of)f(the)h(mac)m +(hine.)41 b(These)30 b(\014les)150 4177 y(con)m(tain)i(en)m(tries)f +(for)f(\014lesystems)h(and)e(partitions)i(to)g(moun)m(t)g(at)g(b)s(o)s +(ot)f(time.)275 4327 y(Example,)g(to)h(create)h(the)f(\014les)f(in)g +(the)h(directory)g(`)p Fo(fstabs)p Fu(':)390 4472 y Fo(fsinfo)46 +b(-f)h(fstabs/)f(...)150 4727 y Fk(8.9.6)63 b Fj(-h)41 +b Ff(hostname)275 4936 y Fu(De\014nes)31 b(the)h(hostname)g(of)g(the)g +(destination)g(mac)m(hine)g(to)h(pro)s(cess)e(for.)44 +b(If)31 b(this)h(is)g(not)f(sp)s(eci\014ed,)150 5045 +y(it)g(defaults)f(to)h(the)g(lo)s(cal)h(mac)m(hine)f(name,)f(as)h +(returned)e(b)m(y)h Fm(gethostname)p Fu(\(2\).)275 5196 +y(Example:)390 5340 y Fo(fsinfo)46 b(-h)h(dylan.doc.ic.ac.uk)c(...)p +eop +%%Page: 72 74 +72 73 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(72)150 366 y Fk(8.9.7)63 b Fj(-m)41 b Ff(moun)m(t-maps)275 +558 y Fu(De\014nes)e(the)h(pre\014x)f(for)g(the)h(automoun)m(ter)g +(\014les.)69 b(The)39 b(maps)g(will)h(only)g(b)s(e)e(pro)s(duced)g(if)i +(this)150 668 y(pre\014x)c(is)h(de\014ned.)59 b(The)36 +b(moun)m(t)h(maps)f(suitable)i(for)e(the)h(net)m(w)m(ork)h(de\014ned)e +(b)m(y)g(the)i(con\014guration)150 777 y(\014les)33 b(will)g(b)s(e)f +(placed)h(in)m(to)g(\014les)g(with)f(names)h(calculated)h(b)m(y)f +(pre\014xing)f(this)g(string)h(to)g(the)g(name)g(of)150 +887 y(eac)m(h)f(map.)275 1021 y(F)-8 b(or)21 b(example,)i(to)e(create)h +(the)e(automoun)m(ter)h(maps)f(and)g(place)h(them)f(in)g(the)h +(directory)f(`)p Fo(automaps)p Fu(':)390 1148 y Fo(fsinfo)46 +b(-m)h(automaps/)f(...)150 1370 y Fk(8.9.8)63 b Fj(-q)275 +1562 y Fu(Selects)35 b(quiet)f(mo)s(de.)52 b Fq(FSinfo)39 +b Fu(suppress)32 b(the)i(\\running)f(commen)m(tary")j(and)e(only)g +(outputs)g(an)m(y)150 1671 y(error)c(messages)h(whic)m(h)f(are)h +(generated.)150 1893 y Fk(8.9.9)63 b Fj(-v)275 2085 y +Fu(Selects)32 b(v)m(erb)s(ose)f(mo)s(de.)43 b(When)31 +b(this)g(is)g(activ)-5 b(ated,)33 b(the)f(program)f(will)g(displa)m(y)g +(more)h(messages,)150 2194 y(and)37 b(displa)m(y)g(all)h(the)g +(information)f(disco)m(v)m(ered)i(when)d(p)s(erforming)g(the)i(seman)m +(tic)g(analysis)g(phase.)150 2304 y(Eac)m(h)31 b(v)m(erb)s(ose)g +(message)g(is)f(output)g(to)i(`)p Fo(stdout)p Fu(')d(on)h(a)h(line)f +(starting)i(with)e(a)g(`)p Fo(#)p Fu(')h(c)m(haracter.)150 +2525 y Fk(8.9.10)63 b Fj(-D)41 b Ff(name[=defn])275 2717 +y Fu(De\014nes)26 b(a)h(sym)m(b)s(ol)f Fq(name)31 b Fu(for)26 +b(the)h(prepro)s(cessor)e(when)g(reading)i(the)f(con\014guration)h +(\014les.)39 b(Equiv-)150 2827 y(alen)m(t)32 b(to)f Fo(#define)d +Fu(directiv)m(e.)150 3048 y Fk(8.9.11)63 b Fj(-I)41 b +Ff(directory)275 3240 y Fu(This)29 b(option)i(is)g(passed)f(in)m(to)h +(the)g(prepro)s(cessor)f(for)g(the)h(con\014guration)g(\014les.)41 +b(It)30 b(sp)s(eci\014es)h(direc-)150 3350 y(tories)g(in)f(whic)m(h)g +(to)i(\014nd)c(include)i(\014les)150 3571 y Fk(8.9.12)63 +b Fj(-U)41 b Ff(name)275 3763 y Fu(Remo)m(v)m(es)32 b(an)m(y)e(initial) +i(de\014nition)e(of)g(the)h(sym)m(b)s(ol)f Fq(name)p +Fu(.)41 b(In)m(v)m(erse)31 b(of)f(the)h Fo(-D)f Fu(option.)150 +4018 y Ft(8.10)68 b(Errors)46 b(pro)t(duced)d(b)l(y)i +Fg(FSinfo)275 4209 y Fu(The)29 b(follo)m(wing)j(table)g(do)s(cumen)m +(ts)e(the)g(errors)g(and)g(w)m(arnings)g(whic)m(h)g Fq(FSinfo)35 +b Fu(ma)m(y)c(pro)s(duce.)150 4367 y Fo(")47 b(expected)630 +4477 y Fu(Occurs)30 b(if)g(an)g(unescap)s(ed)g(newline)g(is)g(found)g +(in)g(a)g(quoted)h(string.)150 4634 y Fo(ambiguous)45 +b(mount:)h Fq(v)m(olume)54 b Fo(is)47 b(a)h(replicated)d(filesystem)630 +4744 y Fu(If)24 b(sev)m(eral)i(\014lesystems)f(are)g(declared)g(as)g +(ha)m(ving)g(the)g(same)g(v)m(olume)h(name,)g(they)f(will)g(b)s(e)630 +4854 y(considered)36 b(replicated)h(\014lesystems.)57 +b(T)-8 b(o)36 b(moun)m(t)g(a)h(replicated)g(\014lesystem)f(statically) +-8 b(,)630 4963 y(a)33 b(sp)s(eci\014c)e(host)i(will)f(need)g(to)h(b)s +(e)e(named,)i(to)g(sa)m(y)f(whic)m(h)g(particular)h(cop)m(y)g(to)g(try) +f(and)630 5073 y(moun)m(t,)f(else)g(this)f(error)g(will)h(result.)150 +5230 y Fo(can't)46 b(open)h Fq(\014lename)53 b Fo(for)47 +b(writing)630 5340 y Fu(Occurs)30 b(if)g(an)m(y)h(errors)f(are)g +(encoun)m(tered)h(when)f(op)s(ening)g(an)g(output)g(\014le.)p +eop +%%Page: 73 75 +73 74 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(73)150 366 y Fo(cannot)46 b(determine)f(localname)h(since)g(volname)g +Fq(v)m(olume)53 b Fo(is)48 b(not)f(uniquely)e(defined)630 +476 y Fu(If)27 b(a)i(v)m(olume)f(is)g(replicated)h(and)f(an)g(attempt)h +(is)f(made)g(to)g(moun)m(t)g(the)g(\014lesystem)g(stati-)630 +586 y(cally)k(without)f(sp)s(ecifying)g(a)g(lo)s(cal)h(moun)m(tp)s(oin) +m(t,)f Fq(FSinfo)36 b Fu(cannot)31 b(calculate)i(a)f(moun)m(t-)630 +695 y(p)s(oin)m(t,)f(as)f(the)h(desired)f(pathname)g(w)m(ould)g(b)s(e)g +(am)m(biguous.)150 842 y Fq(device)54 b Fo(has)47 b(duplicate)e +(exportfs)g(data)630 951 y Fu(Pro)s(duced)20 b(if)h(the)h(`)p +Fo(exportfs)p Fu(')d(option)j(is)f(used)g(m)m(ultiple)h(times)g(within) +e(the)i(same)g(branc)m(h)630 1061 y(of)37 b(a)g(\014lesystem)h +(de\014nition.)60 b(F)-8 b(or)38 b(example,)h(if)e(y)m(ou)g(attempt)h +(to)g(set)g(the)f(`)p Fo(exportfs)p Fu(')630 1171 y(data)31 +b(at)g(di\013eren)m(t)g(lev)m(els)h(of)e(the)h(moun)m(tp)s(oin)m(t)f +(directory)h(tree.)150 1317 y Fo(dump)47 b(frequency)e(for)i +Fq(host)r Fo(:)p Fq(device)53 b Fo(is)48 b(non-zero)630 +1427 y Fu(Occurs)41 b(if)h Fq(device)48 b Fu(has)42 b(its)g(`)p +Fo(fstype)p Fu(')f(declared)h(to)g(b)s(e)g(`)p Fo(swap)p +Fu(')f(or)h(`)p Fo(export)p Fu(')e(and)i(the)630 1536 +y(`)p Fo(dump)p Fu(')34 b(option)h(is)g(set)g(to)g(a)g(v)-5 +b(alue)35 b(greater)h(than)e(zero.)55 b(Sw)m(ap)34 b(devices)h(should)f +(not)h(b)s(e)630 1646 y(dump)s(ed.)150 1792 y Fo(duplicate)45 +b(host)i Fq(hostname)5 b Fo(!)630 1902 y Fu(If)30 b(a)h(host)f(has)g +(more)h(than)f(one)h(de\014nition.)150 2049 y Fo(end)47 +b(of)g(file)g(within)f(comment)630 2158 y Fu(A)30 b(commen)m(t)i(w)m +(as)f(un)m(terminated)f(b)s(efore)g(the)h(end)e(of)i(one)f(of)h(the)g +(con\014guration)f(\014les.)150 2305 y Fq(\014lename)5 +b Fo(:)48 b(cannot)e(open)h(for)f(reading)630 2414 y +Fu(If)34 b(a)h(\014le)f(sp)s(eci\014ed)g(on)g(the)h(command)f(line)h +(as)f(con)m(taining)i(con\014guration)f(data)g(could)630 +2524 y(not)c(b)s(e)e(op)s(ened.)150 2670 y Fq(\014lesystem)48 +b Fo(has)f(a)g(volname)f(but)h(no)g(exportfs)f(data)630 +2780 y Fu(Occurs)30 b(when)f(a)i(v)m(olume)h(name)e(is)h(declared)g +(for)f(a)h(\014le)g(system,)g(but)f(the)g(string)h(sp)s(eci-)630 +2890 y(fying)f(what)h(mac)m(hines)f(the)h(\014lesystem)g(can)f(b)s(e)g +(exp)s(orted)g(to)h(is)g(missing.)150 3036 y Fo(fs)47 +b(field)g(")p Fq(\014eld-name)5 b Fo(")47 b(already)f(set)630 +3146 y Fu(Occurs)30 b(when)f(m)m(ultiple)i(de\014nitions)f(are)h(giv)m +(en)g(for)g(one)f(of)h(the)f(attributes)h(of)g(a)g(host's)630 +3255 y(\014lesystem.)150 3402 y Fo(host)47 b(field)f(")p +Fq(\014eld-name)5 b Fo(")47 b(already)f(set)630 3511 +y Fu(If)30 b(duplicate)h(de\014nitions)f(are)h(giv)m(en)g(for)f(an)m(y) +h(of)f(the)h(\014elds)f(with)g(a)h(host)f(de\014nition.)150 +3658 y Fq(host)r Fo(:)p Fq(device)54 b Fo(has)47 b(more)f(than)h(one)g +(mount)f(point)630 3768 y Fu(Occurs)39 b(if)g(the)h(moun)m(t)g(option)g +(for)f(a)h(host's)g(\014lesystem)g(sp)s(eci\014es)f(m)m(ultiple)h +(trees)g(at)630 3877 y(whic)m(h)30 b(to)h(place)h(the)e(moun)m(tp)s +(oin)m(t.)150 4024 y Fq(host)r Fo(:)p Fq(device)54 b +Fo(has)47 b(no)g(mount)f(point)630 4133 y Fu(Occurs)30 +b(if)g(the)h(`)p Fo(mount)p Fu(')e(option)i(is)f(not)h(sp)s(eci\014ed)f +(for)g(a)h(host's)f(\014lesystem.)150 4280 y Fq(host)r +Fo(:)p Fq(device)54 b Fo(needs)46 b(field)g(")p Fq(\014eld-name)5 +b Fo(")630 4389 y Fu(Occurs)34 b(when)f(a)i(\014lesystem)g(is)g +(missing)f(a)h(required)f(\014eld.)53 b Fq(\014eld-name)39 +b Fu(could)c(b)s(e)f(one)630 4499 y(of)d(`)p Fo(fstype)p +Fu(',)e(`)p Fo(opts)p Fu(',)h(`)p Fo(passno)p Fu(')f(or)h(`)p +Fo(mount)p Fu('.)150 4646 y Fq(host)r Fo(:mount)46 b(field)h(specified) +e(for)i(swap)f(partition)630 4755 y Fu(Occurs)35 b(if)h(a)g(moun)m(tp)s +(oin)m(t)g(is)g(giv)m(en)h(for)e(a)h(\014lesystem)g(whose)g(t)m(yp)s(e) +g(is)g(declared)g(to)h(b)s(e)630 4865 y(`)p Fo(swap)p +Fu('.)150 5011 y Fo(malformed)45 b(IP)i(dotted)g(quad:)f +Fq(address)630 5121 y Fu(If)e(the)h(In)m(ternet)g(address)f(of)h(an)g +(in)m(terface)h(is)f(incorrectly)h(sp)s(eci\014ed.)83 +b(An)45 b(In)m(ternet)630 5230 y(address)27 b(de\014nition)g(is)g +(handled)g(to)h Fm(inet)p 2048 5230 28 5 v 33 w(addr)p +Fu(\(3N\))g(to)g(see)g(if)g(it)g(can)g(cop)s(e.)40 b(If)27 +b(not,)h(then)630 5340 y(this)i(message)i(will)e(b)s(e)g(displa)m(y)m +(ed.)p eop +%%Page: 74 76 +74 75 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(74)150 366 y Fo(malformed)45 b(netmask:)h Fq(netmask)630 +476 y Fu(If)38 b(the)h(netmask)g(cannot)g(b)s(e)f(deco)s(ded)g(as)h +(though)f(it)h(w)m(ere)g(a)g(hexadecimal)h(n)m(um)m(b)s(er,)630 +586 y(then)f(this)g(message)i(will)e(b)s(e)g(displa)m(y)m(ed.)68 +b(It)39 b(will)h(t)m(ypically)h(b)s(e)e(caused)g(b)m(y)g(incorrect)630 +695 y(c)m(haracters)32 b(in)e(the)g Fq(netmask)37 b Fu(v)-5 +b(alue.)150 845 y Fo(mount)46 b(field)h(")p Fq(\014eld-name)5 +b Fo(")47 b(already)f(set)630 954 y Fu(Occurs)30 b(when)f(a)i(static)h +(moun)m(t)e(has)g(m)m(ultiple)h(de\014nitions)f(of)h(the)f(same)h +(\014eld.)150 1104 y Fo(mount)46 b(tree)h(field)f(")p +Fq(\014eld-name)5 b Fo(")48 b(already)e(set)630 1214 +y Fu(Occurs)30 b(when)g(the)h Fq(\014eld-name)36 b Fu(is)31 +b(de\014ned)e(more)i(than)f(once)i(during)d(the)i(de\014nition)g(of)630 +1323 y(a)g(\014lesystems)f(moun)m(tp)s(oin)m(t.)150 1473 +y Fo(netif)46 b(field)h Fq(\014eld-name)53 b Fo(already)45 +b(set)630 1582 y Fu(Occurs)30 b(if)g(y)m(ou)h(attempt)g(to)g(de\014ne)f +(an)g(attribute)h(of)g(an)f(in)m(terface)i(more)f(than)f(once.)150 +1732 y Fo(network)46 b(booting)g(requires)f(both)i(root)f(and)h(swap)g +(areas)630 1842 y Fu(Occurs)28 b(if)h(a)h(mac)m(hine)g(has)e(moun)m(t)i +(declarations)g(for)f(either)g(the)h(ro)s(ot)f(partition)h(or)f(the)630 +1951 y(sw)m(ap)34 b(area,)i(but)d(not)i(b)s(oth.)51 b(Y)-8 +b(ou)34 b(cannot)h(de\014ne)e(a)h(mac)m(hine)h(to)g(only)f(partially)h +(b)s(o)s(ot)630 2061 y(via)c(the)g(net)m(w)m(ork.)150 +2210 y Fo(no)47 b(disk)g(mounts)f(on)h Fq(hostname)630 +2320 y Fu(If)38 b(there)g(are)h(no)f(static)i(moun)m(ts,)g(nor)e(lo)s +(cal)h(disk)f(moun)m(ts)g(sp)s(eci\014ed)f(for)h(a)h(mac)m(hine,)630 +2430 y(this)30 b(message)i(will)e(b)s(e)g(displa)m(y)m(ed.)150 +2579 y Fo(no)47 b(volname)f(given)g(for)h Fq(host)r Fo(:)p +Fq(device)630 2689 y Fu(Occurs)24 b(when)g(a)h(\014lesystem)g(is)g +(de\014ned)e(to)j(b)s(e)e(moun)m(ted)g(on)h(`)p Fo(default)p +Fu(',)g(but)f(no)g(v)m(olume)630 2798 y(name)30 b(is)h(giv)m(en)g(for)f +(the)h(\014le)f(system,)h(then)f(the)h(moun)m(tp)s(oin)m(t)f(cannot)h +(b)s(e)f(determined.)150 2948 y Fo(not)47 b(allowed)f('/')h(in)g(a)g +(directory)f(name)630 3058 y Fu(Occurs)35 b(when)g(a)i(pathname)e(with) +h(m)m(ultiple)h(directory)f(elemen)m(ts)h(is)f(sp)s(eci\014ed)g(as)g +(the)630 3167 y(name)27 b(for)f(an)h(automoun)m(ter)h(tree.)40 +b(A)27 b(tree)g(should)f(only)h(ha)m(v)m(e)h(one)f(name)g(at)g(eac)m(h) +h(lev)m(el.)150 3317 y Fo(pass)47 b(number)f(for)h Fq(host)r +Fo(:)p Fq(device)53 b Fo(is)47 b(non-zero)630 3426 y +Fu(Occurs)41 b(if)h Fq(device)48 b Fu(has)42 b(its)g(`)p +Fo(fstype)p Fu(')f(declared)h(to)g(b)s(e)g(`)p Fo(swap)p +Fu(')f(or)h(`)p Fo(export)p Fu(')e(and)i(the)630 3536 +y Fm(fsc)m(k)p Fu(\(8\))27 b(pass)e(n)m(um)m(b)s(er)g(is)g(set.)40 +b(Sw)m(ap)25 b(devices)h(should)f(not)h(b)s(e)f(fsc)m(k'd.)39 +b(See)26 b(Section)g(8.6.1)630 3646 y([FSinfo)k(\014lesystems)h(fst)m +(yp)s(e],)g(page)g(66.)150 3795 y Fo(sub-directory)44 +b Fq(directory)56 b Fo(of)47 b Fq(directory-tree)55 b +Fo(starts)46 b(with)h('/')630 3905 y Fu(Within)40 b(the)f(\014lesystem) +h(sp)s(eci\014cation)g(for)f(a)h(host,)h(if)f(an)f(elemen)m(t)i +Fq(directory)47 b Fu(of)40 b(the)630 4014 y(moun)m(tp)s(oin)m(t)30 +b(b)s(egins)g(with)g(a)h(`)p Fo(/)p Fu(')g(and)e(it)i(is)g(not)f(the)h +(start)g(of)f(the)h(tree.)150 4164 y Fo(sub-directory)44 +b(of)j Fq(directory-tree)55 b Fo(is)47 b(named)f("default")630 +4274 y Fu(`)p Fo(default)p Fu(')25 b(is)h(a)h(k)m(eyw)m(ord)g(used)f +(to)h(sp)s(ecify)f(if)g(a)h(moun)m(tp)s(oin)m(t)g(should)e(b)s(e)h +(automatically)630 4383 y(calculated)k(b)m(y)d Fq(FSinfo)p +Fu(.)40 b(If)27 b(y)m(ou)h(attempt)h(to)f(sp)s(ecify)g(a)g(directory)g +(name)g(as)g(this,)g(it)h(will)630 4493 y(use)h(the)h(\014lename)f(of)h +(`)p Fo(default)p Fu(')e(but)g(will)i(pro)s(duce)e(this)i(w)m(arning.) +150 4642 y Fo(unknown)46 b(\\)h(sequence)630 4752 y Fu(Occurs)25 +b(if)h(an)f(unkno)m(wn)f(escap)s(e)i(sequence)g(is)g(found)e(inside)i +(a)g(string.)39 b(Within)26 b(a)g(string,)630 4862 y(y)m(ou)j(can)g +(giv)m(e)h(the)f(standard)f(C)g(escap)s(e)h(sequences)g(for)g(strings,) +g(suc)m(h)f(as)h(newlines)g(and)630 4971 y(tab)i(c)m(haracters.)150 +5121 y Fo(unknown)46 b(directory)f(attribute)630 5230 +y Fu(If)29 b(an)g(unkno)m(wn)e(k)m(eyw)m(ord)j(is)f(found)f(while)h +(reading)g(the)g(de\014nition)g(of)g(a)h(host's)f(\014lesys-)630 +5340 y(tem)i(moun)m(t)f(option.)p eop +%%Page: 75 77 +75 76 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(FSinfo)2785 +b(75)150 366 y Fo(unknown)46 b(filesystem)f(attribute)630 +476 y Fu(Occurs)30 b(if)g(an)g(unrecognized)h(k)m(eyw)m(ord)g(is)f +(used)g(when)f(de\014ning)h(a)g(host's)h(\014lesystems.)150 +635 y Fo(unknown)46 b(host)g(attribute)630 745 y Fu(Occurs)30 +b(if)g(an)g(unrecognized)h(k)m(eyw)m(ord)g(is)f(used)g(when)f +(de\014ning)h(a)g(host.)150 904 y Fo(unknown)46 b(mount)g(attribute)630 +1014 y Fu(Occurs)e(if)g(an)h(unrecognized)g(k)m(eyw)m(ord)g(is)f(found) +f(while)i(parsing)f(the)h(list)g(of)f(static)630 1124 +y(moun)m(ts.)150 1283 y Fo(unknown)i(volname)g Fq(v)m(olume)53 +b Fo(automounted)45 b Fq([)59 b Fo(on)48 b Fq(name)k(])630 +1393 y Fu(Occurs)32 b(if)g Fq(v)m(olume)39 b Fu(is)32 +b(used)g(in)g(a)h(de\014nition)f(of)h(an)f(automoun)m(t)i(map)e(but)f +(the)i(v)m(olume)630 1502 y(name)d(has)h(not)f(b)s(een)g(declared)h +(during)e(the)h(host)h(\014lesystem)f(de\014nitions.)150 +1662 y Fo(volname)46 b Fq(v)m(olume)53 b Fo(is)48 b(unknown)630 +1771 y Fu(Occurs)31 b(if)g(an)g(attempt)h(is)f(made)h(to)g(moun)m(t)f +(or)g(reference)h(a)f(v)m(olume)h(name)f(whic)m(h)g(has)630 +1881 y(not)g(b)s(een)e(declared)i(during)e(the)i(host)f(\014lesystem)h +(de\014nitions.)150 2040 y Fo(volname)46 b Fq(v)m(olume)53 +b Fo(not)47 b(exported)f(from)h Fq(mac)m(hine)630 2150 +y Fu(Occurs)29 b(if)h(y)m(ou)f(attempt)i(to)f(moun)m(t)g(the)g(v)m +(olume)g Fq(v)m(olume)36 b Fu(from)29 b(a)h(mac)m(hine)g(whic)m(h)f +(has)630 2259 y(not)i(declared)f(itself)i(to)f(ha)m(v)m(e)g(suc)m(h)f +(a)h(\014lesystem)g(a)m(v)-5 b(ailable.)p eop +%%Page: 76 78 +76 77 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(76)150 366 y Fr(9)80 b(Hlfsd)275 615 y Fq(Hlfsd)29 +b Fu(is)d(a)h(daemon)f(whic)m(h)g(implemen)m(ts)g(a)h(\014lesystem)f +(con)m(taining)i(a)f(sym)m(b)s(olic)f(link)g(to)h(sub)s(direc-)150 +725 y(tory)h(within)f(a)h(user's)f(home)g(directory)-8 +b(,)29 b(dep)s(ending)d(on)i(the)f(user)g(whic)m(h)g(accessed)i(that)f +(link.)40 b(It)28 b(w)m(as)150 834 y(primarily)21 b(designed)g(to)h +(redirect)f(incoming)h(mail)g(to)f(users')g(home)g(directories,)j(so)e +(that)f(it)h(can)g(b)s(e)e(read)150 944 y(from)30 b(an)m(ywhere.)41 +b(It)30 b(w)m(as)h(designed)f(and)g(implemen)m(ted)h(b)m(y)g(Erez)f +(Zadok)g(\()p Fo(ezk@cs.columbia.edu)p Fu(\))150 1053 +y(and)38 b(Alexander)h(Dupuy)f(\()p Fo(dupuy@cs.columbia.edu)p +Fu(\),)e(at)j(the)g(Computer)f(Science)i(Departmen)m(t)150 +1163 y(\()p Fo(http://www.cs.columbia.edu)o(/)p Fu(\))29 +b(of)34 b(Colum)m(bia)h(Univ)m(ersit)m(y)h(\()p Fo +(http://www.columbia.edu/)o Fu(\).)150 1273 y(A)53 b(pap)s(er)f(\()p +Fo(http://www.cs.columbia.edu)o(/~ez)o(k/re)o(sea)o(rch/)o(hlfs)o(d/h)o +(lfsd)o(.htm)o(l)p Fu(\))47 b(on)53 b Fq(Hlfsd)150 1382 +y Fu(w)m(as)31 b(presen)m(ted)f(at)h(the)g(Usenix)f(LISA)g(VI)s(I)g +(conference)h(in)f(1993.)275 1522 y Fq(Hlfsd)25 b Fu(op)s(erates)e(b)m +(y)g(moun)m(ting)f(itself)i(as)f(an)f(NFS)h(serv)m(er)f(for)h(the)f +(directory)i(con)m(taining)g Fq(linkname)p Fu(,)150 1631 +y(whic)m(h)h(defaults)h(to)g(`)p Fo(/hlfs/home)p Fu('.)37 +b(Lo)s(okups)25 b(within)g(that)h(directory)h(are)f(handled)e(b)m(y)i +Fq(Hlfsd)p Fu(,)g(whic)m(h)150 1741 y(uses)42 b(the)h(passw)m(ord)e +(map)h(to)h(determine)g(ho)m(w)f(to)h(resolv)m(e)h(the)f(lo)s(okup.)76 +b(The)42 b(directory)h(will)g(b)s(e)150 1850 y(created)35 +b(if)f(it)g(do)s(esn't)f(already)i(exist.)52 b(The)33 +b(sym)m(b)s(olic)h(link)g(will)g(b)s(e)f(to)h(the)g(accessing)i(user's) +d(home)150 1960 y(directory)-8 b(,)31 b(with)e Fq(sub)s(dir)34 +b Fu(app)s(ended)28 b(to)j(it.)41 b(If)29 b(not)h(sp)s(eci\014ed,)f +Fq(sub)s(dir)34 b Fu(defaults)c(to)g(`)p Fo(.hlfsdir)p +Fu('.)39 b(This)150 2069 y(directory)31 b(will)g(also)g(b)s(e)f +(created)h(if)f(it)h(do)s(es)f(not)h(already)g(exist.)275 +2209 y(A)h(`)p Fo(SIGTERM)p Fu(')g(sen)m(t)h(to)g Fq(Hlfsd)j +Fu(will)d(cause)h(it)f(to)h(sh)m(utdo)m(wn.)47 b(A)33 +b(`)p Fo(SIGHUP)p Fu(')e(will)i(\015ush)e(the)i(in)m(ternal)150 +2318 y(cac)m(hes,)k(and)d(reload)h(the)g(passw)m(ord)f(map.)53 +b(It)34 b(will)h(also)g(close)h(and)e(reop)s(en)g(the)h(log)g(\014le,)h +(to)f(enable)150 2428 y(the)27 b(original)h(log)g(\014le)e(to)i(b)s(e)e +(remo)m(v)m(ed)i(or)e(rotated.)41 b(A)27 b(`)p Fo(SIGUSR1)p +Fu(')e(will)i(cause)g(it)h(to)f(dump)e(its)i(in)m(ternal)150 +2538 y(table)k(of)g(user)e(IDs)i(and)f(home)g(directories)i(to)f(the)f +(\014le)h(`)p Fo(/tmp/hlfsddump)p Fu('.)150 2807 y Ft(9.1)68 +b(In)l(tro)t(duction)45 b(to)g(Hlfsd)275 3004 y Fu(Electronic)30 +b(mail)h(has)e(b)s(ecome)h(one)f(of)h(the)g(ma)5 b(jor)29 +b(applications)i(for)e(man)m(y)h(computer)f(net)m(w)m(orks,)150 +3114 y(and)c(use)h(of)g(this)g(service)g(is)g(exp)s(ected)h(to)f +(increase)h(o)m(v)m(er)g(time,)h(as)e(net)m(w)m(orks)g(proliferate)h +(and)f(b)s(ecome)150 3224 y(faster.)41 b(Pro)m(viding)29 +b(a)h(con)m(v)m(enien)m(t)h(en)m(vironmen)m(t)f(for)f(users)g(to)h +(read,)g(comp)s(ose,)g(and)e(send)h(electronic)150 3333 +y(mail)i(has)f(b)s(ecome)h(a)g(requiremen)m(t)f(for)g(systems)h +(administrators)f(\(SAs\).)275 3472 y(Widely)i(used)f(metho)s(ds)h(for) +f(handling)h(mail)g(usually)g(require)g(users)f(to)h(b)s(e)g(logged)h +(in)m(to)g(a)f(desig-)150 3582 y(nated)24 b(\\home")i(mac)m(hine,)g +(where)e(their)g(mailb)s(o)m(x)h(\014les)f(reside.)38 +b(Only)24 b(on)g(that)h(one)f(mac)m(hine)h(can)g(they)150 +3692 y(read)k(newly)h(arriv)m(ed)g(mail.)41 b(Since)29 +b(users)g(ha)m(v)m(e)i(to)f(b)s(e)f(logged)i(in)m(to)g(that)f(system)g +(to)g(read)f(their)h(mail,)150 3801 y(they)23 b(often)g(\014nd)e(it)i +(con)m(v)m(enien)m(t)h(to)g(run)d(all)i(of)g(their)g(other)f(pro)s +(cesses)h(on)f(that)h(system)g(as)g(w)m(ell,)i(includ-)150 +3911 y(ing)35 b(memory)g(and)g(CPU-in)m(tensiv)m(e)h(jobs.)54 +b(F)-8 b(or)36 b(example,)h(in)e(our)f(departmen)m(t,)j(w)m(e)f(ha)m(v) +m(e)g(allo)s(cated)150 4020 y(and)42 b(con\014gured)g(sev)m(eral)i(m)m +(ulti-pro)s(cessor)g(serv)m(ers)f(to)g(handle)f(suc)m(h)h(demanding)f +(CPU/memory)150 4130 y(applications,)g(but)c(these)h(w)m(ere)g +(underutilized,)h(in)e(large)i(part)f(due)e(to)j(the)f(incon)m(v)m +(enience)h(of)f(not)150 4240 y(b)s(eing)g(able)g(to)h(read)f(mail)h(on) +f(those)h(mac)m(hines.)67 b(\(No)40 b(home)f(directories)h(w)m(ere)g +(lo)s(cated)g(on)f(these)150 4349 y(designated)34 b(CPU-serv)m(ers,)h +(since)f(w)m(e)g(did)e(not)i(w)m(an)m(t)g(NFS)g(service)g(for)f(users') +g(home)h(directories)g(to)150 4459 y(ha)m(v)m(e)k(to)f(comp)s(ete)g +(with)f(CPU-in)m(tensiv)m(e)i(jobs.)58 b(A)m(t)38 b(the)e(same)h(time,) +i(w)m(e)e(discouraged)g(users)e(from)150 4568 y(running)29 +b(demanding)g(applications)j(on)e(their)h(home)f(mac)m(hines.\))275 +4708 y(Man)m(y)37 b(di\013eren)m(t)h(solutions)g(ha)m(v)m(e)g(b)s(een)f +(prop)s(osed)e(to)j(allo)m(w)h(users)d(to)i(read)f(their)h(mail)g(on)f +(an)m(y)150 4817 y(host.)k(Ho)m(w)m(ev)m(er,)32 b(all)g(of)e(these)h +(solutions)g(fail)g(in)f(one)h(or)f(more)h(of)f(sev)m(eral)i(w)m(a)m +(ys:)225 4957 y Fs(\017)60 b Fu(they)31 b(in)m(tro)s(duce)f(new)g +(single)h(p)s(oin)m(ts)f(of)h(failure)225 5094 y Fs(\017)60 +b Fu(they)31 b(require)f(using)f(di\013eren)m(t)i(mail)g(transfer)f +(agen)m(ts)i(\(MT)-8 b(As\))31 b(or)g(user)f(agen)m(ts)h(\(UAs\))225 +5230 y Fs(\017)60 b Fu(they)29 b(do)g(not)g(solv)m(e)h(the)f(problem)f +(for)h(all)h(cases,)g(i.e.)41 b(the)29 b(solution)g(is)g(only)g +(partially)h(successful)330 5340 y(for)g(a)h(particular)g(en)m +(vironmen)m(t.)p eop +%%Page: 77 79 +77 78 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(77)275 366 y(W)-8 b(e)41 b(ha)m(v)m(e)h(designed)e(a)h(simple)g +(\014lesystem,)i(called)f(the)f Fq(Home-Link)g(File)g(System)p +Fu(,)j(to)d(pro)m(vide)150 476 y(the)33 b(abilit)m(y)i(to)f(deliv)m(er) +g(mail)g(to)g(users')e(home)h(directories,)i(without)f(mo)s +(di\014cation)f(to)h(mail-related)150 586 y(applications.)42 +b(W)-8 b(e)31 b(ha)m(v)m(e)h(endea)m(v)m(ored)f(to)g(mak)m(e)g(it)g(as) +f(stable)h(as)g(p)s(ossible.)40 b(Of)29 b(great)j(imp)s(ortance)e(to) +150 695 y(us)c(w)m(as)i(to)g(mak)m(e)g(sure)e(the)h(HLFS)g(daemon,)h(`) +p Fo(hlfsd)p Fu(')e(,)i(w)m(ould)f(not)g(hang)g(under)f(an)m(y)h +(circumstances,)150 805 y(and)34 b(w)m(ould)f(tak)m(e)j(the)f(next-b)s +(est)f(action)h(when)e(faced)i(with)f(problems.)51 b(Compared)34 +b(to)h(alternativ)m(e)150 914 y(metho)s(ds,)27 b Fq(Hlfsd)k +Fu(is)c(a)h(stable,)g(more)g(general)g(solution,)h(and)d(easier)i(to)g +(install/use.)41 b(In)27 b(fact,)i(in)e(some)150 1024 +y(w)m(a)m(ys,)k(w)m(e)g(ha)m(v)m(e)h(ev)m(en)f(managed)g(to)g(impro)m +(v)m(e)g(the)g(reliabilit)m(y)h(and)e(securit)m(y)h(of)f(mail)h +(service.)275 1169 y(Our)i(serv)m(er)i(implemen)m(ts)h(a)f(small)g +(\014lesystem)g(con)m(taining)i(a)e(sym)m(b)s(olic)g(link)g(to)h(a)f +(sub)s(directory)150 1279 y(of)c(the)f(in)m(v)m(oking)i(user's)e(home)g +(directory)-8 b(,)31 b(and)f(named)g(sym)m(b)s(olic)h(links)f(to)h +(users')f(mailb)s(o)m(x)h(\014les.)275 1423 y(The)f Fq(Hlfsd)k +Fu(serv)m(er)e(\014nds)d(out)i(the)g Fq(uid)j Fu(of)d(the)h(pro)s(cess) +e(that)i(is)f(accessing)i(its)e(moun)m(t)g(p)s(oin)m(t,)h(and)150 +1533 y(resolv)m(es)38 b(the)f(pathname)f(comp)s(onen)m(t)h(`)p +Fo(home)p Fu(')g(as)f(a)i(sym)m(b)s(olic)f(link)f(to)i(a)f(sub)s +(directory)f(within)g(the)150 1643 y(home)31 b(directory)g(giv)m(en)h +(b)m(y)f(the)g Fq(uid)t Fu('s)e(en)m(try)i(in)g(the)g(passw)m(ord)f +(\014le.)42 b(If)30 b(the)h Fq(gid)k Fu(of)c(the)g(pro)s(cess)f(that) +150 1752 y(attempts)g(to)g(access)g(a)f(mailb)s(o)m(x)h(\014le)f(is)f +(a)i(sp)s(ecial)f(one)g(\(called)i(HLFS)p 2629 1752 28 +4 v 32 w(GID\),)g(then)d(the)h(serv)m(er)g(maps)150 1862 +y(the)d(name)g(of)g(the)g Fq(next)i Fu(pathname)e(comp)s(onen)m(t)g +(directly)h(to)f(the)g(user's)g(mailb)s(o)m(x.)40 b(This)25 +b(is)h(necessary)150 1971 y(so)31 b(that)g(access)h(to)f(a)g(mailb)s(o) +m(x)g(\014le)g(b)m(y)f(users)g(other)h(than)f(the)h(o)m(wner)g(can)g +(succeed.)41 b(The)30 b(serv)m(er)h(has)150 2081 y(safet)m(y)26 +b(features)f(in)g(case)h(of)f(failures)g(suc)m(h)f(as)i(h)m(ung)e +(\014lesystems)h(or)g(home)g(directory)g(\014lesystems)g(that)150 +2191 y(are)31 b(inaccessible)h(or)e(full.)275 2335 y(On)47 +b(most)h(of)g(our)g(mac)m(hines,)53 b(mail)c(gets)g(deliv)m(ered)g(to)g +(the)f(directory)g(`)p Fo(/var/spool/mail)p Fu('.)150 +2445 y(Man)m(y)37 b(programs,)h(including)e(UAs,)j(dep)s(end)c(on)h +(that)h(path.)59 b Fq(Hlfsd)40 b Fu(creates)e(a)f(directory)g(`)p +Fo(/mail)p Fu(',)150 2555 y(and)g(moun)m(ts)h(itself)g(on)g(top)f(of)h +(that)g(directory)-8 b(.)64 b Fq(Hlfsd)41 b Fu(implemen)m(ts)d(the)g +(path)f(name)h(comp)s(onen)m(t)150 2664 y(called)46 b(`)p +Fo(home)p Fu(',)j(p)s(oin)m(ting)c(to)h(a)f(sub)s(directory)f(of)i(the) +f(user's)f(home)h(directory)-8 b(.)86 b(W)-8 b(e)47 b(ha)m(v)m(e)f +(made)150 2774 y(`)p Fo(/var/spool/mail)p Fu(')28 b(a)k(sym)m(b)s(olic) +g(link)g(to)g(`)p Fo(/mail/home)p Fu(',)e(so)i(that)g(accessing)i(`)p +Fo(/var/spool/mail)p Fu(')150 2883 y(actually)e(causes)f(access)g(to)h +(a)e(sub)s(directory)g(within)f(a)i(user's)f(home)g(directory)-8 +b(.)275 3028 y(The)19 b(follo)m(wing)j(table)f(sho)m(ws)f(an)g(example) +h(of)g(ho)m(w)f(resolving)h(the)g(pathname)f(`)p Fo(/var/mail/)p +Fq(NAME)5 b Fu(')p 3777 3046 42 81 v 150 3138 a(to)31 +b(`)p Fo(/users/ezk/.mailspool/)p Fq(NAME)5 b Fu(')26 +b(pro)s(ceeds.)150 3418 y Fm(Resolving)32 b(Comp)s(onen)m(t)123 +b(P)m(athname)31 b(left)g(to)g(resolv)m(e)123 b(V)-8 +b(alue)30 b(if)h(sym)m(b)s(olic)f(link)150 3588 y Fo(/)955 +b(var/mail/)p Fq(NAME)150 3758 y Fo(var/)811 b(mail/)p +Fq(NAME)150 3928 y Fo(mail@)763 b(/mail/home/)p Fq(NAME)293 +b Fo(mail@)28 b Fu(-)p Fo(>)j(/mail/home)150 4098 y(/)955 +b(mail/home/)p Fq(NAME)150 4269 y Fo(mail/)763 b(home/)p +Fq(NAME)150 4439 y Fo(home@)g Fq(NAME)821 b Fo(home@)18 +b Fu(-)p Fo(>)j(/users/ezk/.mailspool)150 4609 y(/)955 +b(users/ezk/.mailspool/)p Fq(NAME)150 4779 y Fo(users/)715 +b(ezk/.mailspool/)p Fq(NAME)150 4949 y Fo(ezk/)811 b(.mailspool/)p +Fq(NAME)150 5120 y Fo(.mailspool/)475 b Fq(NAME)150 5290 +y(NAME)p eop +%%Page: 78 80 +78 79 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(78)150 366 y Ft(9.2)68 b(Bac)l(kground)45 b(to)g(Mail)g(Deliv)l(ery) +275 564 y Fu(This)23 b(section)j(pro)m(vides)e(an)g(in-depth)g +(discussion)g(of)g(wh)m(y)g(a)m(v)-5 b(ailable)27 b(metho)s(ds)d(for)g +(deliv)m(ering)h(mail)150 674 y(to)31 b(home)g(directories)g(are)g(not) +f(as)h(go)s(o)s(d)f(as)h(the)f(one)h(used)f(b)m(y)g Fq(Hlfsd)p +Fu(.)150 909 y Fk(9.2.1)63 b(Single-Host)42 b(Mail)f(Sp)s(o)s(ol)i +(Directory)275 1107 y Fu(The)37 b(most)g(common)h(metho)s(d)f(for)h +(mail)g(deliv)m(ery)g(is)g(for)f(mail)h(to)g(b)s(e)f(app)s(ended)f(to)i +(a)g(mailb)s(o)m(x)150 1216 y(\014le)30 b(in)g(a)h(standard)e(sp)s(o)s +(ol)h(directory)h(on)f(the)h(designated)f(\\mail)i(home")f(mac)m(hine)g +(of)f(the)g(user.)40 b(The)150 1326 y(greatest)f(adv)-5 +b(an)m(tage)40 b(of)e(this)f(metho)s(d)g(is)h(that)g(it)g(is)g(the)g +(default)f(metho)s(d)h(most)f(v)m(endors)h(pro)m(vide)150 +1436 y(with)32 b(their)g(systems,)g(th)m(us)g(v)m(ery)g(little)i(\(if)e +(an)m(y\))h(con\014guration)f(is)g(required)f(on)h(the)g(SA's)g(part.) +45 b(All)150 1545 y(they)31 b(need)f(to)h(set)g(up)f(are)h(mail)g +(aliases)h(directing)f(mail)g(to)h(the)e(host)h(on)f(whic)m(h)h(the)f +(user's)g(mailb)s(o)m(x)150 1655 y(\014le)40 b(is)f(assigned.)68 +b(\(Otherwise,)42 b(mail)e(is)g(deliv)m(ered)g(lo)s(cally)-8 +b(,)44 b(and)39 b(users)f(\014nd)g(mailb)s(o)m(xes)i(on)g(man)m(y)150 +1764 y(mac)m(hines.\))275 1904 y(As)31 b(users)f(b)s(ecome)h(more)h +(sophisticated,)g(and)f(aided)g(b)m(y)g(windo)m(wing)f(systems,)i(they) +f(\014nd)f(them-)150 2014 y(selv)m(es)e(logging)g(in)f(on)f(m)m +(ultiple)i(hosts)f(at)g(once,)h(p)s(erforming)e(sev)m(eral)i(tasks)f +(concurren)m(tly)-8 b(.)41 b(They)26 b(ask)150 2123 y(to)36 +b(b)s(e)f(able)h(to)h(read)e(their)h(mail)g(on)f(an)m(y)h(host)g(on)f +(the)h(net)m(w)m(ork,)i(not)e(just)f(the)h(one)f(designated)i(as)150 +2233 y(their)30 b(\\mail)i(home".)150 2468 y Fk(9.2.2)63 +b(Cen)m(tralized)39 b(Mail)j(Sp)s(o)s(ol)g(Directory)275 +2666 y Fu(A)34 b(p)s(opular)g(metho)s(d)g(for)g(pro)m(viding)h(mail)g +(readabilit)m(y)h(from)e(an)m(y)h(host)g(is)g(to)g(ha)m(v)m(e)h(all)f +(mail)h(de-)150 2775 y(liv)m(ered)d(to)g(a)g(mail)g(sp)s(o)s(ol)f +(directory)g(on)h(a)f(designated)h(\\mail-serv)m(er")i(whic)m(h)d(is)g +(exp)s(orted)g(via)h(NFS)150 2885 y(to)h(all)h(of)f(the)g(hosts)g(on)f +(the)h(net)m(w)m(ork.)52 b(Con\014guring)32 b(suc)m(h)i(a)g(system)g +(is)g(relativ)m(ely)i(easy)-8 b(.)52 b(On)33 b(most)150 +2994 y(systems,)40 b(the)e(bulk)g(of)g(the)g(w)m(ork)g(is)g(a)h +(one-time)g(addition)f(to)h(one)f(or)g(t)m(w)m(o)i(con\014guration)e +(\014les)g(in)150 3104 y(`)p Fo(/etc)p Fu('.)j(The)30 +b(\014le-serv)m(er's)i(sp)s(o)s(ol)e(directory)i(is)e(then)h(hard-moun) +m(ted)f(across)h(ev)m(ery)h(mac)m(hine)f(on)g(the)150 +3214 y(lo)s(cal)c(net)m(w)m(ork.)40 b(In)25 b(small)i(en)m(vironmen)m +(ts)f(with)g(only)g(a)g(handful)e(of)i(hosts)g(this)g(can)g(b)s(e)f(an) +h(acceptable)150 3323 y(solution.)47 b(In)31 b(our)h(departmen)m(t,)h +(with)e(a)i(couple)g(of)f(h)m(undred)e(activ)m(e)k(hosts)e(and)g +(thousands)f(of)h(mail)150 3433 y(messages)25 b(pro)s(cessed)e(daily)-8 +b(,)26 b(this)e(w)m(as)g(deemed)g(completely)h(unacceptable,)i(as)d(it) +g(in)m(tro)s(duced)g(sev)m(eral)150 3542 y(t)m(yp)s(es)30 +b(of)h(problems:)150 3710 y Fm(Scalabilit)m(y)h(and)e(P)m(erformance) +630 3819 y Fu(As)e(more)g(and)g(more)g(mac)m(hines)h(get)g(added)e(to)i +(the)f(net)m(w)m(ork,)i(more)e(mail)h(tra\016c)f(has)g(to)630 +3929 y(go)j(o)m(v)m(er)g(NFS)f(to)h(and)f(from)f(the)h(mail-serv)m(er.) +42 b(Users)30 b(lik)m(e)i(to)e(run)f(mail-w)m(atc)m(hers,)k(and)630 +4039 y(read)38 b(their)f(mail)h(often.)63 b(The)37 b(stress)h(on)f(the) +h(shared)f(infrastructure)g(increases)h(with)630 4148 +y(ev)m(ery)f(user)f(and)g(host)g(added;)j(loads)e(on)f(the)h(mail)g +(serv)m(er)f(w)m(ould)g(most)h(certainly)h(b)s(e)630 +4258 y(high)25 b(since)g(all)h(mail)g(deliv)m(ery)g(go)s(es)g(through)f +(that)g(one)h(mac)m(hine.)2935 4225 y Fp(1)3012 4258 +y Fu(This)e(leads)i(to)g(lo)m(w)m(er)630 4367 y(reliabilit)m(y)37 +b(and)e(p)s(erformance.)54 b(T)-8 b(o)35 b(reduce)g(the)h(n)m(um)m(b)s +(er)d(of)j(concurren)m(t)f(connections)630 4477 y(b)s(et)m(w)m(een)f +(clien)m(ts)h(and)d(the)i(serv)m(er)f(host,)i(some)e(SAs)g(ha)m(v)m(e)i +(resorted)e(to)h(automoun)m(ting)630 4586 y(the)26 b(mail-sp)s(o)s(ol)g +(directory)-8 b(.)40 b(But)26 b(this)g(solution)g(only)g(mak)m(es)g +(things)g(w)m(orse:)39 b(since)26 b(users)630 4696 y(often)i(run)f +(mail)i(w)m(atc)m(hers,)h(and)d(man)m(y)h(p)s(opular)f(applications)i +(suc)m(h)f(as)g(`)p Fo(trn)p Fu(',)h(`)p Fo(emacs)p Fu(',)630 +4806 y(`)p Fo(csh)p Fu(')24 b(or)h(`)p Fo(ksh)p Fu(')f(c)m(hec)m(k)i(p) +s(erio)s(dically)f(for)g(new)f(mail,)j(the)e(automoun)m(ted)g +(directory)g(w)m(ould)p 150 4912 1200 4 v 192 4978 a +Fp(1)295 5011 y Fu(Deliv)m(ery)d(via)f(NFS-moun)m(ted)f(\014lesystems)h +(ma)m(y)f(require)g(usage)h(of)g(`)p Fo(rpc.lockd)p Fu(')d(and)i(`)p +Fo(rpc.statd)p Fu(')p 3765 5031 42 98 v 275 5121 a(to)37 +b(pro)m(vide)g(distributed)f(\014le-lo)s(c)m(king,)41 +b(b)s(oth)36 b(of)i(whic)m(h)e(are)i(widely)f(regarded)g(as)g(unstable) +g(and)275 5230 y(unreliable.)71 b(F)-8 b(urthermore,)43 +b(this)e(will)g(degrade)g(p)s(erformance,)h(as)f(lo)s(cal)h(pro)s +(cesses)e(as)h(w)m(ell)h(as)275 5340 y(remote)31 b(`)p +Fo(nfsd)p Fu(')f(pro)s(cesses)g(are)g(k)m(ept)i(busy)-8 +b(.)p eop +%%Page: 79 81 +79 80 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(79)630 366 y(b)s(e)40 b(e\013ectiv)m(ely)k(p)s(ermanen)m(tly)d(moun)m +(ted.)72 b(If)41 b(it)g(gets)h(unmoun)m(ted)e(automatically)k(b)m(y)630 +476 y(the)31 b(automoun)m(ter)h(program,)f(it)g(is)g(most)g(lik)m(ely)h +(to)g(get)g(moun)m(ted)f(shortly)g(afterw)m(ards,)630 +586 y(consuming)42 b(more)g(I/O)g(resources)g(b)m(y)f(the)h(constan)m +(t)i(cycle)f(of)f(moun)m(t)g(and)f(umoun)m(t)630 695 +y(calls.)150 845 y Fm(Reliabilit)m(y)630 975 y Fu(The)24 +b(mail-serv)m(er)h(host)g(and)e(its)i(net)m(w)m(ork)g(connectivit)m(y)h +(m)m(ust)f(b)s(e)e(v)m(ery)i(reliable.)40 b(W)-8 b(orse,)630 +1085 y(since)24 b(the)g(sp)s(o)s(ol)f(directory)i(has)e(to)i(b)s(e)e +(hard-moun)m(ted,)2569 1052 y Fp(2)2631 1085 y Fu(man)m(y)h(pro)s +(cesses)f(whic)m(h)h(access)630 1195 y(the)g(sp)s(o)s(ol)e(directory)i +(\(v)-5 b(arious)24 b(shells,)h(`)p Fo(login)p Fu(',)f(`)p +Fo(emacs)p Fu(',)g(etc.\))40 b(w)m(ould)23 b(b)s(e)g(h)m(ung)g(as)g +(long)630 1304 y(as)35 b(connectivit)m(y)i(to)f(the)e(mail-serv)m(er)j +(is)d(sev)m(ered.)55 b(T)-8 b(o)35 b(impro)m(v)m(e)h(reliabilit)m(y)-8 +b(,)38 b(SAs)c(ma)m(y)630 1414 y(c)m(ho)s(ose)40 b(to)g(bac)m(kup)f +(the)g(mail-serv)m(er's)h(sp)s(o)s(ol)f(partition)h(sev)m(eral)g(times) +g(a)f(da)m(y)-8 b(.)68 b(This)630 1523 y(ma)m(y)37 b(mak)m(e)h(things)e +(w)m(orse)h(since)g(reading)f(or)h(deliv)m(ering)g(mail)h(while)e(bac)m +(kups)g(are)h(in)630 1633 y(progress)g(ma)m(y)h(cause)g(bac)m(kups)f +(to)i(b)s(e)d(inconsisten)m(t;)43 b(more)37 b(bac)m(kups)g(consume)h +(more)630 1743 y(bac)m(kup-media)31 b(resources,)f(and)g(increase)h +(the)g(load)g(on)f(the)h(mail-serv)m(er)g(host.)150 1953 +y Fk(9.2.3)63 b(Distributed)41 b(Mail)g(Sp)s(o)s(ol)i(Service)275 +2141 y Fu(Despite)32 b(the)f(existence)h(of)f(a)g(few)g(systems)g(that) +g(supp)s(ort)e(deliv)m(ery)j(to)f(users')g(home)g(directories,)150 +2251 y(mail)25 b(deliv)m(ery)h(to)f(home)g(directories)g(hasn't)g +(caugh)m(t)g(on.)39 b(W)-8 b(e)26 b(b)s(eliev)m(e)g(the)f(main)f +(reason)h(is)g(that)g(there)150 2360 y(are)35 b(to)s(o)g(man)m(y)g +(programs)f(that)h(\\kno)m(w")g(where)f(mailb)s(o)m(x)h(\014les)g +(reside.)53 b(Besides)35 b(the)f(ob)m(vious)h(\(the)150 +2470 y(deliv)m(ery)40 b(program)f(`)p Fo(/bin/mail)p +Fu(')f(and)h(mail)h(readers)f(lik)m(e)i(`)p Fo(/usr/ucb/Mail)p +Fu(',)e(`)p Fo(mush)p Fu(',)i(`)p Fo(mm)p Fu(',)h(etc.\),)150 +2579 y(other)e(programs)f(that)h(kno)m(w)f(mailb)s(o)m(x)h(lo)s(cation) +h(are)f(login,)j(from,)f(almost)e(ev)m(ery)g(shell,)j(`)p +Fo(xbiff)p Fu(',)150 2689 y(`)p Fo(xmailbox)p Fu(',)25 +b(and)g(ev)m(en)h(some)g(programs)f(not)h(directly)g(related)h(to)f +(mail,)h(suc)m(h)f(as)g(`)p Fo(emacs)p Fu(')e(and)h(`)p +Fo(trn)p Fu('.)150 2798 y(Although)39 b(some)h(of)f(these)h(programs)f +(can)g(b)s(e)g(con\014gured)f(to)i(lo)s(ok)g(in)e(di\013eren)m(t)i +(directories)g(with)150 2908 y(the)c(use)g(of)h(en)m(vironmen)m(t)f(v) +-5 b(ariables)37 b(and)f(other)g(resources,)i(man)m(y)f(of)f(them)g +(cannot.)59 b(The)36 b(o)m(v)m(erall)150 3018 y(p)s(orting)30 +b(w)m(ork)g(is)h(signi\014can)m(t.)275 3148 y(Other)25 +b(metho)s(ds)g(that)h(ha)m(v)m(e)h(y)m(et)g(to)g(catc)m(h)g(on)f +(require)f(the)h(use)g(of)g(a)g(sp)s(ecial)g(mail-reading)h(serv)m(er,) +150 3257 y(suc)m(h)37 b(as)h(IMAP)g(or)g(POP)-8 b(.)37 +b(The)h(main)f(disadv)-5 b(an)m(tage)39 b(of)f(these)g(systems)g(is)g +(that)g(UAs)g(need)f(to)i(b)s(e)150 3367 y(mo)s(di\014ed)23 +b(to)j(use)e(these)h(services)g(|)f(a)h(long)g(and)f(in)m(v)m(olv)m(ed) +i(task.)40 b(That)24 b(is)h(wh)m(y)f(they)h(are)f(not)h(p)s(opular)150 +3476 y(at)31 b(this)f(time.)275 3606 y(Sev)m(eral)36 +b(other)h(ideas)f(ha)m(v)m(e)h(b)s(een)e(prop)s(osed)g(and)g(ev)m(en)i +(used)e(in)h(v)-5 b(arious)36 b(en)m(vironmen)m(ts.)57 +b(None)150 3716 y(of)35 b(them)h(is)f(robust.)54 b(They)35 +b(are)g(mostly)h(v)m(ery)g(sp)s(ecialized,)i(in\015exible,)e(and)f(do)g +(not)h(extend)f(to)h(the)150 3825 y(general)31 b(case.)42 +b(Some)31 b(of)f(the)h(ideas)f(are)h(plain)g(bad,)f(p)s(oten)m(tially)i +(leading)f(to)g(lost)g(or)f(corrupt)g(mail:)150 3976 +y Fm(automoun)m(ters)630 4085 y Fu(Using)e(an)g(automoun)m(ter)h(suc)m +(h)e(as)i Fq(Amd)h Fu(to)f(pro)m(vide)f(a)h(set)f(of)g(sym)m(b)s(olic)h +(links)e(from)h(the)630 4195 y(normal)j(sp)s(o)s(ol)g(directory)h(to)h +(user)d(home)i(directories)g(is)g(not)g(su\016cien)m(t.)44 +b(UAs)32 b(rename,)630 4304 y(unlink,)k(and)g(recreate)h(the)f(mailb)s +(o)m(x)h(as)f(a)g(regular)g(\014le,)h(therefore)g(it)f(m)m(ust)g(b)s(e) +f(a)h(real)630 4414 y(\014le,)c(not)g(a)g(sym)m(b)s(olic)g(link.)43 +b(F)-8 b(urthermore,)32 b(it)g(m)m(ust)g(reside)f(in)g(a)h(real)g +(directory)g(whic)m(h)630 4524 y(is)i(writable)g(b)m(y)g(the)h(UAs)f +(and)f(MT)-8 b(As.)52 b(This)33 b(metho)s(d)h(ma)m(y)h(also)g(require)e +(p)s(opulating)630 4633 y(`)p Fo(/var/spool/mail)p Fu(')41 +b(with)j(sym)m(b)s(olic)h(links)f(and)g(making)h(sure)e(they)i(are)g +(up)s(dated.)630 4743 y(Making)29 b Fq(Amd)i Fu(manage)f(that)e +(directory)h(directly)g(fails,)h(since)e(man)m(y)g(v)-5 +b(arious)29 b(lo)s(c)m(k)g(\014les)630 4852 y(need)45 +b(to)h(b)s(e)f(managed)h(as)g(w)m(ell.)87 b(Also,)50 +b Fq(Amd)e Fu(do)s(es)d(not)h(pro)m(vide)f(all)i(of)e(the)h(NFS)630 +4962 y(op)s(erations)32 b(whic)m(h)f(are)h(required)e(to)i(write)g +(mail)g(suc)m(h)f(as)h(write,)g(create,)h(remo)m(v)m(e,)h(and)630 +5072 y(unlink.)p 150 5131 1200 4 v 192 5197 a Fp(2)275 +5230 y Fu(No)h(SA)g(in)g(their)g(righ)m(t)h(minds)e(w)m(ould)h +(soft-moun)m(t)h(read/write)g(partitions)g(|)f(the)g(c)m(hances)h(for) +275 5340 y(data)31 b(loss)f(are)h(to)s(o)g(great.)p eop +%%Page: 80 82 +80 81 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(80)150 366 y Fo($MAIL)630 501 y Fu(Setting)37 b(this)e(v)-5 +b(ariable)37 b(to)f(an)g(automoun)m(ted)g(directory)h(p)s(oin)m(ting)f +(to)g(the)g(user's)f(mail)630 611 y(sp)s(o)s(ol)41 b(host)h(only)g +(solv)m(es)h(the)g(problem)e(for)h(those)g(programs)f(whic)m(h)h(kno)m +(w)g(and)f(use)630 721 y Fo($MAIL)p Fu(.)51 b(Man)m(y)35 +b(programs)f(don't,)i(therefore)e(this)h(solution)g(is)f(partial)h(and) +f(of)g(limited)630 830 y(\015exibilit)m(y)-8 b(.)40 b(Also,)26 +b(it)e(requires)f(the)h(SAs)f(or)h(the)g(users)f(to)h(set)g(it)h +(themselv)m(es)g(|)e(an)h(added)630 940 y(lev)m(el)32 +b(of)f(incon)m(v)m(enience)h(and)e(p)s(ossible)g(failures.)150 +1100 y Fo(/bin/mail)630 1210 y Fu(Using)i(a)g(di\013eren)m(t)g(mail)g +(deliv)m(ery)g(agen)m(t)i(could)d(b)s(e)g(the)h(solution.)45 +b(One)31 b(suc)m(h)g(example)630 1319 y(is)42 b(`)p Fo(hdmail)p +Fu('.)73 b(Ho)m(w)m(ev)m(er,)46 b(`)p Fo(hdmail)p Fu(')41 +b(still)h(requires)f(mo)s(difying)g(all)i(UAs,)i(the)c(MT)-8 +b(A's)630 1429 y(con\014guration,)32 b(installing)g(new)f(daemons,)g +(and)f(c)m(hanging)i(login)g(scripts.)43 b(This)30 b(mak)m(es)630 +1539 y(the)e(system)f(less)h(upgradable)g(or)f(compatible)i(with)e +(others,)i(and)e(adds)f(one)i(more)g(com-)630 1648 y(plicated)35 +b(system)f(for)f(SAs)g(to)i(deal)f(with.)51 b(It)33 b(is)h(not)g(a)g +(complete)h(solution)g(b)s(ecause)e(it)630 1758 y(still)27 +b(requires)e(eac)m(h)i(user)e(ha)m(v)m(e)i(their)f Fo($MAIL)e +Fu(v)-5 b(ariable)27 b(setup)e(correctly)-8 b(,)29 b(and)c(that)h(ev)m +(ery)630 1867 y(program)k(use)g(this)g(v)-5 b(ariable.)150 +2093 y Fk(9.2.4)63 b(Wh)m(y)40 b(Deliv)m(er)g(In)m(to)h(the)g(Home)g +(Directory?)275 2287 y Fu(There)34 b(are)i(sev)m(eral)h(ma)5 +b(jor)35 b(reasons)h(wh)m(y)f(SAs)g(migh)m(t)h(w)m(an)m(t)g(to)g(deliv) +m(er)g(mail)g(directly)g(in)m(to)h(the)150 2397 y(users')30 +b(home)g(directories:)150 2557 y Fm(Lo)s(cation)630 2692 +y Fu(Man)m(y)21 b(mail)g(readers)f(need)g(to)h(mo)m(v)m(e)h(mail)f +(from)f(the)g(sp)s(o)s(ol)g(directory)h(to)g(the)f(user's)g(home)630 +2802 y(directory)-8 b(.)45 b(It)31 b(sp)s(eeds)f(up)h(this)g(op)s +(eration)h(if)f(the)h(t)m(w)m(o)g(are)g(on)f(the)h(same)f +(\014lesystem.)44 b(If)630 2912 y(for)30 b(some)g(reason)g(the)h +(user's)e(home)h(directory)h(is)f(inaccessible,)i(it)e(isn't)g(that)h +(useful)e(to)630 3021 y(b)s(e)d(able)h(to)g(read)g(mail,)h(since)f +(there)g(is)g(no)f(place)i(to)f(mo)m(v)m(e)h(it)f(to.)40 +b(In)26 b(some)h(cases,)i(trying)630 3131 y(to)i(mo)m(v)m(e)h(mail)f +(to)g(a)g(non-existen)m(t)h(or)e(h)m(ung)g(\014lesystem)g(ma)m(y)h +(result)g(in)f(mail)h(loss.)150 3291 y Fm(Distribution)630 +3401 y Fu(Ha)m(ving)25 b(all)g(mail)g(sp)s(o)s(ol)e(directories)i +(spread)e(among)i(the)f(man)m(y)g(more)g(\014lesystems)g(mini-)630 +3510 y(mizes)h(the)g(c)m(hances)h(that)f(complete)h(en)m(vironmen)m(ts) +f(will)g(grind)f(to)h(a)g(halt)h(when)d(a)i(single)630 +3620 y(serv)m(er)34 b(is)f(do)m(wn.)49 b(It)34 b(do)s(es)f(increase)h +(the)f(c)m(hance)i(that)f(there)f(will)h(b)s(e)f(someone)h(who)f(is)630 +3730 y(not)23 b(able)g(to)g(read)g(their)f(mail)i(when)d(a)i(mac)m +(hine)h(is)e(do)m(wn,)i(but)e(that)h(is)g(usually)f(preferred)630 +3839 y(to)30 b(ha)m(ving)f(no)g(one)g(b)s(e)f(able)i(to)g(read)e(their) +h(mail)h(b)s(ecause)f(a)g(cen)m(tralized)i(mail)f(serv)m(er)f(is)630 +3949 y(do)m(wn.)38 b(The)25 b(problem)f(of)g(losing)i(some)f(mail)g +(due)f(to)i(the)f(\(presumably\))f(higher)g(c)m(hances)630 +4058 y(that)31 b(a)g(user's)f(mac)m(hine)h(is)f(do)m(wn)g(is)g +(minimized)h(in)f(HLFS.)150 4219 y Fm(Securit)m(y)630 +4354 y Fu(Deliv)m(ering)35 b(mail)e(to)g(users')f(home)h(directories)g +(has)g(another)f(adv)-5 b(an)m(tage)35 b(|)d(enhanced)630 +4463 y(securit)m(y)43 b(and)e(priv)-5 b(acy)d(.)76 b(Since)42 +b(a)g(shared)f(system)h(mail)h(sp)s(o)s(ol)e(directory)h(has)g(to)h(b)s +(e)630 4573 y(w)m(orld-readable)28 b(and)f(searc)m(hable,)i(an)m(y)f +(user)e(can)i(see)g(whether)f(other)g(users)g(ha)m(v)m(e)h(mail,)630 +4682 y(when)g(they)h(last)g(receiv)m(ed)h(new)e(mail,)i(or)f(when)e +(they)i(last)h(read)e(their)h(mail.)41 b(Programs)630 +4792 y(suc)m(h)26 b(as)h(`)p Fo(finger)p Fu(')f(displa)m(y)h(this)f +(information,)i(whic)m(h)f(some)g(consider)f(an)h(infringemen)m(t)630 +4902 y(of)e(priv)-5 b(acy)d(.)40 b(While)26 b(it)g(is)f(p)s(ossible)f +(to)i(disable)g(this)f(feature)g(of)h(`)p Fo(finger)p +Fu(')e(so)h(that)h(remote)630 5011 y(users)36 b(cannot)h(see)g(a)g +(mailb)s(o)m(x)g(\014le's)g(status,)i(this)d(do)s(esn't)h(prev)m(en)m +(t)g(lo)s(cal)h(users)d(from)630 5121 y(getting)25 b(the)f +(information.)39 b(F)-8 b(urthermore,)25 b(there)f(are)g(more)g +(programs)f(whic)m(h)h(mak)m(e)g(use)630 5230 y(of)j(this)h +(information.)40 b(In)26 b(shared)h(en)m(vironmen)m(ts,)h(disabling)g +(suc)m(h)f(programs)g(has)g(to)h(b)s(e)630 5340 y(done)d(on)g(a)g +(system-wide)g(basis,)h(but)f(with)f(mail)i(deliv)m(ered)g(to)f(users') +g(home)g(directories,)p eop +%%Page: 81 83 +81 82 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(81)630 366 y(users)35 b(less)h(concerned)g(with)f(priv)-5 +b(acy)36 b(who)f(do)g(w)m(an)m(t)i(to)f(let)h(others)e(kno)m(w)h(when)f +(they)630 476 y(last)c(receiv)m(ed)h(or)e(read)h(mail)g(can)f(easily)i +(do)e(so)h(using)f(\014le)g(protection)i(bits.)275 647 +y(In)27 b(summary)-8 b(,)28 b(deliv)m(ering)h(mail)f(to)h(home)f +(directories)h(pro)m(vides)f(users)f(the)h(functionalit)m(y)h(sough)m +(t,)150 756 y(and)h(also)h(a)m(v)m(oids)h(most)f(of)f(the)h(problems)e +(just)h(discussed.)150 1033 y Ft(9.3)68 b(Using)46 b(Hlfsd)150 +1330 y Fk(9.3.1)63 b(Con)m(trolling)41 b(Hlfsd)275 1531 +y Fu(Muc)m(h)27 b(the)h(same)h(w)m(a)m(y)f Fq(Amd)j Fu(is)d(con)m +(trolled)h(b)m(y)f(`)p Fo(ctl-amd)p Fu(',)f(so)h(do)s(es)g +Fq(Hlfsd)j Fu(get)e(con)m(trolled)g(b)m(y)f(the)150 1640 +y(`)p Fo(ctl-hlfsd)p Fu(')g(script:)150 1811 y Fo(ctl-hlfsd)45 +b(start)630 1920 y Fu(Start)31 b(a)f(new)g Fq(Hlfsd)p +Fu(.)150 2087 y Fo(ctl-hlfsd)45 b(stop)630 2197 y Fu(Stop)30 +b(a)h(running)e Fq(Hlfsd)p Fu(.)150 2364 y Fo(ctl-hlfsd)45 +b(restart)630 2474 y Fu(Stop)c(a)h(running)d Fq(Hlfsd)p +Fu(,)44 b(w)m(ait)e(for)f(10)h(seconds,)i(and)d(then)g(start)h(a)f(new) +g(one.)74 b(It)41 b(is)630 2583 y(hop)s(ed)24 b(that)i(within)e(10)i +(seconds,)h(the)e(previously)g(running)e Fq(Hlfsd)29 +b Fu(terminate)d(prop)s(erly;)630 2693 y(otherwise,)31 +b(starting)g(a)g(second)f(one)h(could)f(cause)h(system)g(lo)s(c)m(kup.) +275 2864 y(F)-8 b(or)32 b(example,)h(on)e(our)g(systems,)i(w)m(e)f +(start)g Fq(Hlfsd)j Fu(within)c(`)p Fo(ctl-hlfsd)p Fu(')e(as)j(follo)m +(ws)h(on)f(Solaris)g(2)150 2973 y(systems:)390 3110 y +Fo(hlfsd)46 b(-a)i(/var/alt_mail)c(-x)j(all)g(-l)g(/var/log/hlfsd)d +(/mail/home)h(.mailspool)275 3252 y Fu(The)29 b(directory)h(`)p +Fo(/var/alt_mail)p Fu(')c(is)k(a)g(directory)g(in)g(the)f(ro)s(ot)h +(partition)h(where)e(alternate)i(mail)150 3361 y(will)g(b)s(e)e(deliv)m +(ered)j(in)m(to,)f(when)f(it)g(cannot)h(b)s(e)f(deliv)m(ered)h(in)m(to) +h(the)e(user's)g(home)g(directory)-8 b(.)275 3503 y(Normal)27 +b(mail)g(gets)h(deliv)m(ered)f(in)m(to)h(`)p Fo(/var/mail)p +Fu(',)d(but)h(on)g(our)h(systems,)g(that)g(is)g(a)g(sym)m(b)s(olic)g +(link)150 3613 y(to)38 b(`)p Fo(/mail/home)p Fu('.)61 +b(`)p Fo(/mail)p Fu(')36 b(is)i(managed)g(b)m(y)g Fq(Hlfsd)p +Fu(,)h(whic)m(h)f(creates)h(a)f(dynamic)f(symlink)g(named)150 +3722 y(`)p Fo(home)p Fu(',)48 b(p)s(oin)m(ting)d(to)g(the)g(sub)s +(directory)f(`)p Fo(.mailspool)p Fu(')e Fq(within)i Fu(the)h(accessing) +h(user's)e(home)h(di-)150 3832 y(rectory)-8 b(.)73 b(This)40 +b(results)h(in)f(mail)i(whic)m(h)e(normally)h(should)f(go)i(to)f(`)p +Fo(/var/mail/$USER)p Fu(',)f(to)i(go)f(to)150 3942 y(`)p +Fo($HOME/.mailspool/$USER)p Fu('.)275 4084 y Fq(Hlfsd)g +Fu(do)s(es)d(not)h(create)h(the)f(`)p Fo(/var/mail)p +Fu(')e(symlink.)65 b(This)38 b(needs)g(to)h(b)s(e)f(created)i(\(man)m +(ually\))150 4193 y(once)31 b(on)f(eac)m(h)i(host,)f(b)m(y)f(the)g +(system)h(administrators,)g(as)f(follo)m(ws:)390 4330 +y Fo(mv)47 b(/var/mail)e(/var/alt_mail)390 4433 y(ln)i(-s)g(/mail/home) +e(/var/mail)150 4673 y Fk(9.3.2)63 b(Hlfsd)42 b(Options)150 +4902 y Fo(-a)47 b Fq(alt)p 403 4902 28 4 v 34 w(dir)86 +b Fu(Alternate)45 b(directory)-8 b(.)80 b(The)43 b(name)h(of)f(the)h +(directory)g(to)g(whic)m(h)f(the)g(sym)m(b)s(olic)h(link)630 +5011 y(returned)27 b(b)m(y)i Fq(Hlfsd)i Fu(will)e(p)s(oin)m(t,)g(if)g +(it)g(cannot)g(access)h(the)e(home)h(directory)g(of)g(the)f(user.)630 +5121 y(This)i(defaults)h(to)g(`)p Fo(/var/hlfs)p Fu('.)40 +b(This)30 b(directory)h(will)g(b)s(e)g(created)g(if)g(it)g(do)s(esn't)g +(exist.)630 5230 y(It)23 b(is)g(exp)s(ected)h(that)g(either)f(users)f +(will)i(read)f(these)g(\014les,)i(or)e(the)g(system)h(administrators) +630 5340 y(will)31 b(run)e(a)h(script)h(to)g(resend)e(this)i(\\lost)g +(mail")h(to)f(its)g(o)m(wner.)p eop +%%Page: 82 84 +82 83 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(82)150 366 y Fo(-c)47 b Fq(cac)m(he-in)m(terv)-5 b(al)630 +476 y Fu(Cac)m(hing)26 b(in)m(terv)-5 b(al.)41 b Fq(Hlfsd)28 +b Fu(will)e(cac)m(he)i(the)e(v)-5 b(alidit)m(y)27 b(of)f(home)f +(directories)i(for)f(this)f(in)m(ter-)630 586 y(v)-5 +b(al,)32 b(in)f(seconds.)43 b(En)m(tries)31 b(whic)m(h)g(ha)m(v)m(e)h +(b)s(een)f(v)m(eri\014ed)g(within)g(the)g(last)h Fq(cac)m(he-in)m(terv) +-5 b(al)630 695 y Fu(seconds)31 b(will)h(not)g(b)s(e)f(v)m(eri\014ed)g +(again,)i(since)f(the)g(op)s(eration)g(could)f(b)s(e)g(exp)s(ensiv)m +(e,)i(and)630 805 y(the)e(en)m(tries)h(are)g(most)f(lik)m(ely)i(still)f +(v)-5 b(alid.)43 b(After)32 b(the)f(in)m(terv)-5 b(al)32 +b(has)f(expired,)g Fq(Hlfsd)k Fu(will)630 914 y(re-v)m(erify)40 +b(the)g(v)-5 b(alidit)m(y)41 b(of)f(the)g(user's)f(home)h(directory)-8 +b(,)43 b(and)c(reset)i(the)f(cac)m(he)h(time-)630 1024 +y(coun)m(ter.)g(The)30 b(default)h(v)-5 b(alue)31 b(for)f +Fq(cac)m(he-in)m(terv)-5 b(al)37 b Fu(is)30 b(300)i(seconds)e(\(5)h +(min)m(utes\).)150 1177 y Fo(-f)384 b Fu(F)-8 b(orce)44 +b(fast)f(startup.)78 b(This)41 b(option)j(tells)f Fq(Hlfsd)j +Fu(to)d(skip)g(startup-time)g(consistency)630 1287 y(c)m(hec)m(ks)32 +b(suc)m(h)f(as)h(existence)g(of)f(moun)m(t)g(directory)-8 +b(,)33 b(alternate)f(sp)s(o)s(ol)f(directory)-8 b(,)32 +b(symlink)630 1396 y(to)f(b)s(e)f(hidden)f(under)g(the)h(moun)m(t)h +(directory)-8 b(,)31 b(their)g(p)s(ermissions)e(and)g(v)-5 +b(alidit)m(y)d(.)150 1550 y Fo(-g)47 b Fq(group)109 b +Fu(Set)28 b(the)g(sp)s(ecial)h(group)f(HLFS)p 1728 1550 +28 4 v 32 w(GID)h(to)g Fq(group)p Fu(.)39 b(Programs)28 +b(suc)m(h)g(as)g(`)p Fo(/usr/ucb/from)p Fu(')630 1659 +y(or)g(`)p Fo(/usr/sbin/in.comsat)p Fu(',)23 b(whic)m(h)28 +b(access)h(the)f(mailb)s(o)m(xes)g(of)g(other)g(users,)g(m)m(ust)g(b)s +(e)630 1769 y(setgid)i(`)p Fo(HLFS_GID)p Fu(')d(to)j(w)m(ork)f(prop)s +(erly)-8 b(.)39 b(The)29 b(default)g(group)f(is)h(`)p +Fo(hlfs)p Fu('.)40 b(If)29 b(no)f(group)h(is)630 1878 +y(pro)m(vided,)h(and)g(there)h(is)f(no)g(group)g(`)p +Fo(hlfs)p Fu(',)g(this)g(feature)h(is)g(disabled.)150 +2032 y Fo(-h)384 b Fu(Help.)41 b(Prin)m(t)30 b(a)h(brief)f(help)g +(message,)i(and)d(exit.)150 2185 y Fo(-i)47 b Fq(reload-in)m(terv)-5 +b(al)630 2295 y Fu(Map-reloading)47 b(in)m(terv)-5 b(al.)87 +b(Eac)m(h)46 b Fq(reload-in)m(terv)-5 b(al)51 b Fu(seconds,)e +Fq(Hlfsd)g Fu(will)d(reload)g(the)630 2404 y(passw)m(ord)35 +b(map.)57 b Fq(Hlfsd)38 b Fu(needs)e(the)g(passw)m(ord)f(map)g(for)h +(the)g(UIDs)g(and)f(home)h(direc-)630 2514 y(tory)c(pathnames.)46 +b Fq(Hlfsd)35 b Fu(sc)m(hedules)d(a)h(`)p Fo(SIGALRM)p +Fu(')d(to)j(reload)g(the)f(passw)m(ord)f(maps.)46 b(A)630 +2623 y(`)p Fo(SIGHUP)p Fu(')24 b(sen)m(t)j(to)f Fq(Hlfsd)j +Fu(will)d(force)g(it)g(to)g(reload)h(the)f(maps)f(immediately)-8 +b(.)41 b(The)25 b(default)630 2733 y(v)-5 b(alue)31 b(for)f +Fq(reload-in)m(terv)-5 b(al)36 b Fu(is)30 b(900)i(seconds)e(\(15)i(min) +m(utes.\))150 2886 y Fo(-l)47 b Fq(log\014le)106 b Fu(Sp)s(ecify)20 +b(a)h(log)h(\014le)e(to)i(whic)m(h)e Fq(Hlfsd)k Fu(will)d(record)f(ev)m +(en)m(ts.)39 b(If)20 b Fq(log\014le)27 b Fu(is)21 b(the)g(string)f(`)p +Fo(syslog)p Fu(')630 2996 y(then)26 b(the)g(log)i(messages)f(will)g(b)s +(e)e(sen)m(t)i(to)g(the)g(system)f(log)i(daemon)e(b)m(y)g +Fm(syslog)p Fu(\(3\),)j(using)630 3105 y(the)i(`)p Fo(LOG_DAEMON)p +Fu(')d(facilit)m(y)-8 b(.)43 b(This)30 b(is)g(also)h(the)g(default.)150 +3259 y Fo(-n)384 b Fu(No)44 b(v)m(erify)-8 b(.)82 b Fq(Hlfsd)47 +b Fu(will)d(not)g(v)m(erify)g(the)g(v)-5 b(alidit)m(y)45 +b(of)f(the)g(sym)m(b)s(olic)g(link)f(it)i(will)f(b)s(e)630 +3368 y(returning,)38 b(or)f(that)g(the)h(user's)e(home)h(directory)g +(con)m(tains)h(su\016cien)m(t)g(disk-space)f(for)630 +3478 y(sp)s(o)s(oling.)56 b(This)35 b(can)h(sp)s(eed)f(up)g +Fq(Hlfsd)j Fu(at)f(the)e(cost)i(of)f(p)s(ossibly)f(returning)g(sym)m(b) +s(olic)630 3587 y(links)42 b(to)h(home)g(directories)g(whic)m(h)f(are)h +(not)g(curren)m(tly)f(accessible)i(or)e(are)h(full.)77 +b(By)630 3697 y(default,)42 b Fq(Hlfsd)g Fu(v)-5 b(alidates)40 +b(the)f(sym)m(b)s(olic-link)h(in)e(the)h(bac)m(kground.)67 +b(The)38 b Fo(-n)g Fu(option)630 3807 y(o)m(v)m(errides)31 +b(the)g(meaning)g(of)f(the)h Fo(-c)e Fu(option,)i(since)g(no)f(cac)m +(hing)i(is)f(necessary)-8 b(.)150 3960 y Fo(-o)47 b Fq(moun)m +(t-options)630 4069 y Fu(Moun)m(t)42 b(options)g(whic)m(h)f +Fq(Hlfsd)k Fu(will)d(use)f(to)i(moun)m(t)e(itself)i(on)e(top)h(of)g +Fq(dirname)p Fu(.)74 b(By)630 4179 y(default,)49 b Fq(moun)m(t-options) +g Fu(is)c(set)h(to)f(`)p Fo(ro)p Fu('.)85 b(If)44 b(the)h(system)g +(supp)s(orts)e(sym)m(b)s(olic-link)630 4289 y(cac)m(hing,)32 +b(default)f(options)f(are)h(set)g(to)g(`)p Fo(ro,nocache)p +Fu('.)150 4442 y Fo(-p)384 b Fu(Prin)m(t)29 b(PID.)g(Outputs)e(the)i +(pro)s(cess-id)f(of)h Fq(Hlfsd)j Fu(to)d(standard)f(output)g(where)g +(it)i(can)f(b)s(e)630 4551 y(sa)m(v)m(ed)i(in)m(to)h(a)f(\014le.)150 +4705 y Fo(-v)384 b Fu(V)-8 b(ersion.)41 b(Displa)m(ys)32 +b(v)m(ersion)f(information)f(to)h(standard)f(error.)150 +4858 y Fo(-x)47 b Fq(log-options)630 4968 y Fu(Sp)s(ecify)29 +b(run-time)g(logging)i(options.)41 b(The)29 b(options)h(are)g(a)f +(comma)i(separated)f(list)g(c)m(ho-)630 5077 y(sen)g(from:)40 +b(`)p Fo(fatal)p Fu(',)30 b(`)p Fo(error)p Fu(',)g(`)p +Fo(user)p Fu(',)g(`)p Fo(warn)p Fu(',)g(`)p Fo(info)p +Fu(',)g(`)p Fo(map)p Fu(',)g(`)p Fo(stats)p Fu(',)g(`)p +Fo(all)p Fu('.)150 5230 y Fo(-C)384 b Fu(F)-8 b(orce)38 +b Fq(Hlfsd)i Fu(to)e(run)d(on)i(systems)g(that)h(cannot)f(turn)f(o\013) +h(the)g(NFS)g(attribute-cac)m(he.)630 5340 y(Use)d(of)h(this)e(option)i +(on)f(those)g(systems)g(is)g(discouraged,)i(as)e(it)g(ma)m(y)h(result)f +(in)g(loss)g(or)p eop +%%Page: 83 85 +83 84 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Hlfsd)2836 +b(83)630 366 y(misdeliv)m(ery)40 b(of)f(mail.)68 b(The)39 +b(option)g(is)g(ignored)h(on)f(systems)g(that)h(can)f(turn)f(o\013)i +(the)630 476 y(attribute-cac)m(he.)150 635 y Fo(-D)47 +b Fq(log-options)630 745 y Fu(Select)30 b(from)f(a)g(v)-5 +b(ariet)m(y)31 b(of)e(debugging)g(options.)41 b(Pre\014xing)28 +b(an)h(option)h(with)f(the)g(string)630 855 y(`)p Fo(no)p +Fu(')d(rev)m(erses)h(the)f(e\013ect)i(of)e(that)h(option.)40 +b(Options)26 b(are)g(cum)m(ulativ)m(e.)41 b(The)26 b(most)h(useful)630 +964 y(option)33 b(is)g(`)p Fo(all)p Fu('.)49 b(Since)33 +b(this)g(option)g(is)g(only)g(used)f(for)h(debugging)g(other)g(options) +h(are)630 1074 y(not)h(do)s(cumen)m(ted)f(here.)52 b(A)34 +b(fuller)h(description)f(is)g(a)m(v)-5 b(ailable)37 b(in)d(the)g +(program)h(source.)630 1183 y(A)f(`)p Fo(SIGUSR1)p Fu(')f(sen)m(t)h(to) +h Fq(Hlfsd)i Fu(will)e(cause)f(it)h(to)g(dump)d(its)i(in)m(ternal)h +(passw)m(ord)e(map)h(to)630 1293 y(the)e(\014le)g(`)p +Fo(/usr/tmp/hlfsd.dump.XXXXX)o(X)p Fu(',)27 b(where)k(`)p +Fo(XXXXXX)p Fu(')g(will)h(b)s(e)f(replaced)i(b)m(y)f(a)630 +1403 y(random)e(string)g(generated)h(b)m(y)g Fm(mktemp)p +Fu(\(3\))g(or)f(\(the)h(more)g(secure\))g Fm(mkstemp)p +Fu(\(3\).)150 1562 y Fo(-P)47 b Fq(passw)m(ord-\014le)630 +1672 y Fu(Read)f(the)f(user-name,)50 b(user-id,)f(and)c(home)g +(directory)h(information)g(from)f(the)h(\014le)630 1781 +y Fq(passw)m(ord-\014le)p Fu(.)99 b(Normally)-8 b(,)56 +b Fq(Hlfsd)d Fu(will)d(use)g Fm(getp)m(w)m(en)m(t)p Fu(\(3\))j(to)e +(read)f(the)g(passw)m(ord)630 1891 y(database.)40 b(This)25 +b(option)i(allo)m(ws)g(y)m(ou)f(to)h(o)m(v)m(erride)f(the)h(default)f +(database,)i(and)d(is)h(useful)630 2000 y(if)j(y)m(ou)h(w)m(an)m(t)g +(to)h(map)e(users')f(mail)j(\014les)e(to)h(a)g(directory)g(other)f +(than)h(their)f(home)h(direc-)630 2110 y(tory)-8 b(.)40 +b(Only)25 b(the)g(username,)h(uid,)g(and)f(home-directory)h(\014elds)f +(of)g(the)h(\014le)f Fq(passw)m(ord-\014le)630 2220 y +Fu(are)32 b(read)f(and)g(c)m(hec)m(k)m(ed.)46 b(All)32 +b(other)g(\014elds)f(are)h(ignored.)44 b(The)31 b(\014le)h +Fq(passw)m(ord-\014le)k Fu(m)m(ust)630 2329 y(otherwise)29 +b(b)s(e)f(complian)m(t)i(with)e(Unix)h(V)-8 b(ersion)29 +b(7)g(colon-delimited)i(format)e Fm(passwd)p Fu(\(4\).)150 +2553 y Fk(9.3.3)63 b(Hlfsd)42 b(Files)275 2746 y Fu(The)29 +b(follo)m(wing)j(\014les)f(are)f(used)g(b)m(y)g Fq(Hlfsd)t +Fu(:)150 2905 y(`)p Fo(/hlfs)p Fu(')190 b(directory)22 +b(under)f(whic)m(h)g Fq(Hlfsd)k Fu(moun)m(ts)d(itself)h(and)e(manages)i +(the)f(sym)m(b)s(olic)g(link)g(`)p Fo(home)p Fu('.)150 +3065 y(`)p Fo(.hlfsdir)p Fu(')630 3174 y(default)k(sub-directory)g(in)f +(the)h(user's)f(home)h(directory)-8 b(,)28 b(to)f(whic)m(h)e(the)h(`)p +Fo(home)p Fu(')g(sym)m(b)s(olic)630 3284 y(link)k(returned)f(b)m(y)i +Fq(Hlfsd)i Fu(p)s(oin)m(ts.)150 3443 y(`)p Fo(/var/hlfs)p +Fu(')630 3553 y(directory)e(to)f(whic)m(h)g(`)p Fo(home)p +Fu(')f(sym)m(b)s(olic)i(link)f(returned)f(b)m(y)h Fq(Hlfsd)j +Fu(p)s(oin)m(ts)d(if)g(it)g(is)g(unable)630 3662 y(to)h(v)m(erify)g +(the)f(that)h(user's)f(home)h(directory)g(is)f(accessible.)275 +3822 y(F)-8 b(or)33 b(discussion)f(on)h(other)g(\014les)g(used)f(b)m(y) +h Fq(Hlfsd)p Fu(,)g(see)g(Section)h(10.11)h([lostaltmail],)h(page)e(86) +g(and)150 3931 y(Section)d(10.12)i([lostaltmail.conf-sample],)h(page)d +(86.)p eop +%%Page: 84 86 +84 85 bop 150 -116 a Fu(Chapter)30 b(10:)41 b(Assorted)31 +b(T)-8 b(o)s(ols)2409 b(84)150 366 y Fr(10)80 b(Assorted)52 +b(T)-13 b(o)t(ols)275 595 y Fu(The)20 b(follo)m(wing)j(are)e +(additional)i(utilities)f(and)f(scripts)g(included)f(with)h(am-utils,)j +(and)d(get)h(installed.)150 848 y Ft(10.1)68 b(am-eject)275 +1040 y Fu(A)31 b(shell)h(script)f(unmoun)m(ts)g(a)h(\015opp)m(y)f(or)g +(CD-R)m(OM)h(that)g(is)g(automoun)m(ted,)h(and)e(then)g(attempts)150 +1150 y(to)g(eject)h(the)e(remo)m(v)-5 b(able)32 b(device.)150 +1403 y Ft(10.2)68 b(amd.conf-sample)275 1595 y Fu(A)30 +b(sample)h Fq(Amd)i Fu(con\014guration)e(\014le.)40 b(See)31 +b(Chapter)f(6)h([Amd)f(Con\014guration)g(File],)i(page)f(46.)150 +1849 y Ft(10.3)68 b(amd2ldif)275 2040 y Fu(A)30 b(script)g(to)h(con)m +(v)m(ert)h Fq(Amd)i Fu(maps)c(to)h(LD)m(AP)g(input)e(\014les.)41 +b(Use)31 b(it)g(as)f(follo)m(ws:)390 2167 y Fo(amd2ldif)46 +b Fq(mapname)52 b(base)h Fo(<)48 b Fq(amd.map\014le)k +Fo(>)c Fq(map\014le.ldif)150 2421 y Ft(10.4)68 b(amd2sun)275 +2613 y Fu(A)30 b(script)g(to)h(con)m(v)m(ert)h Fq(Amd)i +Fu(maps)c(to)h(Sun)e(Automoun)m(ter)h(maps.)41 b(Use)30 +b(it)h(as)g(follo)m(ws)390 2740 y Fo(amd2sun)46 b(<)h +Fq(amd.map\014le)53 b Fo(>)47 b Fq(auto)p 1681 2740 28 +4 v 34 w(map\014le)150 2994 y Ft(10.5)68 b(ctl-amd)275 +3185 y Fu(A)30 b(script)g(to)h(start,)h(stop,)e(or)h(restart)g +Fq(Amd)p Fu(.)40 b(Use)30 b(it)h(as)g(follo)m(ws:)150 +3342 y Fo(ctl-amd)46 b(start)630 3452 y Fu(Start)31 b(a)f(new)g +Fq(Amd)k Fu(pro)s(cess.)150 3609 y Fo(ctl-amd)46 b(stop)630 +3719 y Fu(Stop)30 b(the)h(running)d Fq(Amd)p Fu(.)150 +3876 y Fo(ctl-amd)46 b(restart)630 3985 y Fu(Stop)32 +b(the)h(running)d Fq(Amd)36 b Fu(\(if)c(an)m(y\),)i(safely)f(w)m(ait)g +(for)g(it)f(to)h(terminate,)i(and)c(then)h(start)630 +4095 y(a)f(new)f(pro)s(cess)g(|)g(only)g(if)h(the)f(previous)g(one)h +(died)f(cleanly)-8 b(.)275 4252 y(See)30 b(Chapter)g(7)h([Run-time)f +(Administration],)h(page)g(55)h(for)e(more)g(details.)150 +4506 y Ft(10.6)68 b(ctl-hlfsd)275 4697 y Fu(A)36 b(script)g(for)g(con)m +(trolling)i Fq(Hlfsd)p Fu(,)f(m)m(uc)m(h)g(the)f(same)h(w)m(a)m(y)g(`)p +Fo(ctl-amd)p Fu(')d(con)m(trols)k Fq(Amd)p Fu(.)57 b(Use)37 +b(it)g(as)150 4807 y(follo)m(ws:)150 4964 y Fo(ctl-hlfsd)45 +b(start)630 5073 y Fu(Start)31 b(a)f(new)g Fq(Hlfsd)k +Fu(pro)s(cess.)150 5230 y Fo(ctl-hlfsd)45 b(stop)630 +5340 y Fu(Stop)30 b(the)h(running)d Fq(Hlfsd)p Fu(.)p +eop +%%Page: 85 87 +85 86 bop 150 -116 a Fu(Chapter)30 b(10:)41 b(Assorted)31 +b(T)-8 b(o)s(ols)2409 b(85)150 366 y Fo(ctl-hlfsd)45 +b(restart)630 476 y Fu(Stop)37 b(the)h(running)e Fq(Hlfsd)k +Fu(\(if)e(an)m(y\),)j(w)m(ait)d(for)f(10)i(seconds)e(for)h(it)g(to)g +(terminate,)j(and)630 586 y(then)30 b(start)h(a)g(new)f(pro)s(cess)g(|) +g(only)g(if)h(the)f(previous)g(one)h(died)f(cleanly)-8 +b(.)275 796 y(See)30 b(Chapter)g(9)h([Hlfsd],)f(page)h(76)h(for)e(more) +g(details.)150 1138 y Ft(10.7)68 b(expn)275 1365 y Fu(A)25 +b(script)h(to)g(expand)f(email)i(addresses)e(in)m(to)i(their)f(full)f +(name.)39 b(It)26 b(is)g(generally)h(useful)e(when)f(using)150 +1475 y(with)30 b(the)h(`)p Fo(lostaltmail)p Fu(')c(script,)k(but)f(is)g +(a)h(useful)e(to)s(ols)j(otherwise.)390 1637 y Fo($)47 +b(expn)g(-v)g(ezk@cs.columbia.edu)390 1741 y(ezk@cs.columbia.edu)c(->) +772 1845 y(ezk@shekel.mcl.cs.columb)o(ia.)o(edu)390 1949 +y(ezk@shekel.mcl.cs.columb)o(ia.e)o(du)f(->)772 2052 +y(Erez)k(Zadok)h(<"|)g(/usr/local/mh/lib/sloca)o(l)42 +b(-user)k(ezk)h(||)g(exit)g(75>)772 2156 y(Erez)f(Zadok)h(<\\ezk>)772 +2260 y(Erez)f(Zadok)h()150 +2602 y Ft(10.8)68 b(\014x-amd-map)275 2829 y Fu(Am-utils)27 +b(c)m(hanged)h(some)f(of)g(the)g(syn)m(tax)h(and)e(default)h(v)-5 +b(alues)28 b(of)f(some)g(v)-5 b(ariables.)40 b(F)-8 b(or)28 +b(example,)150 2939 y(the)33 b(default)g(v)-5 b(alue)33 +b(for)g(`)p Fo(${os})p Fu(')e(for)i(Solaris)g(2.x)g(\(ak)-5 +b(a)34 b(SunOS)d(5.x\))i(systems)g(used)f(to)h(b)s(e)f(`)p +Fo(sos5)p Fu(',)h(it)150 3048 y(is)d(no)m(w)h(more)f(automatically)k +(generated)d(from)f(`)p Fo(config.guess)p Fu(')d(and)j(its)h(v)-5 +b(alue)31 b(is)f(`)p Fo(sunos5)p Fu('.)275 3217 y(This)f(script)h(con)m +(v)m(erts)i(older)f Fq(Amd)i Fu(maps)d(to)h(new)f(ones.)41 +b(Use)31 b(it)f(as)h(follo)m(ws:)390 3379 y Fo(fix-amd-map)45 +b(<)i Fq(old.map)k Fo(>)c Fq(new.map)150 3722 y Ft(10.9)68 +b(\014xmoun)l(t)275 3948 y Fu(`)p Fo(fixmount)p Fu(')28 +b(is)i(a)g(v)-5 b(arian)m(t)31 b(of)f Fm(sho)m(wmoun)m(t)p +Fu(\(8\))h(that)g(can)f(delete)h(b)s(ogus)f(moun)m(t)g(en)m(tries)g(in) +g(remote)150 4058 y Fm(moun)m(td)p Fu(\(8\))i(daemons.)43 +b(This)31 b(is)g(useful)f(to)i(clean)m(up)g(otherwise)g(ev)m(er-accum)m +(ulating)i(\\junk".)43 b(Use)31 b(it)150 4168 y(for)f(example:)390 +4330 y Fo(fixmount)46 b(-r)h Fq(host)275 4499 y Fu(See)30 +b(the)h(online)f(man)m(ual)h(page)g(for)f(`)p Fo(fixmount)p +Fu(')f(for)h(more)h(details)g(of)g(its)f(usage.)150 4841 +y Ft(10.10)69 b(\014xrm)l(tab)275 5068 y Fu(A)37 b(script)h(to)h(in)m +(v)-5 b(alidate)39 b(`)p Fo(/etc/rmtab)p Fu(')d(en)m(tries)j(for)e +(hosts)h(named.)63 b(Also)38 b(restart)h(moun)m(td)e(for)150 +5177 y(c)m(hanges)31 b(to)g(tak)m(e)h(e\013ect.)43 b(Use)30 +b(it)h(for)f(example:)390 5340 y Fo(fixrmtab)46 b Fq(host1)55 +b(host2)h(...)p eop +%%Page: 86 88 +86 87 bop 150 -116 a Fu(Chapter)30 b(10:)41 b(Assorted)31 +b(T)-8 b(o)s(ols)2409 b(86)150 366 y Ft(10.11)69 b(lostaltmail)275 +561 y Fu(A)26 b(script)f(used)g(with)h Fq(Hlfsd)j Fu(to)e(resend)e(an)m +(y)h(\\lost")i(mail.)40 b Fq(Hlfsd)29 b Fu(redirects)d(mail)g(whic)m(h) +g(cannot)h(b)s(e)150 671 y(written)32 b(in)m(to)g(the)g(user's)e(home)i +(directory)g(to)g(an)g(alternate)h(directory)-8 b(.)45 +b(This)30 b(is)i(useful)e(to)j(con)m(tin)m(ue)150 781 +y(deliv)m(ering)g(mail,)f(ev)m(en)h(if)e(the)h(user's)f(\014le)h +(system)f(w)m(as)h(una)m(v)-5 b(ailable,)34 b(full,)e(or)f(o)m(v)m(er)i +(quota.)45 b(But,)33 b(the)150 890 y(mail)24 b(whic)m(h)f(gets)i(deliv) +m(ered)f(to)g(the)f(alternate)i(directory)f(needs)f(to)h(b)s(e)f(resen) +m(t)h(to)g(its)g(resp)s(ectiv)m(e)h(users.)150 1000 y(This)30 +b(is)g(what)g(the)h(`)p Fo(lostaltmail)p Fu(')d(script)i(do)s(es.)275 +1137 y(Use)g(it)h(as)g(follo)m(ws:)390 1268 y Fo(lostaltmail)275 +1405 y Fu(This)f(script)h(needs)g(a)g(con\014guration)h(\014le)f(`)p +Fo(lostaltmail.conf)p Fu(')c(set)32 b(up)e(with)h(the)g(righ)m(t)h +(param-)150 1514 y(eters)f(to)g(prop)s(erly)e(w)m(ork.)41 +b(See)31 b(Chapter)e(9)i([Hlfsd],)g(page)g(76)g(for)f(more)h(details.) +150 1778 y Ft(10.12)69 b(lostaltmail.conf-sample)275 +1973 y Fu(This)36 b(is)h(a)h(text)h(\014le)e(with)g(con\014guration)h +(parameters)f(needed)g(for)g(the)h(`)p Fo(lostaltmail)p +Fu(')d(script.)150 2082 y(The)24 b(script)h(includes)f(commen)m(ts)i +(explaining)f(eac)m(h)h(of)f(the)g(con\014guration)g(v)-5 +b(ariables.)39 b(See)25 b(it)g(for)g(more)150 2192 y(information.)41 +b(Also)31 b(see)g(Chapter)f(9)h([Hlfsd],)f(page)h(76)h(for)e(general)h +(information.)150 2455 y Ft(10.13)69 b(mk-amd-map)275 +2650 y Fu(This)35 b(program)g(con)m(v)m(erts)j(a)e(normal)g +Fq(Amd)j Fu(map)c(\014le)h(in)m(to)h(an)f(ndbm)e(database)j(with)e(the) +i(same)150 2760 y(pre\014x)29 b(as)i(the)f(named)g(\014le.)41 +b(Use)31 b(it)g(as)g(follo)m(ws:)390 2891 y Fo(mk-amd-map)45 +b Fq(mapname)150 3154 y Ft(10.14)69 b(pa)l(wd)275 3349 +y Fq(P)m(a)m(wd)27 b Fu(is)d(used)f(to)i(prin)m(t)f(the)g(curren)m(t)f +(w)m(orking)i(directory)-8 b(,)26 b(adjusted)d(to)i(re\015ect)f(prop)s +(er)f(paths)g(that)150 3459 y(can)30 b(b)s(e)g(reused)f(to)i(go)g +(through)f(the)g(automoun)m(ter)h(for)f(the)g(shortest)h(p)s(ossible)f +(path.)40 b(In)29 b(particular,)150 3568 y(the)37 b(path)f(prin)m(ted)f +(bac)m(k)j(do)s(es)e(not)g(include)g(an)m(y)h(of)f Fq(Amd)t +Fu('s)g(lo)s(cal)h(moun)m(t)g(p)s(oin)m(ts.)58 b(Using)37 +b(them)f(is)150 3678 y(unsafe,)29 b(b)s(ecause)f Fq(Amd)k +Fu(ma)m(y)d(unmoun)m(t)e(managed)i(\014le)g(systems)f(from)g(the)h +(moun)m(t)f(p)s(oin)m(ts,)h(and)f(th)m(us)150 3787 y(including)i(them)g +(in)g(paths)g(ma)m(y)h(not)g(alw)m(a)m(ys)h(\014nd)d(the)h(\014les)h +(within.)275 3924 y(Without)43 b(an)m(y)h(argumen)m(ts,)i +Fq(P)m(a)m(wd)h Fu(will)d(prin)m(t)e(the)i(automoun)m(ter)f(adjusted)g +(curren)m(t)g(w)m(orking)150 4034 y(directory)-8 b(.)41 +b(With)27 b(an)m(y)g(n)m(um)m(b)s(er)f(of)h(argumen)m(ts,)h(it)g(will)f +(prin)m(t)g(the)g(adjusted)f(path)h(of)g(eac)m(h)h(one)g(of)f(the)150 +4143 y(argumen)m(ts.)150 4407 y Ft(10.15)69 b(w)l(ait4amd)275 +4602 y Fu(A)35 b(script)g(to)i(w)m(ait)f(for)f Fq(Amd)k +Fu(to)d(start)g(on)f(a)h(particular)g(host)g(b)s(efore)f(p)s(erforming) +f(an)h(arbitrary)150 4711 y(command.)46 b(The)32 b(command)g(is)g +(executed)h(rep)s(eatedly)-8 b(,)34 b(with)e(1)g(second)g(in)m(terv)-5 +b(als)34 b(in)e(b)s(et)m(w)m(een.)46 b(Y)-8 b(ou)150 +4821 y(ma)m(y)32 b(in)m(terrupt)f(the)g(script)h(using)e(`)p +Fo(^C)p Fu(')i(\(or)f(whatev)m(er)h(k)m(eyb)s(oard)g(sequence)f(y)m +(our)h(terminal's)g(`)p Fo(intr)p Fu(')150 4931 y(function)e(is)g(b)s +(ound)f(to\).)275 5067 y(Examples:)150 5230 y Fo(wait4amd)46 +b(saturn)g(amq)h(-p)g(-h)g(saturn)630 5340 y Fu(When)30 +b Fq(Amd)j Fu(is)e(up)e(on)h(host)h(`)p Fo(saturn)p Fu(',)e(get)j(the)e +(pro)s(cess)g(ID)h(of)f(that)h(running)e Fq(Amd)p Fu(.)p +eop +%%Page: 87 89 +87 88 bop 150 -116 a Fu(Chapter)30 b(10:)41 b(Assorted)31 +b(T)-8 b(o)s(ols)2409 b(87)150 366 y Fo(wait4amd)46 b(pluto)g(rlogin)g +(pluto)630 476 y Fu(Remote)41 b(login)f(to)g(host)g(`)p +Fo(pluto)p Fu(')e(when)g Fq(Amd)43 b Fu(is)c(up)g(on)g(that)h(host.)68 +b(It)39 b(is)h(generally)630 586 y(necessary)h(to)g(w)m(ait)g(for)f +Fq(Amd)j Fu(to)e(prop)s(erly)e(start)i(and)e(initialize)k(on)d(a)h +(remote)g(host)630 695 y(b)s(efore)g(logging)i(in)d(to)i(it,)j(b)s +(ecause)c(otherwise)h(user)e(home)h(directories)h(ma)m(y)g(not)g(b)s(e) +630 805 y(accessible)32 b(across)f(the)g(net)m(w)m(ork.)150 +964 y Fo(wait4amd)46 b(pluto)630 1074 y Fu(A)37 b(short-hand)f(v)m +(ersion)i(of)f(the)g(previous)g(command,)h(since)g(the)f(most)g(useful) +g(reason)630 1183 y(for)30 b(this)g(script)g(is)g(to)h(login)g(to)f(a)h +(remote)g(host.)40 b(I)30 b(use)g(it)h(v)m(ery)f(often)g(when)g +(testing)h(out)630 1293 y(new)f(v)m(ersions)h(of)f Fq(Amd)p +Fu(,)g(and)g(need)g(to)h(reb)s(o)s(ot)f(h)m(ung)g(hosts.)150 +1550 y Ft(10.16)69 b(w)l(ait4amd2die)275 1743 y Fu(This)28 +b(script)i(is)f(used)g(in)m(ternally)h(b)m(y)g(`)p Fo(ctl-amd)p +Fu(')e(when)g(used)h(to)h(restart)g Fq(Amd)p Fu(.)40 +b(It)30 b(w)m(aits)g(for)g Fq(Amd)150 1853 y Fu(to)37 +b(terminate.)58 b(If)35 b(it)h(detected)h(that)g Fq(Amd)i +Fu(terminated)d(cleanly)-8 b(,)39 b(this)d(script)g(will)g(return)e(an) +i(exist)150 1962 y(status)31 b(of)f(zero.)42 b(Otherwise,)30 +b(it)h(will)g(return)e(a)i(non-zero)g(exit)g(status.)275 +2097 y(The)k(script)h(tests)h(for)f Fq(Amd)t Fu('s)f(existence)j(once)f +(ev)m(ery)g(5)f(seconds,)i(six)e(times,)i(for)e(a)h(total)h(of)e(30)150 +2206 y(seconds.)41 b(It)30 b(will)h(return)e(a)i(zero)g(exist)g(status) +g(as)g(so)s(on)f(as)g(it)h(detects)h(that)f Fq(Amd)i +Fu(dies.)150 2464 y Ft(10.17)69 b(wire-test)275 2656 +y Fu(A)38 b(simple)f(program)h(to)h(test)f(if)g(some)g(of)h(the)f(most) +g(basic)g(net)m(w)m(orking)h(functions)e(in)h(am-util's)150 +2766 y(library)c(`)p Fo(libamu)p Fu(')f(w)m(ork.)52 b(It)34 +b(also)h(tests)g(the)f(com)m(bination)i(of)e(NFS)g(proto)s(col)h(and)f +(v)m(ersion)g(n)m(um)m(b)s(er)150 2875 y(that)d(are)g(supp)s(orted)d +(from)i(the)h(curren)m(t)f(host,)h(to)g(a)f(remote)i(one.)275 +3010 y(F)-8 b(or)32 b(example,)h(in)e(this)h(test)g(a)g(mac)m(hine)h +(whic)m(h)e(only)h(supp)s(orts)e(NFS)h(V)-8 b(ersion)33 +b(2)f(is)f(con)m(tacting)k(a)150 3119 y(remote)e(host)f(that)h(can)g +(supp)s(ort)d(the)i(same)h(v)m(ersion,)g(but)f(using)f(b)s(oth)h(UDP)h +(and)e(TCP)-8 b(.)32 b(If)g(no)g(host)150 3229 y(name)e(is)h(sp)s +(eci\014ed,)f(`)p Fo(wire-test)p Fu(')e(will)j(try)f(`)p +Fo(localhost)p Fu('.)390 3358 y Fo($)47 b(wire-test)f(moisil)390 +3462 y(Network)g(name)g(is)i("mcl-lab-net.cs.columbi)o(a.ed)o(u")390 +3565 y(Network)e(number)g(is)h("128.59.13")390 3669 y(Network)f(name)g +(is)i("old-net.cs.columbia.ed)o(u")390 3773 y(Network)e(number)g(is)h +("128.59.16")390 3877 y(My)g(IP)g(address)f(is)h(0x7f000001.)390 +3980 y(NFS)g(Version)f(and)h(protocol)e(tests)i(to)g(host)f +("moisil"...)772 4084 y(testing)g(vers=2,)f(proto="udp")g(->)i(found)g +(version)f(2.)772 4188 y(testing)g(vers=3,)f(proto="udp")g(->)i +(failed!)772 4292 y(testing)f(vers=2,)f(proto="tcp")g(->)i(found)g +(version)f(2.)772 4396 y(testing)g(vers=3,)f(proto="tcp")g(->)i +(failed!)p eop +%%Page: 88 90 +88 89 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(88)150 366 y Fr(11)80 b(Examples)150 712 y Ft(11.1)68 +b(User)46 b(Filesystems)275 903 y Fu(With)32 b(more)h(than)f(one)g +(\014leserv)m(er,)i(the)e(directories)h(most)g(frequen)m(tly)f +(cross-moun)m(ted)h(are)f(those)150 1013 y(con)m(taining)43 +b(user)e(home)h(directories.)75 b(A)42 b(common)g(con)m(v)m(en)m(tion)i +(used)d(at)h(Imp)s(erial)f(College)j(is)d(to)150 1123 +y(moun)m(t)30 b(the)h(user)f(disks)f(under)g Fo(/home/)p +Fq(mac)m(hine)p Fu(.)275 1256 y(T)m(ypically)-8 b(,)32 +b(the)e(`)p Fo(/etc/fstab)p Fu(')e(\014le)j(con)m(tained)g(a)g(long)g +(list)g(of)g(en)m(tries)g(suc)m(h)f(as:)390 1383 y Fq(mac)m(hine)5 +b Fo(:/home/)p Fq(mac)m(hine)53 b Fo(/home/)p Fq(mac)m(hine)e +Fo(nfs)c(...)275 1516 y Fu(for)30 b(eac)m(h)h(\014leserv)m(er)g(on)f +(the)h(net)m(w)m(ork.)275 1649 y(There)e(are)i(n)m(umerous)e(problems)h +(with)g(this)g(system.)41 b(The)30 b(moun)m(t)g(list)h(can)f(b)s(ecome) +h(quite)g(large)150 1758 y(and)i(some)h(of)g(the)g(mac)m(hines)h(ma)m +(y)f(b)s(e)f(do)m(wn)g(when)g(a)h(system)g(is)g(b)s(o)s(oted.)51 +b(When)33 b(a)h(new)g(\014leserv)m(er)150 1868 y(is)c(installed,)g(`)p +Fo(/etc/fstab)p Fu(')e(m)m(ust)h(b)s(e)g(up)s(dated)g(on)g(ev)m(ery)i +(mac)m(hine,)f(the)g(moun)m(t)g(directory)g(created)150 +1977 y(and)g(the)g(\014lesystem)h(moun)m(ted.)275 2110 +y(In)f(man)m(y)i(en)m(vironmen)m(ts)g(most)g(p)s(eople)g(use)f(the)h +(same)g(few)g(w)m(orkstations,)h(but)e(it)h(is)g(con)m(v)m(enien)m(t) +150 2220 y(to)g(go)g(to)g(a)g(colleague's)i(mac)m(hine)e(and)f(access)h +(y)m(our)f(o)m(wn)h(\014les.)43 b(When)31 b(a)h(serv)m(er)g(go)s(es)f +(do)m(wn,)h(it)g(can)150 2329 y(cause)38 b(a)g(pro)s(cess)f(on)g(a)h +(clien)m(t)h(mac)m(hine)f(to)g(hang.)62 b(By)38 b(minimizing)g(the)f +(moun)m(ted)h(\014lesystems)f(to)150 2439 y(only)25 b(include)f(those)i +(activ)m(ely)h(b)s(eing)d(used,)i(there)f(is)f(less)h(c)m(hance)h(that) +g(a)f(\014lesystem)g(will)g(b)s(e)f(moun)m(ted)150 2549 +y(when)29 b(a)i(serv)m(er)g(go)s(es)g(do)m(wn.)275 2681 +y(The)d(follo)m(wing)j(is)f(a)g(short)f(extract)i(from)e(a)h(map)f(tak) +m(en)h(from)f(a)h(researc)m(h)g(\014leserv)m(er)g(at)g(Imp)s(erial)150 +2791 y(College.)275 2924 y(Note)h(the)e(en)m(try)h(for)g(`)p +Fo(localhost)p Fu(')d(whic)m(h)j(is)f(used)g(for)h(users)e(suc)m(h)i +(as)g(the)f(op)s(erator)h(\(`)p Fo(opr)p Fu('\))g(who)150 +3034 y(ha)m(v)m(e)i(a)e(home)h(directory)g(on)f(most)h(mac)m(hine)g(as) +f(`)p Fo(/home/localhost/opr)p Fu('.)390 3161 y Fo(/defaults)332 +b(opts:=rw,intr,grpid,nos)o(uid)390 3264 y(charm)524 +b(host!=${key};type:=nfs;)o(rhos)o(t:=)o(${ke)o(y};r)o(fs:)o(=/ho)o +(me/$)o({ke)o(y})42 b(\\)1154 3368 y(host==${key};type:=ufs;)o(dev:)o +(=/d)o(ev/x)o(d0g)390 3472 y(#)390 3576 y(...)390 3783 +y(#)390 3887 y(localhost)332 b(type:=link;fs:=${host})390 +3991 y(...)390 4095 y(#)390 4198 y(#)47 b(dylan)g(has)g(two)g(user)f +(disks)h(so)g(have)f(a)390 4302 y(#)h(top)g(directory)f(in)h(which)f +(to)h(mount)g(them.)390 4406 y(#)390 4510 y(dylan)524 +b(type:=auto;fs:=${map};p)o(ref:)o(=${)o(key})o(/)390 +4614 y(#)390 4717 y(dylan/dk2)332 b(host!=dylan;type:=nfs;r)o(host)o +(:=d)o(ylan)o(;rfs)o(:=/)o(home)o(/${k)o(ey})41 b(\\)1154 +4821 y(host==dylan;type:=ufs;d)o(ev:=)o(/de)o(v/ds)o(k/2s)o(0)390 +4925 y(#)390 5029 y(dylan/dk5)332 b(host!=dylan;type:=nfs;r)o(host)o +(:=d)o(ylan)o(;rfs)o(:=/)o(home)o(/${k)o(ey})41 b(\\)1154 +5132 y(host==dylan;type:=ufs;d)o(ev:=)o(/de)o(v/ds)o(k/5s)o(0)390 +5236 y(...)390 5340 y(#)p eop +%%Page: 89 91 +89 90 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(89)390 366 y Fo(toytown)428 b(host!=${key};type:=nfs;)o(rhos)o(t:=)o +(${ke)o(y};r)o(fs:)o(=/ho)o(me/$)o({ke)o(y})42 b(\\)1154 +470 y(host==${key};type:=ufs;)o(dev:)o(=/d)o(ev/x)o(y1g)390 +574 y(...)390 678 y(#)390 782 y(zebedee)428 b(host!=${key};type:=nfs;)o +(rhos)o(t:=)o(${ke)o(y};r)o(fs:)o(=/ho)o(me/$)o({ke)o(y})42 +b(\\)1154 885 y(host==${key};type:=ufs;)o(dev:)o(=/d)o(ev/d)o(sk/1)o +(s0)390 989 y(#)390 1093 y(#)47 b(Just)g(for)g(access...)390 +1197 y(#)390 1300 y(gould)524 b(type:=auto;fs:=${map};p)o(ref:)o(=${)o +(key})o(/)390 1404 y(gould/staff)236 b(host!=gould;type:=nfs;r)o(host)o +(:=g)o(ould)o(;rfs)o(:=/)o(home)o(/${k)o(ey})390 1508 +y(#)390 1612 y(gummo)524 b(host!=${key};type:=nfs;)o(rhos)o(t:=)o(${ke) +o(y};r)o(fs:)o(=/ho)o(me/$)o({ke)o(y})390 1716 y(...)275 +1862 y Fu(This)31 b(map)h(is)h(shared)e(b)m(y)i(most)f(of)h(the)g(mac)m +(hines)f(listed)h(so)g(on)f(those)h(systems)g(an)m(y)f(of)h(the)g(user) +150 1971 y(disks)d(is)g(accessible)i(via)f(a)g(consisten)m(t)h(name.)41 +b Fq(Amd)33 b Fu(is)d(started)h(with)f(the)h(follo)m(wing)h(command)390 +2112 y Fo(amd)47 b(/home)f(amd.home)275 2258 y Fu(Note)36 +b(that)f(when)f(moun)m(ting)h(a)h(remote)f(\014lesystem,)i(the)e +Fq(automoun)m(ted)k Fu(moun)m(t)c(p)s(oin)m(t)g(is)g(refer-)150 +2368 y(enced,)25 b(so)f(that)h(the)f(\014lesystem)g(will)g(b)s(e)f +(moun)m(ted)h(if)f(it)i(is)e(not)h(y)m(et)h(\(at)g(the)f(time)h(the)e +(remote)i(`)p Fo(mountd)p Fu(')150 2477 y(obtains)31 +b(the)f(\014le)h(handle\).)150 2764 y Ft(11.2)68 b(Home)46 +b(Directories)275 2969 y Fu(One)32 b(con)m(v)m(en)m(tion)j(for)d(home)h +(directories)g(is)g(to)h(lo)s(cate)g(them)f(in)f(`)p +Fo(/homes)p Fu(')g(so)g(user)g(`)p Fo(jsp)p Fu(''s)h(home)150 +3078 y(directory)40 b(is)g(`)p Fo(/homes/jsp)p Fu('.)68 +b(With)40 b(more)g(than)g(a)g(single)h(\014leserv)m(er)f(it)h(is)f(con) +m(v)m(enien)m(t)i(to)f(spread)150 3188 y(user)28 b(\014les)g(across)h +(sev)m(eral)g(mac)m(hines.)41 b(All)29 b(that)g(is)f(required)g(is)g(a) +h(moun)m(t-map)f(whic)m(h)g(con)m(v)m(erts)i(login)150 +3297 y(names)g(to)h(an)g(automoun)m(ted)g(directory)-8 +b(.)275 3444 y(Suc)m(h)29 b(a)i(map)f(migh)m(t)h(b)s(e)f(started)h(b)m +(y)f(the)h(command:)390 3584 y Fo(amd)47 b(/homes)f(amd.homes)275 +3731 y Fu(where)29 b(the)i(map)f(`)p Fo(amd.homes)p Fu(')e(con)m +(tained)k(the)f(en)m(tries:)390 3871 y Fo(/defaults)141 +b(type:=link)f(#)48 b(All)f(the)f(entries)g(are)h(of)g(type:=link)390 +3975 y(jsp)429 b(fs:=/home/charm/jsp)390 4079 y(njw)g +(fs:=/home/dylan/dk5/njw)390 4182 y(...)390 4286 y(phjk)381 +b(fs:=/home/toytown/ai/ph)o(jk)390 4390 y(sjv)429 b +(fs:=/home/ganymede/sjv)275 4536 y Fu(Whenev)m(er)32 +b(a)g(login)h(name)f(is)f(accessed)i(in)f(`)p Fo(/homes)p +Fu(')e(a)i(sym)m(b)s(olic)h(link)e(app)s(ears)g(p)s(oin)m(ting)h(to)h +(the)150 4646 y(real)38 b(lo)s(cation)h(of)f(that)f(user's)g(home)h +(directory)-8 b(.)62 b(In)37 b(this)g(example,)j(`)p +Fo(/homes/jsp)p Fu(')35 b(w)m(ould)j(app)s(ear)150 4755 +y(to)32 b(b)s(e)e(a)i(sym)m(b)s(olic)f(link)g(p)s(oin)m(ting)h(to)g(`)p +Fo(/home/charm/jsp)p Fu('.)39 b(Of)31 b(course,)g(`)p +Fo(/home)p Fu(')g(w)m(ould)f(also)j(b)s(e)d(an)150 4865 +y(automoun)m(t)h(p)s(oin)m(t.)275 5011 y(This)d(system)h(causes)g(an)g +(extra)g(lev)m(el)i(of)e(sym)m(b)s(olic)g(links)f(to)i(b)s(e)e(used.)40 +b(Although)29 b(that)g(turns)f(out)150 5121 y(to)k(b)s(e)f(relativ)m +(ely)j(inexp)s(ensiv)m(e,)e(an)g(alternativ)m(e)h(is)f(to)g(directly)h +(moun)m(t)e(the)h(required)f(\014lesystems)g(in)150 5230 +y(the)25 b(`)p Fo(/homes)p Fu(')e(map.)38 b(The)24 b(required)g(map)g +(is)g(simple,)i(but)d(long,)k(and)d(its)g(creation)i(is)f(b)s(est)f +(automated.)150 5340 y(The)30 b(en)m(try)g(for)h(`)p +Fo(jsp)p Fu(')f(could)g(b)s(e:)p eop +%%Page: 90 92 +90 91 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(90)390 366 y Fo(jsp)142 b(-sublink:=${key};rfs:=/hom)o(e/c)o(harm)41 +b(\\)1106 470 y(host==charm;type:=ufs;de)o(v:=/)o(dev)o(/xd0)o(g)h(\\) +1106 574 y(host!=charm;type:=nfs;rh)o(ost:)o(=ch)o(arm)275 +709 y Fu(This)32 b(map)h(can)h(b)s(ecome)g(quite)g(big)f(if)h(it)g(con) +m(tains)h(a)e(large)i(n)m(um)m(b)s(er)d(of)i(en)m(tries.)51 +b(By)33 b(com)m(bining)150 818 y(t)m(w)m(o)f(other)e(features)h(of)g +Fq(Amd)i Fu(it)e(can)f(b)s(e)g(greatly)i(simpli\014ed.)275 +953 y(First)h(the)f(UFS)h(partitions)g(should)f(b)s(e)g(moun)m(ted)h +(under)e(the)i(con)m(trol)h(of)f(`)p Fo(/etc/fstab)p +Fu(',)e(taking)150 1062 y(care)37 b(that)f(they)g(are)g(moun)m(ted)g +(in)f(the)h(same)g(place)h(that)f Fq(Amd)j Fu(w)m(ould)c(ha)m(v)m(e)i +(automoun)m(ted)g(them.)150 1172 y(In)29 b(most)h(cases)g(this)g(w)m +(ould)f(b)s(e)g(something)h(lik)m(e)h(`)p Fo(/a/)p Fq(host)r +Fo(/home/)p Fq(host)r Fu(')d(and)h(`)p Fo(/etc/fstab)p +Fu(')e(on)j(host)150 1282 y(`)p Fo(charm)p Fu(')f(w)m(ould)i(ha)m(v)m +(e)g(a)g(line:)390 1410 y Fo(/dev/xy0g)45 b(/a/charm/home/charm)e(4.2)k +(rw,nosuid,grpid)c(1)48 b(5)275 1545 y Fu(The)29 b(map)h(can)h(then)f +(b)s(e)g(c)m(hanged)h(to:)390 1674 y Fo(/defaults)188 +b(type:=nfs;sublink:=${key};)o(opts)o(:=r)o(w,in)o(tr,n)o(osu)o(id,g)o +(rpid)390 1778 y(jsp)476 b(rhost:=charm;rfs:=/home/ch)o(arm)390 +1881 y(njw)g(rhost:=dylan;rfs:=/home/dy)o(lan/)o(dk5)390 +1985 y(...)390 2089 y(phjk)428 b(rhost:=toytown;rfs:=/home/)o(toyt)o +(own)o(;sub)o(link)o(:=a)o(i/${)o(key})390 2193 y(sjv)476 +b(rhost:=ganymede;rfs:=/home)o(/gan)o(yme)o(de)275 2327 +y Fu(This)32 b(map)g(op)s(erates)i(as)f(usual)g(on)g(a)g(remote)h(mac)m +(hine)g(\()p Fq(ie)39 b Fo(${host})31 b Fu(not)i(equal)h(to)g +Fo(${rhost})p Fu(\).)150 2437 y(On)e(the)i(mac)m(hine)f(where)g(the)g +(\014lesystem)h(is)f(stored)g(\()p Fq(ie)40 b Fo(${host})31 +b Fu(equal)i(to)h Fo(${rhost})p Fu(\),)e Fq(Amd)37 b +Fu(will)150 2546 y(construct)45 b(a)g(lo)s(cal)g(\014lesystem)g(moun)m +(t)f(p)s(oin)m(t)h(whic)m(h)f(corresp)s(onds)f(to)i(the)g(name)f(of)h +(the)f(lo)s(cally)150 2656 y(moun)m(ted)33 b(UFS)g(partition.)50 +b(If)33 b Fq(Amd)j Fu(is)d(started)h(with)f(the)h Fo(-r)e +Fu(option)i(then)f(instead)g(of)h(attempting)150 2766 +y(an)42 b(NFS)g(moun)m(t,)j Fq(Amd)g Fu(will)e(simply)f(inherit)f(the)i +(UFS)f(moun)m(t)g(\(see)h(Section)g(5.25)h([Inheritance)150 +2875 y(Filesystem],)39 b(page)d(45\).)58 b(If)36 b Fo(-r)f +Fu(is)g(not)h(used)f(then)h(a)g(lo)s(opbac)m(k)g(NFS)g(moun)m(t)g(will) +g(b)s(e)f(made.)57 b(This)150 2985 y(t)m(yp)s(e)31 b(of)f(moun)m(t)g +(is)h(kno)m(wn)f(to)h(cause)g(a)g(deadlo)s(c)m(k)g(on)f(man)m(y)h +(systems.)150 3242 y Ft(11.3)68 b(Arc)l(hitecture)46 +b(Sharing)275 3435 y Fu(Often)31 b(a)i(\014lesystem)g(will)f(b)s(e)g +(shared)f(b)m(y)i(mac)m(hines)f(of)h(di\013eren)m(t)g(arc)m +(hitectures.)47 b(Separate)33 b(trees)150 3545 y(can)41 +b(b)s(e)f(main)m(tained)i(for)f(the)g(executable)h(images)g(for)e(eac)m +(h)i(arc)m(hitecture,)k(but)40 b(it)h(ma)m(y)h(b)s(e)e(more)150 +3654 y(con)m(v)m(enien)m(t)32 b(to)g(ha)m(v)m(e)f(a)g(shared)f(tree,)h +(with)f(distinct)h(sub)s(directories.)275 3789 y(A)k(shared)f(tree)i +(migh)m(t)f(ha)m(v)m(e)i(the)e(follo)m(wing)h(structure)f(on)g(the)g +(\014leserv)m(er)g(\(called)i(`)p Fo(fserver)p Fu(')c(in)150 +3898 y(the)e(example\):)390 4027 y Fo(local/tex)390 4131 +y(local/tex/fonts)390 4235 y(local/tex/lib)390 4339 y(local/tex/bin)390 +4442 y(local/tex/bin/sun3)390 4546 y(local/tex/bin/sun4)390 +4650 y(local/tex/bin/hp9000)390 4754 y(...)275 4888 y +Fu(In)d(this)h(example,)h(the)f(sub)s(directories)g(of)g(`)p +Fo(local/tex/bin)p Fu(')d(should)i(b)s(e)g(hidden)g(when)g(accessed)150 +4998 y(via)34 b(the)g(automoun)m(t)h(p)s(oin)m(t)f(\(con)m(v)m(en)m +(tionally)j(`)p Fo(/vol)p Fu('\).)51 b(A)34 b(moun)m(t-map)g(for)f(`)p +Fo(/vol)p Fu(')g(to)i(ac)m(hiev)m(e)h(this)150 5107 y(w)m(ould)30 +b(lo)s(ok)h(lik)m(e:)390 5236 y Fo(/defaults)141 b +(sublink:=${/key};rhost:)o(=fse)o(rver)o(;ty)o(pe:=)o(link)390 +5340 y(tex)429 b(type:=auto;fs:=${map};p)o(ref:)o(=${k)o(ey})o(/)p +eop +%%Page: 91 93 +91 92 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(91)390 366 y Fo(tex/fonts)141 b(host!=fserver;type:=nfs)o(;rfs)o +(:=/v)o(ol/)o(tex)41 b(\\)963 470 y(host==fserver;fs:=/usr/)o(loca)o +(l/te)o(x)390 574 y(tex/lib)237 b(host!=fserver;type:=nfs)o(;rfs)o +(:=/v)o(ol/)o(tex)41 b(\\)963 678 y(host==fserver;fs:=/usr/)o(loca)o +(l/te)o(x)390 782 y(tex/bin)237 b(-sublink:=${/key}/${arc)o(h})42 +b(\\)963 885 y(host!=fserver;type:=nfs)o(;rfs)o(:=/v)o(ol/)o(tex)f(\\) +963 989 y(host:=fserver;fs:=/usr/)o(loca)o(l/te)o(x)275 +1121 y Fu(When)34 b(`)p Fo(/vol/tex/bin)p Fu(')e(is)j(referenced,)h +(the)f(curren)m(t)g(mac)m(hine)h(arc)m(hitecture)g(is)f(automatically) +150 1230 y(app)s(ended)48 b(to)i(the)f(path)g(b)m(y)g(the)h +Fo(${sublink})d Fu(v)-5 b(ariable.)98 b(This)48 b(means)i(that)g(users) +e(can)i(ha)m(v)m(e)150 1340 y(`)p Fo(/vol/tex/bin)p Fu(')28 +b(in)i(their)g(`)p Fo(PATH)p Fu(')g(without)g(concern)h(for)f(arc)m +(hitecture)i(dep)s(endencies.)150 1588 y Ft(11.4)68 b(Wildcard)45 +b(Names)h(&)f(Replicated)h(Serv)l(ers)275 1777 y Fu(By)37 +b(using)f(the)i(wildcard)e(facilit)m(y)-8 b(,)42 b Fq(Amd)e +Fu(can)d Fq(o)m(v)m(erla)m(y)48 b Fu(an)37 b(existing)h(directory)f +(with)g(additional)150 1887 y(en)m(tries.)59 b(The)36 +b(system)h(\014les)f(are)h(usually)f(moun)m(ted)g(under)f(`)p +Fo(/usr)p Fu('.)58 b(If)36 b(instead,)i Fq(Amd)i Fu(is)c(moun)m(ted)150 +1997 y(on)29 b(`)p Fo(/usr)p Fu(',)f(additional)i(names)f(can)g(b)s(e)f +(o)m(v)m(erla)m(y)m(ed)j(to)f(augmen)m(t)f(or)g(replace)h(names)e(in)h +(the)g(\\master")150 2106 y(`)p Fo(/usr)p Fu('.)40 b(A)31 +b(map)f(to)h(do)f(this)g(w)m(ould)g(ha)m(v)m(e)i(the)f(form:)390 +2232 y Fo(local)94 b(type:=auto;fs:=local-map)390 2336 +y(share)g(type:=auto;fs:=share-map)390 2439 y(*)286 b +(-type:=nfs;rfs:=/export/e)o(xec)o(/${a)o(rch})o(;su)o(blin)o(k:=")o +(${k)o(ey}")41 b(\\)772 2543 y(rhost:=fserv1)92 b(rhost:=fserv2)g +(rhost:=fserv3)275 2675 y Fu(Note)43 b(that)f(the)g(assignmen)m(t)g(to) +h Fo(${sublink})c Fu(is)j(surrounded)d(b)m(y)i(double)h(quotes)g(to)g +(prev)m(en)m(t)150 2784 y(the)35 b(incoming)h(k)m(ey)f(from)g(causing)g +(the)g(map)g(to)g(b)s(e)f(misin)m(terpreted.)55 b(This)34 +b(map)h(has)f(the)h(e\013ect)i(of)150 2894 y(directing)31 +b(an)m(y)g(access)g(to)h(`)p Fo(/usr/local)p Fu(')c(or)i(`)p +Fo(/usr/share)p Fu(')e(to)j(another)g(automoun)m(t)g(p)s(oin)m(t.)275 +3025 y(In)37 b(this)h(example,)i(it)f(is)f(assumed)f(that)i(the)f(`)p +Fo(/usr)p Fu(')f(\014les)h(are)g(replicated)h(on)f(three)g(\014leserv)m +(ers:)150 3135 y(`)p Fo(fserv1)p Fu(',)23 b(`)p Fo(fserv2)p +Fu(')e(and)g(`)p Fo(fserv3)p Fu('.)37 b(F)-8 b(or)23 +b(an)m(y)g(references)f(other)g(than)g(to)h(`)p Fo(local)p +Fu(')f(and)f(`)p Fo(share)p Fu(')g(one)i(of)150 3244 +y(the)d(serv)m(ers)h(is)f(used)g(and)f(a)i(sym)m(b)s(olic)g(link)f(to)h +Fo(${autodir}/${rhost}/expo)o(rt/)o(exec)o(/${a)o(rch)o(}/)p +Fq(wh)o(atev)m(er)p 4013 3265 42 84 v 150 3354 a Fu(is)30 +b(returned)g(once)h(an)f(appropriate)g(\014lesystem)h(has)f(b)s(een)g +(moun)m(ted.)150 3602 y Ft(11.5)68 b(`)p Fh(rwho)p Ft(')44 +b(serv)l(ers)275 3792 y Fu(The)31 b(`)p Fo(/usr/spool/rwho)p +Fu(')d(directory)33 b(is)f(a)g(go)s(o)s(d)g(candidate)h(for)f(automoun) +m(ting.)46 b(F)-8 b(or)33 b(e\016ciency)150 3901 y(reasons)c(it)f(is)h +(b)s(est)f(to)h(capture)g(the)f(rwho)g(data)h(on)f(a)h(small)g(n)m(um)m +(b)s(er)e(of)i(mac)m(hines)g(and)f(then)g(moun)m(t)150 +4011 y(that)e(information)h(on)m(to)g(a)f(large)h(n)m(um)m(b)s(er)d(of) +i(clien)m(ts.)41 b(The)25 b(data)i(written)f(in)m(to)h(the)f(rwho)f +(\014les)g(is)h(b)m(yte)150 4121 y(order)k(dep)s(enden)m(t)f(so)i(only) +f(serv)m(ers)h(with)f(the)h(correct)g(b)m(yte)g(ordering)f(can)h(b)s(e) +f(used)f(b)m(y)h(a)h(clien)m(t:)390 4246 y Fo(/defaults)427 +b(type:=nfs)390 4350 y(usr/spool/rwho)187 b(-byte==little;rfs:=/usr/s)o +(poo)o(l/rw)o(ho)42 b(\\)1440 4454 y(rhost:=vaxA)92 b(rhost:=vaxB)45 +b(\\)1249 4557 y(||)i(-rfs:=/usr/spool/rwho)42 b(\\)1440 +4661 y(rhost:=sun4)92 b(rhost:=hp300)150 4909 y Ft(11.6)68 +b(`)p Fh(/vol)p Ft(')275 5099 y Fu(`)p Fo(/vol)p Fu(')29 +b(is)i(used)e(as)i(a)g(catc)m(h-all)i(for)d(v)m(olumes)h(whic)m(h)f(do) +g(not)h(ha)m(v)m(e)g(other)g(con)m(v)m(en)m(tional)i(names.)275 +5230 y(Belo)m(w)f(is)g(part)f(of)g(the)h(`)p Fo(/vol)p +Fu(')e(map)h(for)g(the)g(domain)g(`)p Fo(doc.ic.ac.uk)p +Fu('.)41 b(The)31 b(`)p Fo(r+d)p Fu(')g(tree)g(is)h(used)150 +5340 y(for)h(new)g(or)g(exp)s(erimen)m(tal)h(soft)m(w)m(are)g(that)g +(needs)f(to)h(b)s(e)f(a)m(v)-5 b(ailable)35 b(ev)m(erywhere)f(without)f +(installing)p eop +%%Page: 92 94 +92 93 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(92)150 366 y(it)41 b(on)f(all)i(the)e(\014leserv)m(ers.)71 +b(Users)41 b(wishing)f(to)h(try)f(out)h(the)f(new)g(soft)m(w)m(are)i +(then)e(simply)g(include)150 476 y(`)p Fo(/vol/r+d/{bin,ucb})p +Fu(')26 b(in)k(their)g(path.)275 660 y(The)41 b(main)h(tree)g(resides)g +(on)g(one)g(host)g(`)p Fo(gould.doc.ic.ac.uk)p Fu(',)e(whic)m(h)i(has)g +(di\013eren)m(t)g(`)p Fo(bin)p Fu(',)150 769 y(`)p Fo(etc)p +Fu(',)22 b(`)p Fo(lib)p Fu(')e(and)g(`)p Fo(ucb)p Fu(')g +(sub-directories)g(for)g(eac)m(h)i(mac)m(hine)f(arc)m(hitecture.)39 +b(F)-8 b(or)21 b(example,)i(`)p Fo(/vol/r+d/bin)p Fu(')p +3940 787 42 81 v 150 879 a(for)34 b(a)h(Sun-4)e(w)m(ould)h(b)s(e)g +(stored)g(in)g(the)h(sub-directory)e(`)p Fo(bin/sun4)p +Fu(')g(of)h(the)h(\014lesystem)f(`)p Fo(/usr/r+d)p Fu('.)150 +988 y(When)28 b(it)h(w)m(as)f(accessed)i(a)e(sym)m(b)s(olic)h(link)f(p) +s(oin)m(ting)g(to)h(`)p Fo(/a/gould/usr/r+d/bin/sun4)o +Fu(')23 b(w)m(ould)28 b(b)s(e)150 1098 y(returned.)390 +1276 y Fo(/defaults)188 b(type:=nfs;opts:=rw,grpid,n)o(osui)o(d,i)o +(ntr,)o(soft)390 1380 y(wp)524 b(-opts:=rw,grpid,nosuid;rho)o(st:=)o +(cha)o(rm)42 b(\\)1010 1483 y(host==charm;type:=link;fs:)o(=/us)o(r/l)o +(ocal)o(/wp)f(\\)1010 1587 y(host!=charm;type:=nfs;rfs:)o(=/vo)o(l/w)o +(p)390 1691 y(...)390 1795 y(#)390 1899 y(src)476 b +(-opts:=rw,grpid,nosuid;rho)o(st:=)o(cha)o(rm)42 b(\\)1010 +2002 y(host==charm;type:=link;fs:)o(=/us)o(r/s)o(rc)g(\\)1010 +2106 y(host!=charm;type:=nfs;rfs:)o(=/vo)o(l/s)o(rc)390 +2210 y(#)390 2314 y(r+d)476 b(type:=auto;fs:=${map};pref)o(:=r+)o(d/) +390 2417 y(#)47 b(per)g(architecture)e(bin,etc,lib&ucb...)390 +2521 y(r+d/bin)284 b(rhost:=gould.doc.ic.ac.uk;)o(rfs:)o(=/u)o(sr/r)o +(+d;s)o(ubl)o(ink:)o(=${/)o(key)o(}/${)o(arch)o(})p 4071 +2541 42 84 v 390 2625 a(r+d/etc)g(rhost:=gould.doc.ic.ac.uk;)o(rfs:)o +(=/u)o(sr/r)o(+d;s)o(ubl)o(ink:)o(=${/)o(key)o(}/${)o(arch)o(})p +4071 2645 V 390 2729 a(r+d/include)92 b(rhost:=gould.doc.ic.ac.uk;)o +(rfs:)o(=/u)o(sr/r)o(+d;s)o(ubl)o(ink:)o(=${/)o(key)o(})390 +2833 y(r+d/lib)284 b(rhost:=gould.doc.ic.ac.uk;)o(rfs:)o(=/u)o(sr/r)o +(+d;s)o(ubl)o(ink:)o(=${/)o(key)o(}/${)o(arch)o(})p 4071 +2853 V 390 2936 a(r+d/man)g(rhost:=gould.doc.ic.ac.uk;)o(rfs:)o(=/u)o +(sr/r)o(+d;s)o(ubl)o(ink:)o(=${/)o(key)o(})390 3040 y(r+d/src)g +(rhost:=gould.doc.ic.ac.uk;)o(rfs:)o(=/u)o(sr/r)o(+d;s)o(ubl)o(ink:)o +(=${/)o(key)o(})390 3144 y(r+d/ucb)g(rhost:=gould.doc.ic.ac.uk;)o(rfs:) +o(=/u)o(sr/r)o(+d;s)o(ubl)o(ink:)o(=${/)o(key)o(}/${)o(arch)o(})p +4071 3164 V 390 3248 a(#)47 b(hades)g(pictures)390 3351 +y(pictures)236 b(-opts:=rw,grpid,nosuid;rho)o(st:=)o(thp)o(fs)42 +b(\\)1010 3455 y(host==thpfs;type:=link;fs:)o(=/nb)o(sd/)o(pict)o(ures) +f(\\)1010 3559 y(host!=thpfs;type:=nfs;rfs:)o(=/nb)o(sd;)o(subl)o(ink:) +o(=pi)o(ctur)o(es)390 3663 y(#)47 b(hades)g(tools)390 +3767 y(hades)380 b(-opts:=rw,grpid,nosuid;rho)o(st:=)o(thp)o(fs)42 +b(\\)1010 3870 y(host==thpfs;type:=link;fs:)o(=/nb)o(sd/)o(hade)o(s)g +(\\)1010 3974 y(host!=thpfs;type:=nfs;rfs:)o(=/nb)o(sd;)o(subl)o(ink:)o +(=ha)o(des)390 4078 y(#)47 b(bsd)g(tools)g(for)g(hp.)390 +4182 y(bsd)476 b(-opts:=rw,grpid,nosuid;arc)o(h==h)o(p90)o(00;r)o(host) +o(:=t)o(hpfs)41 b(\\)1010 4285 y(host==thpfs;type:=link;fs:)o(=/nb)o +(sd/)o(bsd)g(\\)1010 4389 y(host!=thpfs;type:=nfs;rfs:)o(=/nb)o(sd;)o +(subl)o(ink:)o(=bs)o(d)150 4769 y Ft(11.7)68 b(`)p Fh(/defaults)p +Ft(')42 b(with)j(selectors)275 5011 y Fu(It)36 b(is)g(sometimes)g +(useful)g(to)g(ha)m(v)m(e)h(di\013eren)m(t)g(defaults)f(for)f(a)i(giv)m +(en)g(map.)57 b(T)-8 b(o)36 b(ac)m(hiev)m(e)i(this,)g(the)150 +5121 y(`)p Fo(/defaults)p Fu(')32 b(en)m(try)i(m)m(ust)f(b)s(e)h(able)g +(to)g(pro)s(cess)g(normal)f(selectors.)53 b(This)33 b(feature)h(is)g +(turned)e(on)i(b)m(y)150 5230 y(setting)43 b(`)p Fo +(selectors_on_default)25 b(=)30 b(yes)p Fu(')41 b(in)h(the)g(`)p +Fo(amd.conf)p Fu(')e(\014le.)76 b(See)42 b(Section)h(6.5.29)h([selec-) +150 5340 y(tors)p 307 5340 28 4 v 33 w(on)p 436 5340 +V 33 w(default)30 b(P)m(arameter],)i(page)g(52.)p eop +%%Page: 93 95 +93 94 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(93)275 366 y(In)31 b(this)h(example,)i(I)e(set)h(di\013eren)m(t)g +(default)g(NFS)f(moun)m(t)h(options)f(for)g(hosts)h(whic)m(h)f(are)h +(running)150 476 y(o)m(v)m(er)26 b(a)g(slo)m(w)m(er)g(net)m(w)m(ork)g +(link.)39 b(By)25 b(setting)h(a)g(smaller)f(size)h(for)f(the)g(NFS)g +(read)g(and)g(write)g(bu\013er)f(sizes,)150 586 y(y)m(ou)31 +b(can)f(greatly)i(impro)m(v)m(e)f(remote)h(\014le)e(service)h(p)s +(erformance.)390 726 y Fo(/defaults)45 b(\\)485 830 y +(wire==slip-net;opts:=rw,in)o(tr,r)o(siz)o(e=10)o(24,w)o(siz)o(e=10)o +(24,t)o(ime)o(o=20)o(,ret)o(ran)o(s=10)c(\\)p 3922 850 +42 84 v 485 934 a(wire!=slip-net;opts:=rw,in)o(tr)150 +1221 y Ft(11.8)68 b(`)p Fh(/tftpboot)p Ft(')42 b(in)i(a)i(c)l(hro)t +(ot-ed)f(en)l(vironmen)l(t)275 1425 y Fu(In)35 b(this)h(complex)g +(example,)j(w)m(e)d(attempt)h(to)g(run)e(an)g Fq(Amd)k +Fu(pro)s(cess)d Fq(inside)41 b Fu(a)36 b(c)m(hro)s(ot-ed)h(en)m(vi-)150 +1535 y(ronmen)m(t.)j(`)p Fo(tftpd)p Fu(')29 b(\(T)-8 +b(rivial)31 b(FTP\))f(is)g(used)e(to)j(trivially)g(retriev)m(e)g +(\014les)e(used)g(to)i(b)s(o)s(ot)e(X-T)-8 b(erminals,)150 +1645 y(Net)m(w)m(ork)35 b(Prin)m(ters,)g(Net)m(w)m(ork)g(routers,)f +(diskless)g(w)m(orkstations,)i(and)d(other)h(suc)m(h)f(devices.)51 +b(F)-8 b(or)34 b(se-)150 1754 y(curit)m(y)d(reasons,)f(`)p +Fo(tftpd)p Fu(')g(\(and)g(also)h(`)p Fo(ftpd)p Fu('\))f(pro)s(cesses)g +(are)h(run)e(using)h(the)g Fm(c)m(hro)s(ot)p Fu(\(2\))j(system)d(call.) +150 1864 y(This)41 b(pro)m(vides)i(an)f(en)m(vironmen)m(t)h(for)e +(these)i(pro)s(cesses,)i(where)d(access)i(to)f(an)m(y)f(\014les)g +(outside)h(the)150 1973 y(directory)31 b(where)f(the)g(c)m(hro)s(ot-ed) +i(pro)s(cess)e(runs)e(is)j(denied.)275 2120 y(F)-8 b(or)31 +b(example,)g(if)f(y)m(ou)h(start)g(`)p Fo(tftpd)p Fu(')e(on)i(y)m(our)f +(system)h(with)390 2260 y Fo(chroot)46 b(/tftpboot)f(/usr/sbin/tftpd) +150 2407 y Fu(then)c(the)h(`)p Fo(tftpd)p Fu(')f(pro)s(cess)g(will)h +(not)g(b)s(e)f(able)h(to)h(access)g(an)m(y)f(\014les)f(outside)h(`)p +Fo(/tftpboot)p Fu('.)73 b(This)150 2516 y(ensures)30 +b(that)i(no)f(one)h(can)f(retriev)m(e)i(\014les)e(suc)m(h)g(as)g(`)p +Fo(/etc/passwd)p Fu(')e(and)h(run)g(passw)m(ord)g(crac)m(k)m(ers)j(on) +150 2626 y(it.)275 2772 y(Since)f(the)g(TFTP)g(service)h(w)m(orks)f(b)m +(y)h(broadcast,)g(it)g(is)f(necessary)h(to)g(ha)m(v)m(e)g(at)g(least)h +(one)e(TFTP)150 2882 y(serv)m(er)38 b(running)e(on)i(eac)m(h)h(subnet.) +62 b(If)38 b(y)m(ou)g(ha)m(v)m(e)h(lots)g(of)f(\014les)g(that)g(y)m(ou) +g(need)g(to)h(mak)m(e)g(a)m(v)-5 b(ailable)150 2991 y(for)32 +b(`)p Fo(tftp)p Fu(',)f(and)g(man)m(y)h(subnets,)g(it)g(could)g(tak)m +(e)h(signi\014can)m(t)g(amoun)m(ts)f(of)g(disk)f(space)h(on)g(eac)m(h)h +(host)150 3101 y(serving)d(them.)275 3247 y(A)f(solution)h(w)m(e)g +(implemen)m(ted)g(at)g(Colum)m(bia)f(Univ)m(ersit)m(y)i(w)m(as)f(to)g +(ha)m(v)m(e)g(ev)m(ery)g(host)g(run)e(`)p Fo(tftpd)p +Fu(',)150 3357 y(but)i(ha)m(v)m(e)i(those)g(serv)m(ers)f(retriev)m(e)h +(the)f(b)s(o)s(ot)g(\014les)g(from)f(t)m(w)m(o)j(replicated)f(serv)m +(ers.)42 b(Those)31 b(replicated)150 3467 y(serv)m(ers)f(ha)m(v)m(e)i +(sp)s(ecial)f(partitions)g(dedicated)g(to)g(the)g(man)m(y)f(net)m(w)m +(ork)h(b)s(o)s(ot)g(\014les.)275 3613 y(W)-8 b(e)31 b(start)g +Fq(Amd)i Fu(as)e(follo)m(ws:)390 3753 y Fo(amd)47 b(/tftpboot/.amd)d +(amd.tftpboot)275 3900 y Fu(That)31 b(is,)i Fq(Amd)h +Fu(is)e(serving)g(the)g(directory)g(`)p Fo(/tftpboot/.amd)p +Fu('.)42 b(The)31 b(`)p Fo(tftp)p Fu(')g(serv)m(er)h(runs)e(inside)150 +4009 y(`)p Fo(/tftpboot)p Fu(')e(and)i(is)h(c)m(hro)s(ot-ed)g(in)f +(that)h(directory)g(to)s(o.)41 b(The)30 b(`)p Fo(amd.tftpboot)p +Fu(')e(map)i(lo)s(oks)g(lik)m(e:)390 4150 y Fo(#)390 +4254 y(#)47 b(Amd)g(/tftpboot)f(directory)f(->)i(host)g(map)390 +4358 y(#)390 4565 y(/defaults)93 b(opts:=nosuid,ro,intr,sof)o(t;fs)o +(:=/t)o(ftp)o(boot)o(/imp)o(ort)o(;typ)o(e:=n)o(fs)390 +4773 y(tp)429 b(host==lol;rfs:=/n/lol/im)o(port)o(/tft)o(pbo)o(ot;t)o +(ype:)o(=lo)o(fs)42 b(\\)915 4876 y(host==ober;rfs:=/n/ober/)o(misc)o +(/win)o(/tf)o(tpbo)o(ot;t)o(ype)o(:=lo)o(fs)g(\\)915 +4980 y(rhost:=ober;rfs:=/n/ober)o(/mis)o(c/wi)o(n/t)o(ftpb)o(oot)f(\\) +915 5084 y(rhost:=lol;rfs:=/n/lol/i)o(mpor)o(t/tf)o(tpb)o(oot)275 +5230 y Fu(T)-8 b(o)34 b(help)g(understand)e(this)j(example,)h(I)e(list) +h(a)f(few)g(of)h(the)f(\014le)g(en)m(tries)h(that)g(are)g(created)g +(inside)150 5340 y(`)p Fo(/tftpboot)p Fu(':)p eop +%%Page: 94 96 +94 95 bop 150 -116 a Fu(Chapter)30 b(11:)41 b(Examples)2616 +b(94)390 366 y Fo($)47 b(ls)h(-la)f(/tftpboot)390 470 +y(dr-xr-xr-x)140 b(2)48 b(root)142 b(512)47 b(Aug)g(30)g(23:11)f(.amd) +390 574 y(drwxrwsr-x)93 b(12)47 b(root)142 b(512)47 b(Aug)g(30)g(08:00) +f(import)390 678 y(lrwxrwxrwx)140 b(1)48 b(root)190 b(33)47 +b(Feb)g(27)95 b(1997)46 b(adminpr.cfg)f(->)i(./.amd/tp/hplj/adminpr.cf) +o(g)p 4214 698 42 84 v 390 782 a(lrwxrwxrwx)140 b(1)48 +b(root)190 b(22)47 b(Dec)95 b(5)g(1996)46 b(tekxp)h(->)g +(./.amd/tp/xterms/tekxp)390 885 y(lrwxrwxrwx)140 b(1)48 +b(root)237 b(1)48 b(Dec)95 b(5)g(1996)46 b(tftpboot)g(->)h(.)275 +1020 y Fu(Here)30 b(is)h(an)f(explanation)i(of)e(eac)m(h)i(of)e(the)h +(en)m(tries)g(listed)g(ab)s(o)m(v)m(e:)150 1179 y Fo(.amd)288 +b Fu(This)22 b(is)h(the)f Fq(Amd)k Fu(moun)m(t)d(p)s(oin)m(t.)38 +b(Note)24 b(that)f(y)m(ou)g(do)g(not)g(need)f(to)i(run)d(a)i(separate)h +Fq(Amd)630 1289 y Fu(pro)s(cess)30 b(for)h(the)f(TFTP)g(service.)43 +b(The)30 b Fm(c)m(hro)s(ot)p Fu(\(2\))j(system)e(call)g(only)g +(protects)h(against)630 1398 y(\014le)h(access,)i(but)e(the)g(same)h +(pro)s(cess)e(can)i(still)f(serv)m(e)h(\014les)f(and)g(directories)h +(inside)f(and)630 1508 y(outside)24 b(the)g(c)m(hro)s(ot-ed)h(en)m +(vironmen)m(t,)h(b)s(ecause)e Fq(Amd)i Fu(itself)f(w)m(as)f(not)g(run)f +(in)g(c)m(hro)s(ot-ed)630 1618 y(mo)s(de.)150 1777 y +Fo(import)192 b Fu(This)32 b(is)h(the)g(moun)m(t)f(p)s(oin)m(t)h(where) +f Fq(Amd)k Fu(will)d(moun)m(t)g(the)g(directories)g(con)m(taining)i +(the)630 1887 y(b)s(o)s(ot)25 b(\014les.)39 b(The)25 +b(map)g(is)h(designed)f(so)g(that)h(remote)h(directories)f(will)g(b)s +(e)f(NFS)g(moun)m(ted)630 1996 y(\(ev)m(en)40 b(if)e(they)h(are)g +(already)g(moun)m(ted)f(elsewhere\),)k(and)c(lo)s(cal)i(directories)g +(are)f(lo)s(op-)630 2106 y(bac)m(k)30 b(moun)m(ted)g(\(since)g(they)f +(are)h(not)g(accessible)h(outside)f(the)g(c)m(hro)s(ot-ed)g(`)p +Fo(/tftpboot)p Fu(')630 2215 y(directory\).)150 2375 +y Fo(adminpr.cfg)150 2484 y(tekxp)240 b Fu(Tw)m(o)37 +b(man)m(ually)h(created)g(sym)m(b)s(olic)g(links)f(to)h(directories)g +Fq(inside)k Fu(the)c Fq(Amd)p Fu(-managed)630 2594 y(directory)-8 +b(.)62 b(The)36 b(crossing)i(of)f(the)g(comp)s(onen)m(t)g(`)p +Fo(tp)p Fu(')g(will)h(cause)f Fq(Amd)j Fu(to)e(automoun)m(t)630 +2704 y(one)24 b(of)g(the)f(remote)i(replicas.)39 b(Once)23 +b(crossed,)i(access)g(to)g(\014les)e(inside)g(pro)s(ceeds)g(as)h +(usual.)630 2813 y(The)32 b(`)p Fo(adminpr.cfg)p Fu(')f(is)i(a)g +(con\014guration)g(\014le)g(for)g(an)f(HP)h(Laser-Jet)h(4si)f(prin)m +(ter,)h(and)630 2923 y(the)d(`)p Fo(tekxp)p Fu(')e(is)h(a)h(directory)g +(for)f(T)-8 b(ektronix)31 b(X-T)-8 b(erminal)31 b(b)s(o)s(ot)f +(\014les.)150 3082 y Fo(tftpboot)96 b Fu(This)24 b(inno)s(cen)m(t)i(lo) +s(oking)g(symlink)f(is)g(imp)s(ortan)m(t.)39 b(Usually)-8 +b(,)28 b(when)c(devices)i(b)s(o)s(ot)f(via)h(the)630 +3192 y(TFTP)g(service,)j(they)e(p)s(erform)f(the)h(`)p +Fo(get)i(file)p Fu(')d(command)h(to)h(retriev)m(e)g Fq(\014le)p +Fu(.)40 b(Ho)m(w)m(ev)m(er,)630 3301 y(some)h(devices)g(assume)g(that)g +(`)p Fo(tftpd)p Fu(')f(do)s(es)g(not)h(run)e(in)h(a)i(c)m(hro)s(ot-ed)f +(en)m(vironmen)m(t,)630 3411 y(but)e(rather)g(\\unprotected",)j(and)d +(th)m(us)g(use)g(a)h(full)f(pathname)g(for)g(\014les)g(to)h(retriev)m +(e,)630 3520 y(as)i(in)f(`)p Fo(get)30 b(/tftpboot/file)p +Fu('.)71 b(This)41 b(symlink)g(e\013ectiv)m(ely)j(strips)d(out)h(the)g +(leading)630 3630 y(`)p Fo(/tftpboot/)p Fu('.)p eop +%%Page: 95 97 +95 96 bop 150 -116 a Fu(Chapter)30 b(12:)41 b(In)m(ternals)2650 +b(95)150 366 y Fr(12)80 b(In)l(ternals)275 613 y Fu(Note)29 +b(that)f(there)g(are)h(more)f(error)f(and)h(logging)h(messages)g(p)s +(ossible)f(than)f(are)i(listed)f(here.)40 b(Most)150 +723 y(of)31 b(them)f(are)h(self-explanatory)-8 b(.)42 +b(Refer)31 b(to)g(the)f(program)g(sources)h(for)f(more)h(details)g(on)f +(the)h(rest.)150 991 y Ft(12.1)68 b(Log)45 b(Messages)275 +1188 y Fu(In)32 b(the)h(follo)m(wing)i(sections)f(a)f(brief)g +(explanation)h(is)f(giv)m(en)h(of)f(some)g(of)h(the)f(log)h(messages)g +(made)150 1298 y(b)m(y)27 b Fq(Amd)p Fu(.)39 b(Where)28 +b(the)f(message)i(is)e(in)g(`)p Fo(typewriter)p Fu(')e(fon)m(t,)k(it)e +(corresp)s(onds)f(exactly)j(to)f(the)g(message)150 1407 +y(pro)s(duced)22 b(b)m(y)i Fq(Amd)p Fu(.)39 b(W)-8 b(ords)24 +b(in)g Fq(italic)31 b Fu(are)25 b(replaced)f(b)m(y)g(an)g(appropriate)g +(string.)39 b(V)-8 b(ariables,)27 b Fo(${)p Fq(v)-5 b(ar)7 +b Fo(})p Fu(,)150 1517 y(indicate)31 b(that)g(the)g(v)-5 +b(alue)31 b(of)f(the)h(appropriate)f(v)-5 b(ariable)31 +b(is)g(output.)275 1656 y(Log)36 b(messages)h(are)f(either)g(sen)m(t)h +(directly)f(to)h(a)f(\014le,)i(or)e(logged)h(via)g(the)f +Fm(syslog)p Fu(\(3\))h(mec)m(hanism.)150 1765 y(See)c(Section)g(6.5.15) +i([log)p 1044 1765 28 4 v 35 w(\014le)d(P)m(arameter],)j(page)f(50)f +(In)f(either)i(case,)g(en)m(tries)g(in)e(the)h(\014le)g(are)g(of)g(the) +150 1875 y(form:)390 2008 y Fq(date-string)104 b(hostname)53 +b Fo(amd[)p Fq(pid)t Fo(])93 b Fq(message)150 2240 y +Fk(12.1.1)63 b(F)-10 b(atal)40 b(errors)275 2437 y Fq(Amd)g +Fu(attempts)e(to)g(deal)g(with)f(un)m(usual)g(ev)m(en)m(ts.)63 +b(Whenev)m(er)38 b(it)g(is)g(not)f(p)s(ossible)g(to)h(deal)g(with)150 +2547 y(suc)m(h)27 b(an)g(error,)h Fq(Amd)i Fu(will)d(log)h(an)f +(appropriate)h(message)g(and,)f(if)h(it)f(cannot)h(p)s(ossibly)e(con)m +(tin)m(ue,)k(will)150 2656 y(either)25 b(exit)g(or)f(ab)s(ort.)38 +b(These)24 b(messages)h(are)g(selected)h(b)m(y)e(`)p +Fo(-x)30 b(fatal)p Fu(')23 b(on)h(the)g(command)g(line.)39 +b(When)150 2766 y Fm(syslog)p Fu(\(3\))34 b(is)e(b)s(eing)g(used,)g +(they)g(are)h(logged)h(with)d(lev)m(el)j(`)p Fo(LOG_FATAL)p +Fu('.)44 b(Ev)m(en)33 b(if)f Fq(Amd)j Fu(con)m(tin)m(ues)e(to)150 +2876 y(op)s(erate)j(it)f(is)g(lik)m(ely)h(to)g(remain)f(in)f(a)i +(precarious)f(state)h(and)e(should)g(b)s(e)g(restarted)i(at)f(the)g +(earliest)150 2985 y(opp)s(ortunit)m(y)-8 b(.)150 3151 +y Fo(Attempting)45 b(to)i(inherit)f(not-a-filesystem)630 +3261 y Fu(The)29 b(protot)m(yp)s(e)h(moun)m(t)g(p)s(oin)m(t)f(created)i +(during)d(a)i(\014lesystem)g(restart)g(did)f(not)h(con)m(tain)630 +3370 y(a)h(reference)g(to)g(the)f(restarted)h(\014lesystem.)41 +b(This)30 b(error)g(\\should)g(nev)m(er)g(happ)s(en".)150 +3534 y Fo(Can't)46 b(bind)h(to)g(domain)f(")p Fq(NIS-domain)p +Fo(")630 3643 y Fu(A)35 b(sp)s(eci\014c)g(NIS)f(domain)g(w)m(as)i +(requested)e(on)h(the)g(command)g(line,)h(but)e(no)h(serv)m(er)g(for) +630 3753 y(that)c(domain)f(is)h(a)m(v)-5 b(ailable)32 +b(on)f(the)f(lo)s(cal)i(net.)150 3917 y Fo(Can't)46 b(determine)g(IP)h +(address)f(of)h(this)f(host)h(\()p Fq(hostname)5 b Fo(\))630 +4026 y Fu(When)36 b Fq(Amd)j Fu(starts)e(it)g(determines)f(its)g(o)m +(wn)h(IP)e(address.)58 b(If)36 b(this)g(lo)s(okup)f(fails)i(then)630 +4136 y Fq(Amd)d Fu(cannot)f(con)m(tin)m(ue.)45 b(The)31 +b(hostname)h(it)g(lo)s(oks)g(up)e(is)i(that)g(obtained)g(returned)e(b)m +(y)630 4246 y Fm(gethostname)p Fu(\(2\))j(system)e(call.)150 +4409 y Fo(Can't)46 b(find)h(root)g(file)f(handle)g(for)h +Fq(automoun)m(t)31 b(p)s(oin)m(t)630 4519 y(Amd)39 b +Fu(creates)f(its)f(o)m(wn)f(\014le)g(handles)g(for)g(the)h(automoun)m +(t)g(p)s(oin)m(ts.)58 b(When)36 b(it)h(moun)m(ts)630 +4628 y(itself)43 b(as)f(a)g(serv)m(er,)j(it)e(m)m(ust)f(pass)f(these)h +(\014le)g(handles)g(to)g(the)g(lo)s(cal)i(k)m(ernel.)75 +b(If)42 b(the)630 4738 y(\014lehandle)g(is)g(not)g(obtainable)h(the)f +(moun)m(t)g(p)s(oin)m(t)g(is)f(ignored.)76 b(This)41 +b(error)g(\\should)630 4848 y(nev)m(er)31 b(happ)s(en".)150 +5011 y Fo(Must)47 b(be)g(root)f(to)i(mount)e(filesystems)f(\(euid)h(=)i +Fq(euid)t Fo(\))630 5121 y Fu(T)-8 b(o)36 b(prev)m(en)m(t)g(em)m +(barrassmen)m(t,)i Fq(Amd)g Fu(mak)m(es)f(sure)d(it)j(has)e +(appropriate)g(system)h(privi-)630 5230 y(leges.)42 b(This)29 +b(amoun)m(ts)h(to)h(ha)m(ving)f(an)g(euid)f(of)h(0.)41 +b(The)30 b(c)m(hec)m(k)h(is)f(made)g(after)g(argumen)m(t)630 +5340 y(pro)s(cessing)g(complete)i(to)f(giv)m(e)h(non-ro)s(ot)e(users)g +(a)h(c)m(hance)g(to)g(access)h(the)f Fo(-v)e Fu(option.)p +eop +%%Page: 96 98 +96 97 bop 150 -116 a Fu(Chapter)30 b(12:)41 b(In)m(ternals)2650 +b(96)150 366 y Fo(No)47 b(work)g(to)g(do)g(-)h(quitting)630 +476 y Fu(No)31 b(automoun)m(t)f(p)s(oin)m(ts)g(w)m(ere)g(giv)m(en)h(on) +f(the)g(command)g(line)g(and)g(so)g(there)g(is)g(no)g(w)m(ork)630 +586 y(to)h(do.)150 734 y Fo(Out)47 b(of)g(memory)630 +844 y Fu(While)27 b(attempting)h(to)f(mallo)s(c)g(some)g(memory)-8 +b(,)28 b(the)e(memory)h(space)g(a)m(v)-5 b(ailable)28 +b(to)g Fq(Amd)630 953 y Fu(w)m(as)j(exhausted.)40 b(This)30 +b(is)g(an)h(unreco)m(v)m(erable)g(error.)150 1102 y Fo(Out)47 +b(of)g(memory)f(in)h(realloc)630 1211 y Fu(While)27 b(attempting)h(to)f +(reallo)s(c)h(some)e(memory)-8 b(,)28 b(the)f(memory)f(space)h(a)m(v)-5 +b(ailable)28 b(to)g Fq(Amd)630 1321 y Fu(w)m(as)j(exhausted.)40 +b(This)30 b(is)g(an)h(unreco)m(v)m(erable)g(error.)150 +1469 y Fo(cannot)46 b(create)g(rpc/udp)g(service)630 +1579 y Fu(Either)30 b(the)h(NFS)f(or)h(AMQ)f(endp)s(oin)m(t)g(could)g +(not)h(b)s(e)f(created.)150 1727 y Fo(gethostname:)44 +b Fq(description)630 1837 y Fu(The)30 b Fm(gethostname)p +Fu(\(2\))j(system)d(call)i(failed)f(during)e(startup.)150 +1985 y Fo(host)47 b(name)f(is)h(not)g(set)630 2095 y +Fu(The)36 b Fm(gethostname)p Fu(\(2\))j(system)e(call)h(returned)d(a)i +(zero)h(length)f(host)f(name.)60 b(This)36 b(can)630 +2204 y(happ)s(en)29 b(if)h Fq(Amd)j Fu(is)e(started)g(in)f(single)h +(user)e(mo)s(de)h(just)g(after)h(b)s(o)s(oting)f(the)h(system.)150 +2353 y Fo(ifs_match)45 b(called!)630 2462 y Fu(An)22 +b(in)m(ternal)h(error)f(o)s(ccurred)g(while)g(restarting)h(a)g +(pre-moun)m(ted)f(\014lesystem.)39 b(This)21 b(error)630 +2572 y(\\should)30 b(nev)m(er)h(happ)s(en".)150 2720 +y Fo(mount_afs:)45 b Fq(description)630 2830 y Fu(An)30 +b(error)g(o)s(ccurred)g(while)g Fq(Amd)j Fu(w)m(as)e(moun)m(ting)g +(itself.)150 2978 y Fo(run_rpc)46 b(failed)630 3088 y +Fu(Someho)m(w)31 b(the)f(main)g(NFS)h(serv)m(er)f(lo)s(op)h(failed.)41 +b(This)30 b(error)g(\\should)g(nev)m(er)g(happ)s(en".)150 +3236 y Fo(unable)46 b(to)h(free)g(rpc)g(arguments)e(in)i(amqprog_1)630 +3346 y Fu(The)30 b(incoming)h(argumen)m(ts)f(to)i(the)e(AMQ)h(serv)m +(er)f(could)h(not)f(b)s(e)g(free'ed.)150 3494 y Fo(unable)46 +b(to)h(free)g(rpc)g(arguments)e(in)i(nfs_program_1)630 +3604 y Fu(The)30 b(incoming)h(argumen)m(ts)f(to)i(the)e(NFS)g(serv)m +(er)h(could)g(not)f(b)s(e)g(free'ed.)150 3752 y Fo(unable)46 +b(to)h(register)f(\(AMQ_PROGRAM,)e(AMQ_VERSION,)g(udp\))630 +3862 y Fu(The)f(AMQ)h(serv)m(er)f(could)h(not)g(b)s(e)f(registered)h +(with)f(the)h(lo)s(cal)h(p)s(ortmapp)s(er)c(or)j(the)630 +3971 y(in)m(ternal)31 b(RPC)f(dispatc)m(her.)150 4120 +y Fo(unable)46 b(to)h(register)f(\(NFS_PROGRAM,)e(NFS_VERSION,)g(0\)) +630 4229 y Fu(The)30 b(NFS)g(serv)m(er)h(could)f(not)h(b)s(e)f +(registered)h(with)f(the)g(in)m(ternal)i(RPC)d(dispatc)m(her.)275 +4378 y(XXX:)i(This)e(section)j(needs)e(to)h(b)s(e)f(up)s(dated)150 +4586 y Fk(12.1.2)63 b(Info)42 b(messages)275 4773 y Fq(Amd)d +Fu(generates)f(information)e(messages)i(to)f(record)f(state)i(c)m +(hanges.)60 b(These)36 b(messages)i(are)e(se-)150 4882 +y(lected)h(b)m(y)e(`)p Fo(-x)30 b(info)p Fu(')35 b(on)g(the)h(command)f +(line.)57 b(When)35 b Fm(syslog)p Fu(\(3\))j(is)d(b)s(eing)h(used,)g +(they)g(are)f(logged)150 4992 y(with)30 b(lev)m(el)i(`)p +Fo(LOG_INFO)p Fu('.)275 5121 y(The)c(messages)j(listed)e(b)s(elo)m(w)h +(can)f(b)s(e)g(generated)h(and)f(are)h(in)f(a)g(format)h(suitable)g +(for)f(simple)g(sta-)150 5230 y(tistical)e(analysis.)40 +b Fq(moun)m(t-info)30 b Fu(is)25 b(the)h(string)f(that)h(is)f(displa)m +(y)m(ed)h(b)m(y)f Fq(Amq)j Fu(in)d(its)g(moun)m(t)h(information)150 +5340 y(column)k(and)g(placed)h(in)f(the)g(system)h(moun)m(t)f(table.)p +eop +%%Page: 97 99 +97 98 bop 150 -116 a Fu(Chapter)30 b(12:)41 b(In)m(ternals)2650 +b(97)150 366 y Fo("${)p Fq(path)p Fo(}")46 b(forcibly)g(timed)g(out)630 +476 y Fu(An)30 b(automoun)m(t)h(p)s(oin)m(t)f(has)h(b)s(een)e(timed)i +(out)f(b)m(y)h(the)f Fq(Amq)j Fu(command.)150 635 y Fo("${)p +Fq(path)p Fo(}")46 b(has)h(timed)f(out)630 745 y Fu(No)31 +b(access)h(to)f(the)f(automoun)m(t)h(p)s(oin)m(t)g(has)f(b)s(een)g +(made)g(within)g(the)g(timeout)i(p)s(erio)s(d.)150 904 +y Fo(Filehandle)45 b(denied)h(for)h("${)p Fq(rhost)r +Fo(}:${)p Fq(rfs)t Fo(}")630 1014 y Fu(The)28 b(moun)m(t)h(daemon)f +(refused)g(to)h(return)e(a)i(\014le)g(handle)f(for)g(the)h(requested)f +(\014lesystem.)150 1173 y Fo(Filehandle)45 b(error)h(for)h("${)p +Fq(rhost)r Fo(}:${)p Fq(rfs)t Fo(}":)d Fq(description)630 +1283 y Fu(The)30 b(moun)m(t)g(daemon)h(ga)m(v)m(e)h(some)f(other)g +(error)f(for)g(the)g(requested)h(\014lesystem.)150 1442 +y Fo(Finishing)45 b(with)i(status)f Fq(exit-status)630 +1552 y(Amd)33 b Fu(is)e(ab)s(out)f(to)h(exit)g(with)f(the)h(giv)m(en)g +(exit)h(status.)150 1711 y Fo(Re-synchronizing)43 b(cache)k(for)g(map)g +(${)p Fq(map)s Fo(})630 1821 y Fu(The)20 b(named)g(map)g(has)g(b)s(een) +f(mo)s(di\014ed)g(and)h(the)g(in)m(ternal)h(cac)m(he)h(is)e(b)s(eing)g +(re-sync)m(hronized.)p 3831 1839 42 81 v 150 1980 a Fo(file)47 +b(server)f(${)p Fq(rhost)r Fo(})g(is)i(down)e(-)i(timeout)d(of)j("${)p +Fq(path)p Fo(}")e(ignored)630 2090 y Fu(An)30 b(automoun)m(t)h(p)s(oin) +m(t)f(has)g(timed)g(out,)h(but)f(the)g(corresp)s(onding)f(\014le)i +(serv)m(er)f(is)g(kno)m(wn)630 2200 y(to)25 b(b)s(e)f(do)m(wn.)39 +b(This)23 b(message)j(is)f(only)f(pro)s(duced)f(once)j(for)e(eac)m(h)i +(moun)m(t)e(p)s(oin)m(t)h(for)f(whic)m(h)630 2309 y(the)31 +b(serv)m(er)f(is)h(do)m(wn.)150 2469 y Fo(file)47 b(server)f(${)p +Fq(rhost)r Fo(})g(type)h(nfs)g(is)g(down)630 2578 y Fu(An)30 +b(NFS)g(\014le)h(serv)m(er)f(that)h(w)m(as)g(previously)f(up)g(is)g(no) +m(w)g(do)m(wn.)150 2738 y Fo(file)47 b(server)f(${)p +Fq(rhost)r Fo(})g(type)h(nfs)g(is)g(up)630 2847 y Fu(An)30 +b(NFS)g(\014le)h(serv)m(er)f(that)h(w)m(as)g(previously)f(do)m(wn)g(is) +h(no)m(w)f(up.)150 3007 y Fo(file)47 b(server)f(${)p +Fq(rhost)r Fo(})g(type)h(nfs)g(starts)f(down)630 3116 +y Fu(A)30 b(new)g(NFS)h(\014le)f(serv)m(er)h(has)f(b)s(een)g +(referenced)g(and)g(is)g(kno)m(wn)g(to)h(b)s(e)f(do)m(wn.)150 +3276 y Fo(file)47 b(server)f(${)p Fq(rhost)r Fo(})g(type)h(nfs)g +(starts)f(up)630 3385 y Fu(A)30 b(new)g(NFS)h(\014le)f(serv)m(er)h(has) +f(b)s(een)g(referenced)g(and)g(is)g(kno)m(wn)g(to)h(b)s(e)f(up.)150 +3545 y Fo(mount)46 b(of)i("${)p Fq(path)p Fo(}")e(on)h(${)p +Fq(fs)t Fo(})f(timed)h(out)630 3654 y Fu(A)m(ttempts)36 +b(to)g(moun)m(t)f(a)h(\014lesystem)f(for)g(the)h(giv)m(en)g(automoun)m +(t)g(p)s(oin)m(t)f(ha)m(v)m(e)h(failed)g(to)630 3764 +y(complete)c(within)e(30)h(seconds.)150 3923 y Fq(moun)m(t-info)53 +b Fo(mounted)45 b(fstype)i(${)p Fq(t)m(yp)s(e)5 b Fo(})47 +b(on)g(${)p Fq(fs)t Fo(})630 4033 y Fu(A)30 b(new)g(\014le)h(system)f +(has)g(b)s(een)g(moun)m(ted.)150 4192 y Fq(moun)m(t-info)53 +b Fo(restarted)45 b(fstype)h(${)p Fq(t)m(yp)s(e)5 b Fo(})47 +b(on)g(${)p Fq(fs)t Fo(})630 4302 y Fq(Amd)33 b Fu(is)e(using)f(a)g +(pre-moun)m(ted)g(\014lesystem)h(to)g(satisfy)g(a)g(moun)m(t)f +(request.)150 4461 y Fq(moun)m(t-info)53 b Fo(unmounted)45 +b(fstype)h(${)p Fq(t)m(yp)s(e)5 b Fo(})47 b(from)g(${)p +Fq(fs)t Fo(})630 4571 y Fu(A)30 b(\014le)h(system)f(has)h(b)s(een)e +(unmoun)m(ted.)150 4730 y Fq(moun)m(t-info)53 b Fo(unmounted)45 +b(fstype)h(${)p Fq(t)m(yp)s(e)5 b Fo(})47 b(from)g(${)p +Fq(fs)t Fo(})f(link)h(${)p Fq(fs)t Fo(}/${)p Fq(sublink)6 +b Fo(})630 4840 y Fu(A)30 b(\014le)h(system)f(of)h(whic)m(h)f(only)h(a) +f(sub-directory)g(w)m(as)h(in)f(use)g(has)g(b)s(een)g(unmoun)m(ted.)150 +4999 y Fo(restarting)45 b Fq(moun)m(t-info)53 b Fo(on)47 +b(${)p Fq(fs)t Fo(})630 5109 y Fu(A)30 b(pre-moun)m(ted)h(\014le)f +(system)h(has)f(b)s(een)f(noted.)275 5268 y(XXX:)i(This)e(section)j +(needs)e(to)h(b)s(e)f(up)s(dated)p eop +%%Page: 98 100 +98 99 bop 150 -116 a Fu(Ac)m(kno)m(wledgmen)m(ts)32 b(&)e(T)-8 +b(rademarks)2197 b(98)150 366 y Fr(Ac)l(kno)l(wledgmen)l(ts)49 +b(&)k(T)-13 b(rademarks)275 601 y Fu(Man)m(y)31 b(thanks)f(to)h(the)g +(Amd)f(Dev)m(elop)s(ers)i(\()p Fo(amd-dev@majordomo.cs.colu)o(mbia)o +(.ed)o(u)p Fu(\))25 b(mailing)150 710 y(list)33 b(through)f(the)h(mon)m +(ths)g(dev)m(eloping)h(am-utils.)48 b(These)33 b(mem)m(b)s(ers)f(ha)m +(v)m(e)i(con)m(tributed)f(to)g(the)g(dis-)150 820 y(cussions,)25 +b(ideas,)i(co)s(de)d(and)g(do)s(cumen)m(tation,)j(and)c(sub)5 +b(jected)25 b(their)f(systems)g(to)h(alpha)g(qualit)m(y)g(co)s(de.)150 +929 y(Sp)s(ecial)c(thanks)e(go)i(to)g(those)g(authors)f(\()p +Fo(http://www.cs.columbia.edu)o(/~ez)o(k/am)o(-ut)o(ils/)o(AUTH)o(ORS)o +(.txt)o Fu(\))p 4053 952 42 91 v 150 1039 a(who)30 b(ha)m(v)m(e)i +(submitted)d(patc)m(hes.)275 1173 y(Thanks)i(to)i(the)f(F)-8 +b(ormal)34 b(Metho)s(ds)e(Group)g(at)h(Imp)s(erial)f(College)i(for)e +(su\013ering)g(patien)m(tly)i(while)150 1283 y Fq(Amd)f +Fu(w)m(as)e(b)s(eing)f(dev)m(elop)s(ed)h(on)f(their)g(mac)m(hines.)275 +1418 y(Thanks)h(to)j(the)f(man)m(y)g(p)s(eople)g(who)f(ha)m(v)m(e)i +(help)s(ed)e(with)g(the)h(dev)m(elopmen)m(t)i(of)e Fq(Amd)p +Fu(,)g(esp)s(ecially)150 1527 y(Piete)j(Bro)s(oks)e(at)h(the)g(Cam)m +(bridge)f(Univ)m(ersit)m(y)i(Computing)d(Lab)h(for)g(man)m(y)h(hours)e +(of)i(testing,)h(ex-)150 1637 y(p)s(erimen)m(tation)31 +b(and)f(discussion.)275 1771 y(Thanks)48 b(to)i(the)g(Amd)f(W)-8 +b(ork)m(ers)50 b(\()p Fo(amd-workers@majordomo.glue)o(.umd)o(.edu)o +Fu(\))44 b(mailing)50 b(list)150 1881 y(mem)m(b)s(ers)30 +b(for)g(man)m(y)g(suggestions)h(and)f(bug)g(rep)s(orts)g(to)h +Fq(Amd)p Fu(.)225 2015 y Fs(\017)60 b Fm(DEC)p Fu(,)30 +b Fm(V)-10 b(AX)29 b Fu(and)h Fm(Ultrix)h Fu(are)f(registered)i +(trademarks)e(of)g(Digital)j(Equipmen)m(t)d(Corp)s(oration.)225 +2150 y Fs(\017)60 b Fm(AIX)30 b Fu(and)g Fm(IBM)h Fu(are)g(registered)g +(trademarks)g(of)g(In)m(ternational)g(Business)g(Mac)m(hines)g(Corp)s +(ora-)330 2259 y(tion.)225 2394 y Fs(\017)60 b Fm(Sun)p +Fu(,)29 b Fm(NFS)h Fu(and)g Fm(SunOS)e Fu(are)j(registered)g +(trademarks)g(of)f(Sun)f(Microsystems,)j(Inc.)225 2528 +y Fs(\017)60 b Fm(UNIX)34 b Fu(is)h(a)f(registered)i(trademark)e(in)g +(the)h(USA)f(and)f(other)i(coun)m(tries,)h(exclusiv)m(ely)g(licensed) +330 2638 y(through)30 b(X/Op)s(en)f(Compan)m(y)-8 b(,)31 +b(Ltd.)225 2772 y Fs(\017)60 b Fu(All)31 b(other)g(registered)g +(trademarks)f(are)h(o)m(wned)f(b)m(y)g(their)h(resp)s(ectiv)m(e)g(o)m +(wners.)p eop +%%Page: 99 101 +99 100 bop 150 -116 a Fu(Index)3286 b(99)150 366 y Fr(Index)150 +690 y Ft(!)150 807 y Fe(!exists,)27 b(b)r(o)r(olean)g(moun)n(t)e +(selector)10 b Fd(.)k(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)37 b Fe(23)150 906 y(!false,)28 b(b)r(o)r(olean)f(moun)n +(t)e(selector)13 b Fd(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)39 b Fe(23)150 1006 y(!in)p 240 +1006 24 4 v 28 w(net)n(w)n(ork,)26 b(b)r(o)r(olean)h(moun)n(t)e +(selector)10 b Fd(.)k(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)36 +b Fe(23)150 1105 y(!netgrp,)26 b(b)r(o)r(olean)h(moun)n(t)e(selector)12 +b Fd(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)38 +b Fe(23)150 1205 y(!true,)26 b(b)r(o)r(olean)h(moun)n(t)e(selector)18 +b Fd(.)d(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)44 b Fe(24)150 1464 y Ft(/)150 1581 y Fe(/defaults)27 +b(with)f(selectors)16 b Fd(.)e(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42 +b Fe(92)150 1680 y(/etc/passwd)27 b(maps)15 b Fd(.)e(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)41 b Fe(16)150 1780 y(/etc/rc.lo)r(cal)29 +b(additions)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)42 b Fe(55)150 +1879 y(/tftpb)r(o)r(ot)26 b(in)g(a)g(c)n(hro)r(ot-ed)g(en)n(vironmen)n +(t)18 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 +b Fe(93)150 1979 y(/v)n(ol)15 b Fd(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)42 +b Fe(91)150 2235 y Ft(A)150 2351 y Fe(Additions)25 b(to)h(/etc/rc.lo)r +(cal)11 b Fd(.)16 b(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)37 b Fe(55)150 2451 y(addopts,)26 +b(moun)n(t)f(option)8 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)34 +b Fe(24)150 2550 y(Aliased)26 b(hostnames)11 b Fd(.)k(.)e(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)38 b Fe(31)150 2650 y(Alternate)26 +b(lo)r(cations)d Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)48 +b Fe(8)150 2750 y Fc(am-eject)12 b Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)38 b +Fe(84)150 2849 y(Amd)25 b(command)h(line)g(options)12 +b Fd(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)38 b Fe(29)150 2949 y(Amd)25 b(con\014guration)h(\014le)14 +b Fd(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)40 b Fe(34)150 3049 y(Amd)25 +b(Con\014guration)h(File)6 b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)32 +b Fe(46)150 3148 y(Amd)25 b(con\014guration)h(\014le;)g(sp)r(ecifying)h +(name)13 b Fd(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)39 b Fe(34)150 +3248 y(Amd's)25 b(PID)13 b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)39 b Fe(58)150 3347 y(Amd's)25 +b(pro)r(cess)i(ID)8 b Fd(.)k(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)34 b Fe(58)150 3447 y(amd.conf)16 b Fd(.)f(.)e(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 +b Fe(46)150 3547 y(amd.conf)27 b(common)f(parameters)d +Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)49 b Fe(46)150 3646 y(amd.conf)27 b(examples)22 b +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(53)150 +3746 y(amd.conf)27 b(\014le)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)49 b Fe(34)150 3846 y(amd.conf)27 +b(\014le)e(format)17 b Fd(.)e(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)44 +b Fe(46)150 3945 y(amd.conf)27 b(global)g(parameters)12 +b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)38 b Fe(48)150 4045 y(amd.conf)27 b(global)g(section)14 +b Fd(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)40 b Fe(46)150 4144 y(amd.conf)27 +b(regular)f(map)g(parameters)12 b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)38 b Fe(53)150 4244 y(amd.conf)27 +b(regular)f(map)g(sections)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)42 b Fe(46)150 4344 y +Fc(amd.conf-sample)11 b Fd(.)17 b(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)38 b Fe(84)150 4443 y Fc(amd2ldif)12 b Fd(.)j(.)e(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)38 +b Fe(84)150 4543 y Fc(amd2sun)15 b Fd(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 +b Fe(84)150 4643 y(Amq)25 b(command)15 b Fd(.)e(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)42 b Fe(55)150 4742 y(arc)n(h)26 +b(P)n(arameter)12 b Fd(.)i(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)39 b Fe(48)150 4842 y(arc)n(h)26 b(Selector)g(V)-6 +b(ariable)23 b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)49 b +Fe(21)150 4941 y(arc)n(h,)26 b(FSinfo)g(host)g(attribute)9 +b Fd(.)k(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)35 b Fe(64)150 5041 y(arc)n(h,)26 b(moun)n(t)f +(selector)15 b Fd(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)41 +b Fe(21)150 5141 y(Arc)n(hitecture)25 b(dep)r(enden)n(t)f(v)n(olumes)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45 +b Fe(90)150 5240 y(Arc)n(hitecture)25 b(sharing)13 b +Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)39 b Fe(90)150 +5340 y(Arc)n(hitecture)25 b(sp)r(eci\014c)h(moun)n(ts)15 +b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)41 b Fe(91)2025 690 y(Assorted)26 b(T)-6 b(o)r(ols)23 +b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)49 +b Fe(84)2025 790 y(A)n(tomic)26 b(NFS)f(moun)n(ts)11 +b Fd(.)i(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)38 b Fe(37)2025 +890 y(auto,)26 b(\014lesystem)g(t)n(yp)r(e)8 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)35 b Fe(42)2025 989 +y(auto)p 2179 989 V 28 w(dir)25 b(P)n(arameter)17 b Fd(.)d(.)f(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)43 b Fe(48)2025 1089 y(auto)r(dir)26 +b(Selector)g(V)-6 b(ariable)23 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)49 +b Fe(21)2025 1188 y(auto)r(dir,)26 b(moun)n(t)f(selector)15 +b Fd(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)41 b Fe(21)2025 1288 y(Autofs)26 +b(\014lesystem)18 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)44 b Fe(45)2025 1388 y(autofs,)27 b(\014lesystem)f(t)n(yp)r(e)16 +b Fd(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)42 b Fe(45)2025 1487 +y(Automatic)26 b(generation)g(of)h(user)e(maps)d Fd(.)13 +b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)48 b Fe(16)2025 +1587 y(Automoun)n(t)24 b(directory)18 b Fd(.)c(.)f(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)45 b Fe(29)2025 1687 y(Automoun)n(t)24 b(\014lesystem)f +Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)49 b Fe(42)2025 1786 +y(Automoun)n(ter)25 b(con\014guration)h(maps)21 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)48 +b Fe(14)2025 1886 y(Automoun)n(ter)25 b(fundamen)n(tals)17 +b Fd(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)44 b Fe(7)2025 2102 y Ft(B)2025 2218 +y Fe(Bac)n(kground)26 b(moun)n(ts)c Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)50 b Fe(8)2025 2318 y(Bac)n(kground)26 b(to)f(Mail)i(Deliv) +n(ery)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)49 b Fe(78)2025 2417 y(Binding)26 b(names)g(to)g +(\014lesystems)8 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(8)2025 2517 y(b)r(o)r +(otparams,)27 b(FSinfo)f(pre\014x)19 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)46 +b Fe(70)2025 2617 y(bro)n(wsable)p 2360 2617 V 29 w(dirs)26 +b(P)n(arameter)13 b Fd(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)39 b Fe(47)2025 +2716 y(Bug)26 b(rep)r(orts)d Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)50 b Fe(3)2025 2816 +y(b)n(yte)24 b(Selector)j(V)-6 b(ariable)22 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)48 b Fe(21)2025 2916 y(b)n(yte,)25 +b(moun)n(t)g(selector)14 b Fd(.)g(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)40 +b Fe(21)2025 3132 y Ft(C)2025 3248 y Fe(Cac)n(he)26 b(in)n(terv)l(al)14 +b Fd(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)41 +b Fe(29)2025 3347 y(cac)n(he,)26 b(moun)n(t)f(option)15 +b Fd(.)f(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42 b Fe(42)2025 +3447 y(cac)n(he)p 2211 3447 V 28 w(duration)25 b(P)n(arameter)7 +b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)34 b Fe(48)2025 3547 y(cac)n(hedir,)26 +b(moun)n(t)f(option)20 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)46 +b Fe(38)2025 3646 y(cac)n(hefs,)27 b(\014lesystem)f(t)n(yp)r(e)17 +b Fd(.)12 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)43 b Fe(38)2025 3746 y(Cac)n(hing)26 +b(Filesystem)13 b Fd(.)i(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)40 +b Fe(38)2025 3846 y(Catc)n(h-all)26 b(moun)n(t)f(p)r(oin)n(t)17 +b Fd(.)d(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)44 b Fe(91)2025 3945 +y(CD-R)n(OM)25 b(Filesystem)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)47 +b Fe(39)2025 4045 y(cdfs,)26 b(\014lesystem)g(t)n(yp)r(e)18 +b Fd(.)12 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 b Fe(39)2025 +4144 y(Cen)n(tralized)26 b(Mail)h(Sp)r(o)r(ol)g(Directory)21 +b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)47 +b Fe(78)2025 4244 y(Changing)26 b(the)g(in)n(terv)l(al)f(b)r(efore)i(a) +f(\014lesystem)g(times)g(out)2185 4344 y Fd(.)13 b(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)33 b Fe(29)2025 4443 y(c)n(hro)r(ot:)i(/tftpb)r(o)r(ot)26 +b(example)15 b Fd(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)42 b Fe(93)2025 4543 y(Cluster)26 +b(names)15 b Fd(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)41 b Fe(33)2025 4643 y(cluster)26 b(P)n(arameter)7 +b Fd(.)14 b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)33 +b Fe(48)2025 4742 y(cluster)26 b(Selector)g(V)-6 b(ariable)17 +b Fd(.)d(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)43 b Fe(21)2025 4842 y(cluster,)26 +b(FSinfo)g(host)g(attribute)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)47 b Fe(64)2025 +4941 y(cluster,)26 b(moun)n(t)f(selector)9 b Fd(.)15 +b(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)36 b Fe(21)2025 5041 y(Command)26 +b(line)g(options,)h(Amd)8 b Fd(.)k(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)34 b Fe(29)2025 5141 +y(Command)26 b(line)g(options,)h(FSinfo)15 b Fd(.)e(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)41 b Fe(70)2025 +5240 y(con\014g,)26 b(FSinfo)g(host)g(attribute)17 b +Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)43 b Fe(64)2025 5340 y(Con\014guration)26 b(\014le;)g(tags)6 +b Fd(.)15 b(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 b Fe(35)p eop +%%Page: 100 102 +100 101 bop 150 -116 a Fu(Index)3241 b(100)150 366 y +Fe(Con\014guration)27 b(map)e(t)n(yp)r(es)8 b Fd(.)k(.)i(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)34 +b Fe(14)150 466 y(Con)n(trolling)27 b(Amd)21 b Fd(.)13 +b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)48 b Fe(56)150 +566 y(Con)n(trolling)27 b(Hlfsd)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)42 b Fe(81)150 665 y(Creating)27 b(a)f(pid)f(\014le)17 +b Fd(.)d(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)44 b +Fe(31)150 765 y(ctl-amd)7 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 +b Fe(55)150 865 y Fc(ctl-amd)15 b Fd(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 +b Fe(84)150 964 y Fc(ctl-hlfsd)16 b Fd(.)f(.)e(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)43 b Fe(81,)26 b(84)150 1193 +y Ft(D)150 1309 y Fe(Debug)f(options)11 b Fd(.)j(.)f(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)38 b Fe(34)150 1409 +y(debug)p 356 1409 24 4 v 27 w(options)26 b(P)n(arameter)20 +b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)45 b Fe(48)150 1508 y(Debugging)26 +b(a)g(new)g(Amd)f(con\014guration)13 b Fd(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)39 b Fe(58)150 1608 y(debugging)26 b(hesio)r(d)g(resolv) +n(er)h(service)c Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)49 b Fe(34)150 1708 y(Debugging)26 b(options)g(via)g(Amq)6 +b Fd(.)12 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)32 b Fe(60)150 1807 y(De\014ning)25 b(a)h(host,)g +(FSinfo)20 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(62)150 +1907 y(De\014ning)25 b(an)h(Amd)f(moun)n(t)g(map,)h(FSinfo)20 +b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)46 b Fe(69)150 +2006 y(De\014ning)25 b(host)h(attributes,)g(FSinfo)11 +b Fd(.)i(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)37 +b Fe(63)150 2106 y(dela)n(y)-6 b(,)25 b(moun)n(t)h(option)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)48 b Fe(24)150 +2206 y(Dela)n(ying)26 b(moun)n(ts)f(from)i(sp)r(eci\014c)f(lo)r +(cations)13 b Fd(.)i(.)e(.)g(.)g(.)g(.)h(.)f(.)39 b Fe(24)150 +2305 y(Determining)26 b(the)f(map)h(t)n(yp)r(e)13 b Fd(.)f(.)h(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)39 +b Fe(14)150 2405 y(dev,)25 b(moun)n(t)g(option)9 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)36 b Fe(38,)27 b(39,)f(40)150 2505 y(Direct)g(automoun)n +(t)f(\014lesystem)17 b Fd(.)d(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)44 b Fe(43)150 2604 y(direct,)26 +b(\014lesystem)g(t)n(yp)r(e)20 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)47 +b Fe(43)150 2704 y(Disco)n(v)n(ering)26 b(v)n(ersion)g(information)13 +b Fd(.)i(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)39 +b Fe(32)150 2803 y(Disco)n(v)n(ering)26 b(what)g(is)g(going)h(on)f(at)g +(run-time)10 b Fd(.)i(.)h(.)g(.)h(.)f(.)g(.)36 b Fe(56)150 +2903 y(Disk)25 b(\014lesystems)d Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)48 b Fe(38)150 3003 y(dismoun)n(t)p +465 3003 V 27 w(in)n(terv)l(al)26 b(P)n(arameter)11 b +Fd(.)j(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)37 b Fe(49)150 3102 y(Displa)n(ying)26 b(brief)g(help)8 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)34 b Fe(34)150 +3202 y(Displa)n(ying)26 b(the)f(pro)r(cess)i(id)21 b +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)47 b Fe(31)150 3302 y(Distributed)25 +b(Mail)i(Sp)r(o)r(ol)f(Service)9 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)35 b Fe(79)150 3401 +y(Domain)26 b(name)20 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)46 b Fe(30)150 3501 y(domain)26 b(Selector)g(V)-6 +b(ariable)22 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(21)150 3600 +y(Domain)26 b(stripping)11 b Fd(.)j(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)38 b Fe(19)150 3700 y(domain,)26 b(moun)n(t)f(selector)14 +b Fd(.)h(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)40 b Fe(21)150 3800 y(Domainname)26 +b(op)r(erators)17 b Fd(.)d(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)43 b Fe(19)150 +3899 y(dumpset,)25 b(FSinfo)h(\014lesystems)h(option)9 +b Fd(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)35 +b Fe(67)150 3999 y(dumpset,)25 b(FSinfo)h(pre\014x)7 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)33 b Fe(71)150 4099 +y(Duplicated)25 b(v)n(olumes)11 b Fd(.)j(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)38 b Fe(7)150 4327 y Ft(E)150 4443 y Fe(EFS)11 +b Fd(.)i(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)37 b Fe(38)150 4543 +y(efs,)27 b(\014lesystem)f(t)n(yp)r(e)21 b Fd(.)13 b(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)48 b Fe(38)150 4643 y(En)n(vironmen)n(t)25 +b(v)l(ariables)14 b Fd(.)g(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)41 +b Fe(19)150 4742 y(Error)26 b(\014lesystem)c Fd(.)13 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)48 +b Fe(44)150 4842 y(error,)27 b(\014lesystem)e(t)n(yp)r(e)19 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)45 b Fe(44)150 +4941 y(Example)26 b(of)g(arc)n(hitecture)g(sp)r(eci\014c)g(moun)n(ts)9 +b Fd(.)k(.)g(.)g(.)g(.)h(.)f(.)g(.)35 b Fe(91)150 5041 +y(Example)26 b(of)g(moun)n(ting)g(home)g(directories)13 +b Fd(.)h(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)40 b Fe(89)150 +5141 y(exists)26 b(Selector)g(F)-6 b(unction)9 b Fd(.)k(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)35 b Fe(23)150 5240 y(exists,)26 b(b)r(o)r(olean)h(moun)n(t)e +(selector)e Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)47 b Fe(23)150 5340 y Fc(expn)23 b Fd(.)13 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)49 b Fe(85)2025 366 y(exp)r(ort,)25 +b(FSinfo)i(sp)r(ecial)g(fst)n(yp)r(e)13 b Fd(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)40 b +Fe(66)2025 466 y(exp)r(ortfs,)26 b(FSinfo)g(moun)n(t)g(option)19 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)45 b Fe(67)2025 566 y(exp)r(orts,)26 b(FSinfo)g(pre\014x)9 +b Fd(.)j(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)36 b Fe(71)2025 840 +y Ft(F)2025 956 y Fe(false)27 b(Selector)f(F)-6 b(unction)11 +b Fd(.)i(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)38 b Fe(23)2025 1056 +y(false,)27 b(b)r(o)r(olean)g(moun)n(t)e(selector)6 b +Fd(.)15 b(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)33 b Fe(23)2025 1156 y(File)26 b(map)g(syn)n(tactic)g(con)n +(v)n(en)n(tions)9 b Fd(.)j(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)36 b Fe(14)2025 1255 y(File)26 b(maps)d +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)49 b Fe(14)2025 1355 y(Fileserv)n(er)9 b +Fd(.)14 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)36 b Fe(7)2025 1455 y(Filesystem)10 +b Fd(.)k(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)37 b Fe(7)2025 1554 y(Filesystem)26 b(info)h(pac)n(k)l +(age)11 b Fd(.)i(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)38 b Fe(61)2025 1654 +y(Filesystem)26 b(t)n(yp)r(e;)g(auto)11 b Fd(.)i(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)38 b Fe(42)2025 1753 y(Filesystem)26 b(t)n(yp)r(e;)g(autofs)18 +b Fd(.)c(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)45 b Fe(45)2025 1853 y(Filesystem)26 +b(t)n(yp)r(e;)g(cac)n(hefs)20 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)46 +b Fe(38)2025 1953 y(Filesystem)26 b(t)n(yp)r(e;)g(cdfs)21 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)47 b Fe(39)2025 +2052 y(Filesystem)26 b(t)n(yp)r(e;)g(direct)7 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)33 b Fe(43)2025 2152 y(Filesystem)26 +b(t)n(yp)r(e;)g(efs)8 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +34 b Fe(38)2025 2252 y(Filesystem)26 b(t)n(yp)r(e;)g(error)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)48 b Fe(44)2025 2351 +y(Filesystem)26 b(t)n(yp)r(e;)g(host)15 b Fd(.)e(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)42 b Fe(36)2025 2451 y(Filesystem)26 b(t)n(yp)r(e;)g(inherit)9 +b Fd(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)35 b Fe(45)2025 2550 y(Filesystem)26 +b(t)n(yp)r(e;)g(link)c Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)49 +b Fe(41)2025 2650 y(Filesystem)26 b(t)n(yp)r(e;)g(linkx)19 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)46 b Fe(41)2025 2750 +y(Filesystem)26 b(t)n(yp)r(e;)g(lofs)12 b Fd(.)i(.)f(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)39 b Fe(39)2025 2849 y(Filesystem)26 b(t)n(yp)r(e;)g(mfs)10 +b Fd(.)j(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)36 b Fe(39)2025 +2949 y(Filesystem)26 b(t)n(yp)r(e;)g(nfs)21 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)47 b Fe(36)2025 3049 +y(Filesystem)26 b(t)n(yp)r(e;)g(nfsl)10 b Fd(.)j(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)36 b Fe(42)2025 3148 y(Filesystem)26 b(t)n(yp)r(e;)g(nfsx)17 +b Fd(.)c(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)44 b Fe(37)2025 3248 +y(Filesystem)26 b(t)n(yp)r(e;)g(n)n(ullfs)13 b Fd(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)40 b Fe(39)2025 3347 y(Filesystem)26 b(t)n(yp)r(e;)g(p)r(cfs)20 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)46 b Fe(40)2025 +3447 y(Filesystem)26 b(t)n(yp)r(e;)g(program)13 b Fd(.)h(.)f(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)40 +b Fe(40)2025 3547 y(Filesystem)26 b(t)n(yp)r(e;)g(ro)r(ot)16 +b Fd(.)e(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)43 b Fe(45)2025 3646 +y(Filesystem)26 b(t)n(yp)r(e;)g(tfs)10 b Fd(.)j(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)36 b Fe(40)2025 3746 y(Filesystem)26 b(t)n(yp)r(e;)g(tmpfs) +8 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)34 b Fe(40)2025 +3846 y(Filesystem)26 b(t)n(yp)r(e;)g(toplvl)d Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)49 b Fe(44)2025 3945 y(Filesystem)26 +b(t)n(yp)r(e;)g(ufs)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)47 +b Fe(38)2025 4045 y(Filesystem)26 b(t)n(yp)r(e;)g(umapfs)16 +b Fd(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)43 b Fe(40)2025 4144 y(Filesystem)26 +b(t)n(yp)r(e;)g(union)9 b Fd(.)j(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)36 +b Fe(44)2025 4244 y(Filesystem)26 b(t)n(yp)r(e;)g(xfs)21 +b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)48 b Fe(38)2025 +4344 y(Filesystem)26 b(t)n(yp)r(es)9 b Fd(.)k(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)35 b Fe(36)2025 4443 y Fc(fix-amd-map)24 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +48 b Fe(85)2025 4543 y Fc(fixmount)12 b Fd(.)j(.)e(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)39 +b Fe(85)2025 4643 y Fc(fixrmtab)12 b Fd(.)j(.)e(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b +Fe(85)2025 4742 y(Flat)26 b(\014le)g(maps)c Fd(.)13 b(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b Fe(14)2025 +4842 y(Flopp)n(y)25 b(Filesystem)15 b Fd(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)41 b Fe(40)2025 4941 y(Flushing)26 b(the)f(map)h(cac)n +(he)8 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(57)2025 +5041 y(F)-6 b(orcing)26 b(Amq)f(to)h(use)f(a)h(TCP)h(transp)r(ort)19 +b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45 b Fe(59)2025 +5141 y(F)-6 b(orcing)26 b(Amq)f(to)h(use)f(a)h(UDP)f(transp)r(ort)16 +b Fd(.)e(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)43 b Fe(59)2025 +5240 y(F)-6 b(orcing)26 b(\014lesystem)g(to)g(time)g(out)7 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)33 b Fe(59)2025 5340 y(freq,)26 b(FSinfo)g(\014lesystems)g +(option)20 b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)46 b Fe(66)p eop +%%Page: 101 103 +101 102 bop 150 -116 a Fu(Index)3241 b(101)150 366 y +Fe(fs,)27 b(moun)n(t)e(option)11 b Fd(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)37 b Fe(25)150 466 y(FSinfo)8 b Fd(.)14 +b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)35 b Fe(61)150 566 y(FSinfo)26 b(arc)n(h)g(host)g +(attribute)19 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)46 b Fe(64)150 665 +y(FSinfo)26 b(automoun)n(t)g(de\014nitions)20 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)46 +b Fe(69)150 765 y(FSinfo)26 b(cluster)g(host)g(attribute)14 +b Fd(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)40 b Fe(64)150 865 y(FSinfo)26 b(command)g(line)g(options)20 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)45 b Fe(70)150 964 y(FSinfo)26 b(con\014g)g(host)g(attribute)10 +b Fd(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)37 b Fe(64)150 1064 y(FSinfo)26 b(dumpset)f(\014lesystems)h +(option)20 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)46 +b Fe(67)150 1163 y(FSinfo)26 b(error)h(messages)7 b Fd(.)15 +b(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)34 b Fe(72)150 1263 y(FSinfo)26 +b(\014lesystems)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)48 +b Fe(64)150 1363 y(FSinfo)26 b(freq)g(\014lesystems)g(option)13 +b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)39 b Fe(66)150 1462 y(FSinfo)26 b(fst)n(yp)r(e)g(\014lesystems)g +(option)11 b Fd(.)i(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)37 b Fe(66)150 1562 y(FSinfo)26 b(grammar)15 b +Fd(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 +b Fe(62)150 1662 y(FSinfo)26 b(host)g(attributes)21 b +Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)47 b Fe(63)150 1761 +y(FSinfo)26 b(host)g(de\014nitions)12 b Fd(.)h(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +39 b Fe(62)150 1861 y(FSinfo)26 b(log)h(\014lesystems)f(option)11 +b Fd(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)37 b Fe(68)150 1961 y(FSinfo)26 b(moun)n(t)f(\014lesystems)h +(option)21 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)47 b Fe(67)150 2060 y(FSinfo)26 b(opts)g(\014lesystems)g(option) +6 b Fd(.)14 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)33 b Fe(66)150 2160 y(FSinfo)26 b(os)h(host)e(attribute)e +Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)49 b Fe(64)150 2259 y(FSinfo)26 +b(o)n(v)n(erview)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)47 b Fe(61)150 2359 y(FSinfo)26 b(passno)h(\014lesystems)f +(option)17 b Fd(.)c(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)43 b Fe(66)150 2459 y(FSinfo)26 b(static)h(moun)n(ts)7 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)33 b Fe(68)150 +2558 y(fstab,)27 b(FSinfo)f(pre\014x)17 b Fd(.)12 b(.)h(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)43 b Fe(71)150 2658 y(fst)n(yp)r(e,)26 +b(FSinfo)g(\014lesystems)g(option)17 b Fd(.)d(.)f(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)43 b Fe(66)150 2758 y(fully)p +304 2758 24 4 v 28 w(quali\014ed)p 616 2758 V 27 w(hosts)26 +b(P)n(arameter)10 b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)36 b Fe(49)150 2986 y Ft(G)150 +3102 y Fe(Generic)26 b(v)n(olume)g(name)11 b Fd(.)i(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)37 b Fe(91)150 3202 y(Global)27 b(statistics)17 +b Fd(.)d(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)43 +b Fe(59)150 3302 y(Grammar,)27 b(FSinfo)10 b Fd(.)k(.)f(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)36 b Fe(62)150 3530 y Ft(H)150 +3646 y Fe(Help;)26 b(sho)n(wing)g(from)h(Amd)21 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)48 b Fe(34)150 3746 y(Hesio)r(d)26 b(maps)6 +b Fd(.)14 b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)33 b Fe(16)150 3846 y(Hesio)r(d:)i(turning)25 b(on)h(RES)p +969 3846 V 27 w(DEBUG)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)43 b Fe(34)150 3945 y(hesio)r(d)p 366 +3945 V 28 w(base)26 b(P)n(arameter)11 b Fd(.)k(.)e(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +37 b Fe(49)150 4045 y(History)13 b Fd(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)40 +b Fe(6)150 4144 y Fc(Hlfsd)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)46 +b Fe(76)150 4244 y(Hlfsd)26 b(Files)7 b Fd(.)14 b(.)f(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)33 +b Fe(83)150 4344 y(Hlfsd)26 b(Options)21 b Fd(.)13 b(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)48 b Fe(81)150 +4443 y(Hlfsd;)26 b(bac)n(kground)17 b Fd(.)c(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)43 b Fe(78)150 4543 y(Hlfsd;)26 b(con)n(trolling)16 +b Fd(.)f(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)42 +b Fe(81)150 4643 y(Hlfsd;)26 b(Files)13 b Fd(.)i(.)e(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)40 b Fe(83)150 +4742 y(Hlfsd;)26 b(in)n(tro)r(duction)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)48 b Fe(76)150 4842 y(Hlfsd;)26 b(Options)11 +b Fd(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)37 +b Fe(81)150 4941 y(Hlfsd;)26 b(using)c Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)48 b Fe(81)150 +5041 y(Hlfsd;)26 b(Wh)n(y)f(Deliv)n(er)h(In)n(to)f(the)g(Home)h +(Directory?)14 b Fd(.)f(.)40 b Fe(80)150 5141 y(Home)26 +b(directories)e Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +49 b Fe(89)150 5240 y(Home-Link)25 b(Filesystem)14 b +Fd(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)40 b Fe(76)150 5340 y(host)26 +b(Selector)g(V)-6 b(ariable)6 b Fd(.)14 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +33 b Fe(21)2025 366 y(host,)26 b(\014lesystem)g(t)n(yp)r(e)13 +b Fd(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)39 b Fe(36)2025 +466 y(host,)26 b(moun)n(t)f(selector)16 b Fd(.)e(.)f(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)42 b Fe(21)2025 566 y(hostd)25 b(Selector)i(V)-6 +b(ariable)19 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(21)2025 +665 y(hostd,)26 b(moun)n(t)f(selector)12 b Fd(.)i(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)38 b Fe(21)2025 765 y(Hostname)26 b(normalization)14 +b Fd(.)h(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)40 b Fe(31)2025 865 y(hostname,)26 +b(FSinfo)g(command)g(line)g(option)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h +(.)47 b Fe(71)2025 964 y(Ho)n(w)26 b(k)n(eys)f(are)h(lo)r(ok)n(ed)g(up) +9 b Fd(.)j(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)35 b Fe(18)2025 1064 y(Ho)n(w)26 +b(lo)r(cations)h(are)f(parsed)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)47 +b Fe(18)2025 1163 y(Ho)n(w)26 b(to)g(access)h(en)n(vironmen)n(t)d(v)l +(ariables)j(in)e(maps)f Fd(.)13 b(.)49 b Fe(19)2025 1263 +y(Ho)n(w)26 b(to)g(disco)n(v)n(er)f(y)n(our)h(v)n(ersion)f(of)i(Amd)21 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)49 b Fe(32)2025 +1363 y(Ho)n(w)26 b(to)g(moun)n(t)f(a)h(lo)r(cal)h(disk)14 +b Fd(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)41 b Fe(38)2025 1462 y(Ho)n(w)26 b(to)g(moun)n(t)f(a)h +(UFS)f(\014lesystems)8 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)34 b Fe(38)2025 1562 y(Ho)n(w)26 b(to)g(moun)n(t)f +(all)h(NFS)f(exp)r(orted)g(\014lesystems)14 b Fd(.)g(.)f(.)g(.)41 +b Fe(36)2025 1662 y(Ho)n(w)26 b(to)g(moun)n(t)f(an)g(atomic)i(group)f +(of)g(NFS)f(\014lesystems)2185 1761 y Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)33 b Fe(37)2025 1861 y(Ho)n(w)26 b(to)g(moun)n(t)f(and)g(NFS)g +(\014lesystem)14 b Fd(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)41 b Fe(36)2025 1961 y(Ho)n(w)25 b(to)h(reference)g(an)f(existing)h +(part)f(of)h(the)f(lo)r(cal)i(name)2178 2060 y(space)20 +b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)46 b Fe(41)2025 2160 y(Ho)n(w)26 b(to)g(reference)g(part)g +(of)g(the)f(lo)r(cal)j(name)e(space)12 b Fd(.)h(.)38 +b Fe(41)2025 2259 y(Ho)n(w)26 b(to)g(select)g(log)h(messages)8 +b Fd(.)15 b(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)35 b Fe(32)2025 2359 y(Ho)n(w)26 b(to)g(set)f +(default)i(map)e(parameters)18 b Fd(.)c(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)44 b Fe(19)2025 2459 y(Ho)n(w)26 b(to)g(set)f(map)h(cac)n +(he)g(parameters)9 b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)36 b Fe(42)2025 2558 y(Ho)n(w)26 b(to)g(start)g(a)g(direct)f +(automoun)n(t)h(p)r(oin)n(t)14 b Fd(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +40 b Fe(43)2025 2658 y(Ho)n(w)26 b(to)g(start)g(an)f(indirect)h +(automoun)n(t)f(p)r(oin)n(t)12 b Fd(.)h(.)g(.)g(.)h(.)f(.)38 +b Fe(42)2025 2758 y(Ho)n(w)26 b(v)l(ariables)g(are)g(expanded)6 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)33 b Fe(19)2025 2971 y Ft(I)2025 3087 +y Fe(in)p 2094 3087 V 27 w(net)n(w)n(ork)26 b(Selector)g(F)-6 +b(unction)8 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)35 b Fe(23)2025 3187 y(in)p 2094 +3187 V 27 w(net)n(w)n(ork,)26 b(b)r(o)r(olean)h(moun)n(t)e(selector)d +Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)47 +b Fe(23)2025 3286 y(inherit,)26 b(\014lesystem)g(t)n(yp)r(e)6 +b Fd(.)12 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)33 b Fe(45)2025 3386 +y(Inheritance)25 b(\014lesystem)8 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)35 b Fe(45)2025 3486 y(In)n(terv)l(al)25 b(b)r(efore)h(a)g +(\014lesystem)g(times)g(out)d Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)50 b Fe(29)2025 3585 y(In)n(tro)r(duction)12 b Fd(.)g(.)h(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)39 +b Fe(5)2025 3685 y(In)n(tro)r(duction)25 b(to)h(Hlfsd)16 +b Fd(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 b Fe(76)2025 3898 +y Ft(K)2025 4014 y Fe(k)l(arc)n(h)25 b(P)n(arameter)11 +b Fd(.)j(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)38 +b Fe(49)2025 4114 y(k)l(arc)n(h)25 b(Selector)h(V)-6 +b(ariable)22 b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)48 b Fe(22)2025 +4214 y(k)l(arc)n(h,)25 b(moun)n(t)g(selector)14 b Fd(.)g(.)g(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)40 b Fe(22)2025 4313 y(Keep-aliv)n(es)15 +b Fd(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)42 b Fe(9)2025 4413 y(Key)25 b(lo)r(okup)10 +b Fd(.)j(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)37 b Fe(18)2025 4512 y(k)n(ey)24 b(Selector)j(V)-6 +b(ariable)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)47 +b Fe(22)2025 4612 y(k)n(ey)-6 b(,)24 b(moun)n(t)h(selector)16 +b Fd(.)f(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 b Fe(22)2025 +4712 y(Killing)26 b(and)g(starting)g(Amd)16 b Fd(.)d(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 +b Fe(55)2025 4925 y Ft(L)2025 5041 y Fe(LD)n(AP)25 b(maps)12 +b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)39 b Fe(17)2025 5141 y(ldap)p 2175 5141 V 27 w(base)27 +b(P)n(arameter)10 b Fd(.)k(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)37 +b Fe(49)2025 5240 y(ldap)p 2175 5240 V 27 w(cac)n(he)p +2383 5240 V 28 w(maxmem)26 b(P)n(arameter)14 b Fd(.)g(.)f(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)40 b Fe(49)2025 +5340 y(ldap)p 2175 5340 V 27 w(cac)n(he)p 2383 5340 V +28 w(seconds)27 b(P)n(arameter)d Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)49 b Fe(49)p eop +%%Page: 102 104 +102 103 bop 150 -116 a Fu(Index)3241 b(102)150 366 y +Fe(ldap)p 300 366 24 4 v 28 w(hostp)r(orts)26 b(P)n(arameter)11 +b Fd(.)j(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)37 b Fe(49)150 466 y(License)26 b(Information)8 +b Fd(.)14 b(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)35 +b Fe(2)150 566 y(Ligh)n(t)n(w)n(eigh)n(t)26 b(Directory)g(Access)g +(Proto)r(col)17 b Fd(.)f(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)44 +b Fe(17)150 665 y(link,)26 b(\014lesystem)g(t)n(yp)r(e)19 +b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)46 b Fe(41)150 +765 y(linkx,)25 b(\014lesystem)h(t)n(yp)r(e)17 b Fd(.)c(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)43 b Fe(41)150 865 y(Listing)26 b(curren)n(tly)f(moun)n +(ted)g(\014lesystems)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)42 +b Fe(56)150 964 y(lo)r(cal)p 309 964 V 29 w(domain)26 +b(P)n(arameter)e Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)48 b Fe(49)150 +1064 y(Lo)r(cation)27 b(format)17 b Fd(.)d(.)f(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)43 b Fe(18)150 1163 y(Lo)r(cation)27 +b(lists)13 b Fd(.)h(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)40 b Fe(8)150 1263 y(lo)r(c)n(king)26 b(executable)g(pages) +h(in)e(memory)8 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +34 b Fe(35)150 1363 y(lofs,)27 b(\014lesystem)f(t)n(yp)r(e)9 +b Fd(.)k(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)36 b Fe(39)150 +1462 y(Log)26 b(\014le,)g(resetting)12 b Fd(.)j(.)e(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)39 b Fe(57)150 1562 y(Log)26 b(\014lename)6 +b Fd(.)14 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)33 b Fe(30)150 1662 y(Log)26 b(message)i(selection)8 +b Fd(.)14 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)34 b Fe(32)150 +1761 y(log,)27 b(FSinfo)f(\014lesystems)g(option)17 b +Fd(.)d(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)44 b Fe(68)150 1861 y(log)p 252 1861 V 29 w(\014le)26 +b(P)n(arameter)6 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)32 b Fe(50)150 1961 y(log)p 252 1961 V 29 w(options)26 +b(P)n(arameter)20 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)45 +b Fe(50)150 2060 y(Logging)27 b(options)f(via)g(Amq)18 +b Fd(.)12 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)44 b Fe(60)150 2160 y(Lo)r(oking)26 +b(up)f(k)n(eys)14 b Fd(.)e(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)40 b Fe(18)150 2259 y(Lo)r(opbac)n(k)26 b(Filesystem)c +Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fe(39)150 +2359 y Fc(lostaltmail)24 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(86)150 2459 y Fc +(lostaltmail.conf-sample)8 b Fd(.)18 b(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)34 +b Fe(86)150 2558 y(lostaltmail;)28 b(con\014guration)f(\014le)11 +b Fd(.)i(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)37 b Fe(86)150 2833 y Ft(M)150 2949 y Fe(Mailing)27 +b(list)14 b Fd(.)g(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)41 b Fe(3)150 3049 y(Map)26 b(cac)n(he)g(options)9 +b Fd(.)k(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)35 b +Fe(42)150 3148 y(Map)26 b(cac)n(he)g(sync)n(hronizing)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(42)150 3248 y(Map)26 b(cac)n(he)g(t)n +(yp)r(es)8 b Fd(.)k(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)34 +b Fe(42)150 3347 y(Map)26 b(cac)n(he,)g(\015ushing)7 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)33 b Fe(57)150 +3447 y(Map)26 b(defaults)17 b Fd(.)d(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fe(19)150 3547 y(Map)26 +b(en)n(try)f(format)d Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +48 b Fe(18)150 3646 y(Map)26 b(lo)r(okup)19 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)45 +b Fe(18)150 3746 y(Map)26 b(options)10 b Fd(.)k(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)36 b Fe(24)150 +3846 y(map)26 b(Selector)g(V)-6 b(ariable)22 b Fd(.)13 +b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(22)150 3945 y(Map)26 +b(t)n(yp)r(es)9 b Fd(.)j(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)35 b Fe(14)150 4045 y(map,)26 +b(moun)n(t)f(selector)14 b Fd(.)g(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)40 +b Fe(22)150 4144 y(map)p 300 4144 V 28 w(name)26 b(P)n(arameter)10 +b Fd(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)37 b Fe(53)150 4244 +y(map)p 300 4244 V 28 w(options)26 b(P)n(arameter)12 +b Fd(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)39 b Fe(47)150 4344 y(map)p +300 4344 V 28 w(t)n(yp)r(e)25 b(P)n(arameter)9 b Fd(.)14 +b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)36 b Fe(47)150 4443 +y(maps,)26 b(FSinfo)h(command)e(line)h(option)8 b Fd(.)14 +b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)34 b +Fe(72)150 4543 y(Memory/RAM)26 b(Filesystem)18 b Fd(.)c(.)f(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)44 +b Fe(39)150 4643 y(mfs,)27 b(\014lesystem)f(t)n(yp)r(e)7 +b Fd(.)12 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)33 b Fe(39)150 +4742 y Fc(mk-amd-map)7 b Fd(.)15 b(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)33 b Fe(86)150 4842 y(Moun)n(t)25 +b(a)h(\014lesystem)g(under)f(program)i(con)n(trol)21 +b Fd(.)13 b(.)h(.)f(.)g(.)47 b Fe(40)150 4941 y(Moun)n(t)25 +b(\015ags;)i(acdirmax)14 b Fd(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)40 +b Fe(25)150 5041 y(Moun)n(t)25 b(\015ags;)i(acdirmin)22 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(25)150 5141 +y(Moun)n(t)25 b(\015ags;)i(acregmax)10 b Fd(.)k(.)f(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +36 b Fe(25)150 5240 y(Moun)n(t)25 b(\015ags;)i(acregmin)17 +b Fd(.)e(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)43 b Fe(25)150 5340 y(Moun)n(t)25 +b(\015ags;)i(actimeo)c Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)48 +b Fe(25)2025 366 y(Moun)n(t)25 b(\015ags;)i(auto)9 b +Fd(.)k(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)35 +b Fe(26)2025 466 y(Moun)n(t)25 b(\015ags;)i(cac)n(he)10 +b Fd(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)36 b +Fe(26)2025 566 y(Moun)n(t)25 b(\015ags;)i(compress)17 +b Fd(.)d(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)43 b Fe(26)2025 665 y(Moun)n(t)25 +b(\015ags;)i(defp)r(erm)15 b Fd(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)42 +b Fe(26)2025 765 y(Moun)n(t)25 b(\015ags;)i(dev)8 b Fd(.)k(.)h(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)34 b Fe(26)2025 865 +y(Moun)n(t)25 b(\015ags;)i(dum)n(btimr)18 b Fd(.)12 b(.)h(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)45 b Fe(26)2025 964 y(Moun)n(t)25 b(\015ags;)i(fsid)7 +b Fd(.)14 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)34 +b Fe(26)2025 1064 y(Moun)n(t)25 b(\015ags;)i(grpid)13 +b Fd(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)39 b +Fe(26)2025 1163 y(Moun)n(t)25 b(\015ags;)i(ignore)15 +b Fd(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fe(26)2025 +1263 y(Moun)n(t)25 b(\015ags;)i(in)n(t)20 b Fd(.)13 b(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)47 b Fe(26)2025 1363 +y(Moun)n(t)25 b(\015ags;)i(in)n(tr)22 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)49 b Fe(26)2025 1462 y(Moun)n(t)25 +b(\015ags;)i(maxgroups)20 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)47 +b Fe(26)2025 1562 y(Moun)n(t)25 b(\015ags;)i(m)n(ulti)12 +b Fd(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b +Fe(26)2025 1662 y(Moun)n(t)25 b(\015ags;)i(nfsv3)13 b +Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)39 b Fe(26)2025 +1761 y(Moun)n(t)25 b(\015ags;)i(noac)7 b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)33 b Fe(26)2025 1861 y(Moun)n(t)25 +b(\015ags;)i(noauto)20 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)46 +b Fe(26)2025 1961 y(Moun)n(t)25 b(\015ags;)i(no)r(cac)n(he)20 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)46 b Fe(26)2025 +2060 y(Moun)n(t)25 b(\015ags;)i(no)r(conn)14 b Fd(.)f(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)41 b Fe(26)2025 2160 y(Moun)n(t)25 b(\015ags;)i(no)r +(cto)8 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)34 +b Fe(26)2025 2259 y(Moun)n(t)25 b(\015ags;)i(no)r(defp)r(erm)8 +b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)34 b Fe(26)2025 2359 y(Moun)n(t)25 +b(\015ags;)i(no)r(dev)17 b Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +44 b Fe(26)2025 2459 y(Moun)n(t)25 b(\015ags;)i(no)r(devs)19 +b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(26)2025 +2558 y(Moun)n(t)25 b(\015ags;)i(noin)n(t)14 b Fd(.)f(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)41 b Fe(26)2025 2658 y(Moun)n(t)25 +b(\015ags;)i(nosub)19 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +46 b Fe(26)2025 2758 y(Moun)n(t)25 b(\015ags;)i(nosuid)9 +b Fd(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)35 b Fe(26)2025 +2857 y(Moun)n(t)25 b(\015ags;)i(nounmoun)n(t)12 b Fd(.)g(.)h(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)38 b Fe(27)2025 2957 y(Moun)n(t)25 b(\015ags;)i(no)n(v)n(ersion)12 +b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)38 b Fe(26)2025 3056 +y(Moun)n(t)25 b(\015ags;)i(o)n(v)n(erla)n(y)16 b Fd(.)d(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)43 b Fe(26)2025 3156 y(Moun)n(t)25 b(\015ags;)i +(pgthresh)6 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)33 +b Fe(26)2025 3256 y(Moun)n(t)25 b(\015ags;)i(ping)11 +b Fd(.)i(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)37 +b Fe(27)2025 3355 y(Moun)n(t)25 b(\015ags;)i(p)r(ort)12 +b Fd(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 +b Fe(27)2025 3455 y(Moun)n(t)25 b(\015ags;)i(p)r(osix)13 +b Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)39 b +Fe(27)2025 3555 y(Moun)n(t)25 b(\015ags;)i(proto)11 b +Fd(.)i(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)37 b Fe(27)2025 +3654 y(Moun)n(t)25 b(\015ags;)i(quota)22 b Fd(.)13 b(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)49 b Fe(27)2025 3754 y(Moun)n(t)25 +b(\015ags;)i(rdonly)10 b Fd(.)i(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)36 +b Fe(27)2025 3853 y(Moun)n(t)25 b(\015ags;)i(resvp)r(ort)13 +b Fd(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)39 b Fe(27)2025 3953 +y(Moun)n(t)25 b(\015ags;)i(retrans)17 b Fd(.)c(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)43 b Fe(27)2025 4053 y(Moun)n(t)25 b(\015ags;)i(retry)18 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 +b Fe(27)2025 4152 y(Moun)n(t)25 b(\015ags;)i(retry=)p +Fd(n)18 b(.)12 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fe(28)2025 +4252 y(Moun)n(t)25 b(\015ags;)i(ro)15 b Fd(.)e(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fe(27)2025 4352 y(Moun)n(t)25 +b(\015ags;)i(rrip)21 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)48 b Fe(27)2025 4451 y(Moun)n(t)25 b(\015ags;)i(rsize)8 +b Fd(.)14 b(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)35 +b Fe(27)2025 4551 y(Moun)n(t)25 b(\015ags;)i(rw)7 b Fd(.)13 +b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 +b Fe(27)2025 4650 y(Moun)n(t)25 b(\015ags;)i(soft)c Fd(.)13 +b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)49 b Fe(27)2025 +4750 y(Moun)n(t)25 b(\015ags;)i(sp)r(ongy)17 b Fd(.)c(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)44 b Fe(27)2025 4850 y(Moun)n(t)25 b(\015ags;)i(suid)15 +b Fd(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41 +b Fe(27)2025 4949 y(Moun)n(t)25 b(\015ags;)i(sym)n(ttl)11 +b Fd(.)h(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)37 b Fe(27)2025 +5049 y(Moun)n(t)25 b(\015ags;)i(sync)10 b Fd(.)i(.)h(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)36 b Fe(27)2025 5149 y(Moun)n(t)25 +b(\015ags;)i(tcp)13 b Fd(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)40 b Fe(27)2025 5248 y(Moun)n(t)25 b(\015ags;)i(timeo)7 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)33 +b Fe(27)p eop +%%Page: 103 105 +103 104 bop 150 -116 a Fu(Index)3241 b(103)150 366 y +Fe(Moun)n(t)25 b(\015ags;)i(utimeout=)p Fd(n)17 b(.)c(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)44 +b Fe(28)150 466 y(Moun)n(t)25 b(\015ags;)i(v)n(ers)17 +b Fd(.)c(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)43 +b Fe(27)150 566 y(Moun)n(t)25 b(\015ags;)i(wsize)13 b +Fd(.)h(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)39 b Fe(27)150 +665 y(Moun)n(t)25 b(home)h(directories)9 b Fd(.)14 b(.)f(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)35 b Fe(89)150 765 y(Moun)n(t)25 b(information)e Fd(.)13 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)47 b Fe(14)150 +865 y(Moun)n(t)25 b(map)h(t)n(yp)r(es)8 b Fd(.)k(.)i(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)34 b Fe(14)150 964 y(Moun)n(t)25 +b(maps)9 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)35 b Fe(14)150 1064 y(Moun)n(t)25 b(option;)i(addopts)21 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(24)150 1163 y(Moun)n(t)25 +b(option;)i(cac)n(he)12 b Fd(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 +b Fe(42)150 1263 y(Moun)n(t)25 b(option;)i(cac)n(hedir)16 +b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 b Fe(38)150 1363 y(Moun)n(t)25 +b(option;)i(dela)n(y)15 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)42 +b Fe(24)150 1462 y(Moun)n(t)25 b(option;)i(dev)22 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)50 b Fe(38,)27 b(39,)f(40)150 1562 y(Moun)n(t)f(option;)i +(fs)8 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)34 +b Fe(25)150 1662 y(Moun)n(t)25 b(option;)i(moun)n(t)12 +b Fd(.)g(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b Fe(40)150 1761 +y(Moun)n(t)25 b(option;)i(opts)15 b Fd(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)41 b Fe(25)150 1861 y(Moun)n(t)25 b(option;)i(remopts)19 +b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(28)150 1961 y(Moun)n(t)25 +b(option;)i(rfs)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)43 +b Fe(36,)26 b(39)150 2060 y(Moun)n(t)f(option;)i(rhost)17 +b Fd(.)c(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)43 b Fe(36)150 +2160 y(Moun)n(t)25 b(option;)i(sublink)16 b Fd(.)c(.)i(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)42 b Fe(28)150 2259 y(Moun)n(t)25 b(option;)i(t)n(yp)r(e)12 +b Fd(.)g(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b Fe(28)150 +2359 y(Moun)n(t)25 b(option;)i(unmoun)n(t)19 b Fd(.)13 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)47 b Fe(40)150 2459 y(Moun)n(t)25 +b(retries)11 b Fd(.)j(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)38 b Fe(8)150 2558 y(Moun)n(t)25 b(selector;)j(arc)n(h) +12 b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)38 b Fe(21)150 +2658 y(Moun)n(t)25 b(selector;)j(auto)r(dir)12 b Fd(.)h(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)38 b Fe(21)150 2758 y(Moun)n(t)25 b(selector;)j(b)n(yte)11 +b Fd(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)37 b Fe(21)150 +2857 y(Moun)n(t)25 b(selector;)j(cluster)6 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)32 b Fe(21)150 2957 y(Moun)n(t)25 +b(selector;)j(domain)11 b Fd(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)37 +b Fe(21)150 3056 y(Moun)n(t)25 b(selector;)j(exists)7 +b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)33 b Fe(23)150 +3156 y(Moun)n(t)25 b(selector;)j(false)9 b Fd(.)15 b(.)e(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)36 b Fe(23)150 3256 y(Moun)n(t)25 b(selector;)j(host)13 +b Fd(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)39 b Fe(21)150 +3355 y(Moun)n(t)25 b(selector;)j(hostd)8 b Fd(.)13 b(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)35 b Fe(21)150 3455 y(Moun)n(t)25 b(selector;)j(in)p +766 3455 24 4 v 27 w(net)n(w)n(ork)6 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)33 +b Fe(23)150 3555 y(Moun)n(t)25 b(selector;)j(k)l(arc)n(h)11 +b Fd(.)h(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)37 b Fe(22)150 3654 +y(Moun)n(t)25 b(selector;)j(k)n(ey)10 b Fd(.)i(.)h(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)36 b Fe(22)150 3754 y(Moun)n(t)25 b(selector;)j(map)11 +b Fd(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)37 b Fe(22)150 +3853 y(Moun)n(t)25 b(selector;)j(netgrp)9 b Fd(.)j(.)h(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)35 b Fe(23)150 3953 y(Moun)n(t)25 b(selector;)j(netn)n(um)n(b)r(er) +21 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)49 b Fe(22)150 4053 y(Moun)n(t)25 +b(selector;)j(net)n(w)n(ork)18 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 +b Fe(23)150 4152 y(Moun)n(t)25 b(selector;)j(os)15 b +Fd(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)41 b Fe(22)150 +4252 y(Moun)n(t)25 b(selector;)j(osv)n(er)15 b Fd(.)e(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)41 b Fe(22)150 4352 y(Moun)n(t)25 b(selector;)j(path)6 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)33 b Fe(23)150 +4451 y(Moun)n(t)25 b(selector;)j(true)15 b Fd(.)e(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)41 b Fe(24)150 4551 y(Moun)n(t)25 b(selector;)j(wire)13 +b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)39 b Fe(23)150 +4650 y(moun)n(t)25 b(system)h(call)17 b Fd(.)d(.)f(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)43 b Fe(25)150 4750 y(moun)n(t)25 b(system)h(call)h +(\015ags)15 b Fd(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 b Fe(25)150 +4850 y(Moun)n(t)25 b(t)n(yp)r(es)8 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)34 b Fe(36)150 +4949 y(moun)n(t,)25 b(FSinfo)i(\014lesystems)f(option)10 +b Fd(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)36 +b Fe(67)150 5049 y(moun)n(t,)25 b(moun)n(t)g(option)15 +b Fd(.)f(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)42 b Fe(40)150 5149 +y(moun)n(t)p 371 5149 V 27 w(t)n(yp)r(e)25 b(P)n(arameter)8 +b Fd(.)14 b(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(47)150 5248 +y(Moun)n(ting)26 b(a)g(lo)r(cal)h(disk)9 b Fd(.)k(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)35 b Fe(38)2025 366 y(Moun)n(ting)24 b(a)h(remote)g(part)f(of)h +(the)f(name)g(space)h(if)g(target)2178 466 y(is)i(missing)15 +b Fd(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)41 +b Fe(42)2025 566 y(Moun)n(ting)26 b(a)g(UFS)f(\014lesystem)18 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)44 b Fe(38)2025 665 y(Moun)n(ting)26 b(a)g(v)n(olume)15 +b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)42 b +Fe(8)2025 765 y(Moun)n(ting)25 b(an)h(atomic)h(group)e(of)i(NFS)d +(\014lesystems)10 b Fd(.)k(.)37 b Fe(37)2025 865 y(Moun)n(ting)26 +b(an)f(existing)h(part)g(of)g(the)g(lo)r(cal)h(name)f(space)2185 +964 y Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)33 b Fe(41)2025 +1064 y(Moun)n(ting)26 b(an)f(NFS)g(\014lesystem)13 b +Fd(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)40 b Fe(36)2025 1163 y(Moun)n(ting)26 b(en)n(tire)f(exp)r(ort)h +(trees)9 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)36 b Fe(36)2025 1263 y(Moun)n(ting)26 +b(part)f(of)i(the)e(lo)r(cal)i(name)f(space)13 b Fd(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)39 b Fe(41)2025 1363 y(Moun)n(ting)26 +b(user)f(\014lesystems)7 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)33 b +Fe(88)2025 1462 y(Multiple)26 b(Amd)f(pro)r(cesses)f +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b Fe(58)2025 1562 y(Multiple-threaded)25 +b(serv)n(er)12 b Fd(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)38 b Fe(10)2025 +1791 y Ft(N)2025 1907 y Fe(Namespace)18 b Fd(.)c(.)f(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45 +b Fe(8)2025 2006 y(ndbm)24 b(maps)7 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)33 b Fe(15)2025 +2106 y(netgrp)25 b(Selector)h(F)-6 b(unction)10 b Fd(.)j(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)37 b Fe(23)2025 2206 y(netgrp,)25 b(b)r(o)r(olean)i(moun)n(t)e +(selector)f Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)49 b Fe(23)2025 2305 y(netn)n(um)n(b)r(er)24 +b(Selector)i(V)-6 b(ariable)16 b Fd(.)e(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)43 b Fe(22)2025 +2405 y(netn)n(um)n(b)r(er,)24 b(moun)n(t)h(selector)9 +b Fd(.)14 b(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)35 b Fe(22)2025 2505 y(Net)n(w)n(ork)25 +b(\014lesystem)h(group)16 b Fd(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)42 b Fe(37)2025 +2604 y(Net)n(w)n(ork)25 b(host)h(\014lesystem)7 b Fd(.)13 +b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)34 b Fe(36)2025 2704 y(net)n(w)n(ork)25 +b(Selector)i(V)-6 b(ariable)12 b Fd(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)38 +b Fe(23)2025 2803 y(net)n(w)n(ork,)26 b(moun)n(t)f(selector)d +Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)48 b Fe(23)2025 2903 y(Net)n(w)n(ork-wide)25 +b(naming)9 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)36 +b Fe(7)2025 3003 y(NFS)8 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)35 +b Fe(36)2025 3102 y(NFS)25 b(ping)11 b Fd(.)h(.)i(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)38 +b Fe(9)2025 3202 y(NFS)25 b(V.3)h(supp)r(ort)17 b Fd(.)12 +b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)43 b Fe(11)2025 +3302 y(nfs,)26 b(\014lesystem)g(t)n(yp)r(e)18 b Fd(.)12 +b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 b Fe(36)2025 +3401 y(NFS-Link)24 b(\014lesystem)i(I)r(I)9 b Fd(.)j(.)h(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)35 b Fe(42)2025 3501 y(nfs)p 2126 3501 V 28 w(retransmit)p +2504 3501 V 28 w(coun)n(ter)26 b(P)n(arameter)15 b Fd(.)f(.)f(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fe(50)2025 +3600 y(nfs)p 2126 3600 V 28 w(retry)p 2319 3600 V 27 +w(in)n(terv)l(al)26 b(P)n(arameter)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)48 b Fe(50)2025 +3700 y(nfsl,)26 b(\014lesystem)g(t)n(yp)r(e)7 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)34 b Fe(42)2025 +3800 y(nfsx,)26 b(\014lesystem)g(t)n(yp)r(e)15 b Fd(.)d(.)h(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)41 b Fe(37)2025 3899 y(NIS)24 b(\(YP\))h(domain)i(name) +7 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)34 b Fe(33)2025 3999 +y(NIS)24 b(\(YP\))h(maps)9 b Fd(.)14 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)36 b Fe(15)2025 4099 y(nis)p 2124 +4099 V 28 w(domain)26 b(P)n(arameter)20 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)45 b Fe(51)2025 4198 y(NIS)p Fc(+)25 b Fe(maps)19 +b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)46 b Fe(16)2025 4298 y(No)r(des)26 b(generated)g(on)f(a)h +(restart)6 b Fd(.)14 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)33 b Fe(45)2025 4397 y(Non-blo)r(c)n(king)25 +b(op)r(eration)14 b Fd(.)g(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)41 b Fe(10)2025 +4497 y(normalize)p 2353 4497 V 29 w(hostnames)26 b(P)n(arameter)e +Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)49 +b Fe(51)2025 4597 y(Normalizing)27 b(hostnames)16 b Fd(.)e(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)42 b Fe(31)2025 4696 y(Null)25 b(Filesystem)9 +b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)36 +b Fe(39)2025 4796 y(n)n(ullfs,)26 b(\014lesystem)g(t)n(yp)r(e)10 +b Fd(.)j(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)37 b Fe(39)2025 5025 +y Ft(O)2025 5141 y Fe(Obtaining)25 b(the)h(source)g(co)r(de)21 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)47 b Fe(3)2025 5240 y(Op)r(erating)26 +b(System)f(name)19 b Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)46 b Fe(35)2025 +5340 y(Op)r(erating)26 b(System)f(v)n(ersion)8 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)35 b Fe(31)p eop +%%Page: 104 106 +104 105 bop 150 -116 a Fu(Index)3241 b(104)150 366 y +Fe(Op)r(erational)27 b(principles)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)47 b Fe(8)150 466 y(opts,)26 b(FSinfo)g(\014lesystems)h(option) +13 b Fd(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)39 b Fe(66)150 566 y(opts,)26 b(moun)n(t)f(option)18 +b Fd(.)c(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fe(25)150 +665 y(os)26 b(P)n(arameter)15 b Fd(.)g(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)42 b Fe(51)150 765 y(os)26 +b(Selector)h(V)-6 b(ariable)9 b Fd(.)k(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)35 b Fe(22)150 865 y(os,)27 b(FSinfo)f(host)g(attribute)12 +b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)38 b Fe(64)150 964 y(os,)27 b(moun)n(t)e +(selector)18 b Fd(.)c(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)44 +b Fe(22)150 1064 y(osv)n(er)26 b(P)n(arameter)15 b Fd(.)g(.)e(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)42 b Fe(51)150 1163 +y(osv)n(er)26 b(Selector)g(V)-6 b(ariable)8 b Fd(.)14 +b(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(22)150 1263 y(osv)n(er,)26 +b(moun)n(t)f(selector)18 b Fd(.)d(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)44 +b Fe(22)150 1363 y(Ov)n(erriding)25 b(defaults)i(on)e(the)h(command)g +(line)7 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)34 b Fe(29)150 +1462 y(Ov)n(erriding)25 b(or)h(adding)g(options)g(to)g(a)g(moun)n(t)12 +b Fd(.)g(.)i(.)f(.)g(.)g(.)g(.)38 b Fe(24)150 1562 y(Ov)n(erriding)25 +b(the)h(default)g(moun)n(t)f(p)r(oin)n(t)17 b Fd(.)c(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)44 b Fe(25)150 1662 y(Ov)n(erriding)25 +b(the)h(lo)r(cal)h(domain)f(name)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)47 b Fe(30)150 1761 y(Ov)n(erriding)25 +b(the)h(NIS)e(\(YP\))h(domain)h(name)d Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.) +f(.)48 b Fe(33)150 1981 y Ft(P)150 2097 y Fe(P)n(assing)27 +b(parameters)g(to)f(the)f(moun)n(t)g(system)h(call)10 +b Fd(.)k(.)f(.)37 b Fe(25)150 2197 y(passno,)27 b(FSinfo)f +(\014lesystems)g(option)6 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)33 b Fe(66)150 2296 y(P)n(assw)n(ord)27 +b(\014le)f(maps)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)47 +b Fe(16)150 2396 y(path)25 b(Selector)i(V)-6 b(ariable)17 +b Fd(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fe(23)150 2495 y(path,)26 +b(moun)n(t)f(selector)10 b Fd(.)k(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)36 +b Fe(23)150 2595 y(P)n(athname)26 b(op)r(erators)17 b +Fd(.)d(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)43 b Fe(19)150 +2695 y Fc(pawd)23 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fe(86)150 2794 y(p)r(cfs,)27 b(\014lesystem)f(t)n(yp)r(e)17 +b Fd(.)12 b(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)43 b Fe(40)150 +2894 y(Pic)n(king)26 b(up)f(existing)h(moun)n(ts)19 b +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)45 b Fe(31)150 2994 y(pid)25 b(\014le,)h(creating)h +(with)f(-p)f(option)17 b Fd(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)44 b Fe(31)150 3093 y(PID;)26 b(Amd)11 +b Fd(.)h(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)37 b Fe(58)150 3193 y(pid)p 262 3193 24 4 +v 27 w(\014le)26 b(P)n(arameter)20 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)45 b Fe(51)150 3293 y(plo)r(c)n(k)26 +b(P)n(arameter)12 b Fd(.)i(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)39 b Fe(51)150 3392 y(plo)r(c)n(k;)26 b(using)21 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)47 b Fe(35)150 3492 y(p)r(ortmap)p 443 3492 V 28 +w(program)26 b(P)n(arameter)7 b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)33 b Fe(52)150 +3591 y(Primary)26 b(serv)n(er)c Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)48 b Fe(24)150 3691 y(prin)n(t)p +320 3691 V 27 w(pid)25 b(P)n(arameter)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)46 b Fe(52)150 3791 y(prin)n(t)p 320 3791 +V 27 w(v)n(ersion)26 b(P)n(arameter)7 b Fd(.)14 b(.)f(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +33 b Fe(52)150 3890 y(Pro)r(cess)27 b(id)15 b Fd(.)f(.)f(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)42 +b Fe(31)150 3990 y(pro)r(cess)27 b(id)e(of)i(Amd)e(daemon)12 +b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)38 b Fe(31)150 4090 y(Pro)r(cess)27 b(ID;)f(Amd)18 +b Fd(.)12 b(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)44 +b Fe(58)150 4189 y(Program)27 b(\014lesystem)17 b Fd(.)d(.)f(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)44 b Fe(40)150 4289 y(program,)27 +b(\014lesystem)f(t)n(yp)r(e)10 b Fd(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)37 +b Fe(40)150 4499 y Ft(Q)150 4615 y Fe(Querying)25 b(an)h(alternate)g +(host)d Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)49 b Fe(57)150 4715 y(quiet,)25 +b(FSinfo)i(command)f(line)g(option)12 b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)38 b Fe(72)150 4925 y Ft(R)150 +5041 y Fe(Referencing)26 b(an)g(existing)g(part)g(of)g(the)f(lo)r(cal)j +(name)304 5141 y(space)20 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(41)150 +5240 y(Referencing)26 b(an)g(existing)g(part)g(of)g(the)f(name)h(space) +g(if)304 5340 y(target)g(exists)d Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)49 b Fe(42)2025 366 y(Referencing)26 +b(part)g(of)g(the)f(lo)r(cal)j(name)d(space)13 b Fd(.)i(.)e(.)g(.)g(.)g +(.)g(.)40 b Fe(41)2025 466 y(Regular)26 b(expressions)g(in)g(maps)17 +b Fd(.)c(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)43 b Fe(42)2025 566 y(remopts,)26 b(moun)n(t)f(option)e +Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)49 b Fe(28)2025 665 y(Replacemen)n(t)25 +b(v)n(olumes)13 b Fd(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)41 +b Fe(7)2025 765 y(Replicated)26 b(v)n(olumes)17 b Fd(.)c(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)44 b Fe(7)2025 865 y(Resetting)26 +b(the)f(Amd)g(log)h(\014le)16 b Fd(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)42 b Fe(57)2025 +964 y(Resolving)26 b(aliased)h(hostnames)17 b Fd(.)d(.)f(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)44 +b Fe(31)2025 1064 y(restart)p 2252 1064 V 28 w(moun)n(ts)25 +b(P)n(arameter)7 b Fd(.)14 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 b Fe(52)2025 +1163 y(Restarting)26 b(Amd)18 b Fd(.)12 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)44 b Fe(55)2025 1263 y(Restarting)26 +b(existing)g(moun)n(ts)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)49 b Fe(31)2025 +1363 y(rfs,)26 b(moun)n(t)g(option)19 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)46 b Fe(36,)27 b(39)2025 1462 y(rhost,)f(moun)n(t)f(option)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)47 b Fe(36)2025 +1562 y(Ro)r(ot)26 b(\014lesystem)12 b Fd(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)39 b Fe(45)2025 1662 y(ro)r(ot,)27 +b(\014lesystem)e(t)n(yp)r(e)14 b Fd(.)e(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +40 b Fe(45)2025 1761 y(RPC)26 b(Program)h(n)n(um)n(b)r(ers;)e(Amd)9 +b Fd(.)j(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)36 b Fe(58)2025 1861 y(RPC)26 b(retries)21 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)47 +b Fe(10)2025 1961 y(Run-time)24 b(administration)8 b +Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(55)2025 2060 y(Running)24 +b(m)n(ultiple)i(Amd)18 b Fd(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 +b Fe(58)2025 2160 y(rwho)26 b(serv)n(ers)10 b Fd(.)k(.)f(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)37 b Fe(91)2025 +2434 y Ft(S)2025 2550 y Fe(searc)n(h)p 2237 2550 V 28 +w(path)25 b(P)n(arameter)9 b Fd(.)14 b(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)36 +b Fe(47)2025 2650 y(Secondary)25 b(serv)n(er)d Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)49 b Fe(24)2025 +2750 y(sel,)26 b(FSinfo)h(moun)n(t)e(option)9 b Fd(.)k(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +36 b Fe(67)2025 2849 y(Selecting)26 b(sp)r(eci\014c)g(log)h(messages)22 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)46 b Fe(32)2025 2949 y(Selector;)26 b(arc)n(h)10 b +Fd(.)j(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)36 +b Fe(21)2025 3049 y(Selector;)26 b(auto)r(dir)10 b Fd(.)k(.)f(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)36 b Fe(21)2025 3148 +y(Selector;)26 b(b)n(yte)9 b Fd(.)j(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)35 b Fe(21)2025 3248 y(Selector;)26 +b(cluster)c Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +48 b Fe(21)2025 3347 y(Selector;)26 b(domain)9 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)35 +b Fe(21)2025 3447 y(Selector;)26 b(exists)d Fd(.)13 b(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)49 b Fe(23)2025 3547 +y(Selector;)26 b(false)8 b Fd(.)15 b(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)34 b Fe(23)2025 3646 y(Selector;)26 +b(host)11 b Fd(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)37 b Fe(21)2025 3746 y(Selector;)26 b(hostd)6 +b Fd(.)14 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 +b Fe(21)2025 3846 y(Selector;)26 b(in)p 2405 3846 V 28 +w(net)n(w)n(ork)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)48 +b Fe(23)2025 3945 y(Selector;)26 b(k)l(arc)n(h)9 b Fd(.)k(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)35 b Fe(22)2025 +4045 y(Selector;)26 b(k)n(ey)8 b Fd(.)k(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)34 b Fe(22)2025 4144 +y(Selector;)26 b(map)9 b Fd(.)k(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)35 b Fe(22)2025 4244 y(Selector;)26 +b(netgrp)7 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)33 b Fe(23)2025 4344 y(Selector;)26 b(netn)n(um)n(b)r(er)20 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)47 b Fe(22)2025 +4443 y(Selector;)26 b(net)n(w)n(ork)16 b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)43 b Fe(23)2025 4543 y(Selector;)26 +b(os)13 b Fd(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)39 b Fe(22)2025 4643 y(Selector;)26 b(osv)n(er)13 +b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)39 +b Fe(22)2025 4742 y(Selector;)26 b(path)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)48 b Fe(23)2025 4842 +y(Selector;)26 b(true)13 b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)40 b Fe(24)2025 4941 y(Selector;)26 +b(wire)11 b Fd(.)j(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)37 b Fe(23)2025 5041 y(Selectors)22 b Fd(.)13 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)48 b Fe(20)2025 5141 y(selectors)27 b(on)f(default)16 +b Fd(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)42 b Fe(92)2025 +5240 y(selectors)p 2311 5240 V 29 w(on)p 2421 5240 V +28 w(default)26 b(P)n(arameter)14 b Fd(.)g(.)g(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)41 b Fe(52)2025 5340 +y(Serv)n(er)25 b(crashes)20 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)46 b Fe(9)p eop +%%Page: 105 107 +105 106 bop 150 -116 a Fu(Index)3241 b(105)150 366 y +Fe(Setting)26 b(a)g(dela)n(y)f(on)h(a)g(moun)n(t)f(lo)r(cation)9 +b Fd(.)14 b(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)35 +b Fe(24)150 466 y(Setting)26 b(additional)g(options)g(on)g(a)g(moun)n +(t)f(lo)r(cation)310 566 y Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 +b Fe(24)150 665 y(Setting)26 b(Amd's)f(RPC)h(parameters)10 +b Fd(.)k(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)37 +b Fe(31)150 765 y(Setting)26 b(debug)f(\015ags)20 b Fd(.)13 +b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(34)150 +865 y(Setting)26 b(default)g(map)f(parameters)12 b Fd(.)i(.)f(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)38 b Fe(19)150 +964 y(Setting)26 b(map)f(cac)n(he)h(parameters)21 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)47 +b Fe(42)150 1064 y(Setting)26 b(map)f(options)17 b Fd(.)d(.)f(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)44 b Fe(24)150 1163 y(Setting)26 +b(system)f(moun)n(t)g(options)8 b Fd(.)14 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(25)150 +1263 y(Setting)26 b(system)f(moun)n(t)g(options)i(for)f(non-lo)r(cal) +304 1363 y(net)n(w)n(orks)12 b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)38 b Fe(28)150 1462 y(Setting)26 +b(the)f(Amd)g(log)h(\014le)g(via)g(Amq)17 b Fd(.)c(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)44 b Fe(57)150 1562 y(Setting)26 +b(the)f(cluster)h(name)13 b Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)39 +b Fe(33)150 1662 y(Setting)26 b(the)f(default)h(moun)n(t)f(directory)14 +b Fd(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)40 +b Fe(29)150 1761 y(Setting)26 b(the)f(\014lesystem)h(t)n(yp)r(e)f +(option)11 b Fd(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +37 b Fe(28)150 1861 y(Setting)26 b(the)f(in)n(terv)l(al)g(b)r(efore)i +(a)f(\014lesystem)g(times)g(out)310 1961 y Fd(.)14 b(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)33 b Fe(29)150 2060 y(Setting)26 b(the)f(in)n(terv)l(al)g(b)r +(et)n(w)n(een)h(unmoun)n(t)e(attempts)310 2160 y Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)33 b Fe(32)150 2259 y(Setting)26 +b(the)f(Kernel)g(arc)n(hitecture)e Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)49 b Fe(30)150 2359 y(Setting)26 +b(the)f(lo)r(cal)i(domain)f(name)12 b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b Fe(30)150 2459 +y(Setting)26 b(the)f(lo)r(cal)i(moun)n(t)e(p)r(oin)n(t)13 +b Fd(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +h(.)39 b Fe(25)150 2558 y(Setting)26 b(the)f(log)i(\014le)13 +b Fd(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)39 b +Fe(30)150 2658 y(Setting)26 b(the)f(NIS)f(\(YP\))i(domain)g(name)14 +b Fd(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)40 +b Fe(33)150 2758 y(Setting)26 b(the)f(Op)r(erating)h(System)f(name)9 +b Fd(.)k(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)35 +b Fe(35)150 2857 y(Setting)26 b(the)f(Op)r(erating)h(System)f(v)n +(ersion)15 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 +b Fe(31)150 2957 y(Setting)26 b(the)f(sublink)g(option)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)47 b Fe(28)150 3056 y(shared)26 b(libraries)15 +b Fd(.)f(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 +b Fe(11)150 3156 y(Shared)25 b(Memory)h(and)g(Sw)n(ap)f(Filesystem)13 +b Fd(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)39 b Fe(40)150 +3256 y(Sharing)26 b(a)g(\014leserv)n(er)g(b)r(et)n(w)n(een)f(arc)n +(hitectures)19 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)45 b Fe(90)150 +3355 y(sho)n(w)p 319 3355 24 4 v 28 w(statfs)p 528 3355 +V 29 w(en)n(tries)26 b(P)n(arameter)12 b Fd(.)i(.)f(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)38 b Fe(52)150 +3455 y(SIGHUP)25 b(signal)13 b Fd(.)h(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)40 b Fe(42)150 3555 y(SIGINT)25 b(signal)10 +b Fd(.)k(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)36 +b Fe(55)150 3654 y(SIGTERM)26 b(signal)14 b Fd(.)g(.)f(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)40 b Fe(55)150 3754 y(Single-Host)26 +b(Mail)h(Sp)r(o)r(ol)f(Directory)21 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)47 b Fe(78)150 3853 y(Source)26 +b(co)r(de)g(distribution)18 b Fd(.)13 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)45 +b Fe(3)150 3953 y(Starting)26 b(Amd)c Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)49 b Fe(55)150 4053 y(Statically)26 +b(moun)n(ts)g(\014lesystems,)g(FSinfo)11 b Fd(.)j(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)37 b Fe(68)150 4152 y(Statistics)15 +b Fd(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)41 b Fe(59)150 4252 y(Stopping)25 b(Amd)10 +b Fd(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)36 +b Fe(55)150 4352 y(Stripping)25 b(the)h(lo)r(cal)h(domain)f(name)10 +b Fd(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)36 +b Fe(19)150 4451 y(sublink)16 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)43 +b Fe(7)150 4551 y(sublink,)25 b(moun)n(t)g(option)20 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fe(28)150 4650 +y(Supp)r(orted)25 b(Platforms)f Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +49 b Fe(11)150 4750 y(Sym)n(b)r(olic)26 b(link)f(\014lesystem)c +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fe(41)150 4850 y(Sym)n(b)r(olic)26 +b(link)f(\014lesystem)h(I)r(I)13 b Fd(.)f(.)i(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)39 +b Fe(41)150 4949 y(Symlink)25 b(if)h(target)g(exists,)h(NFS)e +(otherwise)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g(.)g(.)47 b +Fe(42)150 5049 y(symlink,)26 b(link)f(\014lesystem)h(t)n(yp)r(e)14 +b Fd(.)e(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)40 b Fe(41)150 5149 y(symlink,)26 b(linkx)f(\014lesystem)g(t)n +(yp)r(e)10 b Fd(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)37 b Fe(41)150 5248 y(symlink,)26 b(nfsl)g(\014lesystem) +g(t)n(yp)r(e)18 b Fd(.)12 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)44 b Fe(42)2025 366 y(Sync)n(hronizing)25 +b(the)g(map)h(cac)n(he)21 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)47 b Fe(42)2025 466 +y(syslog)18 b Fd(.)c(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fe(30)2025 +566 y(syslog)27 b(facilit)n(y;)g(sp)r(ecifying)f(an)g(alternate)16 +b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)42 b Fe(30)2025 +665 y(syslog)27 b(priorities)9 b Fd(.)14 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)36 b Fe(32)2025 879 y Ft(T)2025 +995 y Fe(tag)26 b(P)n(arameter)14 b Fd(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)40 b Fe(53)2025 1094 y(T)-6 +b(ags)27 b(for)f(Amd)f(con\014guration)h(\014le)18 b +Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 +b Fe(35)2025 1194 y(TCP;)27 b(using)f(with)g(Amq)17 b +Fd(.)12 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)43 b Fe(59)2025 1294 +y(tfs,)26 b(\014lesystem)g(t)n(yp)r(e)7 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)34 b Fe(40)2025 1393 y(The)26 b(moun)n(t)f(system)g +(call)6 b Fd(.)15 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)33 b Fe(25)2025 +1493 y(tmpfs,)26 b(\014lesystem)g(t)n(yp)r(e)21 b Fd(.)13 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)49 b Fe(40)2025 1593 y(T)-6 +b(op)25 b(lev)n(el)h(\014lesystem)11 b Fd(.)i(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)37 b Fe(44)2025 1692 y(toplvl,)26 b(\014lesystem)g(t)n(yp)r +(e)19 b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)47 b Fe(44)2025 +1792 y(T)-6 b(ranslucen)n(t)25 b(Filesystem)d Fd(.)13 +b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)47 b Fe(40)2025 1891 y(true)25 +b(Selector)h(F)-6 b(unction)17 b Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)43 +b Fe(24)2025 1991 y(true,)25 b(b)r(o)r(olean)i(moun)n(t)e(selector)12 +b Fd(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)38 b Fe(24)2025 2091 y(t)n(yp)r(e,)25 b(moun)n(t)g(option)15 +b Fd(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42 b Fe(28)2025 +2190 y(T)n(yp)r(es)25 b(of)i(con\014guration)f(map)13 +b Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)39 b Fe(14)2025 2290 y(T)n(yp)r(es)25 b(of)i(\014lesystem) +18 b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 +b Fe(36)2025 2390 y(T)n(yp)r(es)25 b(of)i(moun)n(t)e(map)e +Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)49 b Fe(14)2025 +2603 y Ft(U)2025 2719 y Fe(UDP;)25 b(using)h(with)g(Amq)14 +b Fd(.)e(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)41 b Fe(59)2025 2819 +y(UFS)8 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)35 b Fe(38)2025 +2918 y(ufs,)26 b(\014lesystem)g(t)n(yp)r(e)18 b Fd(.)12 +b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 b Fe(38)2025 +3018 y(umapfs,)26 b(\014lesystem)g(t)n(yp)r(e)14 b Fd(.)e(.)h(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)40 b Fe(40)2025 3118 y(Union)25 b(\014le)h(maps)8 +b Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)34 +b Fe(17)2025 3217 y(Union)25 b(\014lesystem)11 b Fd(.)i(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)37 b Fe(44)2025 3317 +y(union,)25 b(\014lesystem)h(t)n(yp)r(e)6 b Fd(.)13 b(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)33 b Fe(44)2025 3416 y(Unix)24 b(\014lesystem)14 +b Fd(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)40 +b Fe(38)2025 3516 y(Unix)24 b(namespace)17 b Fd(.)e(.)e(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)44 b Fe(8)2025 3616 y(unmoun)n(t)24 +b(attempt)i(bac)n(k)n(o\013)f(in)n(terv)l(al)12 b Fd(.)h(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b Fe(32)2025 3715 +y(unmoun)n(t,)24 b(moun)n(t)i(option)7 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +33 b Fe(40)2025 3815 y(unmoun)n(t)p 2332 3815 V 26 w(on)p +2439 3815 V 28 w(exit)25 b(P)n(arameter)7 b Fd(.)15 b(.)e(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)34 +b Fe(52)2025 3915 y(Unmoun)n(ting)24 b(a)i(\014lesystem)7 +b Fd(.)14 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)34 b Fe(59)2025 4014 y(User)25 +b(\014lesystems)d Fd(.)13 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)47 b Fe(88)2025 4114 y(User)25 b(ID)g(Mapping)i(Filesystem)9 +b Fd(.)14 b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)36 b Fe(40)2025 4214 y(User)25 b(maps,)i(automatic)f +(generation)e Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)49 b Fe(16)2025 4313 y(Using)26 b(FSinfo)20 b Fd(.)13 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)46 +b Fe(61)2025 4413 y(Using)26 b(Hlfsd)7 b Fd(.)14 b(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)34 b +Fe(81)2025 4512 y(Using)26 b(syslog)g(to)g(log)h(errors)16 +b Fd(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)43 b Fe(30)2025 4612 y(Using)26 b(the)f(passw)n +(ord)i(\014le)e(as)i(a)f(map)8 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)35 b Fe(16)2025 4825 y Ft(V)2025 +4941 y Fe(V)-6 b(ariable)26 b(expansion)c Fd(.)14 b(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)49 b Fe(19)2025 5041 y(v)n(erb)r(ose,)26 +b(FSinfo)g(command)g(line)g(option)c Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)48 b Fe(72)2025 5141 y(V)-6 b(ersion)25 b(information)7 +b Fd(.)16 b(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)34 b Fe(32)2025 +5240 y(V)-6 b(ersion)25 b(information)j(at)d(run-time)7 +b Fd(.)13 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +34 b Fe(59)2025 5340 y(v)n(olname,)26 b(FSinfo)g(moun)n(t)f(option)16 +b Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +42 b Fe(67)p eop +%%Page: 106 108 +106 107 bop 150 -116 a Fu(Index)3241 b(106)150 366 y +Fe(V)-6 b(olume)11 b Fd(.)i(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)38 b Fe(7)150 +466 y(V)-6 b(olume)25 b(binding)9 b Fd(.)k(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)36 b Fe(8)150 566 y(V)-6 +b(olume)25 b(names)13 b Fd(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)40 b Fe(7)150 765 y Ft(W)150 881 +y Fc(wait4amd)12 b Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)38 b Fe(86)150 981 y +Fc(wait4amd2die)22 b Fd(.)13 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)45 b Fe(87)150 1080 y(Wh)n(y)25 b(Deliv)n(er)g(In)n(to) +g(the)h(Home)f(Directory?)e Fd(.)13 b(.)h(.)f(.)g(.)g(.)g(.)g(.)49 +b Fe(80)150 1180 y(Wildcards)26 b(in)g(maps)7 b Fd(.)14 +b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)34 b Fe(18)150 +1280 y(wire)27 b(Selector)f(V)-6 b(ariable)6 b Fd(.)14 +b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)33 b Fe(23)2025 366 y(wire,)27 +b(moun)n(t)e(selector)16 b Fd(.)e(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)43 +b Fe(23)2025 466 y Fc(wire-test)9 b Fd(.)15 b(.)f(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)36 b +Fe(87)2025 707 y Ft(X)2025 823 y Fe(XFS)8 b Fd(.)13 b(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)35 b Fe(38)2025 923 y(xfs,)26 b(\014lesystem)g(t)n(yp)r(e)18 +b Fd(.)13 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45 b Fe(38)2025 +1163 y Ft(Y)2025 1280 y Fe(YP)25 b(domain)h(name)12 b +Fd(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)38 +b Fe(33)p eop +%%Page: -1 109 +-1 108 bop 3725 -116 a Fu(i)150 366 y Fr(T)-13 b(able)53 +b(of)h(Con)l(ten)l(ts)150 703 y Ft(Preface)19 b Fb(.)h(.)f(.)h(.)f(.)h +(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)63 +b Ft(1)150 970 y(License)22 b Fb(.)e(.)g(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g +(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)67 b Ft(2)150 +1237 y(Source)45 b(Distribution)34 b Fb(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h +(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) +f(.)h(.)77 b Ft(3)449 1374 y Fu(Bug)31 b(Rep)s(orts)15 +b Fa(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 +b Fu(3)449 1484 y(Mailing)32 b(List)24 b Fa(.)15 b(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(3)150 1723 y Ft(In)l(tro)t +(duction)23 b Fb(.)c(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) +h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)67 b Ft(5)150 1991 y(History)16 b Fb(.)k(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) +g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)61 +b Ft(6)150 2258 y(1)135 b(Ov)l(erview)16 b Fb(.)21 b(.)e(.)g(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f +(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)61 b Ft(7)449 +2395 y Fu(1.1)92 b(F)-8 b(undamen)m(tals)15 b Fa(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)44 b Fu(7)449 2504 y(1.2)92 b(Filesystems)32 +b(and)d(V)-8 b(olumes)8 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)38 b Fu(7)449 2614 y(1.3)92 b(V)-8 +b(olume)31 b(Naming)16 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)45 b +Fu(7)449 2723 y(1.4)92 b(V)-8 b(olume)31 b(Binding)15 +b Fa(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fu(8)449 2833 y(1.5)92 +b(Op)s(erational)31 b(Principles)17 b Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fu(8)449 +2943 y(1.6)92 b(Moun)m(ting)31 b(a)g(V)-8 b(olume)28 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)57 b Fu(8)449 3052 y(1.7)92 b(Automatic)32 +b(Unmoun)m(ting)12 b Fa(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)42 b Fu(9)449 3162 y(1.8)92 b(Keep-aliv)m(es)26 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(9)449 +3271 y(1.9)92 b(Non-blo)s(c)m(king)32 b(Op)s(eration)27 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 +b Fu(10)150 3511 y Ft(2)135 b(Supp)t(orted)44 b(Platforms)16 +b Fb(.)21 b(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f +(.)g(.)h(.)f(.)h(.)f(.)61 b Ft(11)150 3778 y(3)135 b(Moun)l(t)44 +b(Maps)35 b Fb(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h +(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)80 +b Ft(14)449 3915 y Fu(3.1)92 b(Map)31 b(T)m(yp)s(es)23 +b Fa(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fu(14)748 +4025 y(3.1.1)93 b(File)31 b(maps)20 b Fa(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b +Fu(14)748 4135 y(3.1.2)93 b(ndbm)28 b(maps)c Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)53 +b Fu(15)748 4244 y(3.1.3)93 b(NIS)29 b(maps)19 b Fa(.)c(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(15)748 4354 y(3.1.4)93 b(NIS+)29 b(maps)d Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 +b Fu(16)748 4463 y(3.1.5)93 b(Hesio)s(d)30 b(maps)25 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +54 b Fu(16)748 4573 y(3.1.6)93 b(P)m(assw)m(ord)30 b(maps)17 +b Fa(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 +b Fu(16)748 4682 y(3.1.7)93 b(Union)30 b(maps)18 b Fa(.)c(.)h(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 +b Fu(17)748 4792 y(3.1.8)93 b(LD)m(AP)31 b(maps)11 b +Fa(.)j(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +40 b Fu(17)449 4902 y(3.2)92 b(Ho)m(w)31 b(k)m(eys)g(are)g(lo)s(ok)m +(ed)g(up)12 b Fa(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)41 b Fu(18)449 5011 y(3.3)92 b(Lo)s(cation)31 +b(F)-8 b(ormat)22 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fu(18)748 +5121 y(3.3.1)93 b(Map)30 b(Defaults)8 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fu(19)748 +5230 y(3.3.2)93 b(V)-8 b(ariable)31 b(Expansion)21 b +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)50 b Fu(19)748 +5340 y(3.3.3)93 b(Selectors)17 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fu(20)p +eop +%%Page: -2 110 +-2 109 bop 3699 -116 a Fu(ii)1047 83 y(3.3.3.1)93 b(arc)m(h)31 +b(Selector)h(V)-8 b(ariable)23 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)52 b Fu(21)1047 193 +y(3.3.3.2)93 b(auto)s(dir)30 b(Selector)i(V)-8 b(ariable)28 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)56 +b Fu(21)1047 302 y(3.3.3.3)93 b(b)m(yte)31 b(Selector)h(V)-8 +b(ariable)22 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)51 b Fu(21)1047 412 y(3.3.3.4)93 b(cluster)31 +b(Selector)g(V)-8 b(ariable)19 b Fa(.)e(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)48 b Fu(21)1047 521 y(3.3.3.5)93 +b(domain)30 b(Selector)i(V)-8 b(ariable)27 b Fa(.)16 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 +b Fu(21)1047 631 y(3.3.3.6)93 b(host)31 b(Selector)g(V)-8 +b(ariable)26 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)53 b Fu(21)1047 741 y(3.3.3.7)93 b(hostd)30 +b(Selector)i(V)-8 b(ariable)20 b Fa(.)d(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fu(21)1047 850 y(3.3.3.8)93 +b(k)-5 b(arc)m(h)31 b(Selector)g(V)-8 b(ariable)23 b +Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)52 +b Fu(22)1047 960 y(3.3.3.9)93 b(os)31 b(Selector)g(V)-8 +b(ariable)26 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)53 b Fu(22)1047 1069 y(3.3.3.10)94 +b(osv)m(er)31 b(Selector)g(V)-8 b(ariable)29 b Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 +b Fu(22)1047 1179 y(3.3.3.11)94 b(k)m(ey)31 b(Selector)g(V)-8 +b(ariable)18 b Fa(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)47 b Fu(22)1047 1289 y(3.3.3.12)94 b(map)30 +b(Selector)h(V)-8 b(ariable)21 b Fa(.)c(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fu(22)1047 1398 y(3.3.3.13)94 +b(netn)m(um)m(b)s(er)29 b(Selector)j(V)-8 b(ariable)22 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)51 b Fu(22)1047 +1508 y(3.3.3.14)94 b(net)m(w)m(ork)31 b(Selector)g(V)-8 +b(ariable)13 b Fa(.)k(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)42 +b Fu(23)1047 1617 y(3.3.3.15)94 b(path)30 b(Selector)h(V)-8 +b(ariable)16 b Fa(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)45 b Fu(23)1047 1727 y(3.3.3.16)94 b(wire)30 +b(Selector)h(V)-8 b(ariable)23 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)52 b Fu(23)1047 1836 y(3.3.3.17)94 +b(exists)31 b(Selector)g(F)-8 b(unction)30 b Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 +b Fu(23)1047 1946 y(3.3.3.18)94 b(false)31 b(Selector)g(F)-8 +b(unction)9 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)38 b Fu(23)1047 2056 y(3.3.3.19)94 b(netgrp)30 +b(Selector)h(F)-8 b(unction)10 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)39 b Fu(23)1047 2165 y(3.3.3.20)94 +b(in_net)m(w)m(ork)31 b(Selector)g(F)-8 b(unction)17 +b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(23)1047 +2275 y(3.3.3.21)94 b(true)30 b(Selector)h(F)-8 b(unction)15 +b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)44 +b Fu(24)748 2384 y(3.3.4)93 b(Map)30 b(Options)17 b Fa(.)d(.)h(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b +Fu(24)1047 2494 y(3.3.4.1)93 b(addopts)30 b(Option)19 +b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)48 b Fu(24)1047 2604 y(3.3.4.2)93 +b(dela)m(y)31 b(Option)f Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 +b Fu(24)1047 2713 y(3.3.4.3)93 b(fs)30 b(Option)15 b +Fa(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fu(25)1047 +2823 y(3.3.4.4)93 b(opts)31 b(Option)c Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)57 b Fu(25)1047 2932 y(3.3.4.5)93 b(remopts)30 +b(Option)16 b Fa(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(28)1047 3042 +y(3.3.4.6)93 b(sublink)29 b(Option)12 b Fa(.)j(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 +b Fu(28)1047 3152 y(3.3.4.7)93 b(t)m(yp)s(e)31 b(Option)24 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(28)150 +3394 y Ft(4)135 b Fg(Amd)50 b Ft(Command)45 b(Line)g(Options)38 +b Fb(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)82 +b Ft(29)449 3531 y Fu(4.1)92 b Fo(-a)30 b Fq(directory)i +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)53 b Fu(29)449 3641 +y(4.2)92 b Fo(-c)30 b Fq(cac)m(he-in)m(terv)-5 b(al)23 +b Fa(.)18 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)48 b Fu(29)449 3750 y(4.3)92 b Fo(-d)30 +b Fq(domain)17 b Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 +b Fu(30)449 3860 y(4.4)92 b Fo(-k)30 b Fq(k)m(ernel-arc)m(hitecture)35 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +56 b Fu(30)449 3969 y(4.5)92 b Fo(-l)30 b Fq(log-option)g +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fu(30)449 4079 y(4.6)92 +b Fo(-n)27 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)57 b Fu(31)449 4188 y(4.7)92 b Fo(-o)30 +b Fq(op-sys-v)m(er)j Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 +b Fu(31)449 4298 y(4.8)92 b Fo(-p)27 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(31)449 +4408 y(4.9)92 b Fo(-r)27 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(31)449 4517 y(4.10)92 +b Fo(-t)30 b Fq(timeout.retransmit)d Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fu(31)449 4627 y(4.11)92 +b Fo(-v)27 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)56 b Fu(32)449 4736 y(4.12)92 b Fo(-w)30 b +Fq(w)m(ait-timeout)17 b Fa(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fu(32)449 +4846 y(4.13)92 b Fo(-x)30 b Fq(opts)16 b Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)41 b Fu(32)449 4956 y(4.14)92 b Fo(-y)30 +b Fq(NIS-domain)11 b Fa(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fu(33)449 +5065 y(4.15)92 b Fo(-C)30 b Fq(cluster-name)19 b Fa(.)d(.)f(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 +b Fu(33)449 5175 y(4.16)92 b Fo(-D)30 b Fq(opts)16 b +Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)41 b +Fu(34)449 5284 y(4.17)92 b Fo(-F)30 b Fq(conf-\014le)i +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fu(34)p eop +%%Page: -3 111 +-3 110 bop 3674 -116 a Fu(iii)449 83 y(4.18)92 b Fo(-H)27 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 +b Fu(34)449 193 y(4.19)92 b Fo(-O)30 b Fq(op-sys-name)f +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)52 b Fu(35)449 302 y(4.20)92 b Fo(-S)27 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 +b Fu(35)449 412 y(4.21)92 b Fo(-T)30 b Fq(tag)17 b Fa(.)f(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)38 b Fu(35)150 654 +y Ft(5)135 b(Filesystem)46 b(T)l(yp)t(es)28 b Fb(.)19 +b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h +(.)f(.)g(.)h(.)f(.)h(.)f(.)73 b Ft(36)449 791 y Fu(5.1)92 +b(Net)m(w)m(ork)32 b(Filesystem)g(\(`)p Fo(nfs)p Fu('\))9 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 +b Fu(36)449 901 y(5.2)92 b(Net)m(w)m(ork)32 b(Host)f(Filesystem)h(\(`)p +Fo(host)p Fu('\))c Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)57 b Fu(36)449 +1010 y(5.3)92 b(Net)m(w)m(ork)32 b(Filesystem)g(Group)d(\(`)p +Fo(nfsx)p Fu('\))15 b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fu(37)449 +1120 y(5.4)92 b(Unix)30 b(Filesystem)i(\(`)p Fo(ufs)p +Fu(',)f(`)p Fo(xfs)p Fu(',)f(or)g(`)p Fo(efs)p Fu('\))12 +b Fa(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)41 b Fu(38)449 1230 y(5.5)92 b(Cac)m(hing)31 +b(Filesystem)h(\(`)p Fo(cachefs)p Fu('\))27 b Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(38)449 1339 y(5.6)92 +b(CD-R)m(OM)31 b(Filesystem)h(\(`)p Fo(cdfs)p Fu('\))24 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(39)449 +1449 y(5.7)92 b(Lo)s(opbac)m(k)31 b(Filesystem)h(\(`)p +Fo(lofs)p Fu('\))25 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)54 +b Fu(39)449 1558 y(5.8)92 b(Memory/RAM)32 b(Filesystem)f(\(`)p +Fo(mfs)p Fu('\))9 b Fa(.)15 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 +b Fu(39)449 1668 y(5.9)92 b(Null)30 b(Filesystem)i(\(`)p +Fo(nullfs)p Fu('\))20 b Fa(.)14 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)49 b Fu(39)449 1778 y(5.10)92 b(Flopp)m(y)31 +b(Filesystem)h(\(`)p Fo(pcfs)p Fu('\))12 b Fa(.)k(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)42 b Fu(40)449 1887 y(5.11)92 b(T)-8 +b(ranslucen)m(t)31 b(Filesystem)h(\(`)p Fo(tfs)p Fu('\))c +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(40)449 1997 +y(5.12)92 b(Shared)30 b(Memory+Sw)m(ap)g(Filesystem)i(\(`)p +Fo(tmpfs)p Fu('\))15 b Fa(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)44 b Fu(40)449 2106 y(5.13)92 b(User)31 b(ID)f(Mapping)h +(Filesystem)g(\(`)p Fo(umapfs)p Fu('\))14 b Fa(.)h(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)43 b Fu(40)449 +2216 y(5.14)92 b(Program)31 b(Filesystem)h(\(`)p Fo(program)p +Fu('\))14 b Fa(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fu(40)449 +2325 y(5.15)92 b(Sym)m(b)s(olic)31 b(Link)f(Filesystem)h(\(`)p +Fo(link)p Fu('\))15 b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fu(41)449 +2435 y(5.16)92 b(Sym)m(b)s(olic)31 b(Link)f(Filesystem)h(I)s(I)f(\(`)p +Fo(linkx)p Fu('\))e Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)57 b Fu(41)449 2545 y(5.17)92 +b(NFS-Link)31 b(Filesystem)g(\(`)p Fo(nfsl)p Fu('\))21 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fu(42)449 +2654 y(5.18)92 b(Automoun)m(t)31 b(Filesystem)h(\(`)p +Fo(auto)p Fu('\))9 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 +b Fu(42)449 2764 y(5.19)92 b(Direct)32 b(Automoun)m(t)f(Filesystem)h +(\(`)p Fo(direct)p Fu('\))17 b Fa(.)d(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(43)449 2873 y(5.20)92 +b(Union)31 b(Filesystem)g(\(`)p Fo(union)p Fu('\))e Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fu(44)449 +2983 y(5.21)92 b(Error)30 b(Filesystem)i(\(`)p Fo(error)p +Fu('\))20 b Fa(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(44)449 3093 y(5.22)92 b(T)-8 b(op-lev)m(el)33 b(Filesystem)f(\(`)p +Fo(toplvl)p Fu('\))8 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 +b Fu(44)449 3202 y(5.23)92 b(Ro)s(ot)31 b(Filesystem)h(\(`)p +Fo(root)p Fu('\))10 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)39 b Fu(45)449 3312 y(5.24)92 b(Autofs)31 b(Filesystem)h(\(`)p +Fo(autofs)p Fu('\))14 b Fa(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 +b Fu(45)449 3421 y(5.25)92 b(Inheritance)31 b(Filesystem)h(\(`)p +Fo(inherit)p Fu('\))27 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(45)150 +3664 y Ft(6)135 b(Amd)44 b(Con\014guration)i(File)23 +b Fb(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) +h(.)f(.)68 b Ft(46)449 3801 y Fu(6.1)92 b(File)32 b(F)-8 +b(ormat)13 b Fa(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b +Fu(46)449 3910 y(6.2)92 b(The)30 b(Global)h(Section)14 +b Fa(.)j(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)43 b Fu(46)449 4020 y(6.3)92 b(Regular)31 +b(Map)f(Sections)d Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)56 b Fu(46)449 4130 y(6.4)92 b(Common)30 +b(P)m(arameters)22 b Fa(.)16 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)52 b Fu(46)748 4239 y(6.4.1)93 +b Fo(browsable_dirs)26 b Fu(P)m(arameter)f Fa(.)15 b(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 +b Fu(47)748 4349 y(6.4.2)93 b Fo(map_options)27 b Fu(P)m(arameter)9 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fu(47)748 4458 y(6.4.3)93 +b Fo(map_type)28 b Fu(P)m(arameter)16 b Fa(.)g(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)45 b Fu(47)748 4568 y(6.4.4)93 b Fo(mount_type)27 +b Fu(P)m(arameter)11 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 +b Fu(47)748 4677 y(6.4.5)93 b Fo(search_path)27 b Fu(P)m(arameter)9 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fu(47)449 4787 y(6.5)92 +b(Global)32 b(P)m(arameters)c Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fu(48)748 +4897 y(6.5.1)93 b Fo(arch)29 b Fu(P)m(arameter)e Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 +b Fu(48)748 5006 y(6.5.2)93 b Fo(auto_dir)28 b Fu(P)m(arameter)16 +b Fa(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fu(48)748 +5116 y(6.5.3)93 b Fo(cache_duration)26 b Fu(P)m(arameter)f +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)53 b Fu(48)748 5225 y(6.5.4)93 b Fo(cluster)28 +b Fu(P)m(arameter)18 b Fa(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(48)748 5335 y(6.5.5)93 b Fo(debug_options)26 b Fu(P)m(arameter)h +Fa(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)55 b Fu(48)p eop +%%Page: -4 112 +-4 111 bop 3677 -116 a Fu(iv)748 83 y(6.5.6)93 b Fo(dismount_interval) +25 b Fu(P)m(arameter)16 b Fa(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(49)748 193 y(6.5.7)93 +b Fo(fully_qualified_hosts)24 b Fu(P)m(arameter)30 b +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 +b Fu(49)748 302 y(6.5.8)93 b Fo(hesiod_base)27 b Fu(P)m(arameter)9 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fu(49)748 412 y(6.5.9)93 +b Fo(karch)28 b Fu(P)m(arameter)23 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)52 b Fu(49)748 521 y(6.5.10)93 b +Fo(ldap_base)28 b Fu(P)m(arameter)12 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)42 b Fu(49)748 631 y(6.5.11)93 b Fo(ldap_cache_maxmem)26 +b Fu(P)m(arameter)15 b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)44 b Fu(49)748 741 y(6.5.12)93 b Fo +(ldap_cache_seconds)25 b Fu(P)m(arameter)13 b Fa(.)k(.)e(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fu(49)748 850 +y(6.5.13)93 b Fo(ldap_hostports)26 b Fu(P)m(arameter)c +Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)51 b Fu(49)748 960 y(6.5.14)93 b Fo(local_domain)27 +b Fu(P)m(arameter)h Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fu(49)748 +1069 y(6.5.15)93 b Fo(log_file)28 b Fu(P)m(arameter)15 +b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fu(50)748 1179 +y(6.5.16)93 b Fo(log_options)27 b Fu(P)m(arameter)k Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)58 b Fu(50)748 1289 y(6.5.17)93 b Fo +(nfs_retransmit_counter)24 b Fu(P)m(arameter)j Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(50)748 1398 +y(6.5.18)93 b Fo(nfs_retry_interval)25 b Fu(P)m(arameter)13 +b Fa(.)k(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 +b Fu(50)748 1508 y(6.5.19)93 b Fo(nis_domain)28 b Fu(P)m(arameter)10 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)39 b Fu(51)748 1617 y(6.5.20)93 +b Fo(normalize_hostnames)25 b Fu(P)m(arameter)10 b Fa(.)17 +b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 +b Fu(51)748 1727 y(6.5.21)93 b Fo(os)30 b Fu(P)m(arameter)g +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 +b Fu(51)748 1836 y(6.5.22)93 b Fo(osver)29 b Fu(P)m(arameter)22 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 +b Fu(51)748 1946 y(6.5.23)93 b Fo(pid_file)28 b Fu(P)m(arameter)15 +b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fu(51)748 2056 +y(6.5.24)93 b Fo(plock)29 b Fu(P)m(arameter)22 b Fa(.)16 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fu(51)748 +2165 y(6.5.25)93 b Fo(portmap_program)26 b Fu(P)m(arameter)20 +b Fa(.)c(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)49 b Fu(52)748 2275 y(6.5.26)93 b Fo(print_pid)28 +b Fu(P)m(arameter)12 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 +b Fu(52)748 2384 y(6.5.27)93 b Fo(print_version)27 b +Fu(P)m(arameter)f Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(52)748 2494 y(6.5.28)93 +b Fo(restart_mounts)26 b Fu(P)m(arameter)c Fa(.)17 b(.)e(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)51 +b Fu(52)748 2604 y(6.5.29)93 b Fo(selectors_on_default)25 +b Fu(P)m(arameter)8 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)37 b Fu(52)748 2713 y(6.5.30)93 b Fo(show_statfs_entries)25 +b Fu(P)m(arameter)10 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)40 b Fu(52)748 2823 y(6.5.31)93 b Fo(unmount_on_exit)26 +b Fu(P)m(arameter)20 b Fa(.)c(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b Fu(52)449 2932 y(6.6)92 +b(Regular)31 b(Map)f(P)m(arameters)g Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)57 b Fu(53)748 3042 y(6.6.1)93 +b(map_name)30 b(P)m(arameter)25 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +53 b Fu(53)748 3152 y(6.6.2)93 b(tag)31 b(P)m(arameter)15 +b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 +b Fu(53)449 3261 y(6.7)92 b(amd.conf)30 b(Examples)11 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)40 b Fu(53)150 3504 y Ft(7)135 b(Run-time)45 +b(Administration)c Fb(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) +h(.)f(.)g(.)h(.)f(.)85 b Ft(55)449 3641 y Fu(7.1)92 b(Starting)31 +b Fq(Amd)18 b Fa(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Fu(55)449 +3750 y(7.2)92 b(Stopping)30 b Fq(Amd)24 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 +b Fu(55)449 3860 y(7.3)92 b(Restarting)31 b Fq(Amd)15 +b Fa(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)41 b Fu(55)449 3969 y(7.4)92 b(Con)m(trolling)31 +b Fq(Amd)21 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fu(56)748 4079 y(7.4.1)93 +b Fq(Amq)32 b Fu(default)e(information)19 b Fa(.)c(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(56)748 4188 y(7.4.2)93 b Fq(Amq)32 b Fo(-f)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(57)748 4298 y(7.4.3)93 b Fq(Amq)32 b Fo(-l)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(57)748 4408 y(7.4.4)93 b Fq(Amq)32 b Fo(-h)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(57)748 4517 y(7.4.5)93 b Fq(Amq)32 b Fo(-m)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(57)748 4627 y(7.4.6)93 b Fq(Amq)32 b Fo(-M)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(58)748 4736 y(7.4.7)93 b Fq(Amq)32 b Fo(-p)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(58)748 4846 y(7.4.8)93 b Fq(Amq)32 b Fo(-P)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(58)748 4956 y(7.4.9)93 b Fq(Amq)32 b Fo(-s)e Fu(option)20 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 +b Fu(59)748 5065 y(7.4.10)93 b Fq(Amq)32 b Fo(-T)e Fu(option)19 +b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(59)748 5175 y(7.4.11)93 b Fq(Amq)32 b Fo(-U)e Fu(option)19 +b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(59)748 5284 y(7.4.12)93 b Fq(Amq)32 b Fo(-u)e Fu(option)19 +b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(59)p eop +%%Page: -5 113 +-5 112 bop 3702 -116 a Fu(v)748 83 y(7.4.13)93 b Fq(Amq)32 +b Fo(-v)e Fu(option)19 b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)48 b Fu(59)748 193 y(7.4.14)93 b(Other)30 b Fq(Amq)i +Fu(options)18 b Fa(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)47 +b Fu(60)150 435 y Ft(8)135 b(FSinfo)36 b Fb(.)20 b(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) +h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)82 b Ft(61)449 +572 y Fu(8.1)92 b Fq(FSinfo)35 b Fu(o)m(v)m(erview)15 +b Fa(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)44 b Fu(61)449 682 y(8.2)92 b(Using)31 +b Fq(FSinfo)14 b Fa(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b +Fu(61)449 791 y(8.3)92 b Fq(FSinfo)35 b Fu(grammar)29 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)58 b Fu(62)449 901 y(8.4)92 b Fq(FSinfo)35 +b Fu(host)30 b(de\014nitions)13 b Fa(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 b Fu(62)449 1010 y(8.5)92 +b Fq(FSinfo)35 b Fu(host)30 b(attributes)22 b Fa(.)16 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 +b Fu(63)748 1120 y(8.5.1)93 b(netif)30 b(Option)13 b +Fa(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +42 b Fu(63)748 1230 y(8.5.2)93 b(con\014g)30 b(Option)f +Fa(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 +b Fu(64)748 1339 y(8.5.3)93 b(arc)m(h)30 b(Option)18 +b Fa(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)47 b Fu(64)748 1449 y(8.5.4)93 b(os)30 b(Option)19 +b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)48 b Fu(64)748 1558 y(8.5.5)93 b(cluster)30 +b(Option)14 b Fa(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)43 b Fu(64)449 1668 y(8.6)92 b Fq(FSinfo)35 b +Fu(\014lesystems)18 b Fa(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fu(64)748 1778 +y(8.6.1)93 b(fst)m(yp)s(e)30 b(Option)c Fa(.)15 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fu(66)748 1887 +y(8.6.2)93 b(opts)30 b(Option)19 b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fu(66)748 1997 +y(8.6.3)93 b(passno)29 b(Option)14 b Fa(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fu(66)748 2106 y(8.6.4)93 +b(freq)30 b(Option)c Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)56 b Fu(66)748 2216 y(8.6.5)93 +b(moun)m(t)30 b(Option)18 b Fa(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)47 b Fu(67)748 2325 y(8.6.6)93 b(dumpset)29 +b(Option)19 b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)48 +b Fu(67)748 2435 y(8.6.7)93 b(log)31 b(Option)23 b Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +52 b Fu(68)449 2545 y(8.7)92 b Fq(FSinfo)35 b Fu(static)d(moun)m(ts)25 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)54 b Fu(68)449 2654 y(8.8)92 b(De\014ning)30 b(an)h +Fq(Amd)i Fu(Moun)m(t)e(Map)f(in)g Fq(FSinfo)17 b Fa(.)f(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 +b Fu(69)449 2764 y(8.9)92 b Fq(FSinfo)35 b Fu(Command)29 +b(Line)h(Options)10 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)39 +b Fu(70)748 2873 y(8.9.1)93 b Fo(-a)29 b Fq(auto)s(dir)h +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)53 b Fu(70)748 2983 y(8.9.2)93 b Fo(-b)29 b Fq(b)s(o)s +(otparams)c Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)50 b Fu(70)748 3093 y(8.9.3)93 b Fo(-d)29 b Fq(dumpsets)g +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +55 b Fu(71)748 3202 y(8.9.4)93 b Fo(-e)29 b Fq(exp)s(ortfs)13 +b Fa(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)39 b Fu(71)748 3312 y(8.9.5)93 b Fo(-f)29 b Fq(fstab)11 +b Fa(.)k(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)38 b Fu(71)748 3421 y(8.9.6)93 b Fo(-h)29 +b Fq(hostname)g Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)52 b Fu(71)748 3531 y(8.9.7)93 b Fo(-m)29 +b Fq(moun)m(t-maps)14 b Fa(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)39 b Fu(72)748 3641 y(8.9.8)93 b Fo(-q)15 +b Fa(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 b Fu(72)748 +3750 y(8.9.9)93 b Fo(-v)15 b Fa(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 +b Fu(72)748 3860 y(8.9.10)93 b Fo(-D)30 b Fq(name[=defn])e +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 +b Fu(72)748 3969 y(8.9.11)93 b Fo(-I)30 b Fq(directory)18 +b Fa(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 +b Fu(72)748 4079 y(8.9.12)93 b Fo(-U)30 b Fq(name)24 +b Fa(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)49 b Fu(72)449 4188 y(8.10)92 b(Errors)30 +b(pro)s(duced)e(b)m(y)j Fq(FSinfo)19 b Fa(.)c(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)44 b Fu(72)p eop +%%Page: -6 114 +-6 113 bop 3677 -116 a Fu(vi)150 212 y Ft(9)135 b(Hlfsd)40 +b Fb(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f +(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) +h(.)f(.)85 b Ft(76)449 354 y Fu(9.1)92 b(In)m(tro)s(duction)30 +b(to)h(Hlfsd)18 b Fa(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)47 b Fu(76)449 465 y(9.2)92 b(Bac)m(kground)31 +b(to)g(Mail)h(Deliv)m(ery)15 b Fa(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)44 b Fu(78)748 577 y(9.2.1)93 b(Single-Host)31 b(Mail)h(Sp)s(o)s +(ol)d(Directory)g Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)56 b Fu(78)748 689 y(9.2.2)93 b(Cen)m(tralized)31 +b(Mail)h(Sp)s(o)s(ol)d(Directory)g Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Fu(78)748 800 y(9.2.3)93 +b(Distributed)30 b(Mail)h(Sp)s(o)s(ol)f(Service)9 b Fa(.)15 +b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 +b Fu(79)748 912 y(9.2.4)93 b(Wh)m(y)30 b(Deliv)m(er)i(In)m(to)f(the)g +(Home)g(Directory?)15 b Fa(.)h(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)44 +b Fu(80)449 1024 y(9.3)92 b(Using)31 b(Hlfsd)16 b Fa(.)e(.)h(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)45 b Fu(81)748 1136 y(9.3.1)93 b(Con)m(trolling)31 +b(Hlfsd)22 b Fa(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 +b Fu(81)748 1247 y(9.3.2)93 b(Hlfsd)29 b(Options)24 b +Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 +b Fu(81)748 1359 y(9.3.3)93 b(Hlfsd)29 b(Files)23 b Fa(.)17 +b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +52 b Fu(83)150 1613 y Ft(10)135 b(Assorted)45 b(T)-11 +b(o)t(ols)37 b Fb(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) +h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)82 +b Ft(84)449 1755 y Fu(10.1)92 b(am-eject)14 b Fa(.)j(.)e(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)43 b Fu(84)449 1867 y(10.2)92 b(amd.conf-sample)22 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)51 b Fu(84)449 1978 y(10.3)92 b(amd2ldif)9 +b Fa(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b +Fu(84)449 2090 y(10.4)92 b(amd2sun)26 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)56 b Fu(84)449 2202 y(10.5)92 b(ctl-amd)9 +b Fa(.)16 b(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 +b Fu(84)449 2314 y(10.6)92 b(ctl-hlfsd)21 b Fa(.)16 b(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)51 b Fu(84)449 2425 y(10.7)92 +b(expn)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)52 b Fu(85)449 2537 y(10.8)92 b(\014x-amd-map)17 b +Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(85)449 2649 y(10.9)92 +b(\014xmoun)m(t)27 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 +b Fu(85)449 2761 y(10.10)93 b(\014xrm)m(tab)11 b Fa(.)k(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)41 b Fu(85)449 2872 y(10.11)93 b(lostaltmail)14 +b Fa(.)k(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fu(86)449 2984 +y(10.12)93 b(lostaltmail.conf-sample)29 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fu(86)449 3096 y(10.13)93 +b(mk-amd-map)24 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(86)449 +3207 y(10.14)93 b(pa)m(wd)11 b Fa(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)41 b Fu(86)449 3319 y(10.15)93 b(w)m(ait4amd)9 +b Fa(.)16 b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)38 b Fu(86)449 +3431 y(10.16)93 b(w)m(ait4amd2die)14 b Fa(.)j(.)e(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 +b Fu(87)449 3543 y(10.17)93 b(wire-test)9 b Fa(.)16 b(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)38 b Fu(87)150 3797 y Ft(11)135 b(Examples)38 +b Fb(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)81 +b Ft(88)449 3939 y Fu(11.1)92 b(User)31 b(Filesystems)20 +b Fa(.)c(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)50 b Fu(88)449 4050 y(11.2)92 b(Home)32 +b(Directories)10 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b Fu(89)449 4162 +y(11.3)92 b(Arc)m(hitecture)32 b(Sharing)25 b Fa(.)15 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 +b Fu(90)449 4274 y(11.4)92 b(Wildcard)31 b(Names)g(&)f(Replicated)i +(Serv)m(ers)20 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)50 b Fu(91)449 4385 y(11.5)92 +b(`)p Fo(rwho)p Fu(')30 b(serv)m(ers)19 b Fa(.)c(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)48 +b Fu(91)449 4497 y(11.6)92 b(`)p Fo(/vol)p Fu(')18 b +Fa(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 +b Fu(91)449 4609 y(11.7)92 b(`)p Fo(/defaults)p Fu(')29 +b(with)h(selectors)22 b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)51 b Fu(92)449 4721 y(11.8)92 b(`)p Fo(/tftpboot)p +Fu(')29 b(in)h(a)h(c)m(hro)s(ot-ed)g(en)m(vironmen)m(t)11 +b Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)41 b Fu(93)150 4975 y Ft(12)135 b(In)l(ternals)27 +b Fb(.)20 b(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)72 +b Ft(95)449 5117 y Fu(12.1)92 b(Log)31 b(Messages)19 +b Fa(.)e(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)48 b Fu(95)748 5228 y(12.1.1)93 +b(F)-8 b(atal)33 b(errors)23 b Fa(.)15 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(95)748 5340 y(12.1.2)93 +b(Info)30 b(messages)e Fa(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)57 b Fu(96)p eop +%%Page: -7 115 +-7 114 bop 3652 -116 a Fu(vii)150 366 y Ft(Ac)l(kno)l(wledgmen)l(ts)46 +b(&)f(T)-11 b(rademarks)11 b Fb(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f +(.)h(.)f(.)g(.)h(.)56 b Ft(98)150 636 y(Index)37 b Fb(.)19 +b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h +(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) +g(.)h(.)f(.)82 b Ft(99)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/am-utils.texi b/doc/am-utils.texi new file mode 100644 index 0000000..068599b --- /dev/null +++ b/doc/am-utils.texi @@ -0,0 +1,7837 @@ +\input texinfo @c -*-texinfo-*- +@c +@c Copyright (c) 1997-1998 Erez Zadok +@c Copyright (c) 1989 Jan-Simon Pendry +@c Copyright (c) 1989 Imperial College of Science, Technology & Medicine +@c Copyright (c) 1989 The Regents of the University of California. +@c All rights reserved. +@c +@c This code is derived from software contributed to Berkeley by +@c Jan-Simon Pendry at Imperial College, London. +@c +@c Redistribution and use in source and binary forms, with or without +@c modification, are permitted provided that the following conditions +@c are met: +@c 1. Redistributions of source code must retain the above copyright +@c notice, this list of conditions and the following disclaimer. +@c 2. Redistributions in binary form must reproduce the above copyright +@c notice, this list of conditions and the following disclaimer in the +@c documentation and/or other materials provided with the distribution. +@c 3. All advertising materials mentioning features or use of this software +@c must display the following acknowledgment: +@c This product includes software developed by the University of +@c California, Berkeley and its contributors. +@c 4. Neither the name of the University nor the names of its contributors +@c may be used to endorse or promote products derived from this software +@c without specific prior written permission. +@c +@c THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +@c ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +@c IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +@c ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +@c FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +@c DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +@c OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +@c HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +@c LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +@c OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +@c +@c %W% (Berkeley) %G% +@c +@c $Id: am-utils.texi,v 1.1 1998/11/05 02:04:59 ezk Exp $ +@c +@setfilename am-utils.info + +@include version.texi + +@c info directory entry +@direntry +* Am-utils: (am-utils). The Amd automounter suite of utilities +@end direntry + +@titlepage +@title Am-utils (4.4BSD Automounter Utilities) +@subtitle For version @value{VERSION}, @value{UPDATED} + +@author Erez Zadok +(Originally by Jan-Simon Pendry and Nick Williams) + +@page +Copyright @copyright{} 1997-1998 Erez Zadok +@* +Copyright @copyright{} 1989 Jan-Simon Pendry +@* +Copyright @copyright{} 1989 Imperial College of Science, Technology & Medicine +@* +Copyright @copyright{} 1989 The Regents of the University of California. +@sp +All Rights Reserved. +@vskip 1ex +Permission to copy this document, or any portion of it, as +necessary for use of this software is granted provided this +copyright notice and statement of permission are included. +@end titlepage +@page + +@c Define a new index for options. +@syncodeindex pg cp +@syncodeindex vr cp + +@ifinfo + +@c ################################################################ +@node Top, License, , (DIR) +Am-utils - The 4.4BSD Automounter Tool Suite +********************************************* + +Am-utils is the 4.4BSD Automounter Tool Suite, which includes the Amd +automounter, the Amq query and control program, the Hlfsd daemon, and +other tools. This Info file describes how to use and understand the +tools within Am-utils. +@end ifinfo + +@menu +* License:: Explains the terms and conditions for using + and distributing Am-utils. +* Distrib:: How to get the latest Am-utils distribution. +* Intro:: An introduction to Automounting concepts. +* History:: History of am-utils' development. +* Overview:: An overview of Amd. +* Supported Platforms:: Machines and Systems supported by Amd. +* Mount Maps:: Details of mount maps +* Amd Command Line Options:: All the Amd command line options explained. +* Filesystem Types:: The different mount types supported by Amd. +* Amd Configuration File:: The amd.conf file syntax and meaning. +* Run-time Administration:: How to start, stop and control Amd. +* FSinfo:: The FSinfo filesystem management tool. +* Hlfsd:: The Home-Link Filesystem server. +* Assorted Tools:: Other tools which come with am-utils. +* Examples:: Some examples showing how Amd might be used. +* Internals:: Implementation details. +* Acknowledgments & Trademarks:: Legal Notes + +Indexes +* Index:: An item for each concept. +@end menu + +@iftex +@unnumbered Preface + +This manual documents the use of the 4.4BSD automounter tool suite, +which includes @i{Amd}, @i{Amq}, @i{Hlfsd}, and other programs. This is +primarily a reference manual. While no tutorial exists, there are +examples available. @xref{Examples}. + +This manual comes in two forms: the published form and the Info form. +The Info form is for on-line perusal with the INFO program which is +distributed along with GNU texinfo package (a version of which is +available for GNU Emacs).@footnote{GNU packages can be found in +@url{ftp://ftp.gnu.org/pub/gnu/}.} Both forms contain substantially +the same text and are generated from a common source file, which is +distributed with the @i{Am-utils} source. +@end iftex + +@c ################################################################ +@node License, Distrib, Top, Top +@unnumbered License +@cindex License Information + +@i{Am-utils} is not in the public domain; it is copyrighted and there are +restrictions on its distribution. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +@enumerate + +@item +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +@item +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +@item +All advertising materials mentioning features or use of this software +must display the following acknowledgment: + +@cartouche +``This product includes software developed by the University of +California, Berkeley and its contributors, as well as the Trustees of +Columbia University.'' +@end cartouche + +@item +Neither the name of the University nor the names of its contributors may +be used to endorse or promote products derived from this software +without specific prior written permission. + +@end enumerate + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +@c ################################################################ +@node Distrib, Intro, License, Top +@unnumbered Source Distribution +@cindex Source code distribution +@cindex Obtaining the source code + +The @i{Am-utils} home page is located in +@example +@url{http://www.cs.columbia.edu/~ezk/am-utils/} +@end example + +You can get the latest distribution version of @i{Am-utils} from +@example +@url{ftp://shekel.mcl.cs.columbia.edu/pub/am-utils/am-utils.tar.gz} +@end example + +Alpha and beta distributions are available in +@example +@url{ftp://shekel.mcl.cs.columbia.edu/pub/am-utils/}. +@end example + +Revision 5.2 was part of the 4.3BSD Reno distribution. + +Revision 5.3bsdnet, a late alpha version of 5.3, was part +of the BSD network version 2 distribution + +Revision 6.0 was made independently by @email{ezk@@cs.columbia.edu,Erez +Zadok} at the @uref{http://www.cs.columbia.edu/,Computer Science +Department} of @uref{http://www.columbia.edu/,Columbia University}, as +part of his @uref{http://www.cs.columbia.edu/~ezk/research/tp/thesis_proposal.html,PhD thesis work}. @xref{History} for more details. + +@unnumberedsec Bug Reports +@cindex Bug reports + +Before reporting a bug, see if it is a known one in the +@uref{http://www.cs.columbia.edu/~ezk/am-utils/BUGS.txt,bugs} file. +Send all bug reports to @email{amd-dev@@majordomo.cs.columbia.edu} +quoting the details of the release and your configuration. These can be +obtained by running the command @samp{amd -v}. It would greatly help if +you could provide a reproducible procedure for detecting the bug you are +reporting. + +Providing working patches is highly encouraged. Every patch +incorporated, however small, will get its author an honorable mention in +the @uref{http://www.cs.columbia.edu/~ezk/am-utils/AUTHORS.txt,authors +file}. + +@unnumberedsec Mailing List +@cindex Mailing list + +There are two mailing lists for people interested in keeping up-to-date +with developments. + +@c ############### + +@enumerate + +@item +The older list, @samp{amd-workers} is for general "how to" questions and +announcements. To subscribe, send a note to +@email{amd-workers-request@@majordomo.glue.umd.edu}.@footnote{Note that +the older address, @email{amd-workers-request@@acl.lanl.gov}, is +defunct.} To post a message to this list, send mail to +@email{amd-workers@@majordomo.glue.umd.edu}. + +@item +The developers only list, @samp{amd-dev} is for + +@itemize @minus +@item +announcements of alpha and beta releases of am-utils +@item +reporting of bugs and patches +@item +discussions of new features for am-utils +@item +implementation and porting issues +@end itemize + +To subscribe, send a note to @email{majordomo@@majordomo.cs.columbia.edu} +with the single body text line @samp{subscribe amd-dev}. To post a +message to this list, send mail to +@email{amd-dev@@majordomo.cs.columbia.edu}. To avoid as much spam as +possible, only subscribers to this list may post to it. + +Subscribers of @samp{amd-dev} are most suitable if they have the time +and resources to test new and buggy versions of amd, on as many +different platforms as possible. They should also be prepared to learn +and use the GNU Autoconf, Automake, and Libtool packages, and of course, +be very familiar with the complex code in the am-utils package. In +other words, subscribers on this list should be able to contribute +meaningfully to the development of amd. + +@end enumerate + +@c ################################################################ +@node Intro, History, Distrib, Top +@unnumbered Introduction +@cindex Introduction + +An @dfn{automounter} maintains a cache of mounted filesystems. +Filesystems are mounted on demand when they are first referenced, +and unmounted after a period of inactivity. + +@i{Amd} may be used as a replacement for Sun's automounter. The choice +of which filesystem to mount can be controlled dynamically with +@dfn{selectors}. Selectors allow decisions of the form ``hostname is +@var{this},'' or ``architecture is not @var{that}.'' Selectors may be +combined arbitrarily. @i{Amd} also supports a variety of filesystem +types, including NFS, UFS and the novel @dfn{program} filesystem. The +combination of selectors and multiple filesystem types allows identical +configuration files to be used on all machines thus reducing the +administrative overhead. + +@i{Amd} ensures that it will not hang if a remote server goes down. +Moreover, @i{Amd} can determine when a remote server has become +inaccessible and then mount replacement filesystems as and when they +become available. + +@i{Amd} contains no proprietary source code and has been ported to +numerous flavors of Unix. + +@c ################################################################ +@node History, Overview, Intro, Top +@unnumbered History +@cindex History + +The @i{Amd} package has been without an official maintainer since 1992. +Several people have stepped in to maintain it unofficially. Most +notable were the `upl' (Unofficial Patch Level) releases of @i{Amd}, +created by me (@email{ezk@@cs.columbia.edu,Erez Zadok}), and available from +@url{ftp://ftp.cs.columbia.edu/pub/amd/}. The last such unofficial +release was `upl102'. + +Through the process of patching and aging, it was becoming more and more +apparent that @i{Amd} was in much need of revitalizing. Maintaining +@i{Amd} had become a difficult task. I took it upon myself to cleanup +the code, so that it would be easier to port to new platforms, add new +features, keep up with the many new feature requests, and deal with the +never ending stream of bug reports. + +I have been working on such a release of @i{Amd} on and off since +January of 1996. The new suite of tools is currently named "am-utils" +(AutoMounter Utilities), in line with GNU naming conventions, befitting +the contents of the package. In October of 1996 I had received enough +offers to help me with this task that I decided to make a mailing list +for this group of people. Around the same time, @i{Amd} had become a +necessary part of my PhD thesis work, resulting in more work performed +on am-utils. + +Am-utils version 6.0 was numbered with a major new release number to +distinguish it from the last official release of @i{Amd} (5.x). Many +new features have been added such as a GNU @code{configure} system, NFS +Version 3, Autofs support, a run-time configuration file (`amd.conf'), +many new ports, more scripts and programs, as well as numerous bug +fixes. Another reason for the new major release number was to alert +users of am-utils that user-visible interfaces may have changed. In +order to make @i{Amd} work well for the next 10 years, and be easier to +maintain, it was necessary to remove old or unused features, change +various syntax files, etc. However, great care was taken to ensure the +maximum possible backwards compatibility. + +@c ################################################################ +@node Overview, Supported Platforms, History, Top +@chapter Overview + +@i{Amd} maintains a cache of mounted filesystems. Filesystems are +@dfn{demand-mounted} when they are first referenced, and unmounted after +a period of inactivity. @i{Amd} may be used as a replacement for Sun's +@b{automount}(8) program. It contains no proprietary source code and +has been ported to numerous flavors of Unix. @xref{Supported +Platforms}.@refill + +@i{Amd} was designed as the basis for experimenting with filesystem +layout and management. Although @i{Amd} has many direct applications it +is loaded with additional features which have little practical use. At +some point the infrequently used components may be removed to streamline +the production system. + +@c @i{Amd} supports the notion of @dfn{replicated} filesystems by evaluating +@c each member of a list of possible filesystem locations in parallel. +@c @i{Amd} checks that each cached mapping remains valid. Should a mapping be +@c lost -- such as happens when a fileserver goes down -- @i{Amd} automatically +@c selects a replacement should one be available. +@c +@menu +* Fundamentals:: +* Filesystems and Volumes:: +* Volume Naming:: +* Volume Binding:: +* Operational Principles:: +* Mounting a Volume:: +* Automatic Unmounting:: +* Keep-alives:: +* Non-blocking Operation:: +@end menu + +@node Fundamentals, Filesystems and Volumes, Overview, Overview +@comment node-name, next, previous, up +@section Fundamentals +@cindex Automounter fundamentals + +The fundamental concept behind @i{Amd} is the ability to separate the +name used to refer to a file from the name used to refer to its physical +storage location. This allows the same files to be accessed with the +same name regardless of where in the network the name is used. This is +very different from placing @file{/n/hostname} in front of the pathname +since that includes location dependent information which may change if +files are moved to another machine. + +By placing the required mappings in a centrally administered database, +filesystems can be re-organized without requiring changes to +configuration files, shell scripts and so on. + +@node Filesystems and Volumes, Volume Naming, Fundamentals, Overview +@comment node-name, next, previous, up +@section Filesystems and Volumes +@cindex Filesystem +@cindex Volume +@cindex Fileserver +@cindex sublink + +@i{Amd} views the world as a set of fileservers, each containing one or +more filesystems where each filesystem contains one or more +@dfn{volumes}. Here the term @dfn{volume} is used to refer to a +coherent set of files such as a user's home directory or a @TeX{} +distribution.@refill + +In order to access the contents of a volume, @i{Amd} must be told in +which filesystem the volume resides and which host owns the filesystem. +By default the host is assumed to be local and the volume is assumed to +be the entire filesystem. If a filesystem contains more than one +volume, then a @dfn{sublink} is used to refer to the sub-directory +within the filesystem where the volume can be found. + +@node Volume Naming, Volume Binding, Filesystems and Volumes, Overview +@comment node-name, next, previous, up +@section Volume Naming +@cindex Volume names +@cindex Network-wide naming +@cindex Replicated volumes +@cindex Duplicated volumes +@cindex Replacement volumes + +Volume names are defined to be unique across the entire network. A +volume name is the pathname to the volume's root as known by the users +of that volume. Since this name uniquely identifies the volume +contents, all volumes can be named and accessed from each host, subject +to administrative controls. + +Volumes may be replicated or duplicated. Replicated volumes contain +identical copies of the same data and reside at two or more locations in +the network. Each of the replicated volumes can be used +interchangeably. Duplicated volumes each have the same name but contain +different, though functionally identical, data. For example, +@samp{/vol/tex} might be the name of a @TeX{} distribution which varied +for each machine architecture.@refill + +@i{Amd} provides facilities to take advantage of both replicated and +duplicated volumes. Configuration options allow a single set of +configuration data to be shared across an entire network by taking +advantage of replicated and duplicated volumes. + +@i{Amd} can take advantage of replacement volumes by mounting them as +required should an active fileserver become unavailable. + +@node Volume Binding, Operational Principles, Volume Naming, Overview +@comment node-name, next, previous, up +@section Volume Binding +@cindex Volume binding +@cindex Unix namespace +@cindex Namespace +@cindex Binding names to filesystems + +Unix implements a namespace of hierarchically mounted filesystems. Two +forms of binding between names and files are provided. A @dfn{hard +link} completes the binding when the name is added to the filesystem. A +@dfn{soft link} delays the binding until the name is accessed. An +@dfn{automounter} adds a further form in which the binding of name to +filesystem is delayed until the name is accessed.@refill + +The target volume, in its general form, is a tuple (host, filesystem, +sublink) which can be used to name the physical location of any volume +in the network. + +When a target is referenced, @i{Amd} ignores the sublink element and +determines whether the required filesystem is already mounted. This is +done by computing the local mount point for the filesystem and checking +for an existing filesystem mounted at the same place. If such a +filesystem already exists then it is assumed to be functionally +identical to the target filesystem. By default there is a one-to-one +mapping between the pair (host, filesystem) and the local mount point so +this assumption is valid. + +@node Operational Principles, Mounting a Volume, Volume Binding, Overview +@comment node-name, next, previous, up +@section Operational Principles +@cindex Operational principles + +@i{Amd} operates by introducing new mount points into the namespace. +These are called @dfn{automount} points. The kernel sees these +automount points as NFS filesystems being served by @i{Amd}. Having +attached itself to the namespace, @i{Amd} is now able to control the +view the rest of the system has of those mount points. RPC calls are +received from the kernel one at a time. + +When a @dfn{lookup} call is received @i{Amd} checks whether the name is +already known. If it is not, the required volume is mounted. A +symbolic link pointing to the volume root is then returned. Once the +symbolic link is returned, the kernel will send all other requests +direct to the mounted filesystem. + +If a volume is not yet mounted, @i{Amd} consults a configuration +@dfn{mount-map} corresponding to the automount point. @i{Amd} then +makes a runtime decision on what and where to mount a filesystem based +on the information obtained from the map. + +@i{Amd} does not implement all the NFS requests; only those relevant +to name binding such as @dfn{lookup}, @dfn{readlink} and @dfn{readdir}. +Some other calls are also implemented but most simply return an error +code; for example @dfn{mkdir} always returns ``read-only filesystem''. + +@node Mounting a Volume, Automatic Unmounting, Operational Principles, Overview +@comment node-name, next, previous, up +@section Mounting a Volume +@cindex Mounting a volume +@cindex Location lists +@cindex Alternate locations +@cindex Mount retries +@cindex Background mounts + +Each automount point has a corresponding mount map. The mount map +contains a list of key--value pairs. The key is the name of the volume +to be mounted. The value is a list of locations describing where the +filesystem is stored in the network. In the source for the map the +value would look like + +@display +location1 location2 @dots{} locationN +@end display + +@i{Amd} examines each location in turn. Each location may contain +@dfn{selectors} which control whether @i{Amd} can use that location. +For example, the location may be restricted to use by certain hosts. +Those locations which cannot be used are ignored. + +@i{Amd} attempts to mount the filesystem described by each remaining +location until a mount succeeds or @i{Amd} can no longer proceed. The +latter can occur in three ways: + +@itemize @bullet +@item +If none of the locations could be used, or if all of the locations +caused an error, then the last error is returned. + +@item +If a location could be used but was being mounted in the background then +@i{Amd} marks that mount as being ``in progress'' and continues with +the next request; no reply is sent to the kernel. + +@item +Lastly, one or more of the mounts may have been @dfn{deferred}. A mount +is deferred if extra information is required before the mount can +proceed. When the information becomes available the mount will take +place, but in the mean time no reply is sent to the kernel. If the +mount is deferred, @i{Amd} continues to try any remaining locations. +@end itemize + +Once a volume has been mounted, @i{Amd} establishes a @dfn{volume +mapping} which is used to satisfy subsequent requests.@refill + +@node Automatic Unmounting, Keep-alives, Mounting a Volume, Overview +@comment node-name, next, previous, up +@section Automatic Unmounting + +To avoid an ever increasing number of filesystem mounts, @i{Amd} removes +volume mappings which have not been used recently. A time-to-live +interval is associated with each mapping and when that expires the +mapping is removed. When the last reference to a filesystem is removed, +that filesystem is unmounted. If the unmount fails, for example the +filesystem is still busy, the mapping is re-instated and its +time-to-live interval is extended. The global default for this grace +period is controlled by the @code{-w} command-line option (@pxref{-w +Option, -w}) or the @i{amd.conf} parameter @samp{dismount_interval} +(@pxref{dismount_interval Parameter}). It is also possible to set this +value on a per-mount basis (@pxref{opts Option, opts, opts}). + +Filesystems can be forcefully timed out using the @i{Amq} command. +@xref{Run-time Administration}. + +@node Keep-alives, Non-blocking Operation, Automatic Unmounting, Overview +@comment node-name, next, previous, up +@section Keep-alives +@cindex Keep-alives +@cindex Server crashes +@cindex NFS ping + +Use of some filesystem types requires the presence of a server on +another machine. If a machine crashes then it is of no concern to +processes on that machine that the filesystem is unavailable. However, +to processes on a remote host using that machine as a fileserver this +event is important. This situation is most widely recognized when an +NFS server crashes and the behavior observed on client machines is that +more and more processes hang. In order to provide the possibility of +recovery, @i{Amd} implements a @dfn{keep-alive} interval timer for some +filesystem types. Currently only NFS makes use of this service. + +The basis of the NFS keep-alive implementation is the observation that +most sites maintain replicated copies of common system data such as +manual pages, most or all programs, system source code and so on. If +one of those servers goes down it would be reasonable to mount one of +the others as a replacement. + +The first part of the process is to keep track of which fileservers are +up and which are down. @i{Amd} does this by sending RPC requests to the +servers' NFS @code{NullProc} and checking whether a reply is returned. +While the server state is uncertain the requests are re-transmitted at +three second intervals and if no reply is received after four attempts +the server is marked down. If a reply is received the fileserver is +marked up and stays in that state for 30 seconds at which time another +NFS ping is sent. + +Once a fileserver is marked down, requests continue to be sent every 30 +seconds in order to determine when the fileserver comes back up. During +this time any reference through @i{Amd} to the filesystems on that +server fail with the error ``Operation would block''. If a replacement +volume is available then it will be mounted, otherwise the error is +returned to the user. + +@c @i{Amd} keeps track of which servers are up and which are down. +@c It does this by sending RPC requests to the servers' NFS {\sc NullProc} and +@c checking whether a reply is returned. If no replies are received after a +@c short period, @i{Amd} marks the fileserver @dfn{down}. +@c RPC requests continue to be sent so that it will notice when a fileserver +@c comes back up. +@c ICMP echo packets \cite{rfc:icmp} are not used because it is the availability +@c of the NFS service that is important, not the existence of a base kernel. +@c Whenever a reference to a fileserver which is down is made via @i{Amd}, an alternate +@c filesystem is mounted if one is available. +@c +Although this action does not protect user files, which are unique on +the network, or processes which do not access files via @i{Amd} or +already have open files on the hung filesystem, it can prevent most new +processes from hanging. + +By default, fileserver state is not maintained for NFS/TCP mounts. The +remote fileserver is always assumed to be up. +@c +@c With a suitable combination of filesystem management and mount-maps, +@c machines can be protected against most server downtime. This can be +@c enhanced by allocating boot-servers dynamically which allows a diskless +@c workstation to be quickly restarted if necessary. Once the root filesystem +@c is mounted, @i{Amd} can be started and allowed to mount the remainder of +@c the filesystem from whichever fileservers are available. + +@node Non-blocking Operation, , Keep-alives, Overview +@comment node-name, next, previous, up +@section Non-blocking Operation +@cindex Non-blocking operation +@cindex Multiple-threaded server +@cindex RPC retries + +Since there is only one instance of @i{Amd} for each automount point, +and usually only one instance on each machine, it is important that it +is always available to service kernel calls. @i{Amd} goes to great +lengths to ensure that it does not block in a system call. As a last +resort @i{Amd} will fork before it attempts a system call that may block +indefinitely, such as mounting an NFS filesystem. Other tasks such as +obtaining filehandle information for an NFS filesystem, are done using a +purpose built non-blocking RPC library which is integrated with +@i{Amd}'s task scheduler. This library is also used to implement NFS +keep-alives (@pxref{Keep-alives}). + +Whenever a mount is deferred or backgrounded, @i{Amd} must wait for it +to complete before replying to the kernel. However, this would cause +@i{Amd} to block waiting for a reply to be constructed. Rather than do +this, @i{Amd} simply @dfn{drops} the call under the assumption that the +kernel RPC mechanism will automatically retry the request. + +@c ################################################################ +@node Supported Platforms, Mount Maps, Overview, Top +@comment node-name, next, previous, up +@chapter Supported Platforms +@cindex Supported Platforms +@cindex shared libraries +@cindex NFS V.3 support + +@i{Am-utils} has been ported to a wide variety of machines and operating +systems. @i{Am-utils}'s code works for little-endian and big-endian +machines, as well as 32 bit and 64 bit architectures. Furthermore, when +@i{Am-utils} ports to an Operating System on one architecture, it is generally +readily portable to the same Operating System on all platforms on which +it is available. + +The table below lists those platforms supported by the latest release. +The listing is based on the standard output from GNU's +@code{config.guess} script. Since significant changes have been made to +am-utils, not all systems listed here have been verified working for all +features. + +@multitable {Auto-Configured System Name} {Config} {Compile} {Amd} {NFS3} {Shlib} {Hlfsd} + +@item @b{Auto-Configured System Name} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab @b{Config} @tab @b{Compile} @tab @b{Amd} @tab @b{NFS3} @tab @b{Shlib} @tab @b{Hlfsd} + +@item @b{alpha-dec-osf2.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab @tab @tab + +@item @b{alpha-dec-osf4.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab @tab + +@item @b{alphaev5-unknown-linux-gnu} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{hppa1.0-hp-hpux11.00} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab no @tab @tab + +@item @b{hppa1.1-hp-hpux10.10} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab no @tab + +@item @b{hppa1.1-hp-hpux10.20} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab no @tab + +@item @b{hppa1.1-hp-hpux9.01} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{hppa1.1-hp-hpux9.05} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{hppa1.1-hp-hpux9.07} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{i386-pc-bsdi2.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{i386-pc-bsdi3.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{i386-pc-bsdi3.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{i386-pc-solaris2.5.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes + +@item @b{i386-pc-solaris2.6} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes + +@item @b{i386-pc-solaris2.7} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes + +@item @b{i386-unknown-freebsd2.1.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{i386-unknown-freebsd2.2.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{i386-unknown-freebsd3.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{i386-unknown-netbsd1.2.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{i386-unknown-netbsd1.3} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{i386-unknown-netbsd1.3.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{i386-unknown-openbsd2.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{i486-ncr-sysv4.3.03} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab @tab yes @tab @tab + +@item @b{i486-pc-linux-gnulibc1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{i586-pc-linux-gnu} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{i586-pc-linux-gnulibc1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{i686-pc-linux-gnu} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{i686-pc-linux-gnulibc1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{m68k-hp-hpux9.00} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{m68k-sun-sunos4.1.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{m68k-next-nextstep3} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{mips-dec-ultrix4.3} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{mips-sgi-irix5.2} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab @tab @tab @tab @tab @tab + +@item @b{mips-sgi-irix5.3} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab @tab + +@item @b{mips-sgi-irix6.2} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab @tab + +@item @b{mips-sgi-irix6.4} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{powerpc-ibm-aix4.1.5.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{powerpc-ibm-aix4.2.1.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab @tab + +@item @b{rs6000-ibm-aix3.2} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{rs6000-ibm-aix3.2.5} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{rs6000-ibm-aix4.1.4.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{rs6000-ibm-aix4.1.5.0} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{sparc-sun-solaris2.3} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab @tab + +@item @b{sparc-sun-solaris2.4} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-sun-solaris2.5} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab + +@item @b{sparc-sun-solaris2.5.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes + +@item @b{sparc-sun-solaris2.6} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes + +@item @b{sparc-sun-solaris2.7} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab yes @tab yes @tab yes + +@item @b{sparc-sun-sunos4.1.1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-sun-sunos4.1.3} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-sun-sunos4.1.3C} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-sun-sunos4.1.3_U1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-sun-sunos4.1.4} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-unknown-linux-gnulibc1} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@item @b{sparc-unknown-netbsd1.2E} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab @tab @tab + +@item @b{sparc64-unknown-linux-gnu} +@c {Config} {Compile} {Amd} {NFS V.3} {Shlib} {Hlfsd} +@tab yes @tab yes @tab yes @tab n/a @tab yes @tab + +@end multitable + +See the @file{INSTALL} in the distribution for more specific details on +building and/or configuring for some systems. + +@c ################################################################ +@node Mount Maps, Amd Command Line Options, Supported Platforms, Top +@comment node-name, next, previous, up +@chapter Mount Maps +@cindex Mount maps +@cindex Automounter configuration maps +@cindex Mount information + +@i{Amd} has no built-in knowledge of machines or filesystems. +External @dfn{mount-maps} are used to provide the required information. +Specifically, @i{Amd} needs to know when and under what conditions it +should mount filesystems. + +The map entry corresponding to the requested name contains a list of +possible locations from which to resolve the request. Each location +specifies filesystem type, information required by that filesystem (for +example the block special device in the case of UFS), and some +information describing where to mount the filesystem (@pxref{fs Option}). A +location may also contain @dfn{selectors} (@pxref{Selectors}).@refill + +@menu +* Map Types:: +* Key Lookup:: +* Location Format:: +@end menu + +@node Map Types, Key Lookup, Mount Maps, Mount Maps +@comment node-name, next, previous, up +@section Map Types +@cindex Mount map types +@cindex Map types +@cindex Configuration map types +@cindex Types of mount map +@cindex Types of configuration map +@cindex Determining the map type + +A mount-map provides the run-time configuration information to @i{Amd}. +Maps can be implemented in many ways. Some of the forms supported by +@i{Amd} are regular files, ndbm databases, NIS maps, the @dfn{Hesiod} +name server, and even the password file. + +A mount-map @dfn{name} is a sequence of characters. When an automount +point is created a handle on the mount-map is obtained. For each map +type configured, @i{Amd} attempts to reference the map of the +appropriate type. If a map is found, @i{Amd} notes the type for future +use and deletes the reference, for example closing any open file +descriptors. The available maps are configured when @i{Amd} is built +and can be displayed by running the command @samp{amd -v}. + +When using an @i{Amd} configuration file (@pxref{Amd Configuration File}) +and the keyword @samp{map_type} (@pxref{map_type Parameter}), you may +force the map used to any type. + +By default, @i{Amd} caches data in a mode dependent on the type of map. +This is the same as specifying @samp{cache:=mapdefault} and selects a +suitable default cache mode depending on the map type. The individual +defaults are described below. The @var{cache} option can be specified +on automount points to alter the caching behavior (@pxref{Automount +Filesystem}).@refill + +The following map types have been implemented, though some are not +available on all machines. Run the command @samp{amd -v} to obtain a +list of map types configured on your machine. + +@menu +* File maps:: +* ndbm maps:: +* NIS maps:: +* NIS+ maps:: +* Hesiod maps:: +* Password maps:: +* Union maps:: +* LDAP maps:: +@end menu + +@node File maps, ndbm maps, Map Types, Map Types +@comment node-name, next, previous, up +@subsection File maps +@cindex File maps +@cindex Flat file maps +@cindex File map syntactic conventions + +When @i{Amd} searches a file for a map entry it does a simple scan of +the file and supports both comments and continuation lines. + +Continuation lines are indicated by a backslash character (@samp{\}) as +the last character of a line in the file. The backslash, newline character +@emph{and any leading white space on the following line} are discarded. A maximum +line length of 2047 characters is enforced after continuation lines are read +but before comments are stripped. Each line must end with +a newline character; that is newlines are terminators, not separators. +The following examples illustrate this: + +@example +key valA valB; \ + valC +@end example + +specifies @emph{three} locations, and is identical to + +@example +key valA valB; valC +@end example + +However, + +@example +key valA valB;\ + valC +@end example + +specifies only @emph{two} locations, and is identical to + +@example +key valA valB;valC +@end example + +After a complete line has been read from the file, including +continuations, @i{Amd} determines whether there is a comment on the +line. A comment begins with a hash (``@samp{#}'') character and +continues to the end of the line. There is no way to escape or change +the comment lead-in character. + +Note that continuation lines and comment support @dfn{only} apply to +file maps, or ndbm maps built with the @code{mk-amd-map} program. + +When caching is enabled, file maps have a default cache mode of +@code{all} (@pxref{Automount Filesystem}). + +@node ndbm maps, NIS maps, File maps, Map Types +@comment node-name, next, previous, up +@subsection ndbm maps +@cindex ndbm maps + +An ndbm map may be used as a fast access form of a file map. The program, +@code{mk-amd-map}, converts a normal map file into an ndbm database. +This program supports the same continuation and comment conventions that +are provided for file maps. Note that ndbm format files may @emph{not} +be sharable across machine architectures. The notion of speed generally +only applies to large maps; a small map, less than a single disk block, +is almost certainly better implemented as a file map. + +ndbm maps have a default cache mode of @samp{all} (@pxref{Automount Filesystem}). + +@node NIS maps, NIS+ maps, ndbm maps, Map Types +@comment node-name, next, previous, up +@subsection NIS maps +@cindex NIS (YP) maps + +When using NIS (formerly YP), an @i{Amd} map is implemented directly +by the underlying NIS map. Comments and continuation lines are +@emph{not} supported in the automounter and must be stripped when +constructing the NIS server's database. + +NIS maps have a default cache mode of @code{all} (@pxref{Automount +Filesystem}). + +The following rule illustrates what could be added to your NIS @file{Makefile}, +in this case causing the @file{amd.home} map to be rebuilt: +@example +$(YPTSDIR)/amd.home.time: $(ETCDIR)/amd.home + -@@sed -e "s/#.*$$//" -e "/^$$/d" $(ETCDIR)/amd.home | \ + awk '@{ \ + for (i = 1; i <= NF; i++) \ + if (i == NF) @{ \ + if (substr($$i, length($$i), 1) == "\\") \ + printf("%s", substr($$i, 1, length($$i) - 1)); \ + else \ + printf("%s\n", $$i); \ + @} \ + else \ + printf("%s ", $$i); \ + @}' | \ + $(MAKEDBM) - $(YPDBDIR)/amd.home; \ + touch $(YPTSDIR)/amd.home.time; \ + echo "updated amd.home"; \ + if [ ! $(NOPUSH) ]; then \ + $(YPPUSH) amd.home; \ + echo "pushed amd.home"; \ + else \ + : ; \ + fi +@end example + +Here @code{$(YPTSDIR)} contains the time stamp files, and @code{$(YPDBDIR)} contains +the dbm format NIS files. + +@node NIS+ maps, Hesiod maps, NIS maps, Map Types +@comment node-name, next, previous, up +@subsection NIS+ maps +@cindex NIS+ maps + +NIS+ maps do not support cache mode @samp{all} and, when caching is +enabled, have a default cache mode of @samp{inc}. + +XXX: FILL IN WITH AN EXAMPLE. + +@node Hesiod maps, Password maps, NIS+ maps, Map Types +@comment node-name, next, previous, up +@subsection Hesiod maps +@cindex Hesiod maps + +When the map name begins with the string @samp{hesiod.} lookups are made +using the @dfn{Hesiod} name server. The string following the dot is +used as a name qualifier and is prepended with the key being located. +The entire string is then resolved in the @code{automount} context, or +the @i{amd.conf} parameter @samp{hesiod_base} (@pxref{hesiod_base +Parameter}). For example, if the the key is @samp{jsp} and map name is +@samp{hesiod.homes} then @dfn{Hesiod} is asked to resolve +@samp{jsp.homes.automount}. + +Hesiod maps do not support cache mode @samp{all} and, when caching is +enabled, have a default cache mode of @samp{inc} (@pxref{Automount +Filesystem}). + +The following is an example of a @dfn{Hesiod} map entry: + +@example +jsp.homes.automount HS TXT "rfs:=/home/charm;rhost:=charm;sublink:=jsp" +njw.homes.automount HS TXT "rfs:=/home/dylan/dk2;rhost:=dylan;sublink:=njw" +@end example + +@node Password maps, Union maps, Hesiod maps, Map Types +@comment node-name, next, previous, up +@subsection Password maps +@cindex Password file maps +@cindex /etc/passwd maps +@cindex User maps, automatic generation +@cindex Automatic generation of user maps +@cindex Using the password file as a map + +The password map support is unlike the four previous map types. When +the map name is the string @file{/etc/passwd} @i{Amd} can lookup a user +name in the password file and re-arrange the home directory field to +produce a usable map entry. + +@i{Amd} assumes the home directory has the format +`@t{/}@i{anydir}@t{/}@i{dom1}@t{/../}@i{domN}@t{/}@i{login}'. +@c @footnote{This interpretation is not necessarily exactly what you want.} +It breaks this string into a map entry where @code{$@{rfs@}} has the +value `@t{/}@i{anydir}@t{/}@i{domN}', @code{$@{rhost@}} has the value +`@i{domN}@t{.}@i{...}@t{.}@i{dom1}', and @code{$@{sublink@}} has the +value @i{login}.@refill + +Thus if the password file entry was + +@example +/home/achilles/jsp +@end example + +the map entry used by @i{Amd} would be + +@example +rfs:=/home/achilles;rhost:=achilles;sublink:=jsp +@end example + +Similarly, if the password file entry was + +@example +/home/cc/sugar/mjh +@end example + +the map entry used by @i{Amd} would be + +@example +rfs:=/home/sugar;rhost:=sugar.cc;sublink:=jsp +@end example + +@node Union maps, LDAP maps , Password maps, Map Types +@comment node-name, next, previous, up +@subsection Union maps +@cindex Union file maps + +The union map support is provided specifically for use with the union +filesystem, @pxref{Union Filesystem}. + +It is identified by the string @samp{union:} which is followed by a +colon separated list of directories. The directories are read in order, +and the names of all entries are recorded in the map cache. Later +directories take precedence over earlier ones. The union filesystem +type then uses the map cache to determine the union of the names in all +the directories. + +@node LDAP maps, , Union maps, Map Types +@comment node-name, next, previous, up +@subsection LDAP maps +@cindex LDAP maps +@cindex Lightweight Directory Access Protocol + +LDAP (Lightweight Directory Access Protocol) maps do not support cache +mode @samp{all} and, when caching is enabled, have a default cache mode +of @samp{inc}. + +For example, an @i{Amd} map @samp{amd.home} that looks as follows: + +@example +/defaults opts:=rw,intr;type:=link + +zing -rhost:=shekel \ + host==shekel \ + host!=shekel;type:=nfs +@end example +@noindent +when converted to LDAP (@pxref{amd2ldif}), will result in the following +LDAP database: +@example +$ amd2ldif amd.home CUCS < amd.home +dn: cn=amdmap timestamp, CUCS +cn : amdmap timestamp +objectClass : amdmapTimestamp +amdmapTimestamp: 873071363 + +dn: cn=amdmap amd.home[/defaults], CUCS +cn : amdmap amd.home[/defaults] +objectClass : amdmap +amdmapName : amd.home +amdmapKey : /defaults +amdmapValue : opts:=rw,intr;type:=link + +dn: cn=amdmap amd.home[], CUCS +cn : amdmap amd.home[] +objectClass : amdmap +amdmapName : amd.home +amdmapKey : +amdmapValue : + +dn: cn=amdmap amd.home[zing], CUCS +cn : amdmap amd.home[zing] +objectClass : amdmap +amdmapName : amd.home +amdmapKey : zing +amdmapValue : -rhost:=shekel host==shekel host!=shekel;type:=nfs +@end example + +@c subsection Gdbm + +@node Key Lookup, Location Format, Map Types, Mount Maps +@comment node-name, next, previous, up +@section How keys are looked up +@cindex Key lookup +@cindex Map lookup +@cindex Looking up keys +@cindex How keys are looked up +@cindex Wildcards in maps + +The key is located in the map whose type was determined when the +automount point was first created. In general the key is a pathname +component. In some circumstances this may be modified by variable +expansion (@pxref{Variable Expansion}) and prefixing. If the automount +point has a prefix, specified by the @var{pref} option, then that is +prepended to the search key before the map is searched. + +If the map cache is a @samp{regexp} cache then the key is treated as an +egrep-style regular expression, otherwise a normal string comparison is +made. + +If the key cannot be found then a @dfn{wildcard} match is attempted. +@i{Amd} repeatedly strips the basename from the key, appends @samp{/*} and +attempts a lookup. Finally, @i{Amd} attempts to locate the special key @samp{*}. + +For example, the following sequence would be checked if @file{home/dylan/dk2} was +being located: + +@example + home/dylan/dk2 + home/dylan/* + home/* + * +@end example + +At any point when a wildcard is found, @i{Amd} proceeds as if an exact +match had been found and the value field is then used to resolve the +mount request, otherwise an error code is propagated back to the kernel. +(@pxref{Filesystem Types}).@refill + +@node Location Format, , Key Lookup, Mount Maps +@comment node-name, next, previous, up +@section Location Format +@cindex Location format +@cindex Map entry format +@cindex How locations are parsed + +The value field from the lookup provides the information required to +mount a filesystem. The information is parsed according to the syntax +shown below. + +@display +@i{location-list}: + @i{location-selection} + @i{location-list} @i{white-space} @t{||} @i{white-space} @i{location-selection} +@i{location-selection}: + @i{location} + @i{location-selection} @i{white-space} @i{location} +@i{location}: + @i{location-info} + @t{-}@i{location-info} + @t{-} +@i{location-info}: + @i{sel-or-opt} + @i{location-info}@t{;}@i{sel-or-opt} + @t{;} +@i{sel-or-opt}: + @i{selection} + @i{opt-ass} +@i{selection}: + selector@t{==}@i{value} + selector@t{!=}@i{value} +@i{opt-ass}: + option@t{:=}@i{value} +@i{white-space}: + space + tab +@end display + +Note that unquoted whitespace is not allowed in a location description. +White space is only allowed, and is mandatory, where shown with non-terminal +@i{white-space}. + +A @dfn{location-selection} is a list of possible volumes with which to +satisfy the request. @dfn{location-selection}s are separated by the +@samp{||} operator. The effect of this operator is to prevent use of +location-selections to its right if any of the location-selections on +its left were selected whether or not any of them were successfully +mounted (@pxref{Selectors}).@refill + +The location-selection, and singleton @dfn{location-list}, +@samp{type:=ufs;dev:=/dev/xd1g} would inform @i{Amd} to mount a UFS +filesystem from the block special device @file{/dev/xd1g}. + +The @dfn{sel-or-opt} component is either the name of an option required +by a specific filesystem, or it is the name of a built-in, predefined +selector such as the architecture type. The value may be quoted with +double quotes @samp{"}, for example +@samp{type:="ufs";dev:="/dev/xd1g"}. These quotes are stripped when the +value is parsed and there is no way to get a double quote into a value +field. Double quotes are used to get white space into a value field, +which is needed for the program filesystem (@pxref{Program Filesystem}).@refill + +@menu +* Map Defaults:: +* Variable Expansion:: +* Selectors:: +* Map Options:: +@end menu + +@node Map Defaults, Variable Expansion, Location Format, Location Format +@comment node-name, next, previous, up +@subsection Map Defaults +@cindex Map defaults +@cindex How to set default map parameters +@cindex Setting default map parameters + +A location beginning with a dash @samp{-} is used to specify default +values for subsequent locations. Any previously specified defaults in +the location-list are discarded. The default string can be empty in +which case no defaults apply. + +The location @samp{-fs:=/mnt;opts:=ro} would set the local mount point +to @file{/mnt} and cause mounts to be read-only by default. Defaults +specified this way are appended to, and so override, any global map +defaults given with @samp{/defaults}). + +@c +@c A @samp{/defaults} value @dfn{gdef} and a location list +@c \begin{quote} +@c $@samp{-}@dfn{def}_a $\verb*+ +$ @dfn{loc}_{a_1} $\verb*+ +$ @dfn{loc}_{a_2} $\verb*+ +$ @samp{-}@dfn{def}_b $\verb*+ +$ @dfn{loc}_{b_1} \ldots$ +@c \end{quote} +@c is equivalent to +@c \begin{quote} +@c $@samp{-}@dfn{gdef}@samp{;}@dfn{def}_a $\verb*+ +$ @dfn{loc}_{a_1} $\verb*+ +$ @dfn{loc}_{a_2} $\verb*+ +$ @samp{-}@dfn{gdef}@samp{;}@dfn{def}_b $\verb*+ +$ @dfn{loc}_{b_1} \ldots$ +@c \end{quote} +@c which is equivalent to +@c \begin{quote} +@c $@dfn{gdef}@samp{;}@dfn{def}_a@samp{;}@dfn{loc}_{a_1} $\verb*+ +$@dfn{gdef}@samp{;}@dfn{def}_a@samp{;}@dfn{loc}_{a_2} $\verb*+ +$@dfn{gdef}@samp{;}@dfn{def}_b@samp{;}@dfn{loc}_{b_1} \ldots$ +@c \end{quote} + +@node Variable Expansion, Selectors, Map Defaults, Location Format +@comment node-name, next, previous, up +@subsection Variable Expansion +@cindex Variable expansion +@cindex How variables are expanded +@cindex Pathname operators +@cindex Domain stripping +@cindex Domainname operators +@cindex Stripping the local domain name +@cindex Environment variables +@cindex How to access environment variables in maps + +To allow generic location specifications @i{Amd} does variable expansion +on each location and also on some of the option strings. Any option or +selector appearing in the form @code{$@dfn{var}} is replaced by the +current value of that option or selector. For example, if the value of +@code{$@{key@}} was @samp{bin}, @code{$@{autodir@}} was @samp{/a} and +@code{$@{fs@}} was `@t{$@{autodir@}}@t{/local/}@t{$@{key@}}' then +after expansion @code{$@{fs@}} would have the value @samp{/a/local/bin}. +Any environment variable can be accessed in a similar way.@refill + +Two pathname operators are available when expanding a variable. If the +variable name begins with @samp{/} then only the last component of the +pathname is substituted. For example, if @code{$@{path@}} was +@samp{/foo/bar} then @code{$@{/path@}} would be expanded to @samp{bar}. +Similarly, if the variable name ends with @samp{/} then all but the last +component of the pathname is substituted. In the previous example, +@code{$@{path/@}} would be expanded to @samp{/foo}.@refill + +Two domain name operators are also provided. If the variable name +begins with @samp{.} then only the domain part of the name is +substituted. For example, if @code{$@{rhost@}} was +@samp{swan.doc.ic.ac.uk} then @code{$@{.rhost@}} would be expanded to +@samp{doc.ic.ac.uk}. Similarly, if the variable name ends with @samp{.} +then only the host component is substituted. In the previous example, +@code{$@{rhost.@}} would be expanded to @samp{swan}.@refill + +Variable expansion is a two phase process. Before a location is parsed, +all references to selectors, @i{eg} @code{$@{path@}}, are expanded. The +location is then parsed, selections are evaluated and option assignments +recorded. If there were no selections or they all succeeded the +location is used and the values of the following options are expanded in +the order given: @var{sublink}, @var{rfs}, @var{fs}, @var{opts}, +@var{remopts}, @var{mount} and @var{unmount}. + +Note that expansion of option values is done after @dfn{all} assignments +have been completed and not in a purely left to right order as is done +by the shell. This generally has the desired effect but care must be +taken if one of the options references another, in which case the +ordering can become significant. + +There are two special cases concerning variable expansion: + +@enumerate +@item +before a map is consulted, any selectors in the name received +from the kernel are expanded. For example, if the request from the +kernel was for `@t{$@{arch@}}@t{.bin}' and the machine architecture +was @samp{vax}, the value given to @code{$@{key@}} would be +@samp{vax.bin}.@refill + +@item +the value of @code{$@{rhost@}} is expanded and normalized before the +other options are expanded. The normalization process strips any local +sub-domain components. For example, if @code{$@{domain@}} was +@samp{Berkeley.EDU} and @code{$@{rhost@}} was initially +@samp{snow.Berkeley.EDU}, after the normalization it would simply be +@samp{snow}. Hostname normalization is currently done in a +@emph{case-dependent} manner.@refill +@end enumerate + +@c====================================================================== +@node Selectors, Map Options, Variable Expansion, Location Format +@comment node-name, next, previous, up +@subsection Selectors +@cindex Selectors + +Selectors are used to control the use of a location. It is possible to +share a mount map between many machines in such a way that filesystem +location, architecture and operating system differences are hidden from +the users. A selector of the form @samp{arch==sun3;os==sunos4} would only +apply on Sun-3s running SunOS 4.x. + +Selectors can be negated by using @samp{!=} instead of @samp{==}. For +example to select a location on all non-Vax machines the selector +@samp{arch!=vax} would be used. + +Selectors are evaluated left to right. If a selector fails then that +location is ignored. Thus the selectors form a conjunction and the +locations form a disjunction. If all the locations are ignored or +otherwise fail then @i{Amd} uses the @dfn{error} filesystem +(@pxref{Error Filesystem}). This is equivalent to having a location +@samp{type:=error} at the end of each mount-map entry.@refill + +The default value of many of the selectors listed here can be overridden +by an @i{Amd} command line switch or in an @i{Amd} configuration file. +@xref{Amd Configuration File}. + +These are the selectors currently implemented. + +@menu +* arch Selector Variable:: +* autodir Selector Variable:: +* byte Selector Variable:: +* cluster Selector Variable:: +* domain Selector Variable:: +* host Selector Variable:: +* hostd Selector Variable:: +* karch Selector Variable:: +* os Selector Variable:: +* osver Selector Variable:: + +* key Selector Variable:: +* map Selector Variable:: +* netnumber Selector Variable:: +* network Selector Variable:: +* path Selector Variable:: +* wire Selector Variable:: + +* exists Selector Function:: +* false Selector Function:: +* netgrp Selector Function:: +* in_network Selector Function:: +* true Selector Function:: +@end menu + +@c ---------------------------------------------------------------- +@node arch Selector Variable, autodir Selector Variable, Selectors, Selectors +@comment node-name, next, previous, up +@subsubsection arch Selector Variable +@cindex arch Selector Variable +@cindex arch, mount selector +@cindex Mount selector; arch +@cindex Selector; arch + +The machine architecture which was automatically determined at compile +time. The architecture type can be displayed by running the command +@samp{amd -v}. @xref{Supported Platforms}.@refill + +@c ---------------------------------------------------------------- +@node autodir Selector Variable, byte Selector Variable, arch Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection autodir Selector Variable +@cindex autodir Selector Variable +@cindex autodir, mount selector +@cindex Mount selector; autodir +@cindex Selector; autodir + +The default directory under which to mount filesystems. This may be +changed by the @code{-a} command line option. @xref{fs Option}. + +@c ---------------------------------------------------------------- +@node byte Selector Variable, cluster Selector Variable, autodir Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection byte Selector Variable +@cindex byte Selector Variable +@cindex byte, mount selector +@cindex Mount selector; byte +@cindex Selector; byte + +The machine's byte ordering. This is either @samp{little}, indicating +little-endian, or @samp{big}, indicating big-endian. One possible use +is to share @samp{rwho} databases (@pxref{rwho servers}). Another is to +share ndbm databases, however this use can be considered a courageous +juggling act. + +@c ---------------------------------------------------------------- +@node cluster Selector Variable, domain Selector Variable, byte Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection cluster Selector Variable +@cindex cluster Selector Variable +@cindex cluster, mount selector +@cindex Mount selector; cluster +@cindex Selector; cluster + +This is provided as a hook for the name of the local cluster. This can +be used to decide which servers to use for copies of replicated +filesystems. @code{$@{cluster@}} defaults to the value of +@code{$@{domain@}} unless a different value is set with the @code{-C} +command line option. + +@c ---------------------------------------------------------------- +@node domain Selector Variable, host Selector Variable, cluster Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection domain Selector Variable +@cindex domain Selector Variable +@cindex domain, mount selector +@cindex Mount selector; domain +@cindex Selector; domain + +The local domain name as specified by the @code{-d} command line option. +@xref{host Selector Variable}. + +@c ---------------------------------------------------------------- +@node host Selector Variable, hostd Selector Variable, domain Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection host Selector Variable +@cindex host Selector Variable +@cindex host, mount selector +@cindex Mount selector; host +@cindex Selector; host + +The local hostname as determined by @b{gethostname}(2). If no domain +name was specified on the command line and the hostname contains a +period @samp{.} then the string before the period is used as the host +name, and the string after the period is assigned to @code{$@{domain@}}. +For example, if the hostname is @samp{styx.doc.ic.ac.uk} then +@code{host} would be @samp{styx} and @code{domain} would be +@samp{doc.ic.ac.uk}. @code{hostd} would be +@samp{styx.doc.ic.ac.uk}.@refill + +@c ---------------------------------------------------------------- +@node hostd Selector Variable, karch Selector Variable, host Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection hostd Selector Variable +@cindex hostd Selector Variable +@cindex hostd, mount selector +@cindex Mount selector; hostd +@cindex Selector; hostd + +This resolves to the @code{$@{host@}} and @code{$@{domain@}} +concatenated with a @samp{.} inserted between them if required. If +@code{$@{domain@}} is an empty string then @code{$@{host@}} and +@code{$@{hostd@}} will be identical. + +@c ---------------------------------------------------------------- +@node karch Selector Variable, os Selector Variable, hostd Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection karch Selector Variable +@cindex karch Selector Variable +@cindex karch, mount selector +@cindex Mount selector; karch +@cindex Selector; karch + +This is provided as a hook for the kernel architecture. This is used on +SunOS 4 and SunOS 5, for example, to distinguish between different +@samp{/usr/kvm} volumes. @code{$@{karch@}} defaults to the ``machine'' +value gotten from @b{uname}(2). If the @b{uname}(2) system call is not +available, the value of @code{$@{karch@}} defaults to that of +@code{$@{arch@}}. Finally, a different value can be set with the @code{-k} +command line option. + +@c ---------------------------------------------------------------- +@node os Selector Variable, osver Selector Variable, karch Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection os Selector Variable +@cindex os Selector Variable +@cindex os, mount selector +@cindex Mount selector; os +@cindex Selector; os + +The operating system. Like the machine architecture, this is +automatically determined at compile time. The operating system name can +be displayed by running the command @samp{amd -v}. @xref{Supported +Platforms}.@refill + +@c ---------------------------------------------------------------- +@node osver Selector Variable, key Selector Variable, os Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection osver Selector Variable +@cindex osver Selector Variable +@cindex osver, mount selector +@cindex Mount selector; osver +@cindex Selector; osver + +The operating system version. Like the machine architecture, this is +automatically determined at compile time. The operating system name can +be displayed by running the command @samp{amd -v}. @xref{Supported +Platforms}.@refill + +@c ---------------------------------------------------------------- +@ifhtml +
+@end ifhtml +@sp 3 +The following selectors are also provided. Unlike the other selectors, +they vary for each lookup. Note that when the name from the kernel is +expanded prior to a map lookup, these selectors are all defined as empty +strings. + +@c ---------------------------------------------------------------- +@node key Selector Variable, map Selector Variable, osver Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection key Selector Variable +@cindex key Selector Variable +@cindex key, mount selector +@cindex Mount selector; key +@cindex Selector; key + +The name being resolved. For example, if @file{/home} is an automount +point, then accessing @file{/home/foo} would set @code{$@{key@}} to the +string @samp{foo}. The key is prefixed by the @var{pref} option set in +the parent mount point. The default prefix is an empty string. If the +prefix was @file{blah/} then @code{$@{key@}} would be set to +@file{blah/foo}.@refill + +@c ---------------------------------------------------------------- +@node map Selector Variable, netnumber Selector Variable, key Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection map Selector Variable +@cindex map Selector Variable +@cindex map, mount selector +@cindex Mount selector; map +@cindex Selector; map + +The name of the mount map being used. + +@c ---------------------------------------------------------------- +@node netnumber Selector Variable, network Selector Variable, map Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection netnumber Selector Variable +@cindex netnumber Selector Variable +@cindex netnumber, mount selector +@cindex Mount selector; netnumber +@cindex Selector; netnumber + +This selector is identical to the @samp{in_network} selector function, +see @ref{in_network Selector Function}. It will match either the name +or number of @i{any} network interface on which this host is connected +to. The names and numbers of all attached interfaces are available from +the output of @samp{amd -v}. + +@c ---------------------------------------------------------------- +@node network Selector Variable, path Selector Variable, netnumber Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection network Selector Variable +@cindex network Selector Variable +@cindex network, mount selector +@cindex Mount selector; network +@cindex Selector; network + +This selector is identical to the @samp{in_network} selector function, +see @ref{in_network Selector Function}. It will match either the name +or number of @i{any} network interface on which this host is connected +to. The names and numbers of all attached interfaces are available from +the output of @samp{amd -v}. + +@c ---------------------------------------------------------------- +@node path Selector Variable, wire Selector Variable, network Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection path Selector Variable +@cindex path Selector Variable +@cindex path, mount selector +@cindex Mount selector; path +@cindex Selector; path + +The full pathname of the name being resolved. For example +@file{/home/foo} in the example above. + +@c ---------------------------------------------------------------- +@node wire Selector Variable, exists Selector Function, path Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection wire Selector Variable +@cindex wire Selector Variable +@cindex wire, mount selector +@cindex Mount selector; wire +@cindex Selector; wire + +This selector is identical to the @samp{in_network} selector function, +see @ref{in_network Selector Function}. It will match either the name +or number of @i{any} network interface on which this host is connected +to. The names and numbers of all attached interfaces are available from +the output of @samp{amd -v}. + +@c ---------------------------------------------------------------- +@ifhtml +
+@end ifhtml +@sp 2 +The following boolean functions are selectors which take an argument +@i{ARG}. They return a value of true or false, and thus do not need to +be compared with a value. Each of these may be negated by prepending +@samp{!} to their name. + +@c ---------------------------------------------------------------- +@node exists Selector Function, false Selector Function, wire Selector Variable, Selectors +@comment node-name, next, previous, up +@subsubsection exists Selector Function +@cindex exists Selector Function +@cindex exists, boolean mount selector +@cindex !exists, boolean mount selector +@cindex Mount selector; exists +@cindex Selector; exists + +If the file listed by @i{ARG} exists (via @b{lstat}(2)), this function +evaluates to true. Otherwise it evaluates to false. + +@c ---------------------------------------------------------------- +@node false Selector Function, netgrp Selector Function, exists Selector Function, Selectors +@comment node-name, next, previous, up +@subsubsection false Selector Function +@cindex false Selector Function +@cindex false, boolean mount selector +@cindex !false, boolean mount selector +@cindex Mount selector; false +@cindex Selector; false + +Always evaluates to false. @i{ARG} is ignored. + +@c ---------------------------------------------------------------- +@node netgrp Selector Function, in_network Selector Function, false Selector Function, Selectors +@comment node-name, next, previous, up +@subsubsection netgrp Selector Function +@cindex netgrp Selector Function +@cindex netgrp, boolean mount selector +@cindex !netgrp, boolean mount selector +@cindex Mount selector; netgrp +@cindex Selector; netgrp + +If the current host as determined by the value of @code{$@{host@}} is a +member of the netgroup @i{ARG}, this selector evaluates to true. +Otherwise it evaluates to false. + +For example, suppose you have a netgroup @samp{ppp-hosts}, and for +reasons of performance, these have a local @file{/home} partition, while +all other clients on the faster network can access a shared home +directory. A common map to use for both might look like the following: + +@example +home/* netgrp(ppp-hosts);type:=link;fs:=/local/$@{key@} \ + !netgrp(ppp-hosts);type:=nfs;rhost=serv1;rfs:=/remote/$@{key@} +@end example + +@c ---------------------------------------------------------------- +@node in_network Selector Function, true Selector Function, netgrp Selector Function, Selectors +@comment node-name, next, previous, up +@subsubsection in_network Selector Function +@cindex in_network Selector Function +@cindex in_network, boolean mount selector +@cindex !in_network, boolean mount selector +@cindex Mount selector; in_network +@cindex Selector; in_network + +If the current host has any network interface that is locally attached +to the network specified in @i{ARG} (either via name or number), this +selector evaluates to true. Otherwise it evaluates to false. + +For example, suppose you have two servers that have an exportable +@file{/opt} that smaller clients can NFS mount. The two servers are +say, @samp{serv1} on network @samp{foo-net.site.com} and @samp{serv2} on +network @samp{123.4.5.0}. You can write a map to be used by all clients +that will attempt to mount the closest one as follows: + +@example +opt in_network(foo-net.site.com);rhost:=serv1;rfs:=/opt \ + in_network(123.4.5.0);rhost:=serv2;rfs:=/opt \ + rhost:=fallback-server +@end example + +@c ---------------------------------------------------------------- +@node true Selector Function, , in_network Selector Function, Selectors +@comment node-name, next, previous, up +@subsubsection true Selector Function +@cindex true Selector Function +@cindex true, boolean mount selector +@cindex !true, boolean mount selector +@cindex Mount selector; true +@cindex Selector; true + +Always evaluates to true. @i{ARG} is ignored. + +@c ================================================================ +@node Map Options, , Selectors, Location Format +@comment node-name, next, previous, up +@subsection Map Options +@cindex Map options +@cindex Setting map options + +Options are parsed concurrently with selectors. The difference is that +when an option is seen the string following the @samp{:=} is +recorded for later use. As a minimum the @var{type} option must be +specified. Each filesystem type has other options which must also be +specified. @xref{Filesystem Types}, for details on the filesystem +specific options.@refill + +Superfluous option specifications are ignored and are not reported +as errors. + +The following options apply to more than one filesystem type. + +@menu +* addopts Option:: +* delay Option:: +* fs Option:: +* opts Option:: +* remopts Option:: +* sublink Option:: +* type Option:: +@end menu + +@node addopts Option, delay Option, Map Options, Map Options +@comment node-name, next, previous, up +@subsubsection addopts Option +@cindex Setting additional options on a mount location +@cindex Overriding or adding options to a mount +@cindex addopts, mount option +@cindex Mount option; addopts + +This option adds additional options to default options normally +specified in the @samp{/defaults} entry or the defaults of the key entry +being processed (@xref{opts Option}). Normally when you specify +@samp{opts} in both the @samp{/defaults} and the map entry, the latter +overrides the former completely. But with @samp{addopts} it will +append the options and override any conflicting ones. + +Options which start with @samp{no} will override those with the same +name that do not start with @samp{no} and vice verse. Special handling +is given to inverted options such as @samp{soft} and @samp{hard}, +@samp{bg} and @samp{fg}, @samp{ro} and @samp{rw}, etc. + +For example, if the default options specified were +@example +opts:=rw,nosuid,intr,rsize=1024,wsize=1024,quota,posix +@end example + +and the ones specified in a map entry were + +@example +addopts:=grpid,suid,ro,rsize=2048,quota,nointr +@end example + +then the actual options used would be + +@example +wsize=1024,posix,grpid,suid,ro,rsize=2048,quota,nointr +@end example + +@node delay Option, fs Option, addopts Option, Map Options +@comment node-name, next, previous, up +@subsubsection delay Option +@cindex Setting a delay on a mount location +@cindex Delaying mounts from specific locations +@cindex Primary server +@cindex Secondary server +@cindex delay, mount option +@cindex Mount option; delay + +The delay, in seconds, before an attempt will be made to mount from the +current location. Auxiliary data, such as network address, file handles +and so on are computed regardless of this value. + +A delay can be used to implement the notion of primary and secondary +file servers. The secondary servers would have a delay of a few +seconds, thus giving the primary servers a chance to respond first. + +@node fs Option, opts Option, delay Option, Map Options +@comment node-name, next, previous, up +@subsubsection fs Option +@cindex Setting the local mount point +@cindex Overriding the default mount point +@cindex fs, mount option +@cindex Mount option; fs + +The local mount point. The semantics of this option vary between +filesystems. + +For NFS and UFS filesystems the value of @code{$@{fs@}} is used as the +local mount point. For other filesystem types it has other meanings +which are described in the section describing the respective filesystem +type. It is important that this string uniquely identifies the +filesystem being mounted. To satisfy this requirement, it should +contain the name of the host on which the filesystem is resident and the +pathname of the filesystem on the local or remote host. + +The reason for requiring the hostname is clear if replicated filesystems +are considered. If a fileserver goes down and a replacement filesystem +is mounted then the @dfn{local} mount point @dfn{must} be different from +that of the filesystem which is hung. Some encoding of the filesystem +name is required if more than one filesystem is to be mounted from any +given host. + +If the hostname is first in the path then all mounts from a particular +host will be gathered below a single directory. If that server goes +down then the hung mount points are less likely to be accidentally +referenced, for example when @b{getcwd}(3) traverses the namespace to +find the pathname of the current directory. + +The @samp{fs} option defaults to +@code{$@{autodir@}/$@{rhost@}$@{rfs@}}. In addition, +@samp{rhost} defaults to the local host name (@code{$@{host@}}) and +@samp{rfs} defaults to the value of @code{$@{path@}}, which is the full +path of the requested file; @samp{/home/foo} in the example above +(@pxref{Selectors}). @code{$@{autodir@}} defaults to @samp{/a} but may +be changed with the @code{-a} command line option. Sun's automounter +defaults to @samp{/tmp_mnt}. Note that there is no @samp{/} between +the @code{$@{rhost@}} and @code{$@{rfs@}} since @code{$@{rfs@}} begins +with a @samp{/}.@refill + +@node opts Option, remopts Option, fs Option, Map Options +@comment node-name, next, previous, up +@subsubsection opts Option +@cindex Setting system mount options +@cindex Passing parameters to the mount system call +@cindex mount system call +@cindex mount system call flags +@cindex The mount system call +@cindex opts, mount option +@cindex Mount option; opts + +The options to pass to the mount system call. A leading @samp{-} is +silently ignored. The mount options supported generally correspond to +those used by @b{mount}(8) and are listed below. Some additional +pseudo-options are interpreted by @i{Amd} and are also listed. + +Unless specifically overridden, each of the system default mount options +applies. Any options not recognized are ignored. If no options list is +supplied the string @samp{rw,defaults} is used and all the system +default mount options apply. Options which are not applicable for a +particular operating system are silently ignored. For example, only 4.4BSD +is known to implement the @code{compress} and @code{spongy} options. + +@table @code + +@item acdirmax=@var{n} +@cindex Mount flags; acdirmax +Set the maximum directory attribute cache timeout to @var{n}. + +@item acdirmin=@var{n} +@cindex Mount flags; acdirmin +Set the minimum directory attribute cache timeout to @var{n}. + +@item acregmax=@var{n} +@cindex Mount flags; acregmax +Set the maximum file attribute cache timeout to @var{n}. + +@item acregmin=@var{n} +@cindex Mount flags; acregmin +Set the minimum file attribute cache timeout to @var{n}. + +@item actimeo=@var{n} +@cindex Mount flags; actimeo +Set the overall attribute cache timeout to @var{n}. + +@item auto +@cindex Mount flags; auto +@itemx ignore +@cindex Mount flags; ignore +Ignore this mount by @b{df}(1). + +@item cache +@cindex Mount flags; cache +Allow data to be cached from a remote server for this mount. + +@item compress +@cindex Mount flags; compress +Use NFS compression protocol. + +@item defperm +@cindex Mount flags; defperm +Ignore the permission mode bits, and default file permissions to 0555, +UID 0, and GID 0. Useful for CD-ROMs formatted as ISO-9660. + +@item dev +@cindex Mount flags; dev +Allow local special devices on this filesystem. + +@item dumbtimr +@cindex Mount flags; dumbtimr +(XXX: a dumb timer?) + +@item fsid +@cindex Mount flags; fsid +Set ID of filesystem. + +@item grpid +@cindex Mount flags; grpid +Use BSD directory group-id semantics. + +@item int +@cindex Mount flags; int +@itemx intr +@cindex Mount flags; intr +Allow keyboard interrupts on hard mounts. + +@item multi +@cindex Mount flags; multi +Perform multi-component lookup on files. + +@item maxgroups +@cindex Mount flags; maxgroups +Set the maximum number of groups to allow for this mount. + +@item nfsv3 +@cindex Mount flags; nfsv3 +Use NFS Version 3 for this mount. + +@item noac +@cindex Mount flags; noac +Turn off the attribute cache. + +@item noauto +@cindex Mount flags; noauto +(XXX: No automatic what?) + +@item nocache +@cindex Mount flags; nocache +Do not allow data to be cached from a remote server for this +mount. + +@item noconn +@cindex Mount flags; noconn +Don't make a connection on datagram transports. + +@item nocto +@cindex Mount flags; nocto +No close-to-open consistency. + +@item nodefperm +@cindex Mount flags; nodefperm +Do not ignore the permission mode bits. Useful for CD-ROMS formatted as +ISO-9660. + +@item nodev +@cindex Mount flags; nodev +@itemx nodevs +@cindex Mount flags; nodevs +Don't allow local special devices on this filesystem. + +@item noint +@cindex Mount flags; noint +Do not allow keyboard interrupts for this mount + +@item nosub +@cindex Mount flags; nosub +Disallow mounts beneath this mount. + +@item nosuid +@cindex Mount flags; nosuid +Don't allow set-uid or set-gid executables on this filesystem. + +@item noversion +@cindex Mount flags; noversion +Strip the extension @samp{;#} from the version string of files recorded +on an ISO-9660 CD-ROM. + +@item overlay +@cindex Mount flags; overlay +Overlay this mount on top of an existing mount, if any. + +@item pgthresh=@var{n} +@cindex Mount flags; pgthresh +Set the paging threshold to @var{n} kilobytes. + +@item port=@var{n} +@cindex Mount flags; port +Set the NFS port to @var{n}. + +@item posix +@cindex Mount flags; posix +Turn on POSIX static pathconf for mounts. + +@item proto=@var{s} +@cindex Mount flags; proto +Use transport protocol @var{s} for NFS (can be @code{"tcp"} or @code{"udp"}). + +@item quota +@cindex Mount flags; quota +Enable quota checking on this mount. + +@item rdonly +@cindex Mount flags; rdonly +@itemx ro +@cindex Mount flags; ro +Mount this filesystem readonly. + +@item resvport +@cindex Mount flags; resvport +Use a reserved port (smaller than 1024) for remote NFS mounts. Most +systems assume that, but some allow for mounts to occur on non-reserved +ports. This causes problems when such a system tries to NFS mount one +that requires reserved ports. It is recommended that this option always +be on. + +@item retrans=@i{n} +@cindex Mount flags; retrans +The number of NFS retransmits made before a user error is generated by a +@samp{soft} mounted filesystem, and before a @samp{hard} mounted +filesystem reports @samp{NFS server @dfn{yoyo} not responding still +trying}. + +@item retry +@cindex Mount flags; retry +Set the NFS retry counter. + +@item rrip +@cindex Mount flags; rrip +Uses the Rock Ridge Interchange Protocol (RRIP) extensions to ISO-9660. + +@item rsize=@var{n} +@cindex Mount flags; rsize +The NFS read packet size. You may need to set this if you are using +NFS/UDP through a gateway or a slow link. + +@item rw +@cindex Mount flags; rw +Allow reads and writes on this filesystem. + +@item soft +@cindex Mount flags; soft +Give up after @dfn{retrans} retransmissions. + +@item spongy +@cindex Mount flags; spongy +Like @samp{soft} for status requests, and @samp{hard} for data transfers. + +@item suid +@cindex Mount flags; suid +Allow set-uid programs on this mount. + +@item symttl +@cindex Mount flags; symttl +Turn of the symbolic link cache time-to-live. + +@item sync +@cindex Mount flags; sync +Perform synchronous filesystem operations on this mount. + +@item tcp +@cindex Mount flags; tcp +Use TCP/IP instead of UDP/IP, ignored if the NFS implementation does not +support TCP/IP mounts. + +@item timeo=@var{n} +@cindex Mount flags; timeo +The NFS timeout, in tenth-seconds, before a request is retransmitted. + +@item vers=@var{n} +@cindex Mount flags; vers + Use NFS protocol version number @var{n} (can be 2 or 3). + +@item wsize=@var{n} +@cindex Mount flags; wsize +The NFS write packet size. You may need to set this if you are using +NFS/UDP through a gateway or a slow link. + +@end table + +The following options are implemented by @i{Amd}, rather than being +passed to the kernel. + +@table @code + +@item nounmount +@cindex Mount flags; nounmount +Configures the mount so that its time-to-live will +never expire. This is also the default for some filesystem types. +@c +@c Implementation broken: + +@item ping=@var{n} +@cindex Mount flags; ping +The interval, in seconds, between keep-alive pings. When four +consecutive pings have failed the mount point is marked as hung. This +interval defaults to 30 seconds. If the ping interval is less than zero, +no pings are sent and the host is assumed to be always +up. By default, pings are not sent for an NFS/TCP mount. + +@item retry=@var{n} +@cindex Mount flags; retry=@var{n} +The number of times to retry the mount system call. + +@item utimeout=@var{n} +@cindex Mount flags; utimeout=@var{n} +The interval, in seconds, by which the mount's +time-to-live is extended after an unmount attempt +has failed. In fact the interval is extended before the unmount is +attempted to avoid thrashing. The default value is 120 seconds (two +minutes) or as set by the @code{-w} command line option. + +@end table + +@node remopts Option, sublink Option, opts Option, Map Options +@comment node-name, next, previous, up +@subsubsection remopts Option +@cindex Setting system mount options for non-local networks +@cindex remopts, mount option +@cindex Mount option; remopts + +This option has the same use as @code{$@{opts@}} but applies only when +the remote host is on a non-local network. For example, when using NFS +across a gateway it is often necessary to use smaller values for the +data read and write sizes. This can simply be done by specifying the +small values in @var{remopts}. When a non-local host is accessed, the +smaller sizes will automatically be used. + +@i{Amd} determines whether a host is local by examining the network +interface configuration at startup. Any interface changes made after +@i{Amd} has been started will not be noticed. The likely effect will +be that a host may incorrectly be declared non-local. + +Unless otherwise set, the value of @code{$@{remopts@}} is the same as +the value of @code{$@{opts@}}. + +@node sublink Option, type Option, remopts Option, Map Options +@comment node-name, next, previous, up +@subsubsection sublink Option +@cindex Setting the sublink option +@cindex sublink, mount option +@cindex Mount option; sublink + +The subdirectory within the mounted filesystem to which the reference +should point. This can be used to prevent duplicate mounts in cases +where multiple directories in the same mounted filesystem are used. + +@node type Option, , sublink Option, Map Options +@comment node-name, next, previous, up +@subsubsection type Option +@cindex Setting the filesystem type option +@cindex type, mount option +@cindex Mount option; type + +The filesystem type to be used. @xref{Filesystem Types}, for a full +description of each type.@refill + +@c ################################################################ +@node Amd Command Line Options, Filesystem Types, Mount Maps, Top +@comment node-name, next, previous, up +@chapter @i{Amd} Command Line Options +@cindex Command line options, Amd +@cindex Amd command line options +@cindex Overriding defaults on the command line + +Many of @i{Amd}'s parameters can be set from the command line. The +command line is also used to specify automount points and maps. + +The general format of a command line is + +@example +amd [@i{options}] [@{ @i{directory} @i{map-name} [-@i{map-options}] @} ...] +@end example + +For each directory and map-name given or specified in the +@file{amd.conf} file, @i{Amd} establishes an automount point. The +@dfn{map-options} may be any sequence of options or +selectors---@pxref{Location Format}. The @dfn{map-options} apply only +to @i{Amd}'s mount point. + +@samp{type:=toplvl;cache:=mapdefault;fs:=$@{map@}} is the default value for the +map options. Default options for a map are read from a special entry in +the map whose key is the string @samp{/defaults}. When default options +are given they are prepended to any options specified in the mount-map +locations as explained in @ref{Map Defaults}. + +The @dfn{options} are any combination of those listed below. + +Once the command line has been parsed, the automount points are mounted. +The mount points are created if they do not already exist, in which case they +will be removed when @i{Amd} exits. +Finally, @i{Amd} disassociates itself from its controlling terminal and +forks into the background. + +Note: Even if @i{Amd} has been built with @samp{-DDEBUG} (via +@code{configure --enable-debug}), it will still background itself and +disassociate itself from the controlling terminal. To use a debugger it +is necessary to specify @samp{-D nodaemon} on the command line. +However, even with all of this, mounts and unmounts are performed in the +background, and @i{Amd} will always fork before doing them. Therefore, +debugging what happens closely during un/mounts is more challenging. + +@emph{All} of @i{Amd}'s command options (save @code{-F} and @code{-T}) +can be specified in the @file{amd.conf} file. @xref{Amd Configuration +File}. If @i{Amd} is invoked without any command line options, it will +default to using the configuration file @file{/etc/amd.conf}, if one +exists. + +@menu +* -a Option:: Automount directory. +* -c Option:: Cache timeout interval. +* -d Option:: Domain name. +* -k Option:: Kernel architecture. +* -l Option:: Log file. +* -n Option:: Hostname normalization. +* -o Option:: Operating system version. +* -p Option:: Output process id. +* -r Option:: Restart existing mounts. +* -t Option:: Kernel RPC timeout. +* -v Option:: Version information. +* -w Option:: Wait interval after failed unmount. +* -x Option:: Log options. +* -y Option:: NIS domain. +* -C-Option:: Cluster name. +* -D-Option:: Debug flags. +* -F Option:: Amd configuration file. +* -H Option:: Show brief help. +* -O-Option:: Operating system name. +* -S Option:: Lock executable pages in memory. +* -T-Option:: Set tag for configuration file. +@end menu + +@c ---------------------------------------------------------------- +@node -a Option, -c Option, Amd Command Line Options, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-a} @var{directory} +@cindex Automount directory +@cindex Setting the default mount directory + +Specifies the default mount directory. This option changes the variable +@code{$@{autodir@}} which otherwise defaults to @file{/a}. For example, +some sites prefer @file{/amd} or @file{/n}. + +@example +amd -a /amd ... +@end example + +@c ---------------------------------------------------------------- +@node -c Option, -d Option, -a Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-c} @var{cache-interval} +@cindex Cache interval +@cindex Interval before a filesystem times out +@cindex Setting the interval before a filesystem times out +@cindex Changing the interval before a filesystem times out + +Selects the period, in seconds, for which a name is cached by @i{Amd}. +If no reference is made to the volume in this period, @i{Amd} discards +the volume name to filesystem mapping. + +Once the last reference to a filesystem has been removed, @i{Amd} +attempts to unmount the filesystem. If the unmount fails the interval +is extended by a further period as specified by the @samp{-w} command +line option or by the @samp{utimeout} mount option. + +The default @dfn{cache-interval} is 300 seconds (five minutes). + +@c ---------------------------------------------------------------- +@node -d Option, -k Option, -c Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-d} @var{domain} +@cindex Domain name +@cindex Setting the local domain name +@cindex Overriding the local domain name + +Specifies the host's domain. This sets the internal variable +@code{$@{domain@}} and affects the @code{$@{hostd@}} variable. + +If this option is not specified and the hostname already contains the +local domain then that is used, otherwise the default value of +@code{$@{domain@}} is @samp{unknown.domain}. + +For example, if the local domain was @samp{doc.ic.ac.uk}, @i{Amd} could +be started as follows: + +@example +amd -d doc.ic.ac.uk ... +@end example + +@c ---------------------------------------------------------------- +@node -k Option, -l Option, -d Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-k} @var{kernel-architecture} +@cindex Setting the Kernel architecture + +Specifies the kernel architecture of the system. This is usually the +output of @samp{uname -m} (the ``machine'' value gotten from +@b{uname}(2)). If the @b{uname}(2) system call is not available, the +value of @code{$@{karch@}} defaults to that of @code{$@{arch@}}. + +The only effect of this option is to set the variable @code{$@{karch@}}. + +This option would be used as follows: + +@example +amd -k `arch -k` ... +@end example + +@c ---------------------------------------------------------------- +@node -l Option, -n Option, -k Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-l} @var{log-option} +@cindex Log filename +@cindex Setting the log file +@cindex Using syslog to log errors +@cindex syslog + +Selects the form of logging to be made. Several special @dfn{log-options} +are recognized. + +@enumerate +@item +If @dfn{log-option} is the string @samp{syslog}, @i{Amd} will use the +@b{syslog}(3) mechanism. If your system supports syslog facilities, then +the default facility used is @samp{LOG_DAEMON}. + +@item +@cindex syslog facility; specifying an alternate +When using syslog, if you wish to change the facility, append its name +to the log option name, delimited by a single colon. For example, if +@dfn{log-options} is the string @samp{syslog:local7} then @b{Amd} will +log messages via @b{syslog}(3) using the @samp{LOG_LOCAL7} facility. If +the facility name specified is not recognized, @i{Amd} will default to +@samp{LOG_DAEMON}. Note: while you can use any syslog facility +available on your system, it is generally a bad idea to use those +reserved for other services such as @samp{kern}, @samp{lpr}, +@samp{cron}, etc. + +@item +If @dfn{log-option} is the string @samp{/dev/stderr}, @i{Amd} will use +standard error, which is also the default target for log messages. To +implement this, @i{Amd} simulates the effect of the @samp{/dev/fd} +driver. +@end enumerate + +Any other string is taken as a filename to use for logging. Log +messages are appended to the file if it already exists, otherwise a new +file is created. The file is opened once and then held open, rather +than being re-opened for each message. + +Normally, when long-running daemons hold an open file descriptor on a +log file, it is impossible to ``rotate'' the log file and compress older +logs on a daily basis. The daemon needs to be told to discard (via +@b{close}(2)) its file handle, and re-open the log file. This is done +using @code{amq -l} @i{log-option}. @xref{Amq -l option}. + +If the @samp{syslog} option is specified but the system does not support +syslog or if the named file cannot be opened or created, @i{Amd} will +use standard error. Error messages generated before @i{Amd} has +finished parsing the command line are printed on standard error. + +Since @i{Amd} tends to generate a lot of logging information (especially +if debugging was turned on), and due to it being an important program +running on the system, it is usually best to log to a separate disk +file. In that case @i{Amd} would be started as follows: + +@example +amd -l /var/log/amd ... +@end example + +@c ---------------------------------------------------------------- +@node -n Option, -o Option, -l Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-n} +@cindex Hostname normalization +@cindex Aliased hostnames +@cindex Resolving aliased hostnames +@cindex Normalizing hostnames + +Normalizes the remote hostname before using it. Normalization is done +by replacing the value of @code{$@{rhost@}} with the (generally fully +qualified) primary name returned by a hostname lookup. + +This option should be used if several names are used to refer to a +single host in a mount map. + +@c ---------------------------------------------------------------- +@node -o Option, -p Option, -n Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-o} @var{op-sys-ver} +@cindex Operating System version +@cindex Setting the Operating System version + +Override the compiled-in version number of the operating system, with +@var{op-sys-ver}. Useful when the built-in version is not desired for +backward compatibility reasons. For example, if the built-in version is +@samp{2.5.1}, you can override it to @samp{5.5.1}, and use older maps +that were written with the latter in mind. + +@c ---------------------------------------------------------------- +@node -p Option, -r Option, -o Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-p} +@cindex Process id +@cindex Displaying the process id +@cindex process id of Amd daemon +@cindex pid file, creating with -p option +@cindex Creating a pid file + +Causes @i{Amd}'s process id to be printed on standard output. +This can be redirected to a suitable file for use with kill: + +@example +amd -p > /var/run/amd.pid ... +@end example + +This option only has an affect if @i{Amd} is running in daemon mode. +If @i{Amd} is started with the @code{-D nodaemon} debug flag, this +option is ignored. + +@c ---------------------------------------------------------------- +@node -r Option, -t Option, -p Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-r} +@cindex Restarting existing mounts +@cindex Picking up existing mounts + +Tells @i{Amd} to restart existing mounts (@pxref{Inheritance Filesystem}). +@c @dfn{This option will be made the default in the next release.} + +@c ---------------------------------------------------------------- +@node -t Option, -v Option, -r Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-t} @var{timeout.retransmit} +@cindex Setting Amd's RPC parameters + +Specifies the RPC @dfn{timeout} and @dfn{retransmit} intervals used by +the kernel to communicate to @i{Amd}. These are used to set the +@samp{timeo} and @samp{retrans} mount options. + +@i{Amd} relies on the kernel RPC retransmit mechanism to trigger mount +retries. The value of this parameter changes the retry interval. Too +long an interval gives poor interactive response, too short an interval +causes excessive retries. + +@c ---------------------------------------------------------------- +@node -v Option, -w Option, -t Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-v} +@cindex Version information +@cindex Discovering version information +@cindex How to discover your version of Amd + +Print version information on standard error and then exit. The output +is of the form: + +@example +Copyright (c) 1997-1998 Erez Zadok +Copyright (c) 1990 Jan-Simon Pendry +Copyright (c) 1990 Imperial College of Science, Technology & Medicine +Copyright (c) 1990 The Regents of the University of California. +am-utils version 6.0a15 (build 61). +Built by ezk@@cs.columbia.edu on date Wed Oct 22 15:21:03 EDT 1997. +cpu=sparc (big-endian), arch=sun4, karch=sun4u. +full_os=solaris2.5.1, os=sos5, osver=5.5.1, vendor=sun. +Map support for: root, passwd, union, nisplus, nis, ndbm, file, error. +AMFS: nfs, link, nfsx, nfsl, host, linkx, program, union, inherit, + ufs, lofs, hsfs, pcfs, auto, direct, toplvl, error. +FS: autofs, cachefs, cdfs, lofs, nfs, nfs3, pcfs, tfs, tmpfs, ufs. +Network 1: wire="mcl-lab-net.cs.columbia.edu" (netnumber=128.59.13). +Network 2: wire="14-net.cs.columbia.edu" (netnumber=128.59.14). +Network 3: wire="old-net.cs.columbia.edu" (netnumber=128.59.16). +@end example + +The information includes the version number, number of times @i{Amd} was +compiled on the local system, release date and name of the release. +Following come the cpu type, byte ordering, and the architecture and +kernel architecture as @code{$@{arch@}} and @code{$@{karch@}}, +respectively. The next line lists the full name of the system, the +variables @code{$@{os@}} and @code{$@{osver@}}, and the vendor's +name. @xref{Supported Platforms}. + +Then come a list of map types supported, filesystems internally +supported by @i{Amd} (AMFS), and generic filesystems available (FS). +Finally all known networks (if any) of this host are listed by name +and number. They are available via the variables +@code{$@{wire@}} or @code{$@{network@}}, and +@code{$@{netnumber@}} (@pxref{Selectors}) or the @samp{in_network} +selector function (@pxref{in_network Selector Function}). + +@c ---------------------------------------------------------------- +@node -w Option, -x Option, -v Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-w} @var{wait-timeout} +@cindex Setting the interval between unmount attempts +@cindex unmount attempt backoff interval + +Selects the interval in seconds between unmount attempts after the +initial time-to-live has expired. + +This defaults to 120 seconds (two minutes). + +@c ---------------------------------------------------------------- +@node -x Option, -y Option, -w Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-x} @var{opts} +@cindex Log message selection +@cindex Selecting specific log messages +@cindex How to select log messages +@cindex syslog priorities + +Specifies the type and verbosity of log messages. @dfn{opts} is +a comma separated list selected from the following options: + +@table @code +@item fatal +Fatal errors +@item error +Non-fatal errors +@item user +Non-fatal user errors +@item warn +Recoverable errors +@item warning +Alias for @code{warn} +@item info +Information messages +@item map +Mount map usage +@item stats +Additional statistics +@item all +All of the above +@end table + +Initially a set of default logging flags is enabled. This is as if +@samp{-x all,nomap,nostats} had been selected. The command line is +parsed and logging is controlled by the @code{-x} option. The very first +set of logging flags is saved and can not be subsequently disabled using +@i{Amq}. This default set of options is useful for general production +use.@refill + +The @samp{info} messages include details of what is mounted and +unmounted and when filesystems have timed out. If you want to have the +default set of messages without the @samp{info} messages then you simply +need @samp{-x noinfo}. The messages given by @samp{user} relate to +errors in the mount maps, so these are useful when new maps are +installed. The following table lists the syslog priorities used for each +of the message types.@refill + +@table @code +@item fatal +@samp{LOG_CRIT} +@item error +@samp{LOG_ERR} +@item user +@samp{LOG_WARNING} +@item warning +@samp{LOG_WARNING} +@item info +@samp{LOG_INFO} +@item debug +@samp{LOG_DEBUG} +@item map +@samp{LOG_DEBUG} +@item stats +@samp{LOG_INFO} +@end table + + +The options can be prefixed by the string @samp{no} to indicate +that this option should be turned off. For example, to obtain all +but @samp{info} messages the option @samp{-x all,noinfo} would be used. + +If @i{Amd} was built with debugging enabled the @code{debug} option is +automatically enabled regardless of the command line options. + +@c ---------------------------------------------------------------- +@node -y Option, -C-Option, -x Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-y} @var{NIS-domain} +@cindex NIS (YP) domain name +@cindex Overriding the NIS (YP) domain name +@cindex Setting the NIS (YP) domain name +@cindex YP domain name + +Selects an alternate NIS domain. This is useful for debugging and +cross-domain shared mounting. If this flag is specified, @i{Amd} +immediately attempts to bind to a server for this domain. +@c @i{Amd} refers to NIS maps when it starts, unless the @code{-m} option +@c is specified, and whenever required in a mount map. + +@c ---------------------------------------------------------------- +@node -C-Option, -D-Option, -y Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-C} @var{cluster-name} +@cindex Cluster names +@cindex Setting the cluster name + +Specifies the name of the cluster of which the local machine is a member. +The only effect is to set the variable @code{$@{cluster@}}. +The @dfn{cluster-name} is will usually obtained by running another command which uses +a database to map the local hostname into a cluster name. +@code{$@{cluster@}} can then be used as a selector to restrict mounting of +replicated data. +If this option is not given, @code{$@{cluster@}} has the same value as @code{$@{domain@}}. +This would be used as follows: + +@example +amd -C `clustername` ... +@end example + +@c ---------------------------------------------------------------- +@node -D-Option, -F Option, -C-Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-D} @var{opts} +@cindex Debug options +@cindex Setting debug flags + +Controls the verbosity and coverage of the debugging trace; @dfn{opts} +is a comma separated list of debugging options. The @code{-D} option is +only available if @i{Amd} was compiled with @samp{-DDEBUG}, or +configured with @code{configure --enable-debug}. The memory debugging +facilities (@samp{mem}) are only available if @i{Amd} was compiled with +@samp{-DDEBUG_MEM} (in addition to @samp{-DDEBUG}), or configured with +@code{configure --enable-debug=mem}. + +The most common options to use are @samp{-D trace} and @samp{-D test} +(which turns on all the useful debug options). As usual, every option +can be prefixed with @samp{no} to turn it off. + +@table @code +@item all +all options +@item amq +register for amq +@item daemon +enter daemon mode +@item fork +fork server +@item full +program trace +@item info +@cindex debugging hesiod resolver service +@cindex Hesiod: turning on RES_DEBUG +info service specific debugging (hesiod, nis, etc.) In the case of +hesiod maps, turns on the hesiod RES_DEBUG internal debugging option. +@item mem +trace memory allocations +@item mtab +use local @file{./mtab} file +@item str +debug string munging +@item test +full debug but no daemon +@item trace +protocol trace +@end table + +You may also refer to the program source for a more detailed explanation +of the available options. + +@c ---------------------------------------------------------------- +@node -F Option, -H Option, -D-Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-F} @var{conf-file} +@cindex Amd configuration file; specifying name +@cindex Amd configuration file +@cindex amd.conf file + +Specify an @i{Amd} configuration file @var{conf-file} to use. For a +description of the format and syntax, @pxref{Amd Configuration File}. +This configuration file is used to specify any options in lieu of typing +many of them on the command line. The @file{amd.conf} file includes +directives for every command line option @i{Amd} has, and many more that +are only available via the configuration file facility. The +configuration file specified by this option is processed after all other +options had been processed, regardless of the actual location of this +option on the command line. + +@c ---------------------------------------------------------------- +@node -H Option, -O-Option, -F Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-H} +@cindex Displaying brief help +@cindex Help; showing from Amd + +Print a brief help and usage string. + +@c ---------------------------------------------------------------- +@node -O-Option, -S Option, -H Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-O} @var{op-sys-name} +@cindex Operating System name +@cindex Setting the Operating System name + +Override the compiled-in name of the operating system, with +@var{op-sys-name}. Useful when the built-in name is not desired for +backward compatibility reasons. For example, if the build in name is +@samp{sunos5}, you can override it to the old name @samp{sos5}, and use +older maps which were written with the latter in mind. + +@c ---------------------------------------------------------------- +@node -S Option, -T-Option, -O-Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-S} +@cindex plock; using +@cindex locking executable pages in memory + +Do @emph{not} lock the running executable pages of @i{Amd} into memory. +To improve @i{Amd}'s performance, systems that support the @b{plock}(3) +call lock the @i{Amd} process into memory. This way there is less +chance the operating system will schedule, page out, and swap the +@i{Amd} process as needed. This tends to improve @i{Amd}'s performance, +at the cost of reserving the memory used by the @i{Amd} process (making +it unavailable for other processes). If this behavior is not desired, +use the @code{-S} option. + +@c ---------------------------------------------------------------- +@node -T-Option, , -S Option, Amd Command Line Options +@comment node-name, next, previous, up +@section @code{-T} @var{tag} +@cindex Tags for Amd configuration file +@cindex Configuration file; tags + +Specify a tag to use with @file{amd.conf}. All map entries tagged with +@var{tag} will be processed. Map entries that are not tagged are always +processed. Map entries that are tagged with a tag other than @var{tag} +will not be processed. + +@c ################################################################ +@node Filesystem Types, Amd Configuration File, Amd Command Line Options, Top +@comment node-name, next, previous, up +@chapter Filesystem Types +@cindex Filesystem types +@cindex Mount types +@cindex Types of filesystem + +To mount a volume, @i{Amd} must be told the type of filesystem to be +used. Each filesystem type typically requires additional information +such as the fileserver name for NFS. + +From the point of view of @i{Amd}, a @dfn{filesystem} is anything that +can resolve an incoming name lookup. An important feature is support +for multiple filesystem types. Some of these filesystems are +implemented in the local kernel and some on remote fileservers, whilst +the others are implemented internally by @i{Amd}.@refill + +The two common filesystem types are UFS and NFS. Four other user +accessible filesystems (@samp{link}, @samp{program}, @samp{auto} and +@samp{direct}) are also implemented internally by @i{Amd} and these are +described below. There are two additional filesystem types internal to +@i{Amd} which are not directly accessible to the user (@samp{inherit} +and @samp{error}). Their use is described since they may still have an +effect visible to the user.@refill + +@menu +* Network Filesystem:: A single NFS filesystem. +* Network Host Filesystem:: NFS mount a host's entire export tree. +* Network Filesystem Group:: An atomic group of NFS filesystems. +* Unix Filesystem:: Native disk filesystem. +* Caching Filesystem:: Caching from remote server filesystem. +* CD-ROM Filesystem:: ISO9660 CD ROM. +* Loopback Filesystem:: Local loopback-mount filesystem. +* Memory/RAM Filesystem:: A memory or RAM-based filesystem. +* Null Filesystem:: 4.4BSD's loopback-mount filesystem. +* Floppy Filesystem:: MS-DOS Floppy filesystem. +* Translucent Filesystem:: The directory merging filesystem. +* Shared Memory+Swap Filesystem:: Sun's tmpfs filesystem. +* User ID Mapping Filesystem:: 4.4BSD's umapfs filesystem. +* Program Filesystem:: Generic Program mounts. +* Symbolic Link Filesystem:: Local link. +* Symbolic Link Filesystem II:: Local link referencing existing filesystem. +* NFS-Link Filesystem:: Link if path exists, NFS otherwise. +* Automount Filesystem:: +* Direct Automount Filesystem:: +* Union Filesystem:: +* Error Filesystem:: +* Top-level Filesystem:: +* Autofs Filesystem:: Sun's kernel-based automounter filesystem. +* Root Filesystem:: +* Inheritance Filesystem:: +@end menu + +@c ---------------------------------------------------------------- +@node Network Filesystem, Network Host Filesystem, Filesystem Types, Filesystem Types +@comment node-name, next, previous, up +@section Network Filesystem (@samp{nfs}) +@cindex NFS +@cindex Mounting an NFS filesystem +@cindex How to mount and NFS filesystem +@cindex nfs, filesystem type +@cindex Filesystem type; nfs + +The @dfn{nfs} (@samp{type:=nfs}) filesystem type provides access to Sun's NFS. + +@noindent +The following options must be specified: + +@table @code +@cindex rhost, mount option +@cindex Mount option; rhost +@item rhost +the remote fileserver. This must be an entry in the hosts database. IP +addresses are not accepted. The default value is taken +from the local host name (@code{$@{host@}}) if no other value is +specified. + +@cindex rfs, mount option +@cindex Mount option; rfs +@item rfs +the remote filesystem. +If no value is specified for this option, an internal default of +@code{$@{path@}} is used. +@end table + +NFS mounts require a two stage process. First, the @dfn{file handle} of +the remote file system must be obtained from the server. Then a mount +system call must be done on the local system. @i{Amd} keeps a cache +of file handles for remote file systems. The cache entries have a +lifetime of a few minutes. + +If a required file handle is not in the cache, @i{Amd} sends a request +to the remote server to obtain it. @i{Amd} @dfn{does not} wait for +a response; it notes that one of the locations needs retrying, but +continues with any remaining locations. When the file handle becomes +available, and assuming none of the other locations was successfully +mounted, @i{Amd} will retry the mount. This mechanism allows several +NFS filesystems to be mounted in parallel. +@c @footnote{The mechanism +@c is general, however NFS is the only filesystem +@c for which the required hooks have been written.} +The first one which responds with a valid file handle will be used. + +@noindent +An NFS entry might be: + +@example +jsp host!=charm;type:=nfs;rhost:=charm;rfs:=/home/charm;sublink:=jsp +@end example + +The mount system call and any unmount attempts are always done +in a new task to avoid the possibility of blocking @i{Amd}. + +@c ---------------------------------------------------------------- +@node Network Host Filesystem, Network Filesystem Group, Network Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Network Host Filesystem (@samp{host}) +@cindex Network host filesystem +@cindex Mounting entire export trees +@cindex How to mount all NFS exported filesystems +@cindex host, filesystem type +@cindex Filesystem type; host + +@c NOTE: the current implementation of the @dfn{host} filesystem type +@c sometimes fails to maintain a consistent view of the remote mount tree. +@c This happens when the mount times out and only some of the remote mounts +@c are successfully unmounted. To prevent this from occurring, use the +@c @samp{nounmount} mount option. + +The @dfn{host} (@samp{type:=host}) filesystem allows access to the entire export tree of an +NFS server. The implementation is layered above the @samp{nfs} +implementation so keep-alives work in the same way. The only option +which needs to be specified is @samp{rhost} which is the name of the +fileserver to mount. + +The @samp{host} filesystem type works by querying the mount daemon on +the given fileserver to obtain its export list. @i{Amd} then obtains +filehandles for each of the exported filesystems. Any errors at this +stage cause that particular filesystem to be ignored. Finally each +filesystem is mounted. Again, errors are logged but ignored. One +common reason for mounts to fail is that the mount point does not exist. +Although @i{Amd} attempts to automatically create the mount point, it +may be on a remote filesystem to which @i{Amd} does not have write +permission. + +When an attempt to unmount a @samp{host} filesystem mount fails, @i{Amd} +remounts any filesystems which had successfully been unmounted. To do +this @i{Amd} queries the mount daemon again and obtains a fresh copy of +the export list. @i{Amd} then tries to mount any exported filesystems +which are not currently mounted. + +Sun's automounter provides a special @samp{-hosts} map. To achieve the +same effect with @i{Amd} requires two steps. First a mount map must +be created as follows: + +@example +* type:=host;rhost:=$@{key@};fs:=$@{autodir@}/$@{rhost@}/root +@end example + +@noindent +and then start @i{Amd} with the following command + +@example +amd /net net.map +@end example + +@noindent +where @samp{net.map} is the name of map described above. Note that the +value of @code{$@{fs@}} is overridden in the map. This is done to avoid +a clash between the mount tree and any other filesystem already mounted +from the same fileserver. + +If different mount options are needed for different hosts then +additional entries can be added to the map, for example + +@example +host2 opts:=ro,nosuid,soft +@end example + +@noindent +would soft mount @samp{host2} read-only. + +@c ---------------------------------------------------------------- +@node Network Filesystem Group, Unix Filesystem, Network Host Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Network Filesystem Group (@samp{nfsx}) +@cindex Network filesystem group +@cindex Atomic NFS mounts +@cindex Mounting an atomic group of NFS filesystems +@cindex How to mount an atomic group of NFS filesystems +@cindex nfsx, filesystem type +@cindex Filesystem type; nfsx + +The @dfn{nfsx} (@samp{type:=nfsx}) filesystem allows a group of filesystems to be mounted +from a single NFS server. The implementation is layered above the +@samp{nfs} implementation so keep-alives work in the same way. + +The options are the same as for the @samp{nfs} filesystem with one +difference. + +@noindent +The following options must be specified: + +@table @code +@item rhost +the remote fileserver. This must be an entry in the hosts database. IP +addresses are not accepted. The default value is taken from the local +host name (@code{$@{host@}}) if no other value is specified. + +@item rfs +as a list of filesystems to mount. The list is in the form of a comma +separated strings. +@end table + +@noindent +For example: + +@example +pub type:=nfsx;rhost:=gould;\ + rfs:=/public,/,graphics,usenet;fs:=$@{autodir@}/$@{rhost@}/root +@end example + +The first string defines the root of the tree, and is applied as a +prefix to the remaining members of the list which define the individual +filesystems. The first string is @emph{not} used as a filesystem name. +A parallel operation is used to determine the local mount points to +ensure a consistent layout of a tree of mounts. + +Here, the @emph{three} filesystems, @samp{/public}, +@samp{/public/graphics} and @samp{/public/usenet}, would be mounted.@refill + +A local mount point, @code{$@{fs@}}, @emph{must} be specified. The +default local mount point will not work correctly in the general case. +A suggestion is to use @samp{fs:=$@{autodir@}/$@{rhost@}/root}.@refill + +@c ---------------------------------------------------------------- +@node Unix Filesystem, Caching Filesystem, Network Filesystem Group, Filesystem Types +@comment node-name, next, previous, up +@section Unix Filesystem (@samp{ufs}, @samp{xfs}, or @samp{efs}) +@cindex Unix filesystem +@cindex UFS +@cindex XFS +@cindex EFS +@cindex Mounting a UFS filesystem +@cindex Mounting a local disk +@cindex How to mount a UFS filesystems +@cindex How to mount a local disk +@cindex Disk filesystems +@cindex ufs, filesystem type +@cindex Filesystem type; ufs +@cindex xfs, filesystem type +@cindex Filesystem type; xfs +@cindex efs, filesystem type +@cindex Filesystem type; efs + +The @dfn{ufs} (@samp{type:=ufs}) filesystem type provides access to the system's standard +disk filesystem---usually a derivative of the Berkeley Fast Filesystem. + +@noindent +The following option must be specified: + +@table @code +@cindex dev, mount option +@cindex Mount option; dev +@item dev +the block special device to be mounted. +@end table + +A UFS entry might be: + +@example +jsp host==charm;type:=ufs;dev:=/dev/sd0d;sublink:=jsp +@end example + +UFS is the default Unix disk-based file system, which Am-utils picks up +during the autoconfiguration phase. Some systems have more than one +type, such as IRIX, that comes with EFS (Extent File System) and XFS +(Extended File System). In those cases, you may explicitly set the file +system type, by using entries such: + +@example +ez1 type:=efs;dev:=/dev/xd0a +ez2 type:=xfs;dev:=/dev/sd3c +@end example + +@c ---------------------------------------------------------------- +@node Caching Filesystem, CD-ROM Filesystem, Unix Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Caching Filesystem (@samp{cachefs}) +@cindex Caching Filesystem +@cindex cachefs, filesystem type +@cindex Filesystem type; cachefs + +The @dfn{cachefs} (@samp{type:=cachefs}) filesystem caches files from +one location onto another, presumably providing faster access. It is +particularly useful to cache from a larger and remote (slower) NFS +partition to a smaller and local (faster) UFS directory. + +@noindent +The following options must be specified: + +@table @code +@cindex cachedir, mount option +@cindex Mount option; cachedir +@item cachedir +the directory where the cache is stored. +@item rfs +the path name to the ``back file system'' to be cached from. +@item fs +the ``front file system'' mount point to the cached files, where @i{Amd} +will set a symbolic link pointing to. +@end table + +A CacheFS entry for, say, the @file{/import} @i{Amd} mount point, might +be: + +@example +copt type:=cachefs;cachedir:=/cache;rfs:=/import/opt;fs:=/n/import/copt +@end example + +Access to the pathname @file{/import/copt} will follow a symbolic link +to @file{/n/import/copt}. The latter is the mount point for a caching +file system, that caches from @file{/import/opt} to @file{/cache}. + +@b{Caveats}: +@enumerate +@item This file system is currently only implemented for Solaris 2.x! +@item Before being used for the first time, the cache directory @i{must} be +initialized with @samp{cfsadmin -c @var{cachedir}}. See the manual page for +@b{cfsadmin}(1M) for more information. +@item The ``back file system'' mounted must be a complete file system, not +a subdirectory thereof; otherwise you will get an error ``Invalid Argument''. +@item If @i{Amd} aborts abnormally, the state of the cache may be +inconsistent, requiring running the command @file{fsck -F cachefs +@var{cachedir}}. Otherwise you will get the error ``No Space Left on Device''. +@end enumerate + +@c ---------------------------------------------------------------- +@node CD-ROM Filesystem, Loopback Filesystem, Caching Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section CD-ROM Filesystem (@samp{cdfs}) +@cindex CD-ROM Filesystem +@cindex cdfs, filesystem type +@cindex Filesystem type; cdfs + +The @dfn{cdfs} (@samp{type:=cdfs}) filesystem mounts a CD-ROM with an +ISO9660 format filesystem on it. + +@noindent +The following option must be specified: + +@table @code +@cindex dev, mount option +@cindex Mount option; dev +@item dev +the block special device to be mounted. +@end table + +A cdfs entry might be: + +@example +cdfs os==sunos4;type:=cdfs;dev:=/dev/sr0 \ + os==sunos5;type:=cdfs;dev:=/dev/dsk/c0t6d0s2 +@end example + +@c ---------------------------------------------------------------- +@node Loopback Filesystem, Memory/RAM Filesystem, CD-ROM Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Loopback Filesystem (@samp{lofs}) +@cindex Loopback Filesystem +@cindex lofs, filesystem type +@cindex Filesystem type; lofs + +The @dfn{lofs} (@samp{type:=lofs}) filesystem is also called the +loopback filesystem. It mounts a local directory on another, thus +providing mount-time binding to another location (unlike symbolic +links). + +The loopback filesystem is particularly useful within the context of a +chroot-ed directory (via @b{chroot}(2)), to provide access to +directories otherwise inaccessible. + +@noindent +The following option must be specified: + +@table @code +@cindex rfs, mount option +@cindex Mount option; rfs +@item rfs +the pathname to be mounted on top of @code{$@{fs@}}. +@end table + +Usually, the FTP server runs in a chroot-ed environment, for security +reasons. In this example, lofs is used to provide a subdirectory within +a user's home directory, also available for public ftp. + +@example +lofs type:=lofs;rfs:=/home/ezk/myftpdir;fs:=/usr/ftp/pub/ezk +@end example + +@c ---------------------------------------------------------------- +@node Memory/RAM Filesystem, Null Filesystem, Loopback Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Memory/RAM Filesystem (@samp{mfs}) +@cindex Memory/RAM Filesystem +@cindex mfs, filesystem type +@cindex Filesystem type; mfs + +The @dfn{mfs} (@samp{type:=mfs}) filesystem is available in 4.4BSD, +Linux, and other systems. It creates a filesystem in a portion of the +system's memory, thus providing very fast file (volatile) access. + +XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + +@c ---------------------------------------------------------------- +@node Null Filesystem, Floppy Filesystem, Memory/RAM Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Null Filesystem (@samp{nullfs}) +@cindex Null Filesystem +@cindex nullfs, filesystem type +@cindex Filesystem type; nullfs + +The @dfn{nullfs} (@samp{type:=nullfs}) filesystem is available from 4.4BSD, +and is very similar to the loopback filesystem, @dfn{lofs}. + +XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + +@c ---------------------------------------------------------------- +@node Floppy Filesystem, Translucent Filesystem, Null Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Floppy Filesystem (@samp{pcfs}) +@cindex Floppy Filesystem +@cindex pcfs, filesystem type +@cindex Filesystem type; pcfs + +The @dfn{pcfs} (@samp{type:=pcfs}) filesystem mounts a floppy previously +formatted for the MS-DOS format. + +@noindent +The following option must be specified: + +@table @code +@cindex dev, mount option +@cindex Mount option; dev +@item dev +the block special device to be mounted. +@end table + +A pcfs entry might be: + +@example +pcfs os==sunos4;type:=pcfs;dev:=/dev/fd0 \ + os==sunos5;type:=pcfs;dev:=/dev/diskette +@end example + +@c ---------------------------------------------------------------- +@node Translucent Filesystem, Shared Memory+Swap Filesystem, Floppy Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Translucent Filesystem (@samp{tfs}) +@cindex Translucent Filesystem +@cindex tfs, filesystem type +@cindex Filesystem type; tfs + +The @dfn{tfs} (@samp{type:=tfs}) filesystem is an older version of the +4.4BSD @dfn{unionfs}. + +XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + +@c ---------------------------------------------------------------- +@node Shared Memory+Swap Filesystem, User ID Mapping Filesystem, Translucent Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Shared Memory+Swap Filesystem (@samp{tmpfs}) +@cindex Shared Memory and Swap Filesystem +@cindex tmpfs, filesystem type +@cindex Filesystem type; tmpfs + +The @dfn{tmpfs} (@samp{type:=tmpfs}) filesystem shares memory between a +the swap device and the rest of the system. It is generally used to +provide a fast access @file{/tmp} directory, one that uses memory that +is otherwise unused. This filesystem is available in SunOS 4.x and 5.x. + +XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + +@c ---------------------------------------------------------------- +@node User ID Mapping Filesystem, Program Filesystem, Shared Memory+Swap Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section User ID Mapping Filesystem (@samp{umapfs}) +@cindex User ID Mapping Filesystem +@cindex umapfs, filesystem type +@cindex Filesystem type; umapfs + +The @dfn{umapfs} (@samp{type:=umapfs}) filesystem maps User IDs of file +ownership, and is available from 4.4BSD. + +XXX: THIS FILESYSTEM IS NOT IMPLEMENTED YET! + +@c ---------------------------------------------------------------- +@node Program Filesystem, Symbolic Link Filesystem, User ID Mapping Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Program Filesystem (@samp{program}) +@cindex Program filesystem +@cindex Mount a filesystem under program control +@cindex program, filesystem type +@cindex Filesystem type; program + +The @dfn{program} (@samp{type:=program}) filesystem type allows a program to be run whenever a +mount or unmount is required. This allows easy addition of support for +other filesystem types, such as MIT's Remote Virtual Disk (RVD) +which has a programmatic interface via the commands +@samp{rvdmount} and @samp{rvdunmount}. + +@noindent +The following options must be specified: + +@table @code +@cindex mount, mount option +@cindex Mount option; mount +@item mount +the program which will perform the mount. + +@cindex unmount, mount option +@cindex Mount option; unmount +@item unmount +the program which will perform the unmount. +@end table + +The exit code from these two programs is interpreted as a Unix error +code. As usual, exit code zero indicates success. To execute the +program @i{Amd} splits the string on whitespace to create an array of +substrings. Single quotes @samp{'} can be used to quote whitespace +if that is required in an argument. There is no way to escape or change +the quote character. + +To run the program @samp{rvdmount} with a host name and filesystem as +arguments would be specified by +@samp{fs:=$@{autodir@}$@{path@};mount:="/etc/rvdmount rvdmount fserver +$@{fs@}"}. + +The first element in the array is taken as the pathname of the program +to execute. The other members of the array form the argument vector to +be passed to the program, @dfn{including argument zero}. This means +that the split string must have at least two elements. The program is +directly executed by @i{Amd}, not via a shell. This means that scripts +must begin with a @code{#!} interpreter specification. + +If a filesystem type is to be heavily used, it may be worthwhile adding +a new filesystem type into @i{Amd}, but for most uses the program +filesystem should suffice. + +When the program is run, standard input and standard error are inherited +from the current values used by @i{Amd}. Standard output is a +duplicate of standard error. The value specified with the @code{-l} +command line option has no effect on standard error. + +@c ---------------------------------------------------------------- +@node Symbolic Link Filesystem, Symbolic Link Filesystem II, Program Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Symbolic Link Filesystem (@samp{link}) +@cindex Symbolic link filesystem +@cindex Referencing part of the local name space +@cindex Mounting part of the local name space +@cindex How to reference part of the local name space +@cindex link, filesystem type +@cindex symlink, link filesystem type +@cindex Filesystem type; link + +Each filesystem type creates a symbolic link to point from the volume +name to the physical mount point. The @samp{link} filesystem does the +same without any other side effects. This allows any part of the +machines name space to be accessed via @i{Amd}. + +One common use for the symlink filesystem is @file{/homes} which can be +made to contain an entry for each user which points to their +(auto-mounted) home directory. Although this may seem rather expensive, +it provides a great deal of administrative flexibility. + +@noindent +The following option must be defined: + +@table @code +@item fs +The value of @var{fs} option specifies the destination of the link, as +modified by the @var{sublink} option. If @var{sublink} is non-null, it +is appended to @code{$@{fs@}}@code{/} and the resulting string is used +as the target. +@end table + +The @samp{link} filesystem can be thought of as identical to the +@samp{ufs} filesystem but without actually mounting anything. + +An example entry might be: + +@example +jsp host==charm;type:=link;fs:=/home/charm;sublink:=jsp +@end example +which would return a symbolic link pointing to @file{/home/charm/jsp}. + +@c ---------------------------------------------------------------- +@node Symbolic Link Filesystem II, NFS-Link Filesystem, Symbolic Link Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Symbolic Link Filesystem II (@samp{linkx}) +@cindex Symbolic link filesystem II +@cindex Referencing an existing part of the local name space +@cindex Mounting an existing part of the local name space +@cindex How to reference an existing part of the local name space +@cindex linkx, filesystem type +@cindex symlink, linkx filesystem type +@cindex Filesystem type; linkx + +The @dfn{linkx} (@samp{type:=linkx}) filesystem type is identical to @samp{link} with the +exception that the target of the link must exist. Existence is checked +with the @b{lstat}(2) system call. + +The @samp{linkx} filesystem type is particularly useful for wildcard map +entries. In this case, a list of possible targets can be given and +@i{Amd} will choose the first one which exists on the local machine. + +@c ---------------------------------------------------------------- +@node NFS-Link Filesystem, Automount Filesystem, Symbolic Link Filesystem II, Filesystem Types +@comment node-name, next, previous, up +@section NFS-Link Filesystem (@samp{nfsl}) +@cindex NFS-Link filesystem II +@cindex Referencing an existing part of the name space if target exists +@cindex Mounting a remote part of the name space if target is missing +@cindex Symlink if target exists, NFS otherwise +@cindex nfsl, filesystem type +@cindex symlink, nfsl filesystem type +@cindex Filesystem type; nfsl + +The @dfn{nfsl} (@samp{type:=nfsl}) filesystem type is a combination of two others: +@samp{link} and @samp{nfs}. If the local host name is equal to the +value of @code{$@{rhost@}}, or if the target pathname listed in +@code{$@{fs@}} exists, @samp{nfsl} will behave exactly as +@samp{type:=link}, and refer to the target as a symbolic link. If the +local host name is not equal to the value of @code{$@{rhost@}}, or if +the target of the link does not exist, @i{Amd} will treat it as +@samp{type:=nfs}, and will mount a remote pathname for it. + +The @samp{nfsl} filesystem type is particularly useful as a shorthand +for the more cumbersome and yet one of the most popular @i{Amd} +entries. For example, you can simplify all map entries that look like: + +@example +zing -fs:=/n/shekel/u/zing \ + host!=shekel;type:=nfs;rhost:=shekel;rfs:=$@{fs@} \ + host==shekel;type:=link +@end example + +or + +@example +zing -fs:=/n/shekel/u/zing \ + exists($@{fs@});type:=link \ + !exists($@{fs@});type:=nfs;rhost:=shekel;rfs:=$@{fs@} +@end example + +into a shorter form + +@example +zing type:=nfsl;fs:=/n/shekel/u/zing;rhost:=shekel;rfs:=$@{fs@} +@end example + +Not just does it make the maps smaller and simpler, but it avoids +possible mistakes that often happen when forgetting to set up the two +entries (one for @samp{type:=nfs} and the other for @samp{type:=link}) +necessary to perform transparent mounts of existing or remote mounts. + +@c ---------------------------------------------------------------- +@node Automount Filesystem, Direct Automount Filesystem, NFS-Link Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Automount Filesystem (@samp{auto}) +@cindex Automount filesystem +@cindex Map cache types +@cindex Setting map cache parameters +@cindex How to set map cache parameters +@cindex How to start an indirect automount point +@cindex auto, filesystem type +@cindex Filesystem type; auto +@cindex SIGHUP signal +@cindex Map cache synchronizing +@cindex Synchronizing the map cache +@cindex Map cache options +@cindex Regular expressions in maps + +The @dfn{auto} (@samp{type:=auto}) filesystem type creates a new automount point below an +existing automount point. Top-level automount points appear as system +mount points. An automount mount point can also appear as a +sub-directory of an existing automount point. This allows some +additional structure to be added, for example to mimic the mount tree of +another machine. + +The following options may be specified: + +@table @code +@cindex cache, mount option +@cindex Mount option; cache +@item cache +specifies whether the data in this mount-map should be +cached. The default value is @samp{none}, in which case +no caching is done in order to conserve memory. +However, better performance and reliability can be obtained by caching +some or all of a mount-map. + +If the cache option specifies @samp{all}, +the entire map is enumerated when the mount point is created. + +If the cache option specifies @samp{inc}, caching is done incrementally +as and when data is required. +Some map types do not support cache mode @samp{all}, in which case @samp{inc} +is used whenever @samp{all} is requested. + +Caching can be entirely disabled by using cache mode @samp{none}. + +If the cache option specifies @samp{regexp} then the entire map will be +enumerated and each key will be treated as an egrep-style regular +expression. The order in which a cached map is searched does not +correspond to the ordering in the source map so the regular expressions +should be mutually exclusive to avoid confusion. + +Each mount map type has a default cache type, usually @samp{inc}, which +can be selected by specifying @samp{mapdefault}. + +The cache mode for a mount map can only be selected on the command line. +Starting @i{Amd} with the command: + +@example +amd /homes hesiod.homes -cache:=inc +@end example + +will cause @samp{/homes} to be automounted using the @dfn{Hesiod} name +server with local incremental caching of all successfully resolved names. + +All cached data is forgotten whenever @i{Amd} receives a @samp{SIGHUP} +signal and, if cache @samp{all} mode was selected, the cache will be +reloaded. This can be used to inform @i{Amd} that a map has been +updated. In addition, whenever a cache lookup fails and @i{Amd} needs +to examine a map, the map's modify time is examined. If the cache is +out of date with respect to the map then it is flushed as if a +@samp{SIGHUP} had been received. + +An additional option (@samp{sync}) may be specified to force @i{Amd} to +check the map's modify time whenever a cached entry is being used. For +example, an incremental, synchronized cache would be created by the +following command: + +@example +amd /homes hesiod.homes -cache:=inc,sync +@end example + +@item fs +specifies the name of the mount map to use for the new mount point. + +Arguably this should have been specified with the @code{$@{rfs@}} option but +we are now stuck with it due to historical accident. + +@c %If the string @samp{.} is used then the same map is used; +@c %in addition the lookup prefix is set to the name of the mount point followed +@c %by a slash @samp{/}. +@c %This is the same as specifying @samp{fs:=\$@{map@};pref:=\$@{key@}/}. +@c + +@item pref +alters the name that is looked up in the mount map. If +@code{$@{pref@}}, the @dfn{prefix}, is non-null then it is prepended to +the name requested by the kernel @dfn{before} the map is searched. +@end table + +The server @samp{dylan.doc.ic.ac.uk} has two user disks: +@samp{/dev/dsk/2s0} and @samp{/dev/dsk/5s0}. These are accessed as +@samp{/home/dylan/dk2} and @samp{/home/dylan/dk5} respectively. Since +@samp{/home} is already an automount point, this naming is achieved with +the following map entries:@refill + +@example +dylan type:=auto;fs:=$@{map@};pref:=$@{key@}/ +dylan/dk2 type:=ufs;dev:=/dev/dsk/2s0 +dylan/dk5 type:=ufs;dev:=/dev/dsk/5s0 +@end example + +@c ---------------------------------------------------------------- +@node Direct Automount Filesystem, Union Filesystem, Automount Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Direct Automount Filesystem (@samp{direct}) +@cindex Direct automount filesystem +@cindex How to start a direct automount point +@cindex direct, filesystem type +@cindex Filesystem type; direct + +The @dfn{direct} (@samp{type:=direct}) filesystem is almost identical to the automount +filesystem. Instead of appearing to be a directory of mount points, it +appears as a symbolic link to a mounted filesystem. The mount is done +at the time the link is accessed. @xref{Automount Filesystem} for a +list of required options. + +Direct automount points are created by specifying the @samp{direct} +filesystem type on the command line: + +@example +amd ... /usr/man auto.direct -type:=direct +@end example + +where @samp{auto.direct} would contain an entry such as: + +@example +usr/man -type:=nfs;rfs:=/usr/man \ + rhost:=man-server1 rhost:=man-server2 +@end example + +In this example, @samp{man-server1} and @samp{man-server2} are file +servers which export copies of the manual pages. Note that the key +which is looked up is the name of the automount point without the +leading @samp{/}. + +@c ---------------------------------------------------------------- +@node Union Filesystem, Error Filesystem, Direct Automount Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Union Filesystem (@samp{union}) +@cindex Union filesystem +@cindex union, filesystem type +@cindex Filesystem type; union + +The @dfn{union} (@samp{type:=union}) filesystem type allows the contents of several +directories to be merged and made visible in a single directory. This +can be used to overcome one of the major limitations of the Unix mount +mechanism which only allows complete directories to be mounted. + +For example, supposing @file{/tmp} and @file{/var/tmp} were to be merged +into a new directory called @file{/mtmp}, with files in @file{/var/tmp} +taking precedence. The following command could be used to achieve this +effect: + +@example +amd ... /mtmp union:/tmp:/var/tmp -type:=union +@end example + +Currently, the unioned directories must @emph{not} be automounted. That +would cause a deadlock. This seriously limits the current usefulness of +this filesystem type and the problem will be addressed in a future +release of @i{Amd}. + +Files created in the union directory are actually created in the last +named directory. This is done by creating a wildcard entry which points +to the correct directory. The wildcard entry is visible if the union +directory is listed, so allowing you to see which directory has +priority. + +The files visible in the union directory are computed at the time +@i{Amd} is started, and are not kept up-to-date with respect to the +underlying directories. Similarly, if a link is removed, for example +with the @samp{rm} command, it will be lost forever. + +@c ---------------------------------------------------------------- +@node Error Filesystem, Top-level Filesystem, Union Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Error Filesystem (@samp{error}) +@cindex Error filesystem +@cindex error, filesystem type +@cindex Filesystem type; error + +The @dfn{error} (@samp{type:=error}) filesystem type is used internally as a catch-all in the +case where none of the other filesystems was selected, or some other +error occurred. Lookups and mounts always fail with ``No such file or +directory''. All other operations trivially succeed. + +The error filesystem is not directly accessible. + +@c ---------------------------------------------------------------- +@node Top-level Filesystem, Autofs Filesystem, Error Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Top-level Filesystem (@samp{toplvl}) +@cindex Top level filesystem +@cindex toplvl, filesystem type +@cindex Filesystem type; toplvl + +The @dfn{toplvl} (@samp{type:=toplvl}) filesystems is derived from the @samp{auto} filesystem +and is used to mount the top-level automount nodes. Requests of this +type are automatically generated from the command line arguments and can +also be passed in by using the @code{-M} option of the @dfn{Amq} command. +That option is insecure, and is unavailable unless am-utils was +configured with @samp{--with-amq-mount}. + +@c ---------------------------------------------------------------- +@node Root Filesystem, Inheritance Filesystem, Autofs Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Root Filesystem (@samp{root}) +@cindex Root filesystem +@cindex root, filesystem type +@cindex Filesystem type; root + +The @dfn{root} (@samp{type:=root}) filesystem type acts as an internal +placeholder onto which @i{Amd} can pin @samp{toplvl} mounts. Only one +node of this type need ever exist and one is created automatically +during startup. The effect of having more than one root node is +undefined. + +The root filesystem is not directly accessible. + +@c ---------------------------------------------------------------- +@node Autofs Filesystem, Root Filesystem, Top-level Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Autofs Filesystem (@samp{autofs}) +@cindex Autofs filesystem +@cindex autofs, filesystem type +@cindex Filesystem type; autofs + +The @dfn{autofs} (@samp{type:=autofs}) filesystem uses Sun's kernel-based automounter +supporting filesystem for @i{Amd}'s mount points. Hence it is another +type of top level filesystem. + +The autofs filesystem is not directly accessible from @i{Amd} maps, but +only from the @file{amd.conf} file (@pxref{mount_type Parameter}). + +Note that Autofs support is still very early. See the distribution file +@file{README.autofs} for detail of what works and what does not. + +@c ---------------------------------------------------------------- +@node Inheritance Filesystem, , Root Filesystem, Filesystem Types +@comment node-name, next, previous, up +@section Inheritance Filesystem (@samp{inherit}) +@cindex Inheritance filesystem +@cindex Nodes generated on a restart +@cindex inherit, filesystem type +@cindex Filesystem type; inherit + +The @dfn{inheritance} (@samp{type:=inherit}) filesystem is not directly +accessible. Instead, internal mount nodes of this type are +automatically generated when @i{Amd} is started with the @code{-r} option. +At this time the system mount table is scanned to locate any filesystems +which are already mounted. If any reference to these filesystems is +made through @i{Amd} then instead of attempting to mount it, @i{Amd} +simulates the mount and @dfn{inherits} the filesystem. This allows a +new version of @i{Amd} to be installed on a live system simply by +killing the old daemon with @samp{SIGTERM} and starting the new one.@refill + +This filesystem type is not generally visible externally, but it is +possible that the output from @samp{amq -m} may list @samp{inherit} as +the filesystem type. This happens when an inherit operation cannot +be completed for some reason, usually because a fileserver is down. + +@c ################################################################ +@node Amd Configuration File, Run-time Administration, Filesystem Types, Top +@comment node-name, next, previous, up +@chapter Amd Configuration File +@cindex Amd Configuration File +@cindex amd.conf + +The @samp{amd.conf} file is the configuration file for @i{Amd}, as part +of the am-utils suite. This file contains runtime configuration +information for the @i{Amd} automounter program. + +@menu +* File Format:: +* The Global Section:: +* Regular Map Sections:: +* Common Parameters:: +* Global Parameters:: +* Regular Map Parameters:: +* amd.conf Examples:: +@end menu + +@c ================================================================ +@node File Format, The Global Section, Amd Configuration File, Amd Configuration File +@comment node-name, next, previous, up +@section File Format +@cindex amd.conf file format + +The @samp{amd.conf} file consists of sections and parameters. A section +begins with the name of the section in square brackets @samp{[]} and +continues until the next section begins or the end of the file is reached. +Sections contain parameters of the form @samp{name = value}. + +The file is line-based --- that is, each newline-terminated line +represents either a comment, a section name or a parameter. No +line-continuation syntax is available. + +Section names, parameter names and their values are case sensitive. + +Only the first equals sign in a parameter is significant. Whitespace +before or after the first equals sign is discarded. Leading, trailing +and internal whitespace in section and parameter names is irrelevant. +Leading and trailing whitespace in a parameter value is discarded. +Internal whitespace within a parameter value is not allowed, unless the +whole parameter value is quoted with double quotes as in @samp{name = +"some value"}. + +Any line beginning with a pound sign @samp{#} is ignored, as are lines +containing only whitespace. + +The values following the equals sign in parameters are all either a +string (no quotes needed if string does not include spaces) or a +boolean, which may be given as @samp{yes}/@samp{no}. Case is significant in all +values. Some items such as cache timeouts are numeric. + +@c ================================================================ +@node The Global Section, Regular Map Sections, File Format, Amd Configuration File +@comment node-name, next, previous, up +@section The Global Section +@cindex amd.conf global section + +The global section must be specified as @samp{[global]}. Parameters in +this section either apply to @i{Amd} as a whole, or to all other regular map +sections which follow. There should be only one global section defined +in one configuration file. + +It is highly recommended that this section be specified first in the +configuration file. If it is not, then regular map sections which +precede it will not use global values defined later. + +@c ================================================================ +@node Regular Map Sections, Common Parameters, The Global Section, Amd Configuration File +@comment node-name, next, previous, up +@section Regular Map Sections +@cindex amd.conf regular map sections + +Parameters in regular (non-global) sections apply to a single map entry. +For example, if the map section @samp{[/homes]} is defined, then all +parameters following it will be applied to the @file{/homes} +@i{Amd}-managed mount point. + +@c ================================================================ +@node Common Parameters, Global Parameters, Regular Map Sections, Amd Configuration File +@comment node-name, next, previous, up +@section Common Parameters +@cindex amd.conf common parameters + +These parameters can be specified either in the global or a map-specific +section. Entries specified in a map-specific section override the default +value or one defined in the global section. If such a common parameter is +specified only in the global section, it is applicable to all regular map +sections that follow. + +@menu +* browsable_dirs Parameter:: +* map_options Parameter:: +* map_type Parameter:: +* mount_type Parameter:: +* search_path Parameter:: +@end menu + +@c ---------------------------------------------------------------- +@node browsable_dirs Parameter, map_options Parameter, Common Parameters, Common Parameters +@comment node-name, next, previous, up +@subsection @t{browsable_dirs} Parameter +@cindex browsable_dirs Parameter + +(type=string, default=@samp{no}). If @samp{yes}, then @i{Amd}'s top-level +mount points will be browsable to @b{readdir}(3) calls. This means you +could run for example @b{ls}(1) and see what keys are available to mount +in that directory. Not all entries are made visible to @b{readdir}(3): +the @samp{/defaults} entry, wildcard entries, and those with a @file{/} +in them are not included. If you specify @samp{full} to this option, +all but the @samp{/defaults} entry will be visible. Note that if you run +a command which will attempt to @b{stat}(2) the entries, such as often +done by @samp{ls -l} or @samp{ls -F}, @i{Amd} will attempt to mount +@i{every} entry in that map. This is often called a ``mount storm''. + +@c ---------------------------------------------------------------- +@node map_options Parameter, map_type Parameter, browsable_dirs Parameter, Common Parameters +@comment node-name, next, previous, up +@subsection @t{map_options} Parameter +@cindex map_options Parameter + +(type=string, default no options). This option is the same as +specifying map options on the command line to @i{Amd}, such as +@samp{cache:=all}. + +@c ---------------------------------------------------------------- +@node map_type Parameter, mount_type Parameter, map_options Parameter, Common Parameters +@comment node-name, next, previous, up +@subsection @t{map_type} Parameter +@cindex map_type Parameter + +(type=string, default search all map types). If specified, @i{Amd} will +initialize the map only for the type given. This is useful to avoid the +default map search type used by @i{Amd} which takes longer and can have +undesired side-effects such as initializing NIS even if not used. +Possible values are + +@table @samp +@item file +plain files +@item hesiod +Hesiod name service from MIT +@item ldap +Lightweight Directory Access Protocol +@item ndbm +(New) dbm style hash files +@item nis +Network Information Services (version 2) +@item nisplus +Network Information Services Plus (version 3) +@item passwd +local password files +@item union +union maps +@end table + +@c ---------------------------------------------------------------- +@node mount_type Parameter, search_path Parameter, map_type Parameter, Common Parameters +@comment node-name, next, previous, up +@subsection @t{mount_type} Parameter +@cindex mount_type Parameter + +(type=string, default=@samp{nfs}). All @i{Amd} mount types default to NFS. +That is, @i{Amd} is an NFS server on the map mount points, for the local +host it is running on. If @samp{autofs} is specified, @i{Amd} will be +an autofs server for those mount points. + +@c ---------------------------------------------------------------- +@node search_path Parameter, , mount_type Parameter, Common Parameters +@comment node-name, next, previous, up +@subsection @t{search_path} Parameter +@cindex search_path Parameter + +(type=string, default no search path). This provides a +(colon-delimited) search path for file maps. Using a search path, +sites can allow for local map customizations and overrides, and can +distributed maps in several locations as needed. + +@c ================================================================ +@node Global Parameters, Regular Map Parameters, Common Parameters, Amd Configuration File +@comment node-name, next, previous, up +@section Global Parameters +@cindex amd.conf global parameters + +The following parameters are applicable to the @samp{[global]} section only. + +@menu +* arch Parameter:: +* auto_dir Parameter:: +* cache_duration Parameter:: +* cluster Parameter:: +* debug_options Parameter:: +* dismount_interval Parameter:: +* fully_qualified_hosts Parameter:: +* hesiod_base Parameter:: +* karch Parameter:: +* ldap_base Parameter:: +* ldap_cache_maxmem Parameter:: +* ldap_cache_seconds Parameter:: +* ldap_hostports Parameter:: +* local_domain Parameter:: +* log_file Parameter:: +* log_options Parameter:: +* nfs_retransmit_counter Parameter:: +* nfs_retry_interval Parameter:: +* nis_domain Parameter:: +* normalize_hostnames Parameter:: +* os Parameter:: +* osver Parameter:: +* pid_file Parameter:: +* plock Parameter:: +* portmap_program Parameter:: +* print_pid Parameter:: +* print_version Parameter:: +* restart_mounts Parameter:: +* selectors_on_default Parameter:: +* show_statfs_entries Parameter:: +* unmount_on_exit Parameter:: +@end menu + +@c ---------------------------------------------------------------- +@node arch Parameter, auto_dir Parameter, Global Parameters, Global Parameters +@comment node-name, next, previous, up +@subsection @t{arch} Parameter +@cindex arch Parameter + +(type=string, default to compiled in value). Allows you to override the +value of the @i{arch} @i{Amd} variable. + +@c ---------------------------------------------------------------- +@node auto_dir Parameter, cache_duration Parameter, arch Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{auto_dir} Parameter +@cindex auto_dir Parameter + +(type=string, default=@samp{/a}). Same as the @code{-a} option to @i{Amd}. +This sets the private directory where @i{Amd} will create +sub-directories for its real mount points. + +@c ---------------------------------------------------------------- +@node cache_duration Parameter, cluster Parameter, auto_dir Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{cache_duration} Parameter +@cindex cache_duration Parameter + +(type=numeric, default=300). Same as the @code{-c} option to +@i{Amd}. Sets the duration in seconds that looked up map entries remain +in the cache. + +@c ---------------------------------------------------------------- +@node cluster Parameter, debug_options Parameter, cache_duration Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{cluster} Parameter +@cindex cluster Parameter + +(type=string, default no cluster). Same as the @code{-C} option to +@i{Amd}. Specifies the alternate HP-UX cluster to use. + +@c ---------------------------------------------------------------- +@node debug_options Parameter, dismount_interval Parameter, cluster Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{debug_options} Parameter +@cindex debug_options Parameter + +(type=string, default no debug options). Same as the @code{-D} +option to @i{Amd}. Specify any debugging options for @i{Amd}. Works +only if am-utils was configured for debugging using the +@code{--enable-debug} option. The @samp{mem} option alone can be turned +on via @code{--enable-debug=mem}. Otherwise debugging options are +ignored. Options are comma delimited, and can be preceded by the string +@samp{no} to negate their meaning. You can get the list of supported +debugging options by running @code{amd -v}. Possible values are: + +@table @samp +@item all +all options +@item amq +register for amq +@item daemon +enter daemon mode +@item fork +fork server +@item full +program trace +@item mem +trace memory allocations +@item mtab +use local @file{./mtab} file +@item str +debug string munging +@item test +full debug but no daemon +@item trace +protocol trace +@end table + +@c ---------------------------------------------------------------- +@node dismount_interval Parameter, fully_qualified_hosts Parameter, debug_options Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{dismount_interval} Parameter +@cindex dismount_interval Parameter + +(type=numeric, default=120). Same as the @code{-w} option to +@i{Amd}. Specify in seconds, the time between attempts to dismount file +systems that have exceeded their cached times. + +@c ---------------------------------------------------------------- +@node fully_qualified_hosts Parameter, hesiod_base Parameter, dismount_interval Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{fully_qualified_hosts} Parameter +@cindex fully_qualified_hosts Parameter + +(type=string, default=@samp{no}). If @samp{yes}, @i{Amd} will perform RPC +authentication using fully-qualified host names. This is necessary for +some systems, and especially when performing cross-domain mounting. For +this function to work, the @i{Amd} variable @samp{$@{hostd@}} is used, +requiring that @samp{$@{domain@}} not be null. + +@c ---------------------------------------------------------------- +@node hesiod_base Parameter, karch Parameter, fully_qualified_hosts Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{hesiod_base} Parameter +@cindex hesiod_base Parameter + +(type=string, default=@samp{automount}). Specify the base name for +hesiod maps. + +@c ---------------------------------------------------------------- +@node karch Parameter, ldap_base Parameter, hesiod_base Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{karch} Parameter +@cindex karch Parameter + +(type=string, default to karch of the system). Same as the @code{-k} +option to @i{Amd}. Allows you to override the kernel-architecture of +your system. Useful for example on Sun (Sparc) machines, where you can +build one @i{Amd} binary, and run it on multiple machines, yet you want +each one to get the correct @i{karch} variable set (for example, sun4c, +sun4m, sun4u, etc.) Note that if not specified, @i{Amd} will use +@b{uname}(2) to figure out the kernel architecture of the machine. + +@c ---------------------------------------------------------------- +@node ldap_base Parameter, ldap_cache_maxmem Parameter, karch Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{ldap_base} Parameter +@cindex ldap_base Parameter + +(type=string, default not set). Specify the base name for +LDAP. + +@c ---------------------------------------------------------------- +@node ldap_cache_maxmem Parameter, ldap_cache_seconds Parameter, ldap_base Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{ldap_cache_maxmem} Parameter +@cindex ldap_cache_maxmem Parameter + +(type=numeric, default=131072). Specify the maximum memory @i{Amd} +should use to cache LDAP entries. + +@c ---------------------------------------------------------------- +@node ldap_cache_seconds Parameter, ldap_hostports Parameter, ldap_cache_maxmem Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{ldap_cache_seconds} Parameter +@cindex ldap_cache_seconds Parameter + +(type=numeric, default=0). Specify the number of seconds to keep +entries in the cache. + +@c ---------------------------------------------------------------- +@node ldap_hostports Parameter, local_domain Parameter, ldap_cache_seconds Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{ldap_hostports} Parameter +@cindex ldap_hostports Parameter + +(type=string, default not set). Specify +LDAP-specific values such as country and organization. + +@c ---------------------------------------------------------------- +@node local_domain Parameter, log_file Parameter, ldap_hostports Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{local_domain} Parameter +@cindex local_domain Parameter + +(type=string, default no sub-domain). Same as the @code{-d} option +to @i{Amd}. Specify the local domain name. If this option is not given +the domain name is determined from the hostname, by removing the first +component of the fully-qualified host name. + +@c ---------------------------------------------------------------- +@node log_file Parameter, log_options Parameter, local_domain Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{log_file} Parameter +@cindex log_file Parameter + +(type=string, default=@samp{stderr}). Same as the @code{-l} option to +@i{Amd}. Specify a file name to log @i{Amd} events to. +If the string @samp{/dev/stderr} is specified, +@i{Amd} will send its events to the standard error file descriptor. + +If the string @samp{syslog} is given, @i{Amd} will record its events +with the system logger @b{syslogd}(8). If your system supports syslog +facilities, then the default facility used is @samp{LOG_DAEMON}. + +When using syslog, if you wish to change the facility, append its name +to the option name, delimited by a single colon. For example, if it is +the string @samp{syslog:local7} then @i{Amd} will log messages via +@b{syslog}(3) using the @samp{LOG_LOCAL7} facility. If the facility +name specified is not recognized, @i{Amd} will default to @samp{LOG_DAEMON}. +Note: while you can use any syslog facility available on your system, it +is generally a bad idea to use those reserved for other services such as +@samp{kern}, @samp{lpr}, @samp{cron}, etc. + +@c ---------------------------------------------------------------- +@node log_options Parameter, nfs_retransmit_counter Parameter, log_file Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{log_options} Parameter +@cindex log_options Parameter + +(type=string, default no logging options). Same as the @code{-x} +option to @i{Amd}. Specify any logging options for @i{Amd}. Options +are comma delimited, and can be preceded by the string @samp{no} to +negate their meaning. The @samp{debug} logging option is only available +if am-utils was configured with @code{--enable-debug}. You can get the +list of supported debugging options by running @code{amd -v}. Possible +values are: + +@table @samp +@item all +all messages +@item debug +debug messages +@item error +non-fatal system errors +@item fatal +fatal errors +@item info +information +@item map +map errors +@item stats +additional statistical information +@item user +non-fatal user errors +@item warn +warnings +@item warning +warnings +@end table + +@c ---------------------------------------------------------------- +@node nfs_retransmit_counter Parameter, nfs_retry_interval Parameter, log_options Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{nfs_retransmit_counter} Parameter +@cindex nfs_retransmit_counter Parameter + +(type=numeric, default=110). Same as the @i{counter} part of the +@code{-t} @i{interval.counter} option to @i{Amd}. Specifies the +retransmit counter's value in @emph{tenths} of seconds. + +@c ---------------------------------------------------------------- +@node nfs_retry_interval Parameter, nis_domain Parameter, nfs_retransmit_counter Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{nfs_retry_interval} Parameter +@cindex nfs_retry_interval Parameter + +(type=numeric, default=8). Same as the @i{interval} part of the +@code{-t} @i{interval.counter} option to @i{Amd}. Specifies the +interval in @emph{tenths} of seconds, between NFS/RPC/UDP retries. + +@c ---------------------------------------------------------------- +@node nis_domain Parameter, normalize_hostnames Parameter, nfs_retry_interval Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{nis_domain} Parameter +@cindex nis_domain Parameter + +(type=string, default to local NIS domain name). Same as the +@code{-y} option to @i{Amd}. Specify an alternative NIS domain from +which to fetch the NIS maps. The default is the system domain name. +This option is ignored if NIS support is not available. + +@c ---------------------------------------------------------------- +@node normalize_hostnames Parameter, os Parameter, nis_domain Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{normalize_hostnames} Parameter +@cindex normalize_hostnames Parameter + +(type=boolean, default=@samp{no}). Same as the @code{-n} option to @i{Amd}. +If @samp{yes}, then the name referred to by @code{$@{rhost@}} is normalized +relative to the host database before being used. The effect is to +translate aliases into ``official'' names. + +@c ---------------------------------------------------------------- +@node os Parameter, osver Parameter, normalize_hostnames Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{os} Parameter +@cindex os Parameter + +(type=string, default to compiled in value). Same as the @code{-O} +option to @i{Amd}. Allows you to override the compiled-in name of the +operating system. Useful when the built-in name is not desired for +backward compatibility reasons. For example, if the built-in name is +@samp{sunos5}, you can override it to @samp{sos5}, and use older maps +which were written with the latter in mind. + +@c ---------------------------------------------------------------- +@node osver Parameter, pid_file Parameter, os Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{osver} Parameter +@cindex osver Parameter + +(type=string, default to compiled in value). Same as the @code{-o} +option to @i{Amd}. Allows you to override the compiled-in version +number of the operating system. Useful when the built-in version is not +desired for backward compatibility reasons. For example, if the build +in version is @samp{2.5.1}, you can override it to @samp{5.5.1}, and use +older maps that were written with the latter in mind. + +@c ---------------------------------------------------------------- +@node pid_file Parameter, plock Parameter, osver Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{pid_file} Parameter +@cindex pid_file Parameter + +(type=string, default=@samp{/dev/stdout}). Specify a file to store the process +ID of the running daemon into. If not specified, @i{Amd} will print its +process id onto the standard output. Useful for killing @i{Amd} after +it had run. Note that the PID of a running @i{Amd} can also be +retrieved via @i{Amq} (@pxref{Amq -p option}). + +This file is used only if the @samp{print_pid} option is on +(@pxref{print_pid Parameter}). + +@c ---------------------------------------------------------------- +@node plock Parameter, portmap_program Parameter, pid_file Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{plock} Parameter +@cindex plock Parameter + +(type=boolean, default=@samp{yes}). Same as the @code{-S} option to @i{Amd}. +If @samp{yes}, lock the running executable pages of @i{Amd} into memory. +To improve @i{Amd}'s performance, systems that support the @b{plock}(3) +call can lock the @i{Amd} process into memory. This way there is less +chance the operating system will schedule, page out, and swap the +@i{Amd} process as needed. This improves @i{Amd}'s performance, at the +cost of reserving the memory used by the @i{Amd} process (making it +unavailable for other processes). + +@c ---------------------------------------------------------------- +@node portmap_program Parameter, print_pid Parameter, plock Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{portmap_program} Parameter +@cindex portmap_program Parameter + +(type=numeric, default=300019). Specify an alternate Port-mapper RPC +program number, other than the official number. This is useful when +running multiple @i{Amd} processes. For example, you can run another +@i{Amd} in ``test'' mode, without affecting the primary @i{Amd} process +in any way. For safety reasons, the alternate program numbers that can +be specified must be in the range 300019-300029, inclusive. @i{Amq} has +an option @code{-P} which can be used to specify an alternate program +number of an @i{Amd} to contact. In this way, amq can fully control any +number of @i{Amd} processes running on the same host. + +@c ---------------------------------------------------------------- +@node print_pid Parameter, print_version Parameter, portmap_program Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{print_pid} Parameter +@cindex print_pid Parameter + +(type=boolean, default=@samp{no}). Same as the @code{-p} option to @i{Amd}. +If @samp{yes}, @i{Amd} will print its process ID upon starting. + +@c ---------------------------------------------------------------- +@node print_version Parameter, restart_mounts Parameter, print_pid Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{print_version} Parameter +@cindex print_version Parameter + +(type=boolean, default=@samp{no}). Same as the @code{-v} option to @i{Amd}, +but the version prints and @i{Amd} continues to run. If @samp{yes}, @i{Amd} +will print its version information string, which includes some +configuration and compilation values. + +@c ---------------------------------------------------------------- +@node restart_mounts Parameter, selectors_on_default Parameter, print_version Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{restart_mounts} Parameter +@cindex restart_mounts Parameter + +(type=boolean, default=@samp{no}). Same as the @code{-r} option to @i{Amd}. +If @samp{yes} @i{Amd} will scan the mount table to determine which file +systems are currently mounted. Whenever one of these would have been +auto-mounted, @i{Amd} inherits it. + +@c ---------------------------------------------------------------- +@node selectors_on_default Parameter, show_statfs_entries Parameter, restart_mounts Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{selectors_on_default} Parameter +@cindex selectors_on_default Parameter + +(type=boolean, default=@samp{no}). If @samp{yes}, then the @samp{/defaults} entry of +maps will be looked for and any selectors processed before setting defaults +for all other keys in that map. Useful when you want to set different +options for a complete map based on some parameters. For example, you +may want to better the NFS performance over slow slip-based networks as +follows: + +@example +/defaults \ + wire==slip-net;opts:=intr,rsize=1024,wsize=1024 \ + wire!=slip-net;opts:=intr,rsize=8192,wsize=8192 +@end example + +@c ---------------------------------------------------------------- +@node show_statfs_entries Parameter, unmount_on_exit Parameter , selectors_on_default Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{show_statfs_entries} Parameter +@cindex show_statfs_entries Parameter + +(type=boolean), default=@samp{no}). If @samp{yes}, then all maps which are +browsable will also show the number of entries (keys) they have when +@b{df}(1) runs. (This is accomplished by returning non-zero values to +the @b{statfs}(2) system call). + +@c ---------------------------------------------------------------- +@node unmount_on_exit Parameter, , show_statfs_entries Parameter, Global Parameters +@comment node-name, next, previous, up +@subsection @t{unmount_on_exit} Parameter +@cindex unmount_on_exit Parameter + +(type=boolean), default=@samp{no}). If @samp{yes}, then @i{Amd} will attempt +to unmount all file systems which it knows about. Normally it leaves +all (esp. NFS) mounted file systems intact. Note that @i{Amd} does not +know about file systems mounted before it starts up, unless the +@samp{restart_mounts} option is used (@pxref{restart_mounts Parameter}). + +@c ================================================================ +@node Regular Map Parameters, amd.conf Examples, Global Parameters, Amd Configuration File +@comment node-name, next, previous, up +@section Regular Map Parameters +@cindex amd.conf regular map parameters + +The following parameters are applicable only to regular map sections. + +@menu +* map_name Parameter:: +* tag Parameter:: +@end menu + +@c ---------------------------------------------------------------- +@node map_name Parameter, tag Parameter, Regular Map Parameters, Regular Map Parameters +@comment node-name, next, previous, up +@subsection map_name Parameter +@cindex map_name Parameter + +(type=string, must be specified). Name of the map where the keys are +located. + +@c ---------------------------------------------------------------- +@node tag Parameter, , map_name Parameter, Regular Map Parameters +@comment node-name, next, previous, up +@subsection tag Parameter +@cindex tag Parameter + +(type=string, default no tag). Each map entry in the configuration file +can be tagged. If no tag is specified, that map section will always be +processed by @i{Amd}. If it is specified, then @i{Amd} will process the map +if the @code{-T} option was given to @i{Amd}, and the value given to that +command-line option matches that in the map section. + +@c ================================================================ +@node amd.conf Examples, , Regular Map Parameters, Amd Configuration File +@comment node-name, next, previous, up +@section amd.conf Examples +@cindex amd.conf examples + +The following is the actual @code{amd.conf} file I use at the +Computer Science Department of Columbia University. + +@example +# GLOBAL OPTIONS SECTION +[ global ] +normalize_hostnames = no +print_pid = no +#pid_file = /var/run/amd.pid +restart_mounts = yes +#unmount_on_exit = yes +auto_dir = /n +log_file = /var/log/amd +log_options = all +#debug_options = all +plock = no +selectors_on_default = yes +# config.guess picks up "sunos5" and I don't want to edit my maps yet +os = sos5 +# if you print_version after setting up "os", it will show it. +print_version = no +map_type = file +search_path = /etc/amdmaps:/usr/lib/amd:/usr/local/AMD/lib +browsable_dirs = yes +fully_qualified_hosts = no + +# DEFINE AN AMD MOUNT POINT +[ /u ] +map_name = amd.u + +[ /proj ] +map_name = amd.proj + +[ /src ] +map_name = amd.src + +[ /misc ] +map_name = amd.misc + +[ /import ] +map_name = amd.import + +[ /tftpboot/.amd ] +tag = tftpboot +map_name = amd.tftpboot +@end example + +@c ################################################################ +@node Run-time Administration, FSinfo, Amd Configuration File, Top +@comment node-name, next, previous, up +@chapter Run-time Administration +@cindex Run-time administration +@cindex Amq command + +@menu +* Starting Amd:: +* Stopping Amd:: +* Restarting Amd:: +* Controlling Amd:: +@end menu + +@node Starting Amd, Stopping Amd, Run-time Administration, Run-time Administration +@comment node-name, next, previous, up +@section Starting @i{Amd} +@cindex Starting Amd +@cindex Additions to /etc/rc.local +@cindex /etc/rc.local additions +@cindex ctl-amd + +@i{Amd} is best started from @samp{/etc/rc.local} on BSD systems, or +from the appropriate start-level script in @samp{/etc/init.d} on System V +systems. + +@example +if [ -f /usr/local/sbin/ctl-amd ]; then + /usr/local/sbin/ctl-amd start; (echo -n ' amd') > /dev/console +fi +@end example + +@noindent +The shell script, @samp{ctl-amd} is used to start, stop, or restart +@i{Amd}. It is a relatively generic script. All options you want to +set should not be made in this script, but rather updated in the +@file{amd.conf} file. @xref{Amd Configuration File}. + +If you do not wish to use an @i{Amd} configuration file, you may start +@i{Amd} manually. For example, getting the map entries via NIS: + +@example +amd -r -l /var/log/amd `ypcat -k auto.master` +@end example + +@node Stopping Amd, Restarting Amd, Starting Amd, Run-time Administration +@comment node-name, next, previous, up +@section Stopping @i{Amd} +@cindex Stopping Amd +@cindex SIGTERM signal +@cindex SIGINT signal + +@i{Amd} stops in response to two signals. + +@table @samp +@item SIGTERM +causes the top-level automount points to be unmounted and then @i{Amd} +to exit. Any automounted filesystems are left mounted. They can be +recovered by restarting @i{Amd} with the @code{-r} command line option.@refill + +@item SIGINT +causes @i{Amd} to attempt to unmount any filesystems which it has +automounted, in addition to the actions of @samp{SIGTERM}. This signal +is primarily used for debugging.@refill +@end table + +Actions taken for other signals are undefined. + +The easiest and safest way to stop @i{Amd}, without having to find its +process ID by hand, is to use the @file{ctl-amd} script, as with: + +@example +ctl-amd stop +@end example + +@node Restarting Amd, Controlling Amd, Stopping Amd, Run-time Administration +@comment node-name, next, previous, up +@section Restarting @i{Amd} +@cindex Restarting Amd +@cindex Killing and starting Amd + +Before @i{Amd} can be started, it is vital to ensure that no other +@i{Amd} processes are managing any of the mount points, and that the +previous process(es) have terminated cleanly. When a terminating signal +is set to @i{Amd}, the automounter does @emph{not} terminate right then. +Rather, it starts by unmounting all of its managed mount mounts in the +background, and then terminates. It usually takes a few seconds for +this process to happen, but it can take an arbitrarily longer time. If +two or more @i{Amd} processes attempt to manage the same mount point, it +usually will result in a system lockup. + +The easiest and safest way to restart @i{Amd}, without having to find +its process ID by hand, sending it the @samp{SIGTERM} signal, waiting for @i{Amd} +to die cleanly, and verifying so, is to use the @file{ctl-amd} script, +as with: + +@example +ctl-amd restart +@end example + +The script will locate the process ID of @i{Amd}, kill it, and wait for +it to die cleanly before starting a new instance of the automounter. +@file{ctl-amd} will wait for a total of 30 seconds for @i{Amd} to die, +and will check once every 5 seconds if it had. + +@node Controlling Amd, , Restarting Amd, Run-time Administration +@comment node-name, next, previous, up +@section Controlling @i{Amd} +@cindex Controlling Amd +@cindex Discovering what is going on at run-time +@cindex Listing currently mounted filesystems + +It is sometimes desirable or necessary to exercise external control +over some of @i{Amd}'s internal state. To support this requirement, +@i{Amd} implements an RPC interface which is used by the @dfn{Amq} program. +A variety of information is available. + +@i{Amq} generally applies an operation, specified by a single letter option, +to a list of mount points. The default operation is to obtain statistics +about each mount point. This is similar to the output shown above +but includes information about the number and type of accesses to each +mount point. + +@menu +* Amq default:: Default command behavior. +* Amq -f option:: Flushing the map cache. +* Amq -h option:: Controlling a non-local host. +* Amq -l option:: Controlling the log file. +* Amq -m option:: Obtaining mount statistics. +* Amq -M-option:: Mounting a volume. +* Amq -p option:: Getting Amd's process ID. +* Amq -P-option:: Contacting alternate Amd processes. +* Amq -s option:: Obtaining global statistics. +* Amq -T option:: Use TCP transport. +* Amq -U-option:: Use UDP transport. +* Amq -u option:: Forcing volumes to time out. +* Amq -v option:: Version information. +* Other Amq options:: Three other special options. +@end menu + +@c ---------------------------------------------------------------- +@node Amq default, Amq -f option, Controlling Amd, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} default information + +With no arguments, @dfn{Amq} obtains a brief list of all existing +mounts created by @i{Amd}. This is different from the list displayed by +@b{df}(1) since the latter only includes system mount points. + +@noindent +The output from this option includes the following information: + +@itemize @bullet +@item +the automount point, +@item +the filesystem type, +@item +the mount map or mount information, +@item +the internal, or system mount point. +@end itemize + +@noindent +For example: + +@example +/ root "root" sky:(pid75) +/homes toplvl /usr/local/etc/amd.homes /homes +/home toplvl /usr/local/etc/amd.home /home +/homes/jsp nfs charm:/home/charm /a/charm/home/charm/jsp +/homes/phjk nfs toytown:/home/toytown /a/toytown/home/toytown/ai/phjk +@end example + +@noindent +If an argument is given then statistics for that volume name will +be output. For example: + +@example +What Uid Getattr Lookup RdDir RdLnk Statfs Mounted@@ +/homes 0 1196 512 22 0 30 90/09/14 12:32:55 +/homes/jsp 0 0 0 0 1180 0 90/10/13 12:56:58 +@end example + +@table @code +@item What +the volume name. + +@item Uid +ignored. + +@item Getattr +the count of NFS @dfn{getattr} requests on this node. This should only be +non-zero for directory nodes. + +@item Lookup +the count of NFS @dfn{lookup} requests on this node. This should only be +non-zero for directory nodes. + +@item RdDir +the count of NFS @dfn{readdir} requests on this node. This should only +be non-zero for directory nodes. + +@item RdLnk +the count of NFS @dfn{readlink} requests on this node. This should be +zero for directory nodes. + +@item Statfs +the count of NFS @dfn{statfs} requests on this node. This should only +be non-zero for top-level automount points. + +@item Mounted@@ +the date and time the volume name was first referenced. +@end table + +@c ---------------------------------------------------------------- +@node Amq -f option, Amq -h option, Amq default, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-f} option +@cindex Flushing the map cache +@cindex Map cache, flushing + +The @code{-f} option causes @i{Amd} to flush the internal mount map cache. +This is useful for example in Hesiod maps since @i{Amd} will not +automatically notice when they have been updated. The map cache can +also be synchronized with the map source by using the @samp{sync} option +(@pxref{Automount Filesystem}).@refill + +@c ---------------------------------------------------------------- +@node Amq -l option, Amq -m option, Amq -h option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-l} option +@cindex Resetting the Amd log file +@cindex Setting the Amd log file via Amq +@cindex Log file, resetting + +Tell @i{Amd} to use @i{log_file} as the log file name. For security +reasons, this @emph{must} be the same log file which @i{Amd} used when +started. This option is therefore only useful to refresh @i{Amd}'s open +file handle on the log file, so that it can be rotated and compressed +via daily cron jobs. + +@c ---------------------------------------------------------------- +@node Amq -h option, Amq -l option, Amq -f option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-h} option +@cindex Querying an alternate host + +By default the local host is used. In an HP-UX cluster the root server +is used since that is the only place in the cluster where @i{Amd} will +be running. To query @i{Amd} on another host the @code{-h} option should +be used. + +@c ---------------------------------------------------------------- +@node Amq -m option, Amq -M-option, Amq -l option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-m} option + +The @code{-m} option displays similar information about mounted +filesystems, rather than automount points. The output includes the +following information: + +@itemize @bullet +@item +the mount information, +@item +the mount point, +@item +the filesystem type, +@item +the number of references to this filesystem, +@item +the server hostname, +@item +the state of the file server, +@item +any error which has occurred. +@end itemize + +For example: + +@example +"root" truth:(pid602) root 1 localhost is up +hesiod.home /home toplvl 1 localhost is up +hesiod.vol /vol toplvl 1 localhost is up +hesiod.homes /homes toplvl 1 localhost is up +amy:/home/amy /a/amy/home/amy nfs 5 amy is up +swan:/home/swan /a/swan/home/swan nfs 0 swan is up (Permission denied) +ex:/home/ex /a/ex/home/ex nfs 0 ex is down +@end example + +When the reference count is zero the filesystem is not mounted but +the mount point and server information is still being maintained +by @i{Amd}. + +@c ---------------------------------------------------------------- +@node Amq -M-option, Amq -p option, Amq -m option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-M} option + +The @code{-M} option passes a new map entry to @i{Amd} and waits for it to +be evaluated, possibly causing a mount. For example, the following +command would cause @samp{/home/toytown} on host @samp{toytown} to be +mounted locally on @samp{/mnt/toytown}. + +@example +amq -M '/mnt/toytown type:=nfs;rfs:=/home/toytown;rhost:=toytown;fs:=$@{key@}' +@end example + +@i{Amd} applies some simple security checks before allowing this +operation. The check tests whether the incoming request is from a +privileged UDP port on the local machine. ``Permission denied'' is +returned if the check fails. + +This option is very insecure as it is vulnerable to attacks such as IP +Spoofing. In other words, it is relatively easy for an attacker who +really wants to, to make your @i{Amd} process mount any filesystem from +the Internet! Therefore, the @emph{complete} code which supports the +@code{-M} option in @i{Amd} and @i{Amq} is turned off by default. To turn +it on, you have to reconfigure am-utils with @code{configure +--enable-amq-mount}. Think twice before doing so, and use this option +only if you absolutely need to. + +A future release of @i{Amd} will include code to allow the @b{mount}(8) +command to mount automount points: + +@example +mount -t amd /vol hesiod.vol +@end example + +This will then allow @i{Amd} to be controlled from the standard system +filesystem mount list. + +@c ---------------------------------------------------------------- +@node Amq -p option, Amq -P-option, Amq -M-option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-p} option +@cindex Process ID; Amd +@cindex Amd's process ID +@cindex Amd's PID +@cindex PID; Amd + +Return the process ID of the remote or locally running @i{Amd}. Useful +when you need to send a signal to the local @i{Amd} process, and would +rather not have to search through the process table. This option is +used in the @file{ctl-amd} script. + +@c ---------------------------------------------------------------- +@node Amq -P-option, Amq -s option, Amq -p option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-P} option +@cindex Multiple Amd processes +@cindex Running multiple Amd +@cindex Debugging a new Amd configuration +@cindex RPC Program numbers; Amd + +Contact an alternate running @i{Amd} that had registered itself on a +different RPC @var{program_number} and apply all other operations to +that instance of the automounter. This is useful when you run multiple +copies of @i{Amd}, and need to manage each one separately. If not +specified, @i{Amq} will use the default program number for @i{Amd}, 300019. +For security reasons, the only alternate program numbers @i{Amd} can use +range from 300019 to 300029, inclusive. + +For example, to kill an alternate running @i{Amd}: + +@example +kill `amq -p -P 300020` +@end example + +@c ---------------------------------------------------------------- +@node Amq -s option, Amq -T option, Amq -P-option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-s} option +@cindex Global statistics +@cindex Statistics + +The @code{-s} option displays global statistics. If any other options are specified +or any filesystems named then this option is ignored. For example: + +@example +requests stale mount mount unmount +deferred fhandles ok failed failed +1054 1 487 290 7017 +@end example + +@table @samp +@item Deferred requests +are those for which an immediate reply could not be constructed. For +example, this would happen if a background mount was required. + +@item Stale filehandles +counts the number of times the kernel passes a stale filehandle to @i{Amd}. +Large numbers indicate problems. + +@item Mount ok +counts the number of automounts which were successful. + +@item Mount failed +counts the number of automounts which failed. + +@item Unmount failed +counts the number of times a filesystem could not be unmounted. Very +large numbers here indicate that the time between unmount attempts +should be increased. +@end table + +@c ---------------------------------------------------------------- +@node Amq -T option, Amq -U-option, Amq -s option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-T} option +@cindex Forcing Amq to use a TCP transport +@cindex TCP; using with Amq + +The @code{-T} option causes the @i{Amq} to contact @i{Amd} using the TCP +transport only (connection oriented). Normally, @i{Amq} will use TCP +first, and if that failed, will try UDP. + +@c ---------------------------------------------------------------- +@node Amq -U-option, Amq -u option, Amq -T option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-U} option +@cindex Forcing Amq to use a UDP transport +@cindex UDP; using with Amq + +The @code{-U} option causes the @i{Amq} to contact @i{Amd} using the UDP +transport only (connectionless). Normally, @i{Amq} will use TCP first, +and if that failed, will try UDP. + +@c ---------------------------------------------------------------- +@node Amq -u option, Amq -v option, Amq -U-option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-u} option +@cindex Forcing filesystem to time out +@cindex Unmounting a filesystem + +The @code{-u} option causes the time-to-live interval of the named mount +points to be expired, thus causing an unmount attempt. This is the only +safe way to unmount an automounted filesystem. It is not possible to +unmount a filesystem which has been mounted with the @samp{nounmount} +flag. + +@c The @code{-H} option informs @i{Amd} that the specified mount point has hung - +@c as if its keepalive timer had expired. + +@c ---------------------------------------------------------------- +@node Amq -v option, Other Amq options, Amq -u option, Controlling Amd +@comment node-name, next, previous, up +@subsection @i{Amq} @code{-v} option +@cindex Version information at run-time + +The @code{-v} option displays the version of @i{Amd} in a similar way to +@i{Amd}'s @code{-v} option. + +@c ---------------------------------------------------------------- +@node Other Amq options, , Amq -v option, Controlling Amd +@comment node-name, next, previous, up +@subsection Other @i{Amq} options +@cindex Logging options via Amq +@cindex Debugging options via Amq + +Two other operations are implemented. These modify the state of @i{Amd} +as a whole, rather than any particular filesystem. The @code{-x} and +@code{-D} options have exactly the same effect as @i{Amd}'s corresponding +command line options. + +When @i{Amd} receives a @code{-x} flag it limits the log options being +modified to those which were not enabled at startup. This prevents a +user turning @emph{off} any logging option which was specified at +startup, though any which have been turned on since then can still be +turned off. The @code{-D} option has a similar behavior. + +@c ################################################################ +@node FSinfo, Hlfsd, Run-time Administration, Top +@comment node-name, next, previous, up +@chapter FSinfo +@cindex FSinfo +@cindex Filesystem info package + +XXX: this chapter should be reviewed by someone knowledgeable with +fsinfo. + +@menu +* FSinfo Overview:: Introduction to FSinfo. +* Using FSinfo:: Basic concepts. +* FSinfo Grammar:: Language syntax, semantics and examples. +* FSinfo host definitions:: Defining a new host. +* FSinfo host attributes:: Definable host attributes. +* FSinfo filesystems:: Defining locally attached filesystems. +* FSinfo static mounts:: Defining additional static mounts. +* FSinfo automount definitions:: +* FSinfo Command Line Options:: +* FSinfo errors:: +@end menu + +@node FSinfo Overview, Using FSinfo, FSinfo, FSinfo +@comment node-name, next, previous, up +@section @i{FSinfo} overview +@cindex FSinfo overview + +@i{FSinfo} is a filesystem management tool. It has been designed to +work with @i{Amd} to help system administrators keep track of the ever +increasing filesystem namespace under their control. + +The purpose of @i{FSinfo} is to generate all the important standard +filesystem data files from a single set of input data. Starting with a +single data source guarantees that all the generated files are +self-consistent. One of the possible output data formats is a set of +@i{Amd} maps which can be used amongst the set of hosts described in the +input data. + +@i{FSinfo} implements a declarative language. This language is +specifically designed for describing filesystem namespace and physical +layouts. The basic declaration defines a mounted filesystem including +its device name, mount point, and all the volumes and access +permissions. @i{FSinfo} reads this information and builds an internal +map of the entire network of hosts. Using this map, many different data +formats can be produced including @file{/etc/fstab}, +@file{/etc/exports}, @i{Amd} mount maps and +@file{/etc/bootparams}.@refill + +@node Using FSinfo, FSinfo Grammar, FSinfo Overview, FSinfo +@comment node-name, next, previous, up +@section Using @i{FSinfo} +@cindex Using FSinfo + +The basic strategy when using @i{FSinfo} is to gather all the +information about all disks on all machines into one set of +declarations. For each machine being managed, the following data is +required: + +@itemize @bullet +@item +Hostname +@item +List of all filesystems and, optionally, their mount points. +@item +Names of volumes stored on each filesystem. +@item +NFS export information for each volume. +@item +The list of static filesystem mounts. +@end itemize + +The following information can also be entered into the same +configuration files so that all data can be kept in one place. + +@itemize @bullet +@item +List of network interfaces +@item +IP address of each interface +@item +Hardware address of each interface +@item +Dumpset to which each filesystem belongs +@item +and more @dots{} +@end itemize + +To generate @i{Amd} mount maps, the automount tree must also be defined +(@pxref{FSinfo automount definitions}). This will have been designed at +the time the volume names were allocated. Some volume names will not be +automounted, so @i{FSinfo} needs an explicit list of which volumes +should be automounted.@refill + +Hostnames are required at several places in the @i{FSinfo} language. It +is important to stick to either fully qualified names or unqualified +names. Using a mixture of the two will inevitably result in confusion. + +Sometimes volumes need to be referenced which are not defined in the set +of hosts being managed with @i{FSinfo}. The required action is to add a +dummy set of definitions for the host and volume names required. Since +the files generated for those particular hosts will not be used on them, +the exact values used is not critical. + +@node FSinfo Grammar, FSinfo host definitions, Using FSinfo, FSinfo +@comment node-name, next, previous, up +@section @i{FSinfo} grammar +@cindex FSinfo grammar +@cindex Grammar, FSinfo + +@i{FSinfo} has a relatively simple grammar. Distinct syntactic +constructs exist for each of the different types of data, though they +share a common flavor. Several conventions are used in the grammar +fragments below. + +The notation, @i{list(}@t{xxx}@i{)}, indicates a list of zero or more +@t{xxx}'s. The notation, @i{opt(}@t{xxx}@i{)}, indicates zero or one +@t{xxx}. Items in double quotes, @i{eg} @t{"host"}, represent input +tokens. Items in angle brackets, @i{eg} @var{}, represent +strings in the input. Strings need not be in double quotes, except to +differentiate them from reserved words. Quoted strings may include the +usual set of C ``@t{\}'' escape sequences with one exception: a +backslash-newline-whitespace sequence is squashed into a single space +character. To defeat this feature, put a further backslash at the start +of the second line. + +At the outermost level of the grammar, the input consists of a +sequence of host and automount declarations. These declarations are +all parsed before they are analyzed. This means they can appear in +any order and cyclic host references are possible. + +@example +fsinfo : @i{list(}fsinfo_attr@i{)} ; + +fsinfo_attr : host | automount ; +@end example + +@menu +* FSinfo host definitions:: +* FSinfo automount definitions:: +@end menu + +@node FSinfo host definitions, FSinfo host attributes, FSinfo Grammar, FSinfo +@comment node-name, next, previous, up +@section @i{FSinfo} host definitions +@cindex FSinfo host definitions +@cindex Defining a host, FSinfo + +A host declaration consists of three parts: a set of machine attribute +data, a list of filesystems physically attached to the machine, and a +list of additional statically mounted filesystems. + +@example +host : "host" host_data @i{list(}filesystem@i{@i{)}} @i{list(}mount@i{@i{)}} ; +@end example + +Each host must be declared in this way exactly once. Such things as the +hardware address, the architecture and operating system types and the +cluster name are all specified within the @dfn{host data}. + +All the disks the machine has should then be described in the @dfn{list +of filesystems}. When describing disks, you can specify what +@dfn{volname} the disk/partition should have and all such entries are +built up into a dictionary which can then be used for building the +automounter maps. + +The @dfn{list of mounts} specifies all the filesystems that should be +statically mounted on the machine. + +@menu +* FSinfo host attributes:: +* FSinfo filesystems:: +* FSinfo static mounts:: +@end menu + +@node FSinfo host attributes, FSinfo filesystems, FSinfo host definitions , FSinfo host definitions +@comment node-name, next, previous, up +@section @i{FSinfo} host attributes +@cindex FSinfo host attributes +@cindex Defining host attributes, FSinfo + +The host data, @dfn{host_data}, always includes the @dfn{hostname}. In +addition, several other host attributes can be given. + +@example +host_data : @var{} + | "@{" @i{list(}host_attrs@i{)} "@}" @var{} + ; + +host_attrs : host_attr "=" @var{} + | netif + ; + +host_attr : "config" + | "arch" + | "os" + | "cluster" + ; +@end example + +The @dfn{hostname} is, typically, the fully qualified hostname of the +machine. + +Examples: + +@example +host dylan.doc.ic.ac.uk + +host @{ + os = hpux + arch = hp300 +@} dougal.doc.ic.ac.uk +@end example + +The options that can be given as host attributes are shown below. + +@menu +* netif Option: FSinfo host netif: +* config Option: FSinfo host config: +* arch Option: FSinfo host arch: +* os Option: FSinfo host os: +* cluster Option: FSinfo host cluster: +@end menu + +@node FSinfo host netif, FSinfo host config, , FSinfo host attributes +@comment node-name, next, previous, up +@subsection netif Option + +This defines the set of network interfaces configured on the machine. +The interface attributes collected by @i{FSinfo} are the IP address, +subnet mask and hardware address. Multiple interfaces may be defined +for hosts with several interfaces by an entry for each interface. The +values given are sanity checked, but are currently unused for anything +else. + +@example +netif : "netif" @var{} "@{" @i{list(}netif_attrs@i{)} "@}" ; + +netif_attrs : netif_attr "=" @var{} ; + +netif_attr : "inaddr" | "netmask" | "hwaddr" ; +@end example + +Examples: + +@example +netif ie0 @{ + inaddr = 129.31.81.37 + netmask = 0xfffffe00 + hwaddr = "08:00:20:01:a6:a5" +@} + +netif ec0 @{ @} +@end example + +@node FSinfo host config, FSinfo host arch, FSinfo host netif, FSinfo host attributes +@comment node-name, next, previous, up +@subsection config Option +@cindex FSinfo config host attribute +@cindex config, FSinfo host attribute + +This option allows you to specify configuration variables for the +startup scripts (@file{rc} scripts). A simple string should immediately +follow the keyword. + +Example: + +@example +config "NFS_SERVER=true" +config "ZEPHYR=true" +@end example + +This option is currently unsupported. + +@node FSinfo host arch, FSinfo host os, FSinfo host config, FSinfo host attributes +@comment node-name, next, previous, up +@subsection arch Option +@cindex FSinfo arch host attribute +@cindex arch, FSinfo host attribute + +This defines the architecture of the machine. For example: + +@example +arch = hp300 +@end example + +This is intended to be of use when building architecture specific +mountmaps, however, the option is currently unsupported. + +@node FSinfo host os, FSinfo host cluster, FSinfo host arch, FSinfo host attributes +@comment node-name, next, previous, up +@subsection os Option +@cindex FSinfo os host attribute +@cindex os, FSinfo host attribute + +This defines the operating system type of the host. For example: + +@example +os = hpux +@end example + +This information is used when creating the @file{fstab} files, for +example in choosing which format to use for the @file{fstab} entries +within the file. + +@node FSinfo host cluster, , FSinfo host os, FSinfo host attributes +@comment node-name, next, previous, up +@subsection cluster Option +@cindex FSinfo cluster host attribute +@cindex cluster, FSinfo host attribute + +This is used for specifying in which cluster the machine belongs. For +example: + +@example +cluster = "theory" +@end example + +The cluster is intended to be used when generating the automount maps, +although it is currently unsupported. + +@node FSinfo filesystems, FSinfo static mounts, FSinfo host attributes, FSinfo host definitions +@comment node-name, next, previous, up +@section @i{FSinfo} filesystems +@cindex FSinfo filesystems + +The list of physically attached filesystems follows the machine +attributes. These should define all the filesystems available from this +machine, whether exported or not. In addition to the device name, +filesystems have several attributes, such as filesystem type, mount +options, and @samp{fsck} pass number which are needed to generate +@file{fstab} entries. + +@example +filesystem : "fs" @var{} "@{" @i{list(}fs_data@i{)} "@}" ; + +fs_data : fs_data_attr "=" @var{} + | mount + ; + +fs_data_attr + : "fstype" | "opts" | "passno" + | "freq" | "dumpset" | "log" + ; +@end example + +Here, @var{} is the device name of the disk (for example, +@file{/dev/dsk/2s0}). The device name is used for building the mount +maps and for the @file{fstab} file. The attributes that can be +specified are shown in the following section. + +The @i{FSinfo} configuration file for @code{dylan.doc.ic.ac.uk} is listed below. + +@example +host dylan.doc.ic.ac.uk + +fs /dev/dsk/0s0 @{ + fstype = swap +@} + +fs /dev/dsk/0s0 @{ + fstype = hfs + opts = rw,noquota,grpid + passno = 0; + freq = 1; + mount / @{ @} +@} + +fs /dev/dsk/1s0 @{ + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount /usr @{ + local @{ + exportfs "dougal eden dylan zebedee brian" + volname /nfs/hp300/local + @} + @} +@} + +fs /dev/dsk/2s0 @{ + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default @{ + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk2 + @} +@} + +fs /dev/dsk/3s0 @{ + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default @{ + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk3 + @} +@} + +fs /dev/dsk/5s0 @{ + fstype = hfs + opts = defaults + passno = 1; + freq = 1; + mount default @{ + exportfs "toytown_clients hangers_on" + volname /home/dylan/dk5 + @} +@} +@end example + +@menu +* fstype Option: FSinfo filesystems fstype: +* opts Option: FSinfo filesystems opts: +* passno Option: FSinfo filesystems passno: +* freq Option: FSinfo filesystems freq: +* mount Option: FSinfo filesystems mount: +* dumpset Option: FSinfo filesystems dumpset: +* log Option: FSinfo filesystems log: +@end menu + +@node FSinfo filesystems fstype, FSinfo filesystems opts, , FSinfo filesystems +@comment node-name, next, previous, up +@subsection fstype Option +@cindex FSinfo fstype filesystems option +@cindex fstype, FSinfo filesystems option +@cindex export, FSinfo special fstype + +This specifies the type of filesystem being declared and will be placed +into the @file{fstab} file as is. The value of this option will be +handed to @code{mount} as the filesystem type---it should have such +values as @code{4.2}, @code{nfs} or @code{swap}. The value is not +examined for correctness. + +There is one special case. If the filesystem type is specified as +@samp{export} then the filesystem information will not be added to the +host's @file{fstab} information, but it will still be visible on the +network. This is useful for defining hosts which contain referenced +volumes but which are not under full control of @i{FSinfo}. + +Example: + +@example +fstype = swap +@end example + +@node FSinfo filesystems opts, FSinfo filesystems passno, FSinfo filesystems fstype, FSinfo filesystems +@comment node-name, next, previous, up +@subsection opts Option +@cindex FSinfo opts filesystems option +@cindex opts, FSinfo filesystems option + +This defines any options that should be given to @b{mount}(8) in the +@file{fstab} file. For example: + +@example +opts = rw,nosuid,grpid +@end example + +@node FSinfo filesystems passno, FSinfo filesystems freq, FSinfo filesystems opts, FSinfo filesystems +@comment node-name, next, previous, up +@subsection passno Option +@cindex FSinfo passno filesystems option +@cindex passno, FSinfo filesystems option + +This defines the @b{fsck}(8) pass number in which to check the +filesystem. This value will be placed into the @file{fstab} file. + +Example: + +@example +passno = 1 +@end example + +@node FSinfo filesystems freq, FSinfo filesystems mount, FSinfo filesystems passno, FSinfo filesystems +@comment node-name, next, previous, up +@subsection freq Option +@cindex FSinfo freq filesystems option +@cindex freq, FSinfo filesystems option + +This defines the interval (in days) between dumps. The value is placed +as is into the @file{fstab} file. + +Example: + +@example +freq = 3 +@end example + +@node FSinfo filesystems mount, FSinfo filesystems dumpset, FSinfo filesystems freq, FSinfo filesystems +@comment node-name, next, previous, up +@subsection mount Option +@cindex FSinfo mount filesystems option +@cindex mount, FSinfo filesystems option +@cindex exportfs, FSinfo mount option +@cindex volname, FSinfo mount option +@cindex sel, FSinfo mount option + +This defines the mountpoint at which to place the filesystem. If the +mountpoint of the filesystem is specified as @code{default}, then the +filesystem will be mounted in the automounter's tree under its volume +name and the mount will automatically be inherited by the automounter. + +Following the mountpoint, namespace information for the filesystem may +be described. The options that can be given here are @code{exportfs}, +@code{volname} and @code{sel}. + +The format is: + +@example +mount : "mount" vol_tree ; + +vol_tree : @i{list(}vol_tree_attr@i{)} ; + +vol_tree_attr + : @var{} "@{" @i{list(}vol_tree_info@i{)} vol_tree "@}" ; + +vol_tree_info + : "exportfs" @var{} + | "volname" @var{} + | "sel" @var{} + ; +@end example + +Example: + +@example +mount default @{ + exportfs "dylan dougal florence zebedee" + volname /vol/andrew +@} +@end example + +In the above example, the filesystem currently being declared will have +an entry placed into the @file{exports} file allowing the filesystem to +be exported to the machines @code{dylan}, @code{dougal}, @code{florence} +and @code{zebedee}. The volume name by which the filesystem will be +referred to remotely, is @file{/vol/andrew}. By declaring the +mountpoint to be @code{default}, the filesystem will be mounted on the +local machine in the automounter tree, where @i{Amd} will automatically +inherit the mount as @file{/vol/andrew}.@refill + +@table @samp +@item exportfs +a string defining which machines the filesystem may be exported to. +This is copied, as is, into the @file{exports} file---no sanity checking +is performed on this string.@refill + +@item volname +a string which declares the remote name by which to reference the +filesystem. The string is entered into a dictionary and allows you to +refer to this filesystem in other places by this volume name.@refill + +@item sel +a string which is placed into the automounter maps as a selector for the +filesystem.@refill + +@end table + +@node FSinfo filesystems dumpset, FSinfo filesystems log, FSinfo filesystems mount, FSinfo filesystems +@comment node-name, next, previous, up +@subsection dumpset Option +@cindex FSinfo dumpset filesystems option +@cindex dumpset, FSinfo filesystems option + +This provides support for Imperial College's local file backup tools and +is not documented further here. + +@node FSinfo filesystems log, , FSinfo filesystems dumpset, FSinfo filesystems +@comment node-name, next, previous, up +@subsection log Option +@cindex FSinfo log filesystems option +@cindex log, FSinfo filesystems option + +Specifies the log device for the current filesystem. This is ignored if +not required by the particular filesystem type. + +@node FSinfo static mounts, FSinfo automount definitions , FSinfo filesystems, FSinfo host definitions +@comment node-name, next, previous, up +@section @i{FSinfo} static mounts +@cindex FSinfo static mounts +@cindex Statically mounts filesystems, FSinfo + +Each host may also have a number of statically mounted filesystems. For +example, the host may be a diskless workstation in which case it will +have no @code{fs} declarations. In this case the @code{mount} +declaration is used to determine from where its filesystems will be +mounted. In addition to being added to the @file{fstab} file, this +information can also be used to generate a suitable @file{bootparams} +file.@refill + +@example +mount : "mount" @var{} @i{list(}localinfo@i{)} ; + +localinfo : localinfo_attr @var{} ; + +localinfo_attr + : "as" + | "from" + | "fstype" + | "opts" + ; +@end example + +The filesystem specified to be mounted will be searched for in the +dictionary of volume names built when scanning the list of hosts' +definitions. + +The attributes have the following semantics: +@table @samp +@item from @var{machine} +mount the filesystem from the machine with the hostname of +@dfn{machine}.@refill + +@item as @var{mountpoint} +mount the filesystem locally as the name given, in case this is +different from the advertised volume name of the filesystem. + +@item opts @var{options} +native @b{mount}(8) options. + +@item fstype @var{type} +type of filesystem to be mounted. +@end table + +An example: + +@example +mount /export/exec/hp300/local as /usr/local +@end example + +If the mountpoint specified is either @file{/} or @file{swap}, the +machine will be considered to be booting off the net and this will be +noted for use in generating a @file{bootparams} file for the host which +owns the filesystems. + +@node FSinfo automount definitions, FSinfo Command Line Options, FSinfo static mounts, FSinfo +@comment node-name, next, previous, up +@section Defining an @i{Amd} Mount Map in @i{FSinfo} +@cindex FSinfo automount definitions +@cindex Defining an Amd mount map, FSinfo + +The maps used by @i{Amd} can be constructed from @i{FSinfo} by defining +all the automount trees. @i{FSinfo} takes all the definitions found and +builds one map for each top level tree. + +The automount tree is usually defined last. A single automount +configuration will usually apply to an entire management domain. One +@code{automount} declaration is needed for each @i{Amd} automount point. +@i{FSinfo} determines whether the automount point is @dfn{direct} +(@pxref{Direct Automount Filesystem}) or @dfn{indirect} +(@pxref{Top-level Filesystem}). Direct automount points are +distinguished by the fact that there is no underlying +@dfn{automount_tree}.@refill + +@example +automount : "automount" @i{opt(}auto_opts@i{)} automount_tree ; + +auto_opts : "opts" @var{} ; + +automount_tree + : @i{list(}automount_attr@i{)} + ; + +automount_attr + : @var{} "=" @var{} + | @var{} "->" @var{} + | @var{} "@{" automount_tree "@}" + ; +@end example + +If @var{} is given, then it is the string to be placed in +the maps for @i{Amd} for the @code{opts} option. + +A @dfn{map} is typically a tree of filesystems, for example @file{home} +normally contains a tree of filesystems representing other machines in +the network. + +A map can either be given as a name representing an already defined +volume name, or it can be a tree. A tree is represented by placing +braces after the name. For example, to define a tree @file{/vol}, the +following map would be defined: + +@example +automount /vol @{ @} +@end example + +Within a tree, the only items that can appear are more maps. +For example: + +@example +automount /vol @{ + andrew @{ @} + X11 @{ @} +@} +@end example + +In this case, @i{FSinfo} will look for volumes named @file{/vol/andrew} +and @file{/vol/X11} and a map entry will be generated for each. If the +volumes are defined more than once, then @i{FSinfo} will generate +a series of alternate entries for them in the maps.@refill + +Instead of a tree, either a link (@var{name} @code{->} +@var{destination}) or a reference can be specified (@var{name} @code{=} +@var{destination}). A link creates a symbolic link to the string +specified, without further processing the entry. A reference will +examine the destination filesystem and optimize the reference. For +example, to create an entry for @code{njw} in the @file{/homes} map, +either of the two forms can be used:@refill + +@example +automount /homes @{ + njw -> /home/dylan/njw +@} +@end example + +or + +@example +automount /homes @{ + njw = /home/dylan/njw +@} +@end example + +In the first example, when @file{/homes/njw} is referenced from @i{Amd}, +a link will be created leading to @file{/home/dylan/njw} and the +automounter will be referenced a second time to resolve this filename. +The map entry would be: + +@example +njw type:=link;fs:=/home/dylan/njw +@end example + +In the second example, the destination directory is analyzed and found +to be in the filesystem @file{/home/dylan} which has previously been +defined in the maps. Hence the map entry will look like: + +@example +njw rhost:=dylan;rfs:=/home/dylan;sublink:=njw +@end example + +Creating only one symbolic link, and one access to @i{Amd}. + +@node FSinfo Command Line Options, FSinfo errors, FSinfo automount definitions, FSinfo +@comment node-name, next, previous, up +@section @i{FSinfo} Command Line Options +@cindex FSinfo command line options +@cindex Command line options, FSinfo + +@i{FSinfo} is started from the command line by using the command: + +@example +fsinfo [@i{options}] @i{files} ... +@end example + +The input to @i{FSinfo} is a single set of definitions of machines and +automount maps. If multiple files are given on the command-line, then +the files are concatenated together to form the input source. The files +are passed individually through the C pre-processor before being parsed. + +Several options define a prefix for the name of an output file. If the +prefix is not specified no output of that type is produced. The suffix +used will correspond either to the hostname to which a file belongs, or +to the type of output if only one file is produced. Dumpsets and the +@file{bootparams} file are in the latter class. To put the output into +a subdirectory simply put a @file{/} at the end of the prefix, making +sure that the directory has already been made before running +@i{Fsinfo}. + +@menu +* -a FSinfo Option:: Amd automount directory: +* -b FSinfo Option:: Prefix for bootparams files. +* -d FSinfo Option:: Prefix for dumpset data files. +* -e FSinfo Option:: Prefix for exports files. +* -f FSinfo Option:: Prefix for fstab files. +* -h FSinfo Option:: Local hostname. +* -m FSinfo Option:: Prefix for automount maps. +* -q FSinfo Option:: Ultra quiet mode. +* -v FSinfo Option:: Verbose mode. +* -I FSinfo Option:: Define new #include directory. +* -D-FSinfo Option:: Define macro. +* -U FSinfo Option:: Undefine macro. +@end menu + +@node -a FSinfo Option, -b FSinfo Option, FSinfo Command Line Options, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-a} @var{autodir} + +Specifies the directory name in which to place the automounter's +mountpoints. This defaults to @file{/a}. Some sites have the autodir set +to be @file{/amd}, and this would be achieved by: + +@example +fsinfo -a /amd ... +@end example + +@node -b FSinfo Option, -d FSinfo Option, -a FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-b} @var{bootparams} +@cindex bootparams, FSinfo prefix + +This specifies the prefix for the @file{bootparams} filename. If it is +not given, then the file will not be generated. The @file{bootparams} +file will be constructed for the destination machine and will be placed +into a file named @file{bootparams} and prefixed by this string. The +file generated contains a list of entries describing each diskless +client that can boot from the destination machine. + +As an example, to create a @file{bootparams} file in the directory +@file{generic}, the following would be used: + +@example +fsinfo -b generic/ ... +@end example + +@node -d FSinfo Option, -e FSinfo Option, -b FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-d} @var{dumpsets} +@cindex dumpset, FSinfo prefix + +This specifies the prefix for the @file{dumpsets} file. If it is not +specified, then the file will not be generated. The file will be for +the destination machine and will be placed into a filename +@file{dumpsets}, prefixed by this string. The @file{dumpsets} file is +for use by Imperial College's local backup system. + +For example, to create a @file{dumpsets} file in the directory @file{generic}, +then you would use the following: + +@example +fsinfo -d generic/ ... +@end example + +@node -e FSinfo Option, -f FSinfo Option, -d FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-e} @var{exportfs} +@cindex exports, FSinfo prefix + +Defines the prefix for the @file{exports} files. If it is not given, +then the file will not be generated. For each machine defined in the +configuration files as having disks, an @file{exports} file is +constructed and given a filename determined by the name of the machine, +prefixed with this string. If a machine is defined as diskless, then no +@file{exports} file will be created for it. The files contain entries +for directories on the machine that may be exported to clients. + +Example: To create the @file{exports} files for each diskfull machine +and place them into the directory @file{exports}: + +@example +fsinfo -e exports/ ... +@end example + +@node -f FSinfo Option, -h FSinfo Option, -e FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-f} @var{fstab} +@cindex fstab, FSinfo prefix + +This defines the prefix for the @file{fstab} files. The files will only +be created if this prefix is defined. For each machine defined in the +configuration files, a @file{fstab} file is created with the filename +determined by prefixing this string with the name of the machine. These +files contain entries for filesystems and partitions to mount at boot +time. + +Example, to create the files in the directory @file{fstabs}: + +@example +fsinfo -f fstabs/ ... +@end example + +@node -h FSinfo Option, -m FSinfo Option, -f FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-h} @var{hostname} +@cindex hostname, FSinfo command line option + +Defines the hostname of the destination machine to process for. If this +is not specified, it defaults to the local machine name, as returned by +@b{gethostname}(2). + +Example: + +@example +fsinfo -h dylan.doc.ic.ac.uk ... +@end example + +@node -m FSinfo Option, -q FSinfo Option, -h FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-m} @var{mount-maps} +@cindex maps, FSinfo command line option + +Defines the prefix for the automounter files. The maps will only be +produced if this prefix is defined. The mount maps suitable for the +network defined by the configuration files will be placed into files +with names calculated by prefixing this string to the name of each map. + +For example, to create the automounter maps and place them in the +directory @file{automaps}: + +@example +fsinfo -m automaps/ ... +@end example + +@node -q FSinfo Option, -v FSinfo Option, -m FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-q} +@cindex quiet, FSinfo command line option + +Selects quiet mode. @i{FSinfo} suppress the ``running commentary'' and +only outputs any error messages which are generated. + +@node -v FSinfo Option, -D-FSinfo Option, -q FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-v} +@cindex verbose, FSinfo command line option + +Selects verbose mode. When this is activated, the program will display +more messages, and display all the information discovered when +performing the semantic analysis phase. Each verbose message is output +to @file{stdout} on a line starting with a @samp{#} character. + +@node -D-FSinfo Option, -I FSinfo Option, -v FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-D} @var{name[=defn]} + +Defines a symbol @dfn{name} for the preprocessor when reading the +configuration files. Equivalent to @code{#define} directive. + +@node -I FSinfo Option, -U FSinfo Option, -D-FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-I} @var{directory} + +This option is passed into the preprocessor for the configuration files. +It specifies directories in which to find include files + +@node -U FSinfo Option, , -I FSinfo Option, FSinfo Command Line Options +@comment node-name, next, previous, up +@subsection @code{-U} @var{name} + +Removes any initial definition of the symbol @dfn{name}. Inverse of the +@code{-D} option. + +@node FSinfo errors, , FSinfo Command Line Options, FSinfo +@comment node-name, next, previous, up +@section Errors produced by @i{FSinfo} +@cindex FSinfo error messages + +The following table documents the errors and warnings which @i{FSinfo} may produce. + +@table @t + +@item " expected +Occurs if an unescaped newline is found in a quoted string. + +@item ambiguous mount: @var{volume} is a replicated filesystem +If several filesystems are declared as having the same volume name, they +will be considered replicated filesystems. To mount a replicated +filesystem statically, a specific host will need to be named, to say +which particular copy to try and mount, else this error will +result. + +@item can't open @var{filename} for writing +Occurs if any errors are encountered when opening an output file. + +@item cannot determine localname since volname @var{volume} is not uniquely defined +If a volume is replicated and an attempt is made to mount the filesystem +statically without specifying a local mountpoint, @i{FSinfo} cannot +calculate a mountpoint, as the desired pathname would be +ambiguous. + +@item @var{device} has duplicate exportfs data +Produced if the @samp{exportfs} option is used multiple times within the +same branch of a filesystem definition. For example, if you attempt to +set the @samp{exportfs} data at different levels of the mountpoint +directory tree. + +@item dump frequency for @var{host}:@var{device} is non-zero +Occurs if @var{device} has its @samp{fstype} declared to be @samp{swap} +or @samp{export} and the @samp{dump} option is set to a value greater +than zero. Swap devices should not be dumped. + +@item duplicate host @var{hostname}! +If a host has more than one definition. + +@item end of file within comment +A comment was unterminated before the end of one of the configuration +files. + +@item @var{filename}: cannot open for reading +If a file specified on the command line as containing configuration data +could not be opened. + +@item @var{filesystem} has a volname but no exportfs data +Occurs when a volume name is declared for a file system, but the string +specifying what machines the filesystem can be exported to is +missing. + +@item fs field "@var{field-name}" already set +Occurs when multiple definitions are given for one of the attributes of a +host's filesystem. + +@item host field "@var{field-name}" already set +If duplicate definitions are given for any of the fields with a host +definition. + +@item @var{host}:@var{device} has more than one mount point +Occurs if the mount option for a host's filesystem specifies multiple +trees at which to place the mountpoint. + +@item @var{host}:@var{device} has no mount point +Occurs if the @samp{mount} option is not specified for a host's +filesystem. + +@item @var{host}:@var{device} needs field "@var{field-name}" +Occurs when a filesystem is missing a required field. @var{field-name} could +be one of @samp{fstype}, @samp{opts}, @samp{passno} or +@samp{mount}. + +@item @var{host}:mount field specified for swap partition +Occurs if a mountpoint is given for a filesystem whose type is declared +to be @samp{swap}. + +@item malformed IP dotted quad: @var{address} +If the Internet address of an interface is incorrectly specified. An +Internet address definition is handled to @b{inet_addr}(3N) to see if it +can cope. If not, then this message will be displayed. + +@item malformed netmask: @var{netmask} +If the netmask cannot be decoded as though it were a hexadecimal number, +then this message will be displayed. It will typically be caused by +incorrect characters in the @var{netmask} value. + +@item mount field "@var{field-name}" already set +Occurs when a static mount has multiple definitions of the same field. + +@item mount tree field "@var{field-name}" already set +Occurs when the @var{field-name} is defined more than once during the +definition of a filesystems mountpoint. + +@item netif field @var{field-name} already set +Occurs if you attempt to define an attribute of an interface more than +once. + +@item network booting requires both root and swap areas +Occurs if a machine has mount declarations for either the root partition +or the swap area, but not both. You cannot define a machine to only +partially boot via the network. + +@item no disk mounts on @var{hostname} +If there are no static mounts, nor local disk mounts specified for a +machine, this message will be displayed. + +@item no volname given for @var{host}:@var{device} +Occurs when a filesystem is defined to be mounted on @file{default}, but +no volume name is given for the file system, then the mountpoint cannot +be determined. + +@item not allowed '/' in a directory name +Occurs when a pathname with multiple directory elements is specified as +the name for an automounter tree. A tree should only have one name at +each level. + +@item pass number for @var{host}:@var{device} is non-zero +Occurs if @var{device} has its @samp{fstype} declared to be @samp{swap} +or @samp{export} and the @b{fsck}(8) pass number is set. Swap devices should not be +fsck'd. @xref{FSinfo filesystems fstype}. + +@item sub-directory @var{directory} of @var{directory-tree} starts with '/' +Within the filesystem specification for a host, if an element +@var{directory} of the mountpoint begins with a @samp{/} and it is not +the start of the tree. + +@item sub-directory of @var{directory-tree} is named "default" +@samp{default} is a keyword used to specify if a mountpoint should be +automatically calculated by @i{FSinfo}. If you attempt to specify a +directory name as this, it will use the filename of @file{default} but +will produce this warning. + +@item unknown \ sequence +Occurs if an unknown escape sequence is found inside a string. Within a +string, you can give the standard C escape sequences for strings, such +as newlines and tab characters. + +@item unknown directory attribute +If an unknown keyword is found while reading the definition of a host's +filesystem mount option. + +@item unknown filesystem attribute +Occurs if an unrecognized keyword is used when defining a host's +filesystems. + +@item unknown host attribute +Occurs if an unrecognized keyword is used when defining a host. + +@item unknown mount attribute +Occurs if an unrecognized keyword is found while parsing the list of +static mounts. + +@item unknown volname @var{volume} automounted @i{[} on @i{name} @i{]} +Occurs if @var{volume} is used in a definition of an automount map but the volume +name has not been declared during the host filesystem definitions. + +@item volname @var{volume} is unknown +Occurs if an attempt is made to mount or reference a volume name which +has not been declared during the host filesystem definitions. + +@item volname @var{volume} not exported from @var{machine} +Occurs if you attempt to mount the volume @var{volume} from a machine +which has not declared itself to have such a filesystem +available. + +@end table + +@c ################################################################ +@node Hlfsd, Assorted Tools, FSinfo, Top +@comment node-name, next, previous, up +@chapter Hlfsd +@pindex Hlfsd +@cindex Home-Link Filesystem + +@i{Hlfsd} is a daemon which implements a filesystem containing a +symbolic link to subdirectory within a user's home directory, depending +on the user which accessed that link. It was primarily designed to +redirect incoming mail to users' home directories, so that it can be read +from anywhere. It was designed and implemented by +@email{ezk@@cs.columbia.edu,Erez Zadok} and +@email{dupuy@@cs.columbia.edu,Alexander Dupuy}, at the +@uref{http://www.cs.columbia.edu/,Computer Science Department} of +@uref{http://www.columbia.edu/,Columbia University}. A +@uref{http://www.cs.columbia.edu/~ezk/research/hlfsd/hlfsd.html,paper} +on @i{Hlfsd} was presented at the Usenix LISA VII conference in 1993. + +@i{Hlfsd} operates by mounting itself as an NFS server for the directory +containing @i{linkname}, which defaults to @file{/hlfs/home}. Lookups +within that directory are handled by @i{Hlfsd}, which uses the +password map to determine how to resolve the lookup. The directory will +be created if it doesn't already exist. The symbolic link will be to +the accessing user's home directory, with @i{subdir} appended to it. If +not specified, @i{subdir} defaults to @file{.hlfsdir}. This directory +will also be created if it does not already exist. + +A @samp{SIGTERM} sent to @i{Hlfsd} will cause it to shutdown. A @samp{SIGHUP} will +flush the internal caches, and reload the password map. It will also +close and reopen the log file, to enable the original log file to be +removed or rotated. A @samp{SIGUSR1} will cause it to dump its internal table +of user IDs and home directories to the file @file{/tmp/hlfsddump}. + +@menu +* Introduction to Hlfsd:: +* Background to Mail Delivery:: +* Using Hlfsd:: +@end menu + +@c ================================================================ +@node Introduction to Hlfsd, Background to Mail Delivery, Hlfsd, Hlfsd +@comment node-name, next, previous, up +@section Introduction to Hlfsd +@cindex Introduction to Hlfsd +@cindex Hlfsd; introduction + +Electronic mail has become one of the major applications for many +computer networks, and use of this service is expected to increase over +time, as networks proliferate and become faster. Providing a convenient +environment for users to read, compose, and send electronic mail has +become a requirement for systems administrators (SAs). + +Widely used methods for handling mail usually require users to be logged +into a designated ``home'' machine, where their mailbox files reside. +Only on that one machine can they read newly arrived mail. Since users +have to be logged into that system to read their mail, they often find +it convenient to run all of their other processes on that system as +well, including memory and CPU-intensive jobs. For example, in our +department, we have allocated and configured several multi-processor +servers to handle such demanding CPU/memory applications, but these were +underutilized, in large part due to the inconvenience of not being able +to read mail on those machines. (No home directories were located on +these designated CPU-servers, since we did not want NFS service for +users' home directories to have to compete with CPU-intensive jobs. At the +same time, we discouraged users from running demanding applications on +their home machines.) + +Many different solutions have been proposed to allow users to read their +mail on any host. However, all of these solutions fail in one or more +of several ways: + +@itemize @bullet + +@item +they introduce new single points of failure + +@item +they require using different mail transfer agents (MTAs) or user agents +(UAs) + +@item +they do not solve the problem for all cases, i.e. the solution is only +partially successful for a particular environment. + +@end itemize + +We have designed a simple filesystem, called the @dfn{Home-Link File +System}, to provide the ability to deliver mail to users' home +directories, without modification to mail-related applications. We have +endeavored to make it as stable as possible. Of great importance to us +was to make sure the HLFS daemon, @file{hlfsd} , would not hang under +any circumstances, and would take the next-best action when faced with +problems. Compared to alternative methods, @i{Hlfsd} is a stable, more +general solution, and easier to install/use. In fact, in some ways, we +have even managed to improve the reliability and security of mail +service. + +Our server implements a small filesystem containing a symbolic link +to a subdirectory of the invoking user's home directory, and named symbolic +links to users' mailbox files. + +The @i{Hlfsd} server finds out the @var{uid} of the process that is +accessing its mount point, and resolves the pathname component @samp{home} as a +symbolic link to a subdirectory within the home directory given by the +@var{uid}'s entry in the password file. If the @var{gid} of the process +that attempts to access a mailbox file is a special one (called +HLFS_GID), then the server maps the name of the @emph{next} pathname +component directly to the user's mailbox. This is necessary so that +access to a mailbox file by users other than the owner can succeed. The +server has safety features in case of failures such as hung filesystems +or home directory filesystems that are inaccessible or full. + +On most of our machines, mail gets delivered to the directory +@file{/var/spool/mail}. Many programs, including UAs, depend on that +path. @i{Hlfsd} creates a directory @file{/mail}, and mounts itself on +top of that directory. @i{Hlfsd} implements the path name component +called @samp{home}, pointing to a subdirectory of the user's home directory. +We have made @file{/var/spool/mail} a symbolic link to +@file{/mail/home}, so that accessing @file{/var/spool/mail} actually +causes access to a subdirectory within a user's home directory. + +The following table shows an example of how resolving the pathname +@file{/var/mail/@i{NAME}} to @file{/users/ezk/.mailspool/@i{NAME}} proceeds. + +@multitable {Resolving Component} {Pathname left to resolve} {Value if symbolic link} + +@item @b{Resolving Component} +@tab @b{Pathname left to resolve} +@tab @b{Value if symbolic link} + +@item @t{/} +@tab @t{var/mail/}@i{NAME} + +@item @t{var/} +@tab @t{mail/}@i{NAME} + +@item @t{mail}@@ +@tab @t{/mail/home/}@i{NAME} +@tab @t{mail}@@ -> @t{/mail/home} + +@item @t{/} +@tab @t{mail/home/}@i{NAME} + +@item @t{mail/} +@tab @t{home/}@i{NAME} + +@item @t{home}@@ +@tab @i{NAME} +@tab @t{home}@@ -> @t{/users/ezk/.mailspool} + +@item @t{/} +@tab @t{users/ezk/.mailspool/}@i{NAME} + +@item @t{users/} +@tab @t{ezk/.mailspool/}@i{NAME} + +@item @t{ezk/} +@tab @t{.mailspool/}@i{NAME} + +@item @t{.mailspool/} +@tab @i{NAME} + +@item @i{NAME} + +@end multitable + +@c ================================================================ +@node Background to Mail Delivery, Using Hlfsd, Introduction to Hlfsd, Hlfsd +@comment node-name, next, previous, up +@section Background to Mail Delivery +@cindex Background to Mail Delivery +@cindex Hlfsd; background + +This section provides an in-depth discussion of why available methods +for delivering mail to home directories are not as good as the one used +by @i{Hlfsd}. + +@menu +* Single-Host Mail Spool Directory:: +* Centralized Mail Spool Directory:: +* Distributed Mail Spool Service:: +* Why Deliver Into the Home Directory?:: +@end menu + +@c ---------------------------------------------------------------- +@node Single-Host Mail Spool Directory, Centralized Mail Spool Directory, Background to Mail Delivery, Background to Mail Delivery +@comment node-name, next, previous, up +@subsection Single-Host Mail Spool Directory +@cindex Single-Host Mail Spool Directory + +The most common method for mail delivery is for mail to be appended to a +mailbox file in a standard spool directory on the designated ``mail +home'' machine of the user. The greatest advantage of this method is +that it is the default method most vendors provide with their systems, +thus very little (if any) configuration is required on the SA's part. +All they need to set up are mail aliases directing mail to the host on +which the user's mailbox file is assigned. (Otherwise, mail is +delivered locally, and users find mailboxes on many machines.) + +As users become more sophisticated, and aided by windowing systems, they +find themselves logging in on multiple hosts at once, performing several +tasks concurrently. They ask to be able to read their mail on any host +on the network, not just the one designated as their ``mail home''. + +@c ---------------------------------------------------------------- +@node Centralized Mail Spool Directory, Distributed Mail Spool Service, Single-Host Mail Spool Directory, Background to Mail Delivery +@comment node-name, next, previous, up +@subsection Centralized Mail Spool Directory +@cindex Centralized Mail Spool Directory + +A popular method for providing mail readability from any host is to have +all mail delivered to a mail spool directory on a designated +``mail-server'' which is exported via NFS to all of the hosts on the +network. Configuring such a system is relatively easy. On most +systems, the bulk of the work is a one-time addition to one or two +configuration files in @file{/etc}. The file-server's spool directory +is then hard-mounted across every machine on the local network. In +small environments with only a handful of hosts this can be an +acceptable solution. In our department, with a couple of hundred active +hosts and thousands of mail messages processed daily, this was deemed +completely unacceptable, as it introduced several types of problems: + +@table @b + +@item Scalability and Performance + +As more and more machines get added to the network, more mail traffic +has to go over NFS to and from the mail-server. Users like to run +mail-watchers, and read their mail often. The stress on the shared +infrastructure increases with every user and host added; loads on the +mail server would most certainly be high since all mail delivery goes +through that one machine.@footnote{ Delivery via NFS-mounted filesystems +may require usage of @samp{rpc.lockd} and @samp{rpc.statd} to provide +distributed file-locking, both of which are widely regarded as unstable +and unreliable. Furthermore, this will degrade performance, as local +processes as well as remote @samp{nfsd} processes are kept busy.} This +leads to lower reliability and performance. To reduce the number of +concurrent connections between clients and the server host, some SAs +have resorted to automounting the mail-spool directory. But this +solution only makes things worse: since users often run mail watchers, +and many popular applications such as @samp{trn}, @samp{emacs}, +@samp{csh} or @samp{ksh} check periodically for new mail, the +automounted directory would be effectively permanently mounted. If it +gets unmounted automatically by the automounter program, it is most +likely to get mounted shortly afterwards, consuming more I/O resources +by the constant cycle of mount and umount calls. + +@item Reliability + +The mail-server host and its network connectivity must be very reliable. +Worse, since the spool directory has to be hard-mounted,@footnote{No SA +in their right minds would soft-mount read/write partitions --- the +chances for data loss are too great.} many processes which access the +spool directory (various shells, @samp{login}, @samp{emacs}, etc.) +would be hung as long as connectivity to the mail-server is severed. To +improve reliability, SAs may choose to backup the mail-server's spool +partition several times a day. This may make things worse since reading +or delivering mail while backups are in progress may cause backups to be +inconsistent; more backups consume more backup-media resources, and +increase the load on the mail-server host. + +@end table + +@c ---------------------------------------------------------------- +@node Distributed Mail Spool Service, Why Deliver Into the Home Directory?, Centralized Mail Spool Directory, Background to Mail Delivery +@comment node-name, next, previous, up +@subsection Distributed Mail Spool Service +@cindex Distributed Mail Spool Service + +Despite the existence of a few systems that support delivery to users' +home directories, mail delivery to home directories hasn't caught on. +We believe the main reason is that there are too many programs that +``know'' where mailbox files reside. Besides the obvious (the delivery +program @file{/bin/mail} and mail readers like @file{/usr/ucb/Mail}, +@samp{mush}, @samp{mm}, etc.), other programs that know mailbox location +are login, from, almost every shell, @samp{xbiff}, @samp{xmailbox}, and +even some programs not directly related to mail, such as @samp{emacs} +and @samp{trn}. Although some of these programs can be configured to +look in different directories with the use of environment variables and +other resources, many of them cannot. The overall porting work is +significant. + +Other methods that have yet to catch on require the use of a special +mail-reading server, such as IMAP or POP. The main disadvantage of +these systems is that UAs need to be modified to use these services --- +a long and involved task. That is why they are not popular at this +time. + +Several other ideas have been proposed and even used in various +environments. None of them is robust. They are mostly very +specialized, inflexible, and do not extend to the general case. Some of +the ideas are plain bad, potentially leading to lost or corrupt mail: + +@table @b + +@item automounters + +Using an automounter such as @i{Amd} to provide a set of symbolic links +from the normal spool directory to user home directories is not +sufficient. UAs rename, unlink, and recreate the mailbox as a regular +file, therefore it must be a real file, not a symbolic link. +Furthermore, it must reside in a real directory which is writable by the +UAs and MTAs. This method may also require populating +@file{/var/spool/mail} with symbolic links and making sure they are +updated. Making @i{Amd} manage that directory directly fails, since +many various lock files need to be managed as well. Also, @i{Amd} does +not provide all of the NFS operations which are required to write mail +such as write, create, remove, and unlink. + +@item @code{$MAIL} + +Setting this variable to an automounted directory pointing to the user's +mail spool host only solves the problem for those programs which know +and use @code{$MAIL}. Many programs don't, therefore this solution is partial +and of limited flexibility. Also, it requires the SAs or the users to +set it themselves --- an added level of inconvenience and possible +failures. + +@item @t{/bin/mail} + +Using a different mail delivery agent could be the solution. One such +example is @samp{hdmail}. However, @samp{hdmail} still requires +modifying all UAs, the MTA's configuration, installing new daemons, and +changing login scripts. This makes the system less upgradable or +compatible with others, and adds one more complicated system for SAs to +deal with. It is not a complete solution because it still requires each +user have their @code{$MAIL} variable setup correctly, and that every program +use this variable. + +@end table + +@c ---------------------------------------------------------------- +@node Why Deliver Into the Home Directory?, , Distributed Mail Spool Service, Background to Mail Delivery +@comment node-name, next, previous, up +@subsection Why Deliver Into the Home Directory? +@cindex Why Deliver Into the Home Directory? +@cindex Hlfsd; Why Deliver Into the Home Directory? + +There are several major reasons why SAs might want to deliver mail +directly into the users' home directories: + +@table @b + +@item Location + +Many mail readers need to move mail from the spool directory to the +user's home directory. It speeds up this operation if the two are on +the same filesystem. If for some reason the user's home directory is +inaccessible, it isn't that useful to be able to read mail, since there +is no place to move it to. In some cases, trying to move mail to a +non-existent or hung filesystem may result in mail loss. + +@item Distribution + +Having all mail spool directories spread among the many more filesystems +minimizes the chances that complete environments will grind to a halt +when a single server is down. It does increase the chance that there +will be someone who is not able to read their mail when a machine is +down, but that is usually preferred to having no one be able to read +their mail because a centralized mail server is down. The problem of +losing some mail due to the (presumably) higher chances that a user's +machine is down is minimized in HLFS. + +@item Security + +Delivering mail to users' home directories has another advantage --- +enhanced security and privacy. Since a shared system mail spool +directory has to be world-readable and searchable, any user can see +whether other users have mail, when they last received new mail, or when +they last read their mail. Programs such as @samp{finger} display this +information, which some consider an infringement of privacy. While it +is possible to disable this feature of @samp{finger} so that remote +users cannot see a mailbox file's status, this doesn't prevent local +users from getting the information. Furthermore, there are more +programs which make use of this information. In shared environments, +disabling such programs has to be done on a system-wide basis, but with +mail delivered to users' home directories, users less concerned with +privacy who do want to let others know when they last received or read +mail can easily do so using file protection bits. + +@c Lastly, on systems that do not export their NFS filesystem with +@c @t{anon=0}, superusers are less likely to snoop around others' mail, as +@c they become ``nobodies'' across NFS. + +@end table + +In summary, delivering mail to home directories provides users the +functionality sought, and also avoids most of the problems just +discussed. + +@c ================================================================ +@node Using Hlfsd, , Background to Mail Delivery, Hlfsd +@comment node-name, next, previous, up +@section Using Hlfsd +@cindex Using Hlfsd +@cindex Hlfsd; using + +@menu +* Controlling Hlfsd:: +* Hlfsd Options:: +* Hlfsd Files:: +@end menu + +@c ---------------------------------------------------------------- +@node Controlling Hlfsd, Hlfsd Options, Using Hlfsd, Using Hlfsd +@comment node-name, next, previous, up +@subsection Controlling Hlfsd +@cindex Controlling Hlfsd +@cindex Hlfsd; controlling +@pindex ctl-hlfsd + +Much the same way @i{Amd} is controlled by @file{ctl-amd}, so does +@i{Hlfsd} get controlled by the @file{ctl-hlfsd} script: + +@table @t + +@item ctl-hlfsd start +Start a new @i{Hlfsd}. + +@item ctl-hlfsd stop +Stop a running @i{Hlfsd}. + +@item ctl-hlfsd restart +Stop a running @i{Hlfsd}, wait for 10 seconds, and then start a new +one. It is hoped that within 10 seconds, the previously running +@i{Hlfsd} terminate properly; otherwise, starting a second one could +cause system lockup. + +@end table + +For example, on our systems, we start @i{Hlfsd} within @file{ctl-hlfsd} +as follows on Solaris 2 systems: + +@example +hlfsd -a /var/alt_mail -x all -l /var/log/hlfsd /mail/home .mailspool +@end example + +The directory @file{/var/alt_mail} is a directory in the root partition +where alternate mail will be delivered into, when it cannot be delivered +into the user's home directory. + +Normal mail gets delivered into @file{/var/mail}, but on our systems, +that is a symbolic link to @file{/mail/home}. @file{/mail} is managed +by @i{Hlfsd}, which creates a dynamic symlink named @samp{home}, +pointing to the subdirectory @file{.mailspool} @emph{within} the +accessing user's home directory. This results in mail which normally +should go to @file{/var/mail/@code{$USER}}, to go to +@file{@code{$HOME}/.mailspool/@code{$USER}}. + +@i{Hlfsd} does not create the @file{/var/mail} symlink. This needs to +be created (manually) once on each host, by the system administrators, +as follows: + +@example +mv /var/mail /var/alt_mail +ln -s /mail/home /var/mail +@end example + +@c ---------------------------------------------------------------- +@node Hlfsd Options, Hlfsd Files, Controlling Hlfsd, Using Hlfsd +@comment node-name, next, previous, up +@subsection Hlfsd Options +@cindex Hlfsd Options +@cindex Hlfsd; Options + +@table @t + +@item -a @var{alt_dir} +Alternate directory. The name of the directory to which the symbolic +link returned by @i{Hlfsd} will point, if it cannot access the home +directory of the user. This defaults to @file{/var/hlfs}. This +directory will be created if it doesn't exist. It is expected that +either users will read these files, or the system administrators will +run a script to resend this ``lost mail'' to its owner. + +@item -c @var{cache-interval} +Caching interval. @i{Hlfsd} will cache the validity of home directories +for this interval, in seconds. Entries which have been verified within +the last @var{cache-interval} seconds will not be verified again, since +the operation could be expensive, and the entries are most likely still +valid. After the interval has expired, @i{Hlfsd} will re-verify the +validity of the user's home directory, and reset the cache time-counter. +The default value for @var{cache-interval} is 300 seconds (5 minutes). + +@item -f +Force fast startup. This option tells @i{Hlfsd} to skip startup-time +consistency checks such as existence of mount directory, alternate spool +directory, symlink to be hidden under the mount directory, their +permissions and validity. + +@item -g @var{group} +Set the special group HLFS_GID to @var{group}. Programs such as +@file{/usr/ucb/from} or @file{/usr/sbin/in.comsat}, which access the +mailboxes of other users, must be setgid @samp{HLFS_GID} to work properly. The +default group is @samp{hlfs}. If no group is provided, and there is no +group @samp{hlfs}, this feature is disabled. + +@item -h +Help. Print a brief help message, and exit. + +@item -i @var{reload-interval} +Map-reloading interval. Each @var{reload-interval} seconds, @i{Hlfsd} +will reload the password map. @i{Hlfsd} needs the password map for the +UIDs and home directory pathnames. @i{Hlfsd} schedules a @samp{SIGALRM} to +reload the password maps. A @samp{SIGHUP} sent to @i{Hlfsd} will force it to +reload the maps immediately. The default value for +@var{reload-interval} is 900 seconds (15 minutes.) + +@item -l @var{logfile} +Specify a log file to which @i{Hlfsd} will record events. If +@var{logfile} is the string @samp{syslog} then the log messages will be +sent to the system log daemon by @b{syslog}(3), using the @samp{LOG_DAEMON} +facility. This is also the default. + +@item -n +No verify. @i{Hlfsd} will not verify the validity of the symbolic link +it will be returning, or that the user's home directory contains +sufficient disk-space for spooling. This can speed up @i{Hlfsd} at the +cost of possibly returning symbolic links to home directories which are +not currently accessible or are full. By default, @i{Hlfsd} validates +the symbolic-link in the background. The @code{-n} option overrides the +meaning of the @code{-c} option, since no caching is necessary. + +@item -o @var{mount-options} +Mount options which @i{Hlfsd} will use to mount itself on top of +@var{dirname}. By default, @var{mount-options} is set to @samp{ro}. If +the system supports symbolic-link caching, default options are set +to @samp{ro,nocache}. + +@item -p +Print PID. Outputs the process-id of @i{Hlfsd} to standard output where +it can be saved into a file. + +@item -v +Version. Displays version information to standard error. + +@item -x @var{log-options} +Specify run-time logging options. The options are a comma separated +list chosen from: @samp{fatal}, @samp{error}, @samp{user}, @samp{warn}, @samp{info}, @samp{map}, @samp{stats}, @samp{all}. + +@item -C +Force @i{Hlfsd} to run on systems that cannot turn off the NFS +attribute-cache. Use of this option on those systems is discouraged, as +it may result in loss or misdelivery of mail. The option is ignored on +systems that can turn off the attribute-cache. + +@item -D @var{log-options} +Select from a variety of debugging options. Prefixing an option with +the string @samp{no} reverses the effect of that option. Options are +cumulative. The most useful option is @samp{all}. Since this option is +only used for debugging other options are not documented here. A fuller +description is available in the program source. A @samp{SIGUSR1} sent +to @i{Hlfsd} will cause it to dump its internal password map to the file +@file{/usr/tmp/hlfsd.dump.XXXXXX}, where @samp{XXXXXX} will be replaced +by a random string generated by @b{mktemp}(3) or (the more secure) +@b{mkstemp}(3). + +@item -P @var{password-file} +Read the user-name, user-id, and home directory information from the +file @var{password-file}. Normally, @i{Hlfsd} will use @b{getpwent}(3) +to read the password database. This option allows you to override the +default database, and is useful if you want to map users' mail files to +a directory other than their home directory. Only the username, uid, +and home-directory fields of the file @var{password-file} are read and +checked. All other fields are ignored. The file @var{password-file} +must otherwise be compliant with Unix Version 7 colon-delimited format +@b{passwd}(4). + +@end table + +@c ---------------------------------------------------------------- +@node Hlfsd Files, , Hlfsd Options, Using Hlfsd +@comment node-name, next, previous, up +@subsection Hlfsd Files +@cindex Hlfsd Files +@cindex Hlfsd; Files + +The following files are used by @i{Hlfsd}: + +@table @file + +@item /hlfs +directory under which @i{Hlfsd} mounts itself and manages the symbolic +link @file{home}. + +@item .hlfsdir +default sub-directory in the user's home directory, to which the +@file{home} symbolic link returned by @i{Hlfsd} points. + +@item /var/hlfs +directory to which @file{home} symbolic link returned by @i{Hlfsd} +points if it is unable to verify the that user's home directory is +accessible. + +@end table + +For discussion on other files used by @i{Hlfsd}, see @ref{lostaltmail} and +@ref{lostaltmail.conf-sample}. + +@c ################################################################ +@node Assorted Tools, Examples, Hlfsd, Top +@comment node-name, next, previous, up +@chapter Assorted Tools +@cindex Assorted Tools + +The following are additional utilities and scripts included with +am-utils, and get installed. + +@menu +* am-eject:: +* amd.conf-sample:: +* amd2ldif:: +* amd2sun:: +* ctl-amd:: +* ctl-hlfsd:: +* expn:: +* fix-amd-map:: +* fixmount:: +* fixrmtab:: +* lostaltmail:: +* lostaltmail.conf-sample:: +* mk-amd-map:: +* pawd:: +* wait4amd:: +* wait4amd2die:: +* wire-test:: +@end menu + +@c ---------------------------------------------------------------- +@node am-eject, amd.conf-sample, Assorted Tools, Assorted Tools +@comment node-name, next, previous, up +@section am-eject +@pindex am-eject + +A shell script unmounts a floppy or CD-ROM that is automounted, and +then attempts to eject the removable device. + +@c ---------------------------------------------------------------- +@node amd.conf-sample, amd2ldif, am-eject, Assorted Tools +@comment node-name, next, previous, up +@section amd.conf-sample +@pindex amd.conf-sample + +A sample @i{Amd} configuration file. @xref{Amd Configuration File}. + +@c ---------------------------------------------------------------- +@node amd2ldif, amd2sun, amd.conf-sample, Assorted Tools +@comment node-name, next, previous, up +@section amd2ldif +@pindex amd2ldif + +A script to convert @i{Amd} maps to LDAP input files. Use it as follows: + +@example +amd2ldif @i{mapname} @i{base} < @i{amd.mapfile} > @i{mapfile.ldif} +@end example + +@c ---------------------------------------------------------------- +@node amd2sun, ctl-amd, amd2ldif, Assorted Tools +@comment node-name, next, previous, up +@section amd2sun +@pindex amd2sun + +A script to convert @i{Amd} maps to Sun Automounter maps. Use it as +follows + +@example +amd2sun < @i{amd.mapfile} > @i{auto_mapfile} +@end example + +@c ---------------------------------------------------------------- +@node ctl-amd, ctl-hlfsd, amd2sun, Assorted Tools +@comment node-name, next, previous, up +@section ctl-amd +@pindex ctl-amd + +A script to start, stop, or restart @i{Amd}. Use it as follows: + +@table @t +@item ctl-amd start +Start a new @i{Amd} process. +@item ctl-amd stop +Stop the running @i{Amd}. +@item ctl-amd restart +Stop the running @i{Amd} (if any), safely wait for it to terminate, and +then start a new process --- only if the previous one died cleanly. +@end table + +@xref{Run-time Administration} for more details. + +@c ---------------------------------------------------------------- +@node ctl-hlfsd, expn, ctl-amd, Assorted Tools +@comment node-name, next, previous, up +@section ctl-hlfsd +@pindex ctl-hlfsd + +A script for controlling @i{Hlfsd}, much the same way @file{ctl-amd} +controls @i{Amd}. Use it as follows: + +@table @t +@item ctl-hlfsd start +Start a new @i{Hlfsd} process. +@item ctl-hlfsd stop +Stop the running @i{Hlfsd}. +@item ctl-hlfsd restart +Stop the running @i{Hlfsd} (if any), wait for 10 seconds for it to +terminate, and then start a new process --- only if the previous one +died cleanly. +@end table + +@xref{Hlfsd} for more details. + +@c ---------------------------------------------------------------- +@node expn, fix-amd-map, ctl-hlfsd, Assorted Tools +@comment node-name, next, previous, up +@section expn +@pindex expn + +A script to expand email addresses into their full name. It is +generally useful when using with the @file{lostaltmail} script, but is a +useful tools otherwise. + +@example +$ expn -v ezk@@cs.columbia.edu +ezk@@cs.columbia.edu -> + ezk@@shekel.mcl.cs.columbia.edu +ezk@@shekel.mcl.cs.columbia.edu -> + Erez Zadok <"| /usr/local/mh/lib/slocal -user ezk || exit 75> + Erez Zadok <\ezk> + Erez Zadok +@end example + +@c ---------------------------------------------------------------- +@node fix-amd-map, fixmount, expn, Assorted Tools +@comment node-name, next, previous, up +@section fix-amd-map +@pindex fix-amd-map + +Am-utils changed some of the syntax and default values of some +variables. For example, the default value for @samp{$@{os@}} for +Solaris 2.x (aka SunOS 5.x) systems used to be @samp{sos5}, it is now +more automatically generated from @file{config.guess} and its value is +@samp{sunos5}. + +This script converts older @i{Amd} maps to new ones. Use it as follows: + +@example +fix-amd-map < @i{old.map} > @i{new.map} +@end example + +@c ---------------------------------------------------------------- +@node fixmount, fixrmtab, fix-amd-map, Assorted Tools +@comment node-name, next, previous, up +@section fixmount +@pindex fixmount + +@samp{fixmount} is a variant of @b{showmount}(8) that can delete bogus +mount entries in remote @b{mountd}(8) daemons. This is useful to +cleanup otherwise ever-accumulating ``junk''. Use it for example: + +@example +fixmount -r @i{host} +@end example + +See the online manual page for @samp{fixmount} for more details of its +usage. + +@c ---------------------------------------------------------------- +@node fixrmtab, lostaltmail, fixmount, Assorted Tools +@comment node-name, next, previous, up +@section fixrmtab +@pindex fixrmtab + +A script to invalidate @file{/etc/rmtab} entries for hosts named. Also +restart mountd for changes to take effect. Use it for example: + +@example +fixrmtab @i{host1} @i{host2} @i{...} +@end example + +@c ---------------------------------------------------------------- +@node lostaltmail, lostaltmail.conf-sample, fixrmtab, Assorted Tools +@comment node-name, next, previous, up +@section lostaltmail +@pindex lostaltmail + +A script used with @i{Hlfsd} to resend any ``lost'' mail. @i{Hlfsd} +redirects mail which cannot be written into the user's home directory to +an alternate directory. This is useful to continue delivering mail, +even if the user's file system was unavailable, full, or over quota. +But, the mail which gets delivered to the alternate directory needs to +be resent to its respective users. This is what the @samp{lostaltmail} +script does. + +Use it as follows: + +@example +lostaltmail +@end example + +This script needs a configuration file @samp{lostaltmail.conf} set up +with the right parameters to properly work. @xref{Hlfsd} for more +details. + +@c ---------------------------------------------------------------- +@node lostaltmail.conf-sample, mk-amd-map, lostaltmail, Assorted Tools +@comment node-name, next, previous, up +@section lostaltmail.conf-sample +@pindex lostaltmail.conf-sample +@cindex lostaltmail; configuration file + +This is a text file with configuration parameters needed for the +@samp{lostaltmail} script. The script includes comments explaining each +of the configuration variables. See it for more information. Also +@pxref{Hlfsd} for general information. + +@c ---------------------------------------------------------------- +@node mk-amd-map, pawd, lostaltmail.conf-sample, Assorted Tools +@comment node-name, next, previous, up +@section mk-amd-map +@pindex mk-amd-map + +This program converts a normal @i{Amd} map file into an ndbm database +with the same prefix as the named file. Use it as follows: + +@example +mk-amd-map @i{mapname} +@end example + +@c ---------------------------------------------------------------- +@node pawd, wait4amd, mk-amd-map, Assorted Tools +@comment node-name, next, previous, up +@section pawd +@pindex pawd + +@i{Pawd} is used to print the current working directory, adjusted to +reflect proper paths that can be reused to go through the automounter +for the shortest possible path. In particular, the path printed back +does not include any of @i{Amd}'s local mount points. Using them is +unsafe, because @i{Amd} may unmount managed file systems from the mount +points, and thus including them in paths may not always find the files +within. + +Without any arguments, @i{Pawd} will print the automounter adjusted +current working directory. With any number of arguments, it will print +the adjusted path of each one of the arguments. + +@c ---------------------------------------------------------------- +@node wait4amd, wait4amd2die, pawd, Assorted Tools +@comment node-name, next, previous, up +@section wait4amd +@pindex wait4amd + +A script to wait for @i{Amd} to start on a particular host before +performing an arbitrary command. The command is executed repeatedly, +with 1 second intervals in between. You may interrupt the script using +@samp{^C} (or whatever keyboard sequence your terminal's @samp{intr} function +is bound to). + +Examples: + +@table @t +@item wait4amd saturn amq -p -h saturn +When @i{Amd} is up on host @samp{saturn}, get the process ID of that +running @i{Amd}. +@item wait4amd pluto rlogin pluto +Remote login to host @samp{pluto} when @i{Amd} is up on that host. It +is generally necessary to wait for @i{Amd} to properly start and +initialize on a remote host before logging in to it, because otherwise +user home directories may not be accessible across the network. +@item wait4amd pluto +A short-hand version of the previous command, since the most useful +reason for this script is to login to a remote host. I use it very +often when testing out new versions of @i{Amd}, and need to reboot hung +hosts. +@end table + +@c ---------------------------------------------------------------- +@node wait4amd2die, wire-test, wait4amd, Assorted Tools +@comment node-name, next, previous, up +@section wait4amd2die +@pindex wait4amd2die + +This script is used internally by @samp{ctl-amd} when used to restart +@i{Amd}. It waits for @i{Amd} to terminate. If it detected that +@i{Amd} terminated cleanly, this script will return an exist status of +zero. Otherwise, it will return a non-zero exit status. + +The script tests for @i{Amd}'s existence once every 5 seconds, six +times, for a total of 30 seconds. It will return a zero exist status as +soon as it detects that @i{Amd} dies. + +@c ---------------------------------------------------------------- +@node wire-test, , wait4amd2die, Assorted Tools +@comment node-name, next, previous, up +@section wire-test +@pindex wire-test + +A simple program to test if some of the most basic networking functions +in am-util's library @file{libamu} work. It also tests the combination +of NFS protocol and version number that are supported from the current +host, to a remote one. + +For example, in this test a machine which only supports NFS Version 2 is +contacting a remote host that can support the same version, but using +both UDP and TCP. If no host name is specified, @samp{wire-test} will +try @file{localhost}. + +@example +$ wire-test moisil +Network name is "mcl-lab-net.cs.columbia.edu" +Network number is "128.59.13" +Network name is "old-net.cs.columbia.edu" +Network number is "128.59.16" +My IP address is 0x7f000001. +NFS Version and protocol tests to host "moisil"... + testing vers=2, proto="udp" -> found version 2. + testing vers=3, proto="udp" -> failed! + testing vers=2, proto="tcp" -> found version 2. + testing vers=3, proto="tcp" -> failed! +@end example + +@c ################################################################ +@node Examples, Internals, Assorted Tools, Top +@comment node-name, next, previous, up +@chapter Examples + +@menu +* User Filesystems:: +* Home Directories:: +* Architecture Sharing:: +* Wildcard Names:: +* rwho servers:: +* /vol:: +* /defaults with selectors:: +* /tftpboot in a chroot-ed environment:: + +@end menu + +@node User Filesystems, Home Directories, Examples, Examples +@comment node-name, next, previous, up +@section User Filesystems +@cindex User filesystems +@cindex Mounting user filesystems + +With more than one fileserver, the directories most frequently +cross-mounted are those containing user home directories. A common +convention used at Imperial College is to mount the user disks under +@t{/home/}@i{machine}. + +Typically, the @samp{/etc/fstab} file contained a long list of entries +such as: + +@example +@i{machine}:/home/@i{machine} /home/@i{machine} nfs ... +@end example + +for each fileserver on the network. + +There are numerous problems with this system. The mount list can become +quite large and some of the machines may be down when a system is +booted. When a new fileserver is installed, @samp{/etc/fstab} must be +updated on every machine, the mount directory created and the filesystem +mounted. + +In many environments most people use the same few workstations, but +it is convenient to go to a colleague's machine and access your own +files. When a server goes down, it can cause a process on a client +machine to hang. By minimizing the mounted filesystems to only include +those actively being used, there is less chance that a filesystem will +be mounted when a server goes down. + +The following is a short extract from a map taken from a research fileserver +at Imperial College. + +Note the entry for @samp{localhost} which is used for users such as +the operator (@samp{opr}) who have a home directory on most machine as +@samp{/home/localhost/opr}. + +@example +/defaults opts:=rw,intr,grpid,nosuid +charm host!=$@{key@};type:=nfs;rhost:=$@{key@};rfs:=/home/$@{key@} \ + host==$@{key@};type:=ufs;dev:=/dev/xd0g +# +... + +# +localhost type:=link;fs:=$@{host@} +... +# +# dylan has two user disks so have a +# top directory in which to mount them. +# +dylan type:=auto;fs:=$@{map@};pref:=$@{key@}/ +# +dylan/dk2 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/$@{key@} \ + host==dylan;type:=ufs;dev:=/dev/dsk/2s0 +# +dylan/dk5 host!=dylan;type:=nfs;rhost:=dylan;rfs:=/home/$@{key@} \ + host==dylan;type:=ufs;dev:=/dev/dsk/5s0 +... +# +toytown host!=$@{key@};type:=nfs;rhost:=$@{key@};rfs:=/home/$@{key@} \ + host==$@{key@};type:=ufs;dev:=/dev/xy1g +... +# +zebedee host!=$@{key@};type:=nfs;rhost:=$@{key@};rfs:=/home/$@{key@} \ + host==$@{key@};type:=ufs;dev:=/dev/dsk/1s0 +# +# Just for access... +# +gould type:=auto;fs:=$@{map@};pref:=$@{key@}/ +gould/staff host!=gould;type:=nfs;rhost:=gould;rfs:=/home/$@{key@} +# +gummo host!=$@{key@};type:=nfs;rhost:=$@{key@};rfs:=/home/$@{key@} +... +@end example + +This map is shared by most of the machines listed so on those +systems any of the user disks is accessible via a consistent name. +@i{Amd} is started with the following command + +@example +amd /home amd.home +@end example + +Note that when mounting a remote filesystem, the @dfn{automounted} +mount point is referenced, so that the filesystem will be mounted if +it is not yet (at the time the remote @samp{mountd} obtains the file handle). + +@node Home Directories, Architecture Sharing, User Filesystems, Examples +@comment node-name, next, previous, up +@section Home Directories +@cindex Home directories +@cindex Example of mounting home directories +@cindex Mount home directories + +One convention for home directories is to locate them in @samp{/homes} +so user @samp{jsp}'s home directory is @samp{/homes/jsp}. With more +than a single fileserver it is convenient to spread user files across +several machines. All that is required is a mount-map which converts +login names to an automounted directory. + +Such a map might be started by the command: + +@example +amd /homes amd.homes +@end example + +where the map @samp{amd.homes} contained the entries: + +@example +/defaults type:=link # All the entries are of type:=link +jsp fs:=/home/charm/jsp +njw fs:=/home/dylan/dk5/njw +... +phjk fs:=/home/toytown/ai/phjk +sjv fs:=/home/ganymede/sjv +@end example + +Whenever a login name is accessed in @samp{/homes} a symbolic link +appears pointing to the real location of that user's home directory. In +this example, @samp{/homes/jsp} would appear to be a symbolic link +pointing to @samp{/home/charm/jsp}. Of course, @samp{/home} would also +be an automount point. + +This system causes an extra level of symbolic links to be used. +Although that turns out to be relatively inexpensive, an alternative is +to directly mount the required filesystems in the @samp{/homes} +map. The required map is simple, but long, and its creation is best automated. +The entry for @samp{jsp} could be: + +@example +jsp -sublink:=$@{key@};rfs:=/home/charm \ + host==charm;type:=ufs;dev:=/dev/xd0g \ + host!=charm;type:=nfs;rhost:=charm +@end example + +This map can become quite big if it contains a large number of entries. +By combining two other features of @i{Amd} it can be greatly simplified. + +First the UFS partitions should be mounted under the control of +@samp{/etc/fstab}, taking care that they are mounted in the same place +that @i{Amd} would have automounted them. In most cases this would be +something like @samp{/a/@dfn{host}/home/@dfn{host}} and +@samp{/etc/fstab} on host @samp{charm} would have a line:@refill + +@example +/dev/xy0g /a/charm/home/charm 4.2 rw,nosuid,grpid 1 5 +@end example + +The map can then be changed to: + +@example +/defaults type:=nfs;sublink:=$@{key@};opts:=rw,intr,nosuid,grpid +jsp rhost:=charm;rfs:=/home/charm +njw rhost:=dylan;rfs:=/home/dylan/dk5 +... +phjk rhost:=toytown;rfs:=/home/toytown;sublink:=ai/$@{key@} +sjv rhost:=ganymede;rfs:=/home/ganymede +@end example + +This map operates as usual on a remote machine (@i{ie} @code{$@{host@}} +not equal to @code{$@{rhost@}}). On the machine where the filesystem is +stored (@i{ie} @code{$@{host@}} equal to @code{$@{rhost@}}), @i{Amd} +will construct a local filesystem mount point which corresponds to the +name of the locally mounted UFS partition. If @i{Amd} is started with +the @code{-r} option then instead of attempting an NFS mount, @i{Amd} will +simply inherit the UFS mount (@pxref{Inheritance Filesystem}). If +@code{-r} is not used then a loopback NFS mount will be made. This type of +mount is known to cause a deadlock on many systems. + +@node Architecture Sharing, Wildcard Names, Home Directories, Examples +@comment node-name, next, previous, up +@section Architecture Sharing +@cindex Architecture sharing +@cindex Sharing a fileserver between architectures +@cindex Architecture dependent volumes + +@c %At the moment some of the research machines have sets of software +@c %mounted in @samp{/vol}. This contains subdirectories for \TeX, +@c %system sources, local sources, prolog libraries and so on. +Often a filesystem will be shared by machines of different architectures. +Separate trees can be maintained for the executable images for each +architecture, but it may be more convenient to have a shared tree, +with distinct subdirectories. + +A shared tree might have the following structure on the fileserver (called +@samp{fserver} in the example): + +@example +local/tex +local/tex/fonts +local/tex/lib +local/tex/bin +local/tex/bin/sun3 +local/tex/bin/sun4 +local/tex/bin/hp9000 +... +@end example + +In this example, the subdirectories of @samp{local/tex/bin} should be +hidden when accessed via the automount point (conventionally @samp{/vol}). +A mount-map for @samp{/vol} to achieve this would look like: + +@example +/defaults sublink:=$@{/key@};rhost:=fserver;type:=link +tex type:=auto;fs:=$@{map@};pref:=$@{key@}/ +tex/fonts host!=fserver;type:=nfs;rfs:=/vol/tex \ + host==fserver;fs:=/usr/local/tex +tex/lib host!=fserver;type:=nfs;rfs:=/vol/tex \ + host==fserver;fs:=/usr/local/tex +tex/bin -sublink:=$@{/key@}/$@{arch@} \ + host!=fserver;type:=nfs;rfs:=/vol/tex \ + host:=fserver;fs:=/usr/local/tex +@end example + +When @samp{/vol/tex/bin} is referenced, the current machine architecture +is automatically appended to the path by the @code{$@{sublink@}} +variable. This means that users can have @samp{/vol/tex/bin} in their +@samp{PATH} without concern for architecture dependencies. + +@node Wildcard Names, rwho servers, Architecture Sharing, Examples +@comment node-name, next, previous, up +@section Wildcard Names & Replicated Servers + +By using the wildcard facility, @i{Amd} can @dfn{overlay} an existing +directory with additional entries. +The system files are usually mounted under @samp{/usr}. If instead, +@i{Amd} is mounted on @samp{/usr}, additional +names can be overlayed to augment or replace names in the ``master'' @samp{/usr}. +A map to do this would have the form: + +@example +local type:=auto;fs:=local-map +share type:=auto;fs:=share-map +* -type:=nfs;rfs:=/export/exec/$@{arch@};sublink:="$@{key@}" \ + rhost:=fserv1 rhost:=fserv2 rhost:=fserv3 +@end example + +Note that the assignment to @code{$@{sublink@}} is surrounded by double +quotes to prevent the incoming key from causing the map to be +misinterpreted. This map has the effect of directing any access to +@samp{/usr/local} or @samp{/usr/share} to another automount point. + +In this example, it is assumed that the @samp{/usr} files are replicated +on three fileservers: @samp{fserv1}, @samp{fserv2} and @samp{fserv3}. +For any references other than to @samp{local} and @samp{share} one of +the servers is used and a symbolic link to +@t{$@{autodir@}/$@{rhost@}/export/exec/$@{arch@}/@i{whatever}} is +returned once an appropriate filesystem has been mounted.@refill + +@node rwho servers, /vol, Wildcard Names, Examples +@comment node-name, next, previous, up +@section @samp{rwho} servers +@cindex rwho servers +@cindex Architecture specific mounts +@cindex Example of architecture specific mounts + +The @samp{/usr/spool/rwho} directory is a good candidate for automounting. +For efficiency reasons it is best to capture the rwho data on a small +number of machines and then mount that information onto a large number +of clients. The data written into the rwho files is byte order dependent +so only servers with the correct byte ordering can be used by a client: + +@example +/defaults type:=nfs +usr/spool/rwho -byte==little;rfs:=/usr/spool/rwho \ + rhost:=vaxA rhost:=vaxB \ + || -rfs:=/usr/spool/rwho \ + rhost:=sun4 rhost:=hp300 +@end example + +@node /vol, /defaults with selectors, rwho servers, Examples +@comment node-name, next, previous, up +@section @samp{/vol} +@cindex /vol +@cindex Catch-all mount point +@cindex Generic volume name + +@samp{/vol} is used as a catch-all for volumes which do not have other +conventional names. + +Below is part of the @samp{/vol} map for the domain @samp{doc.ic.ac.uk}. +The @samp{r+d} tree is used for new or experimental software that needs +to be available everywhere without installing it on all the fileservers. +Users wishing to try out the new software then simply include +@samp{/vol/r+d/@{bin,ucb@}} in their path.@refill + +The main tree resides on one host @samp{gould.doc.ic.ac.uk}, which has +different @samp{bin}, @samp{etc}, @samp{lib} and @samp{ucb} +sub-directories for each machine architecture. For example, +@samp{/vol/r+d/bin} for a Sun-4 would be stored in the sub-directory +@samp{bin/sun4} of the filesystem @samp{/usr/r+d}. When it was accessed +a symbolic link pointing to @samp{/a/gould/usr/r+d/bin/sun4} would be +returned.@refill + +@example +/defaults type:=nfs;opts:=rw,grpid,nosuid,intr,soft +wp -opts:=rw,grpid,nosuid;rhost:=charm \ + host==charm;type:=link;fs:=/usr/local/wp \ + host!=charm;type:=nfs;rfs:=/vol/wp +... +# +src -opts:=rw,grpid,nosuid;rhost:=charm \ + host==charm;type:=link;fs:=/usr/src \ + host!=charm;type:=nfs;rfs:=/vol/src +# +r+d type:=auto;fs:=$@{map@};pref:=r+d/ +# per architecture bin,etc,lib&ucb... +r+d/bin rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@}/$@{arch@} +r+d/etc rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@}/$@{arch@} +r+d/include rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@} +r+d/lib rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@}/$@{arch@} +r+d/man rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@} +r+d/src rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@} +r+d/ucb rhost:=gould.doc.ic.ac.uk;rfs:=/usr/r+d;sublink:=$@{/key@}/$@{arch@} +# hades pictures +pictures -opts:=rw,grpid,nosuid;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/pictures \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=pictures +# hades tools +hades -opts:=rw,grpid,nosuid;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/hades \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=hades +# bsd tools for hp. +bsd -opts:=rw,grpid,nosuid;arch==hp9000;rhost:=thpfs \ + host==thpfs;type:=link;fs:=/nbsd/bsd \ + host!=thpfs;type:=nfs;rfs:=/nbsd;sublink:=bsd +@end example + +@node /defaults with selectors, /tftpboot in a chroot-ed environment, /vol, Examples +@comment node-name, next, previous, up +@section @samp{/defaults} with selectors +@cindex /defaults with selectors +@cindex selectors on default + +It is sometimes useful to have different defaults for a given map. To +achieve this, the @samp{/defaults} entry must be able to process normal +selectors. This feature is turned on by setting +@samp{selectors_on_default = yes} in the @file{amd.conf} file. +@xref{selectors_on_default Parameter}. + +In this example, I set different default NFS mount options for hosts +which are running over a slower network link. By setting a smaller size +for the NFS read and write buffer sizes, you can greatly improve remote +file service performance. + +@example +/defaults \ + wire==slip-net;opts:=rw,intr,rsize=1024,wsize=1024,timeo=20,retrans=10 \ + wire!=slip-net;opts:=rw,intr +@end example + +@node /tftpboot in a chroot-ed environment, , /defaults with selectors, Examples +@comment node-name, next, previous, up +@section @samp{/tftpboot} in a chroot-ed environment +@cindex /tftpboot in a chroot-ed environment +@cindex chroot: /tftpboot example + +In this complex example, we attempt to run an @i{Amd} process +@emph{inside} a chroot-ed environment. @samp{tftpd} (Trivial FTP) is +used to trivially retrieve files used to boot X-Terminals, Network +Printers, Network routers, diskless workstations, and other such +devices. For security reasons, @samp{tftpd} (and also @samp{ftpd}) +processes are run using the @b{chroot}(2) system call. This provides an +environment for these processes, where access to any files outside the +directory where the chroot-ed process runs is denied. + +For example, if you start @samp{tftpd} on your system with + +@example +chroot /tftpboot /usr/sbin/tftpd +@end example + +@noindent +then the @samp{tftpd} process will not be able to access any files +outside @file{/tftpboot}. This ensures that no one can retrieve files +such as @file{/etc/passwd} and run password crackers on it. + +Since the TFTP service works by broadcast, it is necessary to have at +least one TFTP server running on each subnet. If you have lots of files +that you need to make available for @samp{tftp}, and many subnets, it +could take significant amounts of disk space on each host serving them. + +A solution we implemented at Columbia University was to have every host +run @samp{tftpd}, but have those servers retrieve the boot files from +two replicated servers. Those replicated servers have special +partitions dedicated to the many network boot files. + +We start @i{Amd} as follows: + +@example +amd /tftpboot/.amd amd.tftpboot +@end example + +That is, @i{Amd} is serving the directory @file{/tftpboot/.amd}. The +@samp{tftp} server runs inside @file{/tftpboot} and is chroot-ed in that +directory too. The @file{amd.tftpboot} map looks like: + +@example +# +# Amd /tftpboot directory -> host map +# + +/defaults opts:=nosuid,ro,intr,soft;fs:=/tftpboot/import;type:=nfs + +tp host==lol;rfs:=/n/lol/import/tftpboot;type:=lofs \ + host==ober;rfs:=/n/ober/misc/win/tftpboot;type:=lofs \ + rhost:=ober;rfs:=/n/ober/misc/win/tftpboot \ + rhost:=lol;rfs:=/n/lol/import/tftpboot +@end example + +To help understand this example, I list a few of the file entries that +are created inside @file{/tftpboot}: + +@example +$ ls -la /tftpboot +dr-xr-xr-x 2 root 512 Aug 30 23:11 .amd +drwxrwsr-x 12 root 512 Aug 30 08:00 import +lrwxrwxrwx 1 root 33 Feb 27 1997 adminpr.cfg -> ./.amd/tp/hplj/adminpr.cfg +lrwxrwxrwx 1 root 22 Dec 5 1996 tekxp -> ./.amd/tp/xterms/tekxp +lrwxrwxrwx 1 root 1 Dec 5 1996 tftpboot -> . +@end example + +Here is an explanation of each of the entries listed above: + +@table @code + +@item .amd +This is the @i{Amd} mount point. Note that you do not need to run a +separate @i{Amd} process for the TFTP service. The @b{chroot}(2) system +call only protects against file access, but the same process can still +serve files and directories inside and outside the chroot-ed +environment, because @i{Amd} itself was not run in chroot-ed mode. + +@item import +This is the mount point where @i{Amd} will mount the directories +containing the boot files. The map is designed so that remote +directories will be NFS mounted (even if they are already mounted +elsewhere), and local directories are loopback mounted (since they are +not accessible outside the chroot-ed @file{/tftpboot} directory). + +@item adminpr.cfg +@itemx tekxp +Two manually created symbolic links to directories @emph{inside} the +@i{Amd}-managed directory. The crossing of the component @file{tp} will +cause @i{Amd} to automount one of the remote replicas. Once crossed, +access to files inside proceeds as usual. The @samp{adminpr.cfg} is a +configuration file for an HP Laser-Jet 4si printer, and the @samp{tekxp} +is a directory for Tektronix X-Terminal boot files. + +@item tftpboot +This innocent looking symlink is important. Usually, when devices boot +via the TFTP service, they perform the @samp{get file} command to +retrieve @var{file}. However, some devices assume that @samp{tftpd} +does not run in a chroot-ed environment, but rather ``unprotected'', and +thus use a full pathname for files to retrieve, as in @samp{get +/tftpboot/file}. This symlink effectively strips out the leading +@file{/tftpboot/}. + +@end table + +@c ################################################################ +@node Internals, Acknowledgments & Trademarks, Examples, Top +@comment node-name, next, previous, up +@chapter Internals + +Note that there are more error and logging messages possible than are +listed here. Most of them are self-explanatory. Refer to the program +sources for more details on the rest. + +@menu +* Log Messages:: +@end menu + +@node Log Messages, , Internals, Internals +@comment node-name, next, previous, up +@section Log Messages + +In the following sections a brief explanation is given of some of the +log messages made by @i{Amd}. Where the message is in @samp{typewriter} +font, it corresponds exactly to the message produced by @i{Amd}. Words +in @dfn{italic} are replaced by an appropriate string. Variables, +@code{$@{@i{var}@}}, indicate that the value of the appropriate variable is +output. + +Log messages are either sent directly to a file, +or logged via the @b{syslog}(3) mechanism. @xref{log_file Parameter} +In either case, entries in the file are of the form: +@example +@i{date-string} @i{hostname} @t{amd[}@i{pid}@t{]} @i{message} +@end example + +@menu +* Fatal errors:: +* Info messages:: +@end menu + +@node Fatal errors, Info messages, Log Messages, Log Messages +@comment node-name, next, previous, up +@subsection Fatal errors + +@i{Amd} attempts to deal with unusual events. Whenever it is not +possible to deal with such an error, @i{Amd} will log an appropriate +message and, if it cannot possibly continue, will either exit or abort. +These messages are selected by @samp{-x fatal} on the command line. +When @b{syslog}(3) is being used, they are logged with level +@samp{LOG_FATAL}. Even if @i{Amd} continues to operate it is likely to +remain in a precarious state and should be restarted at the earliest +opportunity. + +@table @t + +@item Attempting to inherit not-a-filesystem +The prototype mount point created during a filesystem restart did not +contain a reference to the restarted filesystem. This error ``should +never happen''. + +@item Can't bind to domain "@i{NIS-domain}" +A specific NIS domain was requested on the command line, but no server +for that domain is available on the local net. + +@item Can't determine IP address of this host (@i{hostname}) +When @i{Amd} starts it determines its own IP address. If this lookup +fails then @i{Amd} cannot continue. The hostname it looks up is that +obtained returned by @b{gethostname}(2) system call. + +@item Can't find root file handle for @i{automount point} +@i{Amd} creates its own file handles for the automount points. When it +mounts itself as a server, it must pass these file handles to the local +kernel. If the filehandle is not obtainable the mount point is ignored. +This error ``should never happen''. + +@item Must be root to mount filesystems (euid = @i{euid}) +To prevent embarrassment, @i{Amd} makes sure it has appropriate system +privileges. This amounts to having an euid of 0. The check is made +after argument processing complete to give non-root users a chance to +access the @code{-v} option. + +@item No work to do - quitting +No automount points were given on the command line and so there is no +work to do. + +@item Out of memory +While attempting to malloc some memory, the memory space available to +@i{Amd} was exhausted. This is an unrecoverable error. + +@item Out of memory in realloc +While attempting to realloc some memory, the memory space available to +@i{Amd} was exhausted. This is an unrecoverable error. + +@item cannot create rpc/udp service +Either the NFS or AMQ endpoint could not be created. + +@item gethostname: @i{description} +The @b{gethostname}(2) system call failed during startup. + +@item host name is not set +The @b{gethostname}(2) system call returned a zero length host name. +This can happen if @i{Amd} is started in single user mode just after +booting the system. + +@item ifs_match called! +An internal error occurred while restarting a pre-mounted filesystem. +This error ``should never happen''. + +@item mount_afs: @i{description} +An error occurred while @i{Amd} was mounting itself. + +@item run_rpc failed +Somehow the main NFS server loop failed. This error ``should never +happen''. + +@item unable to free rpc arguments in amqprog_1 +The incoming arguments to the AMQ server could not be free'ed. + +@item unable to free rpc arguments in nfs_program_1 +The incoming arguments to the NFS server could not be free'ed. + +@item unable to register (AMQ_PROGRAM, AMQ_VERSION, udp) +The AMQ server could not be registered with the local portmapper or the +internal RPC dispatcher. + +@item unable to register (NFS_PROGRAM, NFS_VERSION, 0) +The NFS server could not be registered with the internal RPC dispatcher. + +@end table + +XXX: This section needs to be updated + +@node Info messages, , Fatal errors, Log Messages +@comment node-name, next, previous, up +@subsection Info messages + +@i{Amd} generates information messages to record state changes. These +messages are selected by @samp{-x info} on the command line. When +@b{syslog}(3) is being used, they are logged with level @samp{LOG_INFO}. + +The messages listed below can be generated and are in a format suitable +for simple statistical analysis. @dfn{mount-info} is the string +that is displayed by @dfn{Amq} in its mount information column and +placed in the system mount table. + +@table @t + +@item "@t{$@{@i{path}@}}" forcibly timed out +An automount point has been timed out by the @i{Amq} command. + +@item "@t{$@{@i{path}@}}" has timed out +No access to the automount point has been made within the timeout +period. + +@item Filehandle denied for "$@{@i{rhost}@}:$@{@i{rfs}@}" +The mount daemon refused to return a file handle for the requested filesystem. + +@item Filehandle error for "$@{@i{rhost}@}:$@{@i{rfs}@}": @i{description} +The mount daemon gave some other error for the requested filesystem. + +@item Finishing with status @i{exit-status} +@i{Amd} is about to exit with the given exit status. + +@item Re-synchronizing cache for map @t{$@{@i{map}@}} +The named map has been modified and the internal cache is being re-synchronized. + +@item file server @t{$@{@i{rhost}@}} is down - timeout of "@t{$@{@i{path}@}}" ignored +An automount point has timed out, but the corresponding file server is +known to be down. This message is only produced once for each mount +point for which the server is down. + +@item file server @t{$@{@i{rhost}@}} type nfs is down +An NFS file server that was previously up is now down. + +@item file server @t{$@{@i{rhost}@}} type nfs is up +An NFS file server that was previously down is now up. + +@item file server @t{$@{@i{rhost}@}} type nfs starts down +A new NFS file server has been referenced and is known to be down. + +@item file server @t{$@{@i{rhost}@}} type nfs starts up +A new NFS file server has been referenced and is known to be up. + +@item mount of "@t{$@{@i{path}@}}" on @t{$@{@i{fs}@}} timed out +Attempts to mount a filesystem for the given automount point have failed +to complete within 30 seconds. + +@item @i{mount-info} mounted fstype @t{$@{@i{type}@}} on @t{$@{@i{fs}@}} +A new file system has been mounted. + +@item @i{mount-info} restarted fstype @t{$@{@i{type}@}} on @t{$@{@i{fs}@}} +@i{Amd} is using a pre-mounted filesystem to satisfy a mount request. + +@item @i{mount-info} unmounted fstype @t{$@{@i{type}@}} from @t{$@{@i{fs}@}} +A file system has been unmounted. + +@item @i{mount-info} unmounted fstype @t{$@{@i{type}@}} from @t{$@{@i{fs}@}} link @t{$@{@i{fs}@}}/@t{$@{@i{sublink}@}} +A file system of which only a sub-directory was in use has been unmounted. + +@item restarting @i{mount-info} on @t{$@{@i{fs}@}} +A pre-mounted file system has been noted. + +@end table + +XXX: This section needs to be updated + +@c ################################################################ +@node Acknowledgments & Trademarks, Index, Internals, Top +@comment node-name, next, previous, up +@unnumbered Acknowledgments & Trademarks + +Many thanks to the @email{amd-dev@@majordomo.cs.columbia.edu,Amd +Developers} mailing list through the months developing am-utils. These +members have contributed to the discussions, ideas, code and +documentation, and subjected their systems to alpha quality code. +Special thanks go to those +@uref{http://www.cs.columbia.edu/~ezk/am-utils/AUTHORS.txt,authors} who +have submitted patches. + +Thanks to the Formal Methods Group at Imperial College for suffering +patiently while @i{Amd} was being developed on their machines. + +Thanks to the many people who have helped with the development of +@i{Amd}, especially Piete Brooks at the Cambridge University Computing +Lab for many hours of testing, experimentation and discussion. + +Thanks to the @email{amd-workers@@majordomo.glue.umd.edu,Amd Workers} +mailing list members for many suggestions and bug reports to @i{Amd}. + +@itemize @bullet +@item +@b{DEC}, @b{VAX} and @b{Ultrix} are registered trademarks of Digital +Equipment Corporation. +@item +@b{AIX} and @b{IBM} are registered trademarks of International Business +Machines Corporation. +@item +@b{Sun}, @b{NFS} and @b{SunOS} are registered trademarks of Sun +Microsystems, Inc. +@item +@b{UNIX} is a registered trademark in the USA and other countries, +exclusively licensed through X/Open Company, Ltd. +@item +All other registered trademarks are owned by their respective owners. +@end itemize + +@c ################################################################ +@node Index, , Acknowledgments & Trademarks, Top +@comment node-name, next, previous, up +@unnumbered Index + +@printindex cp + +@contents +@bye + +@c ==================================================================== +@c ISPELL LOCAL WORDS: +@c LocalWords: setfilename amdref overfullrule settitle titlepage titlefont nz +@c LocalWords: authorfont vskip ifinfo iftex cindex unnumberedsec dfn xref vol +@c LocalWords: locationN pxref jpo nott concentrix Sjoerd sjoerd cwi Eitan vuw +@c LocalWords: Mizrotsky eitan shumuji dgux fpx scp hcx metcalf masala hlh OTS +@c LocalWords: Presnell srp cgl Trost trost ogi pyrOSx OSx tubsibr riscix iX +@c LocalWords: Piete pb Lindblad cjl ai umax utek xinu Mitchum D'Souza dsouza +@c LocalWords: mrc apu alliant aviion AViiON fps macII multimax tahoe vax emph +@c LocalWords: mapdefault valA valB valC YPTSDIR ETCDIR substr MAKEDBM YPDBDIR +@c LocalWords: NOPUSH njw dylan dk dylan njw anydir domN achilles mjh pref sel +@c LocalWords: gdef loc loc loc ldots autodir remopts rwho rwho styx styx yoyo +@c LocalWords: noindent gould rvdmount rvdunmount fserver mtmp unioned logfile +@c LocalWords: dmn esac phjk toytown toytown toytown toytown phjk RdDir RdLnk +@c LocalWords: volname attrs netif dougal inaddr hwaddr ec mountmaps passno xy +@c LocalWords: freq dumpset hfs brian florence localinfo fstabs automaps defn +@c LocalWords: localname fsck'd opr gummo sjv ganymede sjv fserv fserv fserv +@c LocalWords: vaxA vaxB wp thpfs nbsd asis ifs amqprog free'ed printindex gov +@c LocalWords: LocalWords syncodeindex Distrib bsdnet lanl AutoMounter acis ic +@c LocalWords: ac uk aix bsd Mullender nl il DG lcs hpux irix ucsf NeXT cse cl +@c LocalWords: mt FX hp ibm mips utils def def Domainname eg hostd getwd tmp +@c LocalWords: subsubsection rw grpid intr noconn nocto nodevs nosuid retrans +@c LocalWords: rsize tcp timeo nounmount utimeout DDEBUG nodaemon fd hostnames +@c LocalWords: pid Amd's pendry vangogh nfsx backoff stats nomap nostats CRIT +@c LocalWords: noinfo clustername RVD dsk dsk amq hostports osver statfs str +@c LocalWords: ou counter's amdmaps proj src tftpboot sh mv cd sbin ypcat inet +@c LocalWords: Getattr getattr localhost fhandles netmask fstype noquota addr +@c LocalWords: exportfs Dumpsets dumpsets pindex ldif fixmount fixrmtab euid +@c LocalWords: lostaltmail realloc netnumber itemx primnetnum primnetname ARG +@c LocalWords: subsnetname subsnetnum netgrp netgroup multitable Shlib dec osf +@c LocalWords: hppa pc bsdi freebsd netbsd openbsd ncr sysv rs acdirmax fsid +@c LocalWords: acdirmin acregmax acregmin actimeo dumbtimr nfsv noac noauto sd +@c LocalWords: nocache nodev noint nosub pgthresh posix rdonly suid symttl mfs +@c LocalWords: AMFS umapfs myftpdir unionfs es mapname mapfile mapfile slocal +@c LocalWords: mailspool saturn saturn notknown lol ober dr xr xr drwxrwsr cfg +@c LocalWords: lrwxrwxrwx adminpr hplj adminpr cfg tekxp xterms tekxp Dupuy tp +@c LocalWords: linkname hlfsddump dirname rmtab pluto rlogin direntry pg vr dn +@c LocalWords: maxmem hlfsdir xmailbox showmount cn amdmap amdmapName resvport +@c LocalWords: objectClass amdmapKey amdmapValue ln powerpc amdmapTimestamp ez +@c LocalWords: moisil FSinfo Libtool Unmounting sublink fileservers NullProc +@c LocalWords: gethostname mount's unmounts linkx remounts unmounting UAs SA's +@c LocalWords: mountpoint mountpoints unescaped UIDs util's overlayed uref EFS +@c LocalWords: serv maxgroups nfsl cachedir copt cfsadmin efs addopts fg +@c LocalWords: nointr diff --git a/doc/hlfsd.ps b/doc/hlfsd.ps new file mode 100644 index 0000000..18c257d --- /dev/null +++ b/doc/hlfsd.ps @@ -0,0 +1,2718 @@ +%!PS-Adobe-2.0 +%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software +%%Title: hlfsd.dvi +%%Pages: 15 1 +%%BoundingBox: 0 0 612 792 +%%EndComments +%%BeginProcSet: /usr/local/lib/tex/ps/psfig.pro +/TeXscale { 65536 div } def + +/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap +currentlinejoin currentdash currentgray currentmiterlimit ] cvx def + +/startTexFig { + /SavedState save def + userdict maxlength dict begin + currentpoint transform + + DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap + setlinewidth setmatrix + + itransform moveto + + /ury exch TeXscale def + /urx exch TeXscale def + /lly exch TeXscale def + /llx exch TeXscale def + /y exch TeXscale def + /x exch TeXscale def + + currentpoint /cy exch def /cx exch def + + /sx x urx llx sub div def % scaling for x + /sy y ury lly sub div def % scaling for y + + sx sy scale % scale by (sx,sy) + + cx sx div llx sub + cy sy div ury sub translate + + /DefFigCTM matrix currentmatrix def + + /initmatrix { + DefFigCTM setmatrix + } def + /defaultmatrix { + DefFigCTM exch copy + } def + + /initgraphics { + DocumentInitState setmiterlimit setgray setdash + setlinejoin setlinecap setlinewidth setmatrix + DefFigCTM setmatrix + } def + + /showpage { + initgraphics + } def + /erasepage { + initgraphics + } def + /copypage {} def + +} def +/clipFig { + currentpoint 6 2 roll + newpath 4 copy + 4 2 roll moveto + 6 -1 roll exch lineto + exch lineto + exch lineto + closepath clip + newpath + moveto +} def +/doclip { llx lly urx ury clipFig } def +/endTexFig { + end SavedState restore +} def +%%EndProcSet +%%BeginProcSet: tex.pro +/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch +load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ +isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get +round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10 +N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{ +/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{ +statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N +/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin +/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array +/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 +array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail} +B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont +setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup +length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ +ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B +/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 +N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S +dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 +ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice +ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image} +imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr +put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf +div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook +known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore +showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook +known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 +array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N +/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X +/rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0 +7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 +TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 +-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{ +moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{ +S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B +/j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w +}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p +a}B /bos{/SS save N}B /eos{clear SS restore}B end +%%EndProcSet +%%BeginProcSet: special.pro +TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs +792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N +/p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{ +@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true +N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X} +B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B +/magscale true def end /@MacSetUp{userdict /md known{userdict /md get type +/dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx +defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{ +itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 +roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll +itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array +astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{ +PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR +pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 +get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip +not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if +yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 +rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get +ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not +and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip +not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if} +ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy +TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if} +if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{ +DVImag dup scale}if}N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save +N userdict maxlength dict begin /magscale false def normalscale currentpoint +TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts +/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx +sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx +psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N +/erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{psf$llx psf$lly +psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll +S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end +psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave +normalscale currentpoint TR @SpecialDefaults}N /@setspecial{CLIP{newpath 0 0 +moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR +hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg +TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{grestore +clear SpecialSave restore end}N /@defspecial{SDict begin}N /@fedspecial{end}B +/li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1 +setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY +moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix +currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix +setmatrix}N end +%%EndProcSet +TeXDict begin 1000 300 300 @start /Fa 2 117 df<3E0006000C000C000C000C00180019 +E01E30183038303030303030306060606460C460C4C0C8C0700E147E9313>104 +D<02000600060006000C00FF800C000C001800180018001800300031003100320032001C000912 +7F910D>116 D E /Fb 5 116 df<001FC0001FC0001FC00001C00001C00001C00001C00001C000 +01C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E0 +01C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>100 +D<0007E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E0 +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 +0000E0003FFF807FFFC03FFF80151E7F9D1A>102 D104 D108 D<07FB801FFF807FFF80780780E003 +80E00380E003807800007FC0003FFC0007FE00003F800007806001C0E001C0E001C0F003C0FC07 +80FFFF00EFFE00E3F80012157C941A>115 D E /Fc 13 118 df<000180000180000380000380 +000780000780000B800013800013800023C00021C00041C000C1C00081C00101C001FFC00201C0 +0201C00401C00801C00801C01801C0FE0FF815177E961A>65 D<03FFFE00E00E00E00400E00400 +E00401C00401C00401C10001C10003820003820003FE000386000704000704080704080700100E +00100E00300E00200E00601C01C0FFFFC017177E9618>69 D<03F0003F8000F000780000B80078 +0000B800B80000B80138000138017000013802700001380270000138047000023808E000021C08 +E000021C10E000021C10E000041C21C000041C41C000041C41C000041C81C000081D038000081D +038000080E038000080E038000180C070000FE083FE00021177E9620>77 +D<03F00FE000F0030000F0020000B8020000B80200011C0400011C0400011C0400010E0400020E +0800020E080002070800020708000403900004039000040390000401D0000801E0000800E00008 +00E0000800E00018004000FE0040001B177E961A>I<03FFE000E03800E01C00E01C00E01C01C0 +1C01C01C01C01C01C0380380700381C003FF000381800700C00700E00700E00700E00E01C00E01 +C00E01C20E01C21C00C4FF807817177E961A>82 D<007C400182800301800601800601800C0100 +0C01000C00000E00000FC00007F80003FC00007C00000E00000E00000600200600400C00400C00 +600800601000D8600087C00012177D9614>I<7FC1FC1C00601C00401C00401C00403800803800 +80380080380080700100700100700100700100E00200E00200E00200E00200E00400E00800E008 +006030003040001F8000161779961A>85 D<007C00180018001800180030003000300030076008 +E018E0306030C060C060C060C0C180C188C1884388659038E00E177C9612>100 +D<030706000000000000384C4C4C8C18181830326262243808177D960B>105 +D<078018C0304060606060C060C060C06080C080C08180C10046003C000B0E7B8D12>111 +D<38F04518463846308C000C000C000C001800180018001800300030000D0E7D8D0F>114 +D<07800C4018E018E038001E001F8007C000C060C0E0C0C180C3003E000B0E7D8D0F>I<1C0826 +184618461886300C300C300C30186018621862186208E407380F0E7D8D13>117 +D E /Fd 25 127 df<60F0F0600404798312>46 D<0018003800380070007000E000E001C001C0 +01C003800380070007000E000E001C001C001C003800380070007000E000E000C0000D1A7E9612 +>I<07C00FE01C703838701C701CE00EE00EE00EE00EE00EE00EE00EE01E701C701C38381C700F +E007C00F147F9312>I61 +D<3F807FC070E0207000700FF03FF07870E070E070E07070F03FFE1F3E0F0E7E8D12>97 +DI<07F01FF8383870106000E000E000E000E0006000703838381FF007E00D0E +7E8D12>I<00F800F8003800380038003807B81FF8387870386038E038E038E038E03860387078 +38781FFE0FBE0F147F9312>I<07801FE0387070706038E038FFF8FFF8E0006000703838381FF0 +07C00D0E7E8D12>I<007E00FF01C70382038003807FFEFFFE0380038003800380038003800380 +0380038003803FF83FF81014809312>I104 D<06000F000F00060000000000 +0000FF00FF000700070007000700070007000700070007000700FFF0FFF00C157D9412>I107 DIII<0F803FE038E07070E038E038E038E038E0 +38F078707038E03FE00F800D0E7E8D12>II114 D<1FF03FF06070C070E0007F003F +E00FF000786018E018F030FFE0DFC00D0E7E8D12>I<06000E000E000E007FF8FFF80E000E000E +000E000E000E000E000E380E380E3807F003C00D127F9112>III<3FFC7FFC7038707000E001C0038007000E001C1C38 +1C701CFFFCFFFC0E0E7F8D12>122 D<18403CE0E78043000B047D9312>126 +D E /Fe 64 125 df<00FCF807839C0E079C1C07081C07001C07001C07001C07001C0700FFFFE0 +1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE0 +1617809615>11 D<00FC000782000E07001C07001C02001C00001C00001C00001C0000FFFF001C +07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE013 +17809614>I<00FC7E000703C1000E0783801C0703801C0701001C0700001C0700001C0700001C +070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C070380 +1C0703801C0703801C0703801C070380FF1FCFF01C1780961D>14 D<60F0F07010102020404004 +0A7D960A>39 D<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C04 +020108227D980E>I<8040203018180C0C0E060606070707070707070707070606060E0C0C1818 +3020408008227E980E>I<60F0F070101020204040040A7D830A>44 DI< +60F0F06004047D830A>I<0008001800300030003000600060006000C000C000C0018001800180 +030003000600060006000C000C000C00180018001800300030003000600060006000C000C0000D +217E9812>I<03000700FF00070007000700070007000700070007000700070007000700070007 +000700070007007FF00C157E9412>49 D<0F8030E040708030C038E03840380038007000700060 +00C00180030006000C08080810183FF07FF0FFF00D157E9412>I<0FE030306018701C701C001C +00180038006007E000300018000C000E000EE00EE00EC00C401830300FE00F157F9412>I<0030 +0030007000F001F001700270047008701870107020704070C070FFFE0070007000700070007003 +FE0F157F9412>I<01F00608080C181C301C70006000E000E3E0EC30F018F00CE00EE00EE00E60 +0E600E300C3018183007C00F157F9412>54 D<40007FFE7FFC7FF8C00880108020004000800080 +0100010003000200060006000E000E000E000E000E0004000F167E9512>I<07E018302018600C +600C700C78183E101F600FC00FF018F8607C601EC00EC006C006C004600C38300FE00F157F9412 +>I<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C7018701860 +3020C01F800F157F9412>I<60F0F06000000000000060F0F07010102020404004147D8D0A>59 +D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107000307 +8002038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE17177F961A>65 +DI<00 +FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E00000E0 +0000E000106000107000103000203800201C00400E008003830000FC0014177E9619>II70 +D72 +DI76 DII<00FC00030300 +0E01C01C00E0380070300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE0001C +7000387000383000303800701C00E00E01C003030000FC0016177E961B>II82 D<0FC4302C601C400CC004C0 +04C004E00070007F003FE00FF801FC001C000E0006800680068006C004E008D81087E00F177E96 +14>I<7FFFF8603818403808403808803804803804803804003800003800003800003800003800 +00380000380000380000380000380000380000380000380000380000380007FFC016177F9619> +III88 +D91 D93 D<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12> +97 D +I<07F01838303870106000E000E000E000E000600070083008183007C00D0E7F8D10>I<007E00 +000E00000E00000E00000E00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00 +E00E00E00E00E00E00E00E00600E00700E00301E00182E0007CFC012177F9614>I<0FC0186030 +307038E018FFF8E000E000E000600070083010183007C00D0E7F8D10>I<03E006700E701C201C +001C001C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF800C17 +80960B>I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006 +C006600C38380FE010157F8D12>II<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780 +960A>I107 DIII<07C018303018600C600CE00EE00EE00EE00EE00E701C30181830 +07C00F0E7F8D12>II<07C2 +001C2600381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE +00000E00000E00000E00000E00000E00007FC012147F8D13>II<1F4060C0C040C040E000FF007F801FC001 +E080608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FF8038003800380038 +0038003800380038403840384038401C800F000A147F930E>IIIIII124 D E /Ff 10 58 df<1F00318060C04040C060C060 +C060C060C060C060C060C060404060C031801F000B107F8F0F>48 D<0C003C00CC000C000C000C +000C000C000C000C000C000C000C000C000C00FF8009107E8F0F>I<1F00618040C08060C06000 +60006000C00180030006000C00102020207FC0FFC00B107F8F0F>I<1F00218060C060C000C000 +8001800F00008000400060C060C060804060801F000B107F8F0F>I<0300030007000F000B0013 +00330023004300C300FFE003000300030003001FE00B107F8F0F>I<20803F002C002000200020 +002F0030802040006000600060C06080C061801F000B107F8F0F>I<0780184030C060C06000C0 +00CF00F080E040C060C060C060406060C030801F000B107F8F0F>I<40007FE07FC08080808001 +000200040004000C0008000800180018001800180018000B117E900F>I<1F00318060C060C060 +C071803F000F00338061C0C060C060C060404060801F000B107F8F0F>I<1F00318060C0C040C0 +60C060C06040E021E01E600060004060C0608043003E000B107F8F0F>I +E /Fg 10 58 df<0F0030C0606060604020C030C030C030C030C030C030C030C030C030402060 +60606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C000C000C000C000C00 +0C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060F070F0306030007000700060 +00C001C00180020004000810101020207FE0FFE00C137E9211>I<0FC030707038703870380038 +003000E00FC0007000380018001C601CF01CF018E03860701FC00E137F9211>I<006000E000E0 +0160026006600C600860106020606060C060FFFC0060006000600060006003FC0E137F9211>I< +60607FC07F8044004000400040004F0070C040E0006000700070E070E070E06040E021C01F000C +137E9211>I<07C00C201070207060006000C000CF00D0C0E060C020C030C030C0304030602020 +6010C00F000C137E9211>I<40007FFC7FF8401080108020004000800100010003000200060006 +000E000E000E000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800F +E031F06078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0 +30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I +E /Fh 59 122 df<183C3C3C0404080810204080060C779C0D>39 D<1838783808081010204040 +80050C7D830D>44 DI<3078F06005047C830D>I<003C0000C60001 +83000303000603000603800E03800C03801C03801C0300380700380700380700380700700E0070 +0E00700E00700E00E01C00E01C00E01C00E03800E03800E03000C06000E0600060C0007180001E +0000111D7B9B15>48 D<00020006000C001C007C039C0038003800380038007000700070007000 +E000E000E000E001C001C001C001C003800380038003800780FFF00F1C7C9B15>I<003C0000C3 +000101800201800201C00441C00441C00841C00841C00841C01083801083801107000E0600000C +0000180000300000C0000100000600000800001001001002002002004006007E0C00C7F80083F8 +0080E000121D7C9B15>I<0001800001C000038000038000038000030000070000070000060000 +0E00000C00001C0000180000180000300000300000600000400000C600018E00010E00020E0006 +1C000C1C00181C003F1C0040F800803F0000380000380000700000700000700000700000E00000 +600012247E9B15>52 D<00C06000FFC001FF8001FE000100000100000200000200000200000200 +00047800058C00060600040600080600000700000700000600000E00000E00700E00700C00E01C +0080180080380040300040600021C0001F0000131D7C9B15>I<09C04017E0801FE0803C610030 +2700601A00400600400400800C0080080000180000100000300000600000600000600000C00000 +C00001C0000180000380000380000300000700000700000700000E00000E00000C0000121D799B +15>55 D<001E000061000081800180800300C00300C006018006018006018007030007860003CC +0003F00001F000037800063C00081E00180E00300E00600600600600600600C00C00C00C00C018 +0060100060200030C0000F0000121D7C9B15>I<003C0000C6000183000303000603000E03000C +03801C03801C03001C0300380700380700380700380F00380E00181E00181E000C6C00079C0000 +1C00001800003800003000006000E0C000E0C0008180008600007C0000111D7B9B15>I<060F0F +06000000000000000000003078F06008127C910D>I<0000180000001800000038000000380000 +007800000078000000B8000001B800000138000002380000023C0000041C0000041C0000081C00 +00181C0000101C0000201C0000201C00007FFC0000401C0000801C0001801C0001001C0002001C +0002001C0004000E000C000E001C001E00FF00FFC01A1D7E9C1F>65 D<01FFFE00003C07800038 +03C0003801C0003801C0003801C0007001C0007003C0007003C00070078000E0070000E00E0000 +E03C0000FFF80001C01C0001C00E0001C00F0001C00F0003800F0003800F0003800F0003800F00 +07001E0007001C0007003C00070078000E01E000FFFF80001A1C7D9B1D>I<0003F020001E0C60 +003002E000E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C0000 +00780000007800000078000000F0000000F0000000F0000000F0000000F0000400F0000400F000 +0400F0000800700008007000100038002000180040000C0180000706000001F800001B1E7A9C1E +>I<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F0007000700070007000 +7000F000E000F000E000F000E000F000E000F001C001E001C001E001C001E001C001C0038003C0 +03800380038007800380070007000E0007001C0007003800070070000E01C000FFFF00001C1C7D +9B1F>I<01FFFFE0003C00E0003800600038004000380040003800400070004000700040007020 +400070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C080000381 +0100038001000380020003800200070004000700040007000C00070018000E007800FFFFF0001B +1C7D9B1C>I<01FFFFC0003C01C0003800C0003800800038008000380080007000800070008000 +7020800070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C08000 +03810000038000000380000003800000070000000700000007000000070000000F000000FFF000 +001A1C7D9B1B>I<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000 +801E0000801C0000803C0000803C000000780000007800000078000000F0000000F0000000F001 +FFC0F0001E00F0001C00F0001C00F0001C00F0001C00700038007000380038003800180078000C +0090000707100001F800001B1E7A9C20>I<01FFCFFE003C01E0003801C0003801C0003801C000 +3801C00070038000700380007003800070038000E0070000E0070000E0070000FFFF0001C00E00 +01C00E0001C00E0001C00E0003801C0003801C0003801C0003801C000700380007003800070038 +00070038000F007800FFE7FF001F1C7D9B1F>I<01FFC0003C0000380000380000380000380000 +700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00003800003 +80000380000380000700000700000700000700000F0000FFE000121C7E9B10>I<007FF0000780 +000700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00003800 +00380000380000380000700000700000700000700060E000E0E000C0C00081C000838000470000 +3C0000141D7B9B16>I<01FFC0FF003C003C003800300038004000380080003801000070020000 +700400007010000070200000E0400000E0C00000E1C00000E5C00001C8E00001D0E00001E0E000 +01C07000038070000380700003803800038038000700380007001C0007001C0007001C000F001E +00FFE0FF80201C7D9B20>I<01FFE0003C00003800003800003800003800007000007000007000 +00700000E00000E00000E00000E00001C00001C00001C00001C000038008038008038008038010 +0700100700300700600700E00E03C0FFFFC0151C7D9B1A>I<01FE0007F8003E000780002E000F +00002E001700002E001700002E002700004E002E00004E004E00004E004E00004E008E00008E01 +1C00008E011C00008E021C00008E021C0001070438000107043800010708380001071038000207 +107000020720700002072070000207407000040740E000040780E000040700E0000C0700E0001C +0601E000FF861FFC00251C7D9B25>I<01FC03FE001C0070003C0060002E0040002E0040002E00 +40004700800047008000470080004380800083810000838100008181000081C1000101C2000101 +C2000100E2000100E2000200E4000200740002007400020074000400380004003800040038000C +0018001C001000FF8010001F1C7D9B1F>I<0007F000001C1C0000700E0000E0070001C0038003 +800380070003800E0003C01E0003C01C0003C03C0003C03C0003C0780003C0780003C0780003C0 +F0000780F0000780F0000780F0000F00F0000F00F0000E00F0001E00F0003C0070003800700070 +007800E0003801C0001C0380000E0E000003F800001A1E7A9C20>I<01FFFC00003C0700003803 +80003801C0003801C0003801C0007003C0007003C0007003C00070038000E0078000E0070000E0 +0E0000E0380001FFE00001C0000001C0000001C000000380000003800000038000000380000007 +0000000700000007000000070000000F000000FFE000001A1C7D9B1C>I<01FFF800003C0E0000 +38070000380380003803800038038000700780007007800070078000700F0000E00E0000E01C00 +00E0700000FFC00001C0C00001C0600001C0700001C07000038070000380700003807000038070 +000700F0000700F0400700F0400700F0800F007880FFE0790000001E001A1D7D9B1E>82 +D<000F8400304C00403C00801801001803001803001806001006001006000007000007000003E0 +0003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001806001806003 +00600200F00400CC180083E000161E7D9C17>I<1FFFFFC01C0701C0300E00C0200E0080600E00 +80400E0080401C0080801C0080801C0080001C0000003800000038000000380000003800000070 +000000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C0000001 +C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C000E0018000E0010000E +0010000E0010001C0020001C0020001C0020001C00200038004000380040003800400038004000 +70008000700080007000800070008000E0010000E0010000E0010000E0020000E0020000E00400 +00E00400006008000030300000104000000F800000191D779B1F>I87 D<01FF81FE001E00F0001C0060001E +0080000E0180000E0100000F02000007040000070800000790000003A0000003C0000001C00000 +01C0000001E0000002E0000004E0000008F0000010700000207000006038000040380000803C00 +01001C0002001C0006001E001E001E00FF80FFC01F1C7E9B1F>I<00FFFF8000F0070001C00E00 +01801E0001001C0001003800020070000200E0000201C0000001C0000003800000070000000E00 +00001C0000001C0000003800000070000000E0080001C0100001C0100003801000070020000E00 +20001C0060003C00C0003801C00070078000FFFF8000191C7D9B19>90 D<03CC063C0C3C181C38 +38303870387038E070E070E070E070E0E2C0E2C0E261E462643C380F127B9115>97 +D<3F00070007000E000E000E000E001C001C001C001C0039C03E60383038307038703870387038 +E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C08181C38383000 +70007000E000E000E000E000E000E008E010602030C01F000E127B9113>I<001F800003800003 +80000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C003838 +00303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264003C38 +00111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000E008601060 +2030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C00003800003800003800 +00380000380003FF8000700000700000700000700000700000E00000E00000E00000E00000E000 +01C00001C00001C00001C00001C000038000038000038000030000030000070000C60000E60000 +CC00007800001425819C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C3838 +30383038187818F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0FC00001C000 +01C0000380000380000380000380000700000700000700000700000E78000E8C000F0E000E0E00 +1C0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100E03200 +601C00111D7D9C15>I<01800380010000000000000000000000000000001C002600470047008E +008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>I<0FC00001C0 +0001C0000380000380000380000380000700000700000700000700000E0F000E11000E23800E43 +801C83001C80001D00001E00003F800039C00038E00038E00070E20070E20070E20070E400E064 +00603800111D7D9C13>107 D<1F800380038007000700070007000E000E000E000E001C001C00 +1C001C0038003800380038007000700070007000E400E400E400E40068003800091D7C9C0B>I< +3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701 +C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122> +I<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C +40381C40383840383880701900300E0012127C9117>I<01E007180C0C180C380C300E700E700E +E01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<07870004D98008E0C008E0C0 +11C0E011C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C00 +0E70000E00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<3C3C26C246 +8747078E068E000E000E001C001C001C001C0038003800380038007000300010127C9112>114 +D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F000E12 +7D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E000E000E001C00 +1C001C001C00384038403840388019000E000B1A7D990E>I<1E0300270700470700470700870E +00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839001C5900078E +0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C0818083808181018 +200C4007800F127C9113>I<1E01832703874703874703838707018707010E07010E07011C0E02 +1C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>I<070E001991 +0010E38020E38041C30041C00001C00001C000038000038000038000038000070200670200E704 +00CB04008B080070F00011127D9113>I<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C +1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114>I +E /Fi 5 104 df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003 +C010107E9115>15 D<0000030000000003000000000180000000018000000000C0000000006000 +7FFFFFF000FFFFFFF8000000000E00000000070000000001E0000000007800000001E000000003 +8000000006000000001C00FFFFFFF8007FFFFFF0000000006000000000C0000000018000000001 +80000000030000000003000025187E952A>41 D<0000600000600000C00000C000018000018000 +0180000300000300000600000600000C00000C0000180000180000180000300000300000600000 +600000C00000C0000180000180000300000300000300000600000600000C00000C000018000018 +0000300000300000300000600000600000C0000040000013287A9D00>54 +D<003C00E001C00180038003800380038003800380038003800380038003800380038003000700 +1C00F0001C00070003000380038003800380038003800380038003800380038003800380018001 +C000E0003C0E297D9E15>102 DI E /Fj 57 123 +df<3803807C07C0FE0FE0FF0FF0FF0FF07F07F03B03B00300300300300700700600600600600C +00C01C01C018018070070020020014117EA21D>34 D<387CFEFFFF7F3B03030706060C1C187020 +08117C8610>44 DI<387CFEFEFE7C3807077C8610>I<00FE00 +07FFC00F83E01F01F03E00F83E00F87C007C7C007C7C007CFC007CFC007EFC007EFC007EFC007E +FC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C7C007C3E00F8 +3E00F81F01F00F83E007FFC000FE0017207E9F1C>48 D<00180000780001F800FFF800FFF80001 +F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 +F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07F +FFE013207C9F1C>I<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F8 +3803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C018 +0380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FF +C00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE +0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01 +FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE000 +1FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E070 +07E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE17 +207E9F1C>I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC000180000180000180000 +18000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8 +FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<001F8000FFE003F0 +7007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00 +F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00 +F00783E003FFC000FF0017207E9F1C>I<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87F +FFF0E00060E000C0C00180C00300C00300000600000C00001C0000180000380000780000780000 +F00000F00000F00001F00001F00001F00003F00003F00003F00003F00003F00003F00003F00001 +E00017227DA11C>I<00FE0003FFC00703E00E00F01C00F01C00783C00783E00783F00783F8078 +3FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801FEF000FEF0003E +F0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001FF0017207E9F1C>I<01FE0007FF +800F83E01E01F03E00F07C00F87C0078FC007CFC007CFC007CFC007EFC007EFC007EFC007E7C00 +FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C00007C1E007C3F00F83F00F83F00F03F01 +E01E03C01C0F800FFE0003F80017207E9F1C>I<07FC001FFF00380F807007C0F807E0FC07E0FC +07E0FC07E07807E0000FC0001F80001F00003C0000780000700000E00000E00000C00000C00000 +C00000C00000C00000C00000000000000000000000000000000001C00003E00007F00007F00007 +F00003E00001C00013237DA21A>63 D<000070000000007000000000F800000000F800000000F8 +00000001FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E +7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE00000 +600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00 +030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF825227EA12A>65 +DI<0003FE0080001FFF818000FF01E38001F8 +003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E +000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000 +FE00000000FE000000007E000000007E000001807F000001803F000001803F000003801F800003 +000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE000021227D +A128>IIII72 DI76 +DI<0007FC0000003FFF800000FC07E00003F001F80007E0 +00FC000FC0007E001F80003F001F80003F003F00001F803F00001F807F00001FC07E00000FC07E +00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0 +FE00000FE0FE00000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F +000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC000023227DA12A>79 +DI82 D<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC00 +0CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F0000 +3F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F +>I<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003 +F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800000003F8000000 +03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 +0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 +000003F8000003FFFFF80003FFFFF80022227EA127>II87 D<0400400E00E0180180380380300300600600600600E0 +0E00C00C00C00C00DC0DC0FE0FE0FF0FF0FF0FF07F07F03E03E01C01C014117AA21D>92 +D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01 +F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97 +DI<00FF8007FFE00F83 +F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00 +007E00003E00301F00600FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E0000 +003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E00 +01FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E +00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83 +BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC +00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003 +FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F8000 +0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F8000 +0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800 +13237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03 +C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC7000 +3EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF0018217E951C>II<1C003E007F007F007F003E001C +000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F00 +1F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I107 DIII<00FE0007FFC00F83E01E00F03E00F87C007C7C00 +7C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83 +E007FFC000FE0017167E951C>II114 D<0FF3003FFF00781F0060 +0700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E0 +0380E00380F00700FC0E00EFFC00C7F00011167E9516>I<018000018000018000018000038000 +0380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F8000 +0F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE00 +00F80011207F9F16>IIIII +I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC0000F80001F00003F0 +3007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE014167E9519>I +E /Fk 44 127 df34 +D<00C00001C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1C780F1C3 +0079C0003FC0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071C70079DF +003FFE001FF80007E00001C00001C00000C00011207E9C16>36 D<00E001E0038007000E001C00 +1C0038003800700070007000E000E000E000E000E000E000E000E000E000700070007000380038 +001C001C000E000700038001E000E00B217A9C16>40 DI45 +D<70F8F8F8700505788416>I<000180000380000380000700000700000E00000E00001C00001C +0000380000380000700000700000E00000E00001C00001C0000380000380000700000700000E00 +000E00001C00001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03 +E0000FF8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E0 +0380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E00011197E98 +16>I<70F8F8F870000000000000000070F8F8F8700512789116>58 D<7FFF00FFFF80FFFF8000 +0000000000000000000000000000FFFF80FFFF807FFF00110B7E9116>61 +D<00F80003FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381 +C0E381C0E381C0E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000FC001219 +7E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00 +071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE0 +7F1FC013197F9816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C +001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFF +E0FFFFE07FFFE013197F9816>69 D<7F1FC0FFBFE07F1FC01C07001C07001C07001C07001C0700 +1C07001C07001FFF001FFF001FFF001C07001C07001C07001C07001C07001C07001C07001C0700 +1C07007F1FC0FFBFE07F1FC013197F9816>72 D77 D<7FE000FFF8007FFC001C1E001C0F +001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E +001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF00 +781F00F00700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F00000700 +000380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7F07F0FF8F +F87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01 +C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE0000F8001519809816>85 +D89 D<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00 +E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<7E0000FE00007E00000E +00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E +00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE +3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F +00007F00003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E007 +00E00700E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816 +>I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010 +127D9116>I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C000 +01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF00 +3FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C +000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000 +E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00000E00000E00000E +00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E03800E03800E03800E03800E +03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>I<018003C003C0018000000000 +000000007FC07FC07FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7F +FF101A7D9916>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E +0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF +CFF07F87F01419809816>107 DI +I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03 +800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC003C1E00780F0070 +0700E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E00011 +127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E0070 +0E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E0000 +7FC000FFE0007FC000141B809116>I114 +D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F12 +7D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007000007 +000007000007000007000007010007038007038007038007870003FE0001FC0000F80011177F96 +16>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E0380 +0E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F +000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B80003B80001F00001F00000E0 +0013127F9116>II<7F1FC07F3FC07F1FC0 +0F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0 +FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C +00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E00001C0 +0079C0007BC0007F80003F00003C0000131B7F9116>I<3FFFC07FFFC07FFFC0700780700F0070 +1E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012 +127F9116>I<1C303F78FFF8F7E061C00D057C9816>126 D E /Fl 86 125 +df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E +01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000 +0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC +001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E0000 +0E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 +0E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01 +C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01 +C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17 +>I<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00 +E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E +00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00 +0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I20 D<60F0F0F0F0F0F0F06060606060606060606060606000000000 +0060F0F060041E7C9D0C>33 D<6060F0F0F8F86868080808080808101010102020404080800D0C +7F9C15>I<0080008007E01898308460824081C087C08FC08FC086E080F0807E803FC01FF00FF8 +03FC00BE008E00876087F083F083E0838082408240842088189007E00080008010217E9E15>36 +D<00E0000001900000030800000308000007080000070800000708000007080000071000000710 +0000072000000740000003C03FE003800F00038006000380040005C0040009C0080010E0100030 +E010006070200060702000E0384000E03C4000E01C8000E00F0020E0070020700780403009C040 +1830E18007C03E001B1F7E9D20>38 D<60F0F8680808081010204080050C7C9C0C>I<00400080 +0100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E000E0 +00E000E000E000E000E000600060006000700030003000180018000C000C000600020001000080 +00400A2A7D9E10>I<800040002000100018000C000C0006000600030003000380018001800180 +01C001C001C001C001C001C001C001C001C001C001C001C0018001800180038003000300060006 +000C000C00180010002000400080000A2A7E9E10>I<60F0F0701010101020204080040C7C830C> +44 DI<60F0F06004047C830C>I<00010003000600060006000C000C00 +0C0018001800180030003000300060006000C000C000C001800180018003000300030006000600 +0C000C000C00180018001800300030003000600060006000C000C00010297E9E15>I<03C00C30 +1818300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760 +066006700E300C300C18180C3007E0101D7E9B15>I<030007003F00C700070007000700070007 +00070007000700070007000700070007000700070007000700070007000700070007000F80FFF8 +0D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C0038 +0070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C +781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F700FF80FF80FF8 +0FF00E401C201C183007E0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00 +009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0 +001C00001C00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC0 +20002000200020002000200023E024302818301C200E000E000F000F000F600FF00FF00FF00F80 +0E401E401C2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3 +E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0101D +7E9B15>I<4000007FFF807FFF007FFF0040020080040080040080080000100000100000200000 +600000400000C00000C00001C00001800001800003800003800003800003800007800007800007 +8000078000078000078000030000111D7E9B15>I<03E00C301008200C20066006600660067006 +780C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C1C1007 +E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F30 +0F18170C2707C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60F0F06000 +00000000000000000060F0F06004127C910C>I<60F0F0600000000000000000000060F0F07010 +10101020204080041A7C910C>I<7FFFFFC0FFFFFFE00000000000000000000000000000000000 +000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61 +D<003F800000C0600003001800040004000800020010000100201F00802070808040E0404040C0 +384041C038408180382083803820838038208380382083803820838038208180382041C0382040 +C0384040E0784020709880201F0F00100000000800000004000000030001E000C01F80003FF000 +1B1D7E9C20>64 D<000600000006000000060000000F0000000F0000000F000000178000001780 +00001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180 +F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E +001F00FF80FFF01C1D7F9C1F>II<001F808000E0618001801980 +070007800E0003801C0003801C00018038000180780000807800008070000080F0000000F00000 +00F0000000F0000000F0000000F0000000F0000000F00000007000008078000080780000803800 +00801C0001001C0001000E000200070004000180080000E03000001FC000191E7E9C1E>II< +FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F0600 +0FFE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F000C +0F003CFFFFFC181C7E9B1C>II<001F808000E061800180198007 +0007800E0003801C0003801C00018038000180780000807800008070000080F0000000F0000000 +F0000000F0000000F0000000F0000000F000FFF0F0000F80700007807800078078000780380007 +801C0007801C0007800E00078007000B800180118000E06080001F80001C1E7E9C21>III<1FFF00F8007800780078007800780078 +00780078007800780078007800780078007800780078007800787078F878F878F878F0F040E021 +C01F00101D7F9B15>IIIII<003F800000E0E0000380380007001C000E000E001C +0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0 +F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007 +000E000E0007001C000380380000E0E000003F80001B1E7E9C20>II82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000 +F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C0 +8001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00 +C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F +0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 +0F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>IIII<7F +F0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F0400000788000007D8000 +003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E0000021E0000041F0 +0000C0F8000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F> +II<7FFFF07C01F07001E06003C06003C0400780400F80400F00401E00001E00003C00007C00 +00780000F00000F00001E00003E00003C0100780100780100F00101F00301E00203C00203C0060 +7800E0F803E0FFFFE0141C7E9B19>II<0808101020204040404080808080 +8080B0B0F8F8787830300D0C7A9C15>II<1FC000307000783800781C0030 +1C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F +870012127E9115>97 DI<07E00C301878307870306000E0 +00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700000700 +00070000070000070000070000070000070000070000070003E7000C1700180F00300700700700 +600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0 +131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E0006000700230021804 +0C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E00 +0E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<0003 +8003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013C0001000 +003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E +0007F800121C7F9215>II<18003C003C00180000000000 +00000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C +001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000000000000000000000000FE000 +E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 +60E0F0C0F1C061803E000B25839C0D>IIII< +FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C0380 +1C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C001806003003007003806001 +80E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212 +7F9115>II<03C1000C3300180B00300F00700700700700E00700E00700E00700 +E00700E00700E00700600700700700300F00180F000C370007C700000700000700000700000700 +000700000700000700003FE0131A7E9116>II<1F9030704030C010C010E010F8007F80 +3FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C00 +1C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003 +C00C1A7F9910>IIII<7F8FF00F03800F030007020003840001C80001D80000F00000 +700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512809116>II<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FF +F80E127F9112>III +E /Fm 42 127 df<00C00000C00007F0001FFC003CCE0070C30060C300E0C780E0CF80E0CF80F0 +CF80F8C700FEC0007FE0007FF8003FFC001FFE000FFF0003FF0000DF8020CF8070C780F8C380F8 +C380F0C380C0C30060C70070C60038DE001FF80007E00000C00000C00011217D9E18>36 +D45 D<000180000380000380000700000700000700000E0000 +0E00001C00001C00001C0000380000380000380000700000700000E00000E00000E00001C00001 +C00001C0000380000380000380000700000700000E00000E00000E00001C00001C00001C000038 +0000380000700000700000700000E00000E00000C0000011297D9E18>47 +D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E0 +0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0007FFF +807FFF80111B7D9A18>49 D<00038000000380000007C0000007C0000007C000000FE000000FE0 +00001FF000001BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C0 +7E0001803F0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FF +C07FFEFFC07FFE1F1C7E9B24>65 DI<001FE02000FFF8E003F80FE007C003E00F8001E01F00 +00E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC +000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007C00300 +03F80E0000FFFC00001FE0001B1C7D9B22>III73 D76 DI80 D82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000 +FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0 +E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFFE0781F81E0701F80E060 +1F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000 +001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 +00001F8000001F800007FFFE0007FFFE001C1C7E9B21>I86 D<7FFFFC7FFFFC7E01F87803F87003F0E007E0E007E0C00F +C0C01FC0C01F80003F00007F00007E0000FC0000FC0001F80003F80603F00607E0060FE0060FC0 +0E1F800E1F801C3F001C7F003C7E00FCFFFFFCFFFFFC171C7D9B1D>90 D<0FF8001C1E003E0F80 +3E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC0 +3E13F80FE1F815127F9117>97 DI<03FC000E0E001C1F00 +3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C01801C0300 +0E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001F00001F00001F00001 +F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801 +F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C +01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F +038001FC0013127F9116>I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F8000 +0F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F8000 +0F80000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07 +303C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFF +C00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>II<1E003F003F003F003F001E00000000000000000000000000 +FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F +9D0E>I107 DIII<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F8 +00F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I +I114 D<1FD830786018E018E018F000FF80 +7FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<03000300030003000700 +07000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F0807 +9803F00E1A7F9913>III120 +DI<3FFF803C1F00303F00303E00607C0060FC0060F80001F00003F00007E00007 +C1800F81801F81801F03803E03007E07007C0F00FFFF0011127F9115>I<1E023FFC7FF880F00F +047C9C18>126 D E /Fn 32 123 df<0E1E1E1E1E02020404080810204080070F7D840F>44 +D<0000030000000300000007000000070000000F0000000F0000001F0000002F0000002F000000 +4F0000004F80000087800000878000010780000207800002078000040780000407800008078000 +080780001007800030078000200780007FFF80004007C0008007C0008003C0010003C0030003C0 +020003C0040003C0040003C00C0003C03C0007C0FF003FFC1E237DA224>65 +D<00007F00800003808100000E00630000380027000070001F0000E0000E0001C0000E00038000 +0E000700000E000F000004000E000004001E000004003C000004003C0000080078000000007800 +0000007800000000F000000000F000000000F000000000F000000000F000000000E000000000E0 +00002000E000002000E000004000E000004000F000008000700000800070000100003800020000 +18000400001C0008000006003000000381C0000000FE000000212479A223>67 +D<00FFFFF000000F003C00000F000E00000F000700001E000380001E000380001E0001C0001E00 +01C0003C0001C0003C0001E0003C0001E0003C0001E000780001E000780001E000780001E00078 +0001E000F00003C000F00003C000F00003C000F00003C001E000078001E000078001E000070001 +E0000F0003C0000E0003C0001C0003C0003C0003C00038000780007000078000E000078001C000 +07800700000F801C0000FFFFF0000023227DA125>I<00FFFFFF80000F000780000F000180000F +000180001E000180001E000180001E000100001E000100003C000100003C000100003C01010000 +3C01000000780200000078020000007806000000780E000000FFFC000000F00C000000F00C0000 +00F00C000001E008000001E008000001E008040001E000080003C000080003C000080003C00010 +0003C000100007800020000780006000078000C000078001C0000F8007C000FFFFFF800021227D +A121>I<00FF800007FC000F80000F80000F80001780000F80001780001780002F000013C0002F +000013C0004F000013C0008F000023C0009E000023C0011E000023C0011E000023C0021E000043 +C0043C000043C0043C000043C0083C000041E0083C000081E01078000081E02078000081E02078 +000081E04078000101E040F0000101E080F0000101E100F0000101E100F0000200F201E0000200 +F201E0000200F401E0000200F801E0000400F803C0000400F003C0000400F003C0000C00E003C0 +001E00C007C000FFC0C07FFC002E227DA12C>77 D<00FFFFC0000F0070000F003C000F001C001E +000E001E000E001E000F001E000F003C001E003C001E003C001E003C003C007800380078007000 +7801E00078078000FFFC0000F00E0000F0070000F0038001E003C001E003C001E003C001E003C0 +03C0078003C0078003C0078003C0078007800F0007800F0107800F01078007020F800702FFF803 +8C000000F020237DA124>82 D<0001F020000E0C40001802C0003001C0006001C000E0018000C0 +018001C0018001C0018003C0010003C0010003C0000003C0000003E0000001F8000001FF000000 +FFE000007FF000001FF8000003FC0000007C0000003C0000001E0000001E0000001E0020001C00 +20001C0020001C00200018006000380060003000700060007000C000C8018000C607000081FC00 +001B247DA21B>I<1FFFFFF81E03C0381803C0183003C018200780182007801840078010400780 +10400F0010800F0010800F0010000F0000001E0000001E0000001E0000001E0000003C0000003C +0000003C0000003C00000078000000780000007800000078000000F0000000F0000000F0000000 +F0000001E0000001E0000001E0000001E0000003E00000FFFF00001D2277A123>I<3FFE03FF03 +C0007803C0006003C00020078000400780004007800040078000400F0000800F0000800F000080 +0F0000801E0001001E0001001E0001001E0001003C0002003C0002003C0002003C000200780004 +0078000400780004007800040070000800F0000800F00010007000100070002000700040003000 +400038018000180200000E0C000003F00000202377A124>I<007FFFFE007E001E0078003C0060 +007800C000F000C001E0008003E0008003C00100078001000F0001001E0000003C0000007C0000 +0078000000F0000001E0000003C00000078000000F8000000F0000001E0000003C004000780040 +00F0008001F0008001E0008003C00100078001000F0003001E0006001E0006003C001E0078007C +00FFFFFC001F227DA11E>90 D<00F8C00185C00705C00E03800E03801C03803C03803807007807 +00780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F07801415 +7B9419>97 D<03C03F8003800380038007000700070007000E000E000E000E001C001CF81D0C1E +0E3C0638073807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F001023 +7BA216>I<007E0001C1000301800703800E07801C07803C0000380000780000780000780000F0 +0000F00000F00000F00000F00100700100700200300C001830000FC00011157B9416>I<00003C +0003F80000380000380000380000700000700000700000700000E00000E00000E00000E00001C0 +00F9C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E00 +F00E00F00E10F01C20701C20703C20305C40308C400F078016237BA219>I<00F803840E021C02 +3C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830600F800F157A9416 +>I<001F180030B800E0B801C07001C0700380700780700700E00F00E00F00E00F00E01E01C01E +01C01E01C01E01C01E03800E03800E0780060B8006170001E700000700000700000E00000E0000 +0E00701C00F01800F0300060E0003F8000151F7E9416>103 D<00C001E001C001C00000000000 +00000000000000000000001C002300430043008700870087000E000E001C001C001C0038003800 +3840708070807080710032001C000B217BA00F>105 D<00F0000FE00000E00000E00000E00001 +C00001C00001C00001C0000380000380000380000380000700000701E0070210070C700E10F00E +10F00E20600E40001D80001E00001FC0001C7000383800383800381C00381C2070384070384070 +3840701880E01880600F0014237DA216>107 D<01E01FC001C001C001C0038003800380038007 +000700070007000E000E000E000E001C001C001C001C0038003800380038007000700070007100 +E200E200E200E200640038000B237CA20C>I<1C0F80F8002610C10C0047606606008780780700 +8780780700870070070087007007000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C +001C01C01C001C01C01C001C01C038203803803840380380704038038070803803803080700700 +31003003001E0023157B9428>I<1C0F002631C04740C08780E08780E08700E08700E00E01C00E +01C00E01C00E01C01C03801C03801C03801C0704380708380E08380E103806107006203003C016 +157B941B>I<007E0001C3000381800701C00E01C01C01E03C01E03801E07801E07801E07801E0 +F003C0F003C0F00380F00780700700700E00700C0030180018700007C00013157B9419>I<01C1 +F002621804741C08780C08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C0 +3C01C07803807003807003C0E003C1C0072380071E000700000700000E00000E00000E00000E00 +001C00001C00001C0000FFC000171F7F9419>I<1C1F002620804741C08783C08703C087018087 +00000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070 +000030000012157B9415>114 D<00FC000183000200800401800C03800C03000C00000F00000F +F00007FC0003FE00003E00000F00000700700700F00600F00600E004004008002030001FC00011 +157D9414>I<00C001C001C001C001C003800380038003800700FFF8070007000E000E000E000E +001C001C001C001C003800380038003810702070207040708031001E000D1F7C9E10>I<1E0060 +2300E04380E04381C08381C08701C08701C00703800E03800E03800E03801C07001C07001C0700 +1C07081C0E10180E101C0E101C1E200C262007C3C015157B941A>I<1E03802307C04387C04383 +C08381C08700C08700C00700800E00800E00800E00801C01001C01001C01001C02001C02001C04 +001C08001C08000C300003C00012157B9416>I<03C1E0046210083470103CF02038F020386020 +380000700000700000700000700000E00000E00000E00000E02061C040F1C040F1C080E2C10044 +6200383C0014157D9416>120 D<1E00302300704380704380E08380E08700E08700E00701C00E +01C00E01C00E01C01C03801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE0000 +0E00000E00001C00601C00F03800F03000E0600080C0004380003E0000141F7B9418>I<01E020 +03F06007F8C0041F80080100080200000400000800001000002000004000008000010000020000 +0400800801001003003F060061FC0040F80080700013157D9414>I E /Fo +23 119 df<00038000000380000003800000038000001FF00000FFFE0003FFFF0007E38FC00F03 +83E01E0380F03C0380703C038038780380F8780381FCF80383FCF80387FCF80387FCFC0387FCFC +0387FCFE0383F8FF0381F0FFC380007FFB80007FFFC0003FFFF8003FFFFE001FFFFF000FFFFF80 +07FFFFC003FFFFE001FFFFF0007FFFF0000FFFF80003FFF800038FF8000383FC3E0381FC7F0380 +FCFF8380FCFF83807CFF83807CFF83807CFF03807CFE0380787C038078700380F8780380F03803 +80E01C0381E00F0387C007E39F8003FFFF0000FFFC00001FE00000038000000380000003800000 +0380001E3A7BB529>36 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F00000000000000 +00000000000000000000000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B207A +9F17>58 D68 DII72 D76 +DI<00000FFE0000000000 +FFFFE000000007FFFFFC0000001FFC07FF0000003FE000FF800000FF80003FE00001FF00001FF0 +0003FE00000FF80007FC000007FC0007FC000007FC000FF8000003FE001FF8000003FF001FF000 +0001FF003FF0000001FF803FF0000001FF803FF0000001FF807FE0000000FFC07FE0000000FFC0 +7FE0000000FFC0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE00000 +00FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FF +E0000000FFE07FE0000000FFC07FE0000000FFC07FF0000001FFC07FF0000001FFC03FF0000001 +FF803FF0000001FF801FF8000003FF001FF8000003FF000FFC000007FE000FFC000007FE0007FE +00000FFC0003FF00001FF80001FF80003FF00000FFC0007FE000003FE000FF8000001FFC07FF00 +000007FFFFFC00000000FFFFE0000000000FFE00000033317BB03E>79 D<001FF0018000FFFF03 +8003FFFFC78007F00FFF800F8001FF801F00007F803F00001F803E00000F807E00000F807E0000 +0780FE00000780FE00000780FE00000380FF00000380FF00000380FF80000000FFE00000007FFC +0000007FFFE000007FFFFE00003FFFFFC0001FFFFFF0001FFFFFF8000FFFFFFC0003FFFFFE0001 +FFFFFF00007FFFFF80001FFFFF800000FFFFC0000007FFC0000000FFE00000003FE00000003FE0 +0000001FE06000001FE0E000000FE0E000000FE0E000000FE0E000000FC0F000000FC0F000000F +C0F800001F80FC00001F80FF00003F00FFC0007E00FFFC01FC00F1FFFFF800E03FFFE000C007FF +000023317BB02E>83 D89 D<007FF8000003FFFF000007FFFFC0000FE01FE0 +001FF007F0001FF003F8001FF003FC001FF001FE000FE001FE0007C001FE00010001FE00000001 +FE00000001FE000001FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F80 +01FE007F8001FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE007F +C00EFE003FF03CFF000FFFF87FF807FFF03FF800FF800FF825207E9F28>97 +D<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE0007E003FC000 +7E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FFFFFFFF80FFFF +FFFF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F800000003FC00000003F +C00003801FC00003801FE00007800FF0000F0007F8001E0003FE00FC0000FFFFF800003FFFE000 +0003FF000021207E9F26>101 D<001FF007E000FFFE3FF001FFFF7FF807F83FF1F80FE00FE1F8 +0FE00FE0F01FC007F0601FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8 +001FC007F0001FC007F0000FE00FE0000FE00FE00007F83FC00007FFFF000006FFFE00000E1FF0 +00000E000000001E000000001E000000001F000000001F800000001FFFFFC0000FFFFFF8000FFF +FFFE0007FFFFFF0003FFFFFF8007FFFFFFC01FFFFFFFE03F00007FE07E00000FF0FC000007F0FC +000003F0FC000003F0FC000003F0FC000003F07E000007E03F00000FC01FC0003F800FF801FF00 +07FFFFFE0000FFFFF000001FFF8000252F7E9F29>103 D<01C00007F0000FF8000FF8001FFC00 +1FFC001FFC000FF8000FF80007F00001C000000000000000000000000000000000000000000000 +00000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F800 +07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 +07F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>105 D<01F800FFF800FFF800 +FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 +07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 +07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 +07F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC012327DB117>108 +D<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE380 +3FC007F3000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8 +001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000F +F0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800 +0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8 +000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0FF +FFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40207D9F45>I<03F007F80000FFF03F +FF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000FF00007FE000FF000 +07FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 +0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 +07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 +0FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029207D9F2E>I<0007FE0000 +003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F803FC0003FC03FC0003F +C07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000 +1FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC0003FC03FC0 +003FC01FE0007F800FE0007F0007F801FE0003FE07FC0001FFFFF800003FFFC0000007FE000024 +207E9F29>I<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807F60FF807FE0FF807 +FC07F007FC03E007FC008007F8000007F8000007F8000007F8000007F8000007F8000007F80000 +07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800 +0007F80000FFFFE000FFFFE000FFFFE0001D207E9F22>114 D<00380000380000380000380000 +380000780000780000780000F80000F80001F80003F80007F8001FF800FFFFFEFFFFFEFFFFFE07 +F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007 +F80007F80007F80007F80707F80707F80707F80707F80707F80707F80703F80E03FC0E01FE1C00 +FFF8007FF0000FE0182E7EAD20>116 D<01F80003F000FFF801FFF000FFF801FFF000FFF801FF +F0000FF8001FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007 +F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F +F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007 +F8000FF00007F8001FF00007F8001FF00003F8003FF00003F8006FF00001FE03CFF80000FFFF8F +FF80007FFF0FFF80000FFC0FFF8029207D9F2E>II +E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 300 +TeXDict begin +%%EndSetup +%%Page: 1 1 +bop 193 216 a Fo(HLFSD:)26 b(Deliv)n(ering)h(Email)g(to)h(Y)-7 +b(our)28 b($HOME)280 336 y Fn(Er)n(ez)17 b(Zadok,)g(Computer)h(Scienc)n(e)h +(Dep)n(artment,)e(Columbia)h(University)482 394 y(A)o(lexander)h(Dupuy,)e +(System)h(Management)h(AR)l(TS)841 541 y Fm(ABSTRA)o(CT)241 +628 y Fl(W)m(e)12 b(consider)h(the)g(problem)e(of)h(enabling)g(users)i(to)e +(access)i(their)f(mailb)q(o)o(x)d(\014les)i(from)f(an)o(y)h(host)179 +678 y(on)k(our)h(lo)q(cal)f(net)o(w)o(ork,)h(and)f(not)h(only)f(on)g(one)h +(designated)g(\\home)f(mac)o(hine".)25 b(W)m(e)16 b(require)h(a)179 +728 y(solution)11 b(whic)o(h)g(will)f(not)i(in)o(tro)q(duce)g(an)o(y)f(new)h +(single)g(p)q(oin)o(ts)f(of)g(failure,)g(force)h(us)g(to)g(mo)q(dify)d(mail) +179 778 y(transfer)16 b(agen)o(ts)f(and)g(user)i(agen)o(ts,)e(or)g(require)h +(c)o(hanges)g(to)f(the)h(op)q(erating)f(system)g(k)o(ernels.)22 +b(In)179 828 y(other)15 b(w)o(ords,)g(minim)o(ize)e(the)i(amoun)o(t)e(of)h(w) +o(ork)h(needed)h(b)o(y)e(system-administrators)g(and)g(users.)179 +877 y(Our)i(solution)e(is)h(to)h(deliv)o(er)f(mail)e(in)o(to)h(the)i(users')h +(home)d(directories,)i(whic)o(h)g(are)f(exp)q(orted)i(via)179 +927 y(NFS[20)o(,)g(25])f(to)i(all)e(of)h(the)h(mac)o(hines)e(on)h(our)h(net)o +(w)o(ork.)29 b(W)m(e)17 b(wrote)h(a)f(small)e(user-lev)o(el)j(NFS)179 +977 y(serv)o(er)d(implemen)o(ting)c(a)j(single)f(sym)o(b)q(olic)f(link)h +(that)h(references)j(the)e(home)e(directory)h(of)g(a)g(user,)179 +1027 y(either)h(the)g(one)g(who)f(accessed)j(it,)c(or)i(b)o(y)f(name,)f(with) +h(a)g(fallbac)o(k)f(reference)k(in)d(case)h(of)f(failures.)179 +1077 y(This)d(enables)h(electronic)g(mail)d(to)i(b)q(e)h(deliv)o(ered)g +(directly)g(in)o(to)e(the)i(user's)g(home)f(directory)m(,)g(whic)o(h)179 +1126 y(is)f(already)h(accessible)h(from)d(an)o(y)h(mac)o(hine)g(on)h(the)g +(net)o(w)o(ork.)17 b(Although)10 b(w)o(e)i(ha)o(v)o(e)e(used)i(our)f(serv)o +(er)179 1176 y(primarily)f(for)i(mail)e(deliv)o(ery)j(redirection,)g(it)f +(can)h(b)q(e)g(used)h(to)e(redirect)i(sp)q(o)q(oled)f(faxes,)g(access)h(to) +179 1226 y Fk(/tmp)p Fl(,)e(etc.)75 1345 y Fj(1)56 b(In)n(tro)r(duction)175 +1420 y Fl(Electronic)16 b(mail)e(has)i(b)q(ecome)g(one)g(of)f(the)i(ma)r(jor) +d(applications)h(for)h(man)o(y)e(computer)i(net)o(w)o(orks,)g(and)75 +1470 y(use)k(of)f(this)g(service)h(is)f(exp)q(ected)j(to)d(increase)h(o)o(v)o +(er)f(time,)g(as)g(net)o(w)o(orks)h(proliferate)f(and)g(b)q(ecome)g(faster.) +75 1520 y(Pro)o(viding)10 b(a)h(con)o(v)o(enien)o(t)h(en)o(vironmen)o(t)f +(for)g(users)i(to)e(read,)h(comp)q(ose,)f(and)g(send)h(electronic)h(mail)c +(has)i(b)q(ecome)75 1570 y(a)j(requiremen)o(t)f(for)h(systems)g +(administrators)e(\(SAs\).)175 1644 y(Widely)j(used)j(metho)q(ds)d(for)i +(handling)e(mail)f(usually)h(require)j(users)f(to)g(b)q(e)g(logged)e(in)o(to) +h(a)g(designated)75 1694 y(\\home")e(mac)o(hine,)f(where)k(their)e(mailb)q(o) +o(x)e(\014les)i(reside.)23 b(Only)15 b(on)g(that)h(one)f(mac)o(hine)f(can)i +(they)f(read)h(newly)75 1744 y(arriv)o(ed)i(mail.)28 b(Since)19 +b(users)g(ha)o(v)o(e)f(to)g(b)q(e)h(logged)e(in)o(to)g(that)h(system)g(to)g +(read)h(their)f(mail,)e(they)j(often)f(\014nd)75 1794 y(it)h(con)o(v)o(enien) +o(t)h(to)g(run)g(all)f(of)g(their)h(other)g(pro)q(cesses)j(on)c(that)h +(system)f(as)h(w)o(ell,)g(including)f(memory)e(and)75 1844 +y(CPU-in)o(tensiv)o(e)j(jobs.)34 b(F)m(or)19 b(example,)g(in)g(our)g +(departmen)o(t,)h(w)o(e)g(ha)o(v)o(e)f(allo)q(cated)g(and)g(con\014gured)h +(sev)o(eral)75 1893 y(m)o(ulti-pro)q(cessor)11 b(serv)o(ers)i(to)e(handle)g +(suc)o(h)i(demanding)c(CPU)q(/memory)f(applications,)j(but)g(these)i(w)o(ere) +f(under-)75 1943 y(utilized,)k(in)g(large)g(part)g(due)h(to)f(the)g(incon)o +(v)o(enience)i(of)d(not)h(b)q(eing)g(able)g(to)g(read)h(mail)c(on)j(those)h +(mac)o(hines.)75 1993 y(\(No)h(home)e(directories)j(w)o(ere)g(lo)q(cated)f +(on)f(these)i(designated)g(CPU-serv)o(ers,)h(since)f(w)o(e)e(did)h(not)f(w)o +(an)o(t)h(NFS)75 2043 y(service)g(for)f(users')g(home)f(directories)i(to)f +(ha)o(v)o(e)f(to)h(comp)q(ete)g(with)f(in)o(tensiv)o(e)h(jobs.)27 +b(A)o(t)17 b(the)g(same)f(time,)g(w)o(e)75 2093 y(discouraged)e(users)i(from) +c(running)h(demanding)g(applications)f(on)i(their)g(home)f(mac)o(hines.\))175 +2167 y(Man)o(y)k(di\013eren)o(t)h(solutions)f(ha)o(v)o(e)h(b)q(een)h(prop)q +(osed)f(to)f(allo)o(w)f(users)j(to)f(read)g(their)g(mail)d(on)i(an)o(y)g +(host.)75 2217 y(Ho)o(w)o(ev)o(er,)d(all)e(of)i(these)h(solutions)f(fail)e +(in)h(one)h(or)g(more)f(of)g(sev)o(eral)i(w)o(a)o(ys:)137 2328 +y Fi(\017)21 b Fl(they)14 b(in)o(tro)q(duce)h(new)f(single)g(p)q(oin)o(ts)f +(of)h(failure)137 2409 y Fi(\017)21 b Fl(they)14 b(require)h(using)f +(di\013eren)o(t)g(mail)e(transfer)i(agen)o(ts)h(\(MT)m(As\)[15)o(])e(or)h +(user)h(agen)o(ts)g(\(UAs\))137 2490 y Fi(\017)21 b Fl(they)16 +b(do)f(not)g(solv)o(e)g(the)h(problem)e(for)h(all)f(cases,)i(i.e.)22 +b(the)16 b(solution)e(is)h(only)g(partially)e(successful)k(for)e(a)179 +2539 y(particular)e(en)o(vironmen)o(t.)175 2650 y(W)m(e)e(ha)o(v)o(e)h +(designed)g(a)f(simple)g(\014lesystem,)g(called)h(the)g Fh(Home-Link)h(File)f +(System)p Fl(,)g(to)g(pro)o(vide)f(the)i(abilit)o(y)75 2700 +y(to)d(deliv)o(er)h(mail)d(to)i(users')h(home)e(directories,)j(without)e(mo)q +(di\014cation)f(to)h(mail-related)e(applications.)16 b(W)m(e)10 +b(ha)o(v)o(e)p eop +%%Page: 2 2 +bop 75 42 a Fl(endea)o(v)o(ored)15 b(to)e(mak)o(e)f(it)i(as)f(stable)h(as)g +(p)q(ossible.)k(Of)c(great)g(imp)q(ortance)f(to)g(us)h(w)o(as)g(to)f(mak)o(e) +g(sure)h(the)h(HLFS)75 91 y(daemon,)10 b Fk(hlfsd)o Fl(,)h(w)o(ould)g(not)g +(hang)g(under)h(an)o(y)f(circumstances,)h(and)f(w)o(ould)f(tak)o(e)i(the)g +(next-b)q(est)h(action)d(when)75 141 y(faced)16 b(with)g(problems.)24 +b(Compared)15 b(to)g(alternativ)o(e)h(metho)q(ds,)g Fk(hlfsd)f +Fl(is)h(a)g(stable,)g(more)f(general)h(solution,)75 191 y(and)g(easier)h(to)f +(install/use.)25 b(In)16 b(fact,)g(in)g(some)f(w)o(a)o(ys,)i(w)o(e)f(ha)o(v)o +(e)g(ev)o(en)h(managed)e(to)h(impro)o(v)o(e)e(the)j(reliabilit)o(y)75 +241 y(and)d(securit)o(y)h(of)e(mail)e(service.)175 315 y(Our)k(serv)o(er)i +(implemen)o(ts)c(a)i(small)e(\014lesystem)i(con)o(taining)f(a)h(sym)o(b)q +(olic)f(link)g(to)h(a)g(sub)q(directory)i(of)d(the)75 365 y(in)o(v)o(oking)c +(user's)j(home)e(directory)m(,)i(and)f(named)e(sym)o(b)q(olic)h(links)g(to)h +(users')h(mailb)q(o)o(x)c(\014les.)18 b(An)13 b(example,)d(using)75 +415 y(pathnames)j(from)f(our)i(en)o(vironmen)o(t,)e(is)i(depicted)h(in)f +(Figure)g(1.)1128 400 y Fg(1)p 75 477 1800 5 v 75 1424 a @beginspecial +0 @llx 0 @lly 599 @urx 311 @ury 4320 @rwi @setspecial +%%BeginDocument: hlfs-flowchart.eps +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/l {lineto} bind def +/m {moveto} bind def +/s {stroke} bind def +/n {newpath} bind def +/gs {gsave} bind def +/gr {grestore} bind def +/clp {closepath} bind def +/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul +4 -2 roll mul setrgbcolor} bind def +/col-1 {} def +/col0 {0 0 0 setrgbcolor} bind def +/col1 {0 0 1 setrgbcolor} bind def +/col2 {0 1 0 setrgbcolor} bind def +/col3 {0 1 1 setrgbcolor} bind def +/col4 {1 0 0 setrgbcolor} bind def +/col5 {1 0 1 setrgbcolor} bind def +/col6 {1 1 0 setrgbcolor} bind def +/col7 {1 1 1 setrgbcolor} bind def + end +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +0 setlinecap 0 setlinejoin +-4.0 329.0 translate 0.900 -0.900 scale +0.500 setlinewidth +n 319 19 m 312 19 312 32 7 arcto 4 {pop} repeat 312 39 350 39 7 arcto 4 {pop} repeat 357 39 357 26 7 arcto 4 {pop} repeat 357 19 319 19 7 arcto 4 {pop} repeat clp gs col-1 s gr +/Times-Roman findfont 12.00 scalefont setfont +317 34 m +gs 1 -1 scale (START) col-1 show gr +/Times-Roman findfont 18.00 scalefont setfont +269 360 m +gs 1 -1 scale (".") col-1 show gr +/Times-Roman findfont 18.00 scalefont setfont +254 335 m +gs 1 -1 scale (Return) col-1 show gr +n 256 320 m 249 320 249 358 7 arcto 4 {pop} repeat 249 365 302 365 7 arcto 4 {pop} repeat 309 365 309 327 7 arcto 4 {pop} repeat 309 320 256 320 7 arcto 4 {pop} repeat clp gs col-1 s gr +n 274 100 m 199 100 l 199 170 l gs col-1 s gr +n 201.000 162.000 m 199.000 170.000 l 197.000 162.000 l gs 2 setlinejoin col-1 s gr +n 394 100 m 479 100 l 479 120 l gs col-1 s gr +n 481.000 112.000 m 479.000 120.000 l 477.000 112.000 l gs 2 setlinejoin col-1 s gr +n 139 210 m 124 210 l 124 320 l gs col-1 s gr +n 126.000 312.000 m 124.000 320.000 l 122.000 312.000 l gs 2 setlinejoin col-1 s gr +n 479 200 m 479 220 l gs col-1 s gr +n 481.000 212.000 m 479.000 220.000 l 477.000 212.000 l gs 2 setlinejoin col-1 s gr +n 539 260 m 569 260 l 569 320 l gs col-1 s gr +n 571.000 312.000 m 569.000 320.000 l 567.000 312.000 l gs 2 setlinejoin col-1 s gr +n 334 40 m 334 60 l gs col-1 s gr +n 336.000 52.000 m 334.000 60.000 l 332.000 52.000 l gs 2 setlinejoin col-1 s gr +n 334 60 m 274 100 l 334 140 l 394 100 l 334 60 l gs col-1 s gr +n 199 170 m 139 210 l 199 250 l 259 210 l 199 170 l gs col-1 s gr +n 479 120 m 419 160 l 479 200 l 539 160 l 479 120 l gs col-1 s gr +n 479 220 m 419 260 l 479 300 l 539 260 l 479 220 l gs col-1 s gr +n 326 319 m 319 319 319 357 7 arcto 4 {pop} repeat 319 364 467 364 7 arcto 4 {pop} repeat 474 364 474 326 7 arcto 4 {pop} repeat 474 319 326 319 7 arcto 4 {pop} repeat clp gs col-1 s gr +n 419 159 m 364 159 l 364 179 l gs col-1 s gr +n 366.000 171.000 m 364.000 179.000 l 362.000 171.000 l gs 2 setlinejoin col-1 s gr +n 306 179 m 299 179 299 212 7 arcto 4 {pop} repeat 299 219 427 219 7 arcto 4 {pop} repeat 434 219 434 186 7 arcto 4 {pop} repeat 434 179 306 179 7 arcto 4 {pop} repeat clp gs col-1 s gr +n 491 319 m 484 319 484 357 7 arcto 4 {pop} repeat 484 364 662 364 7 arcto 4 {pop} repeat 669 364 669 326 7 arcto 4 {pop} repeat 669 319 491 319 7 arcto 4 {pop} repeat clp gs col-1 s gr +n 11 319 m 4 319 4 357 7 arcto 4 {pop} repeat 4 364 237 364 7 arcto 4 {pop} repeat 244 364 244 326 7 arcto 4 {pop} repeat 244 319 11 319 7 arcto 4 {pop} repeat clp gs col-1 s gr +n 259 210 m 279 210 l 279 320 l gs col-1 s gr +n 281.000 312.000 m 279.000 320.000 l 277.000 312.000 l gs 2 setlinejoin col-1 s gr +n 419 259 m 389 259 l 389 319 l gs col-1 s gr +n 391.000 311.000 m 389.000 319.000 l 387.000 311.000 l gs 2 setlinejoin col-1 s gr +/Times-BoldItalic findfont 12.00 scalefont setfont +399 90 m +gs 1 -1 scale (No) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +254 90 m +gs 1 -1 scale (Yes) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +259 200 m +gs 1 -1 scale (Yes) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +124 200 m +gs 1 -1 scale (No) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +399 150 m +gs 1 -1 scale (Yes) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +489 215 m +gs 1 -1 scale (No) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +544 250 m +gs 1 -1 scale (Yes) col-1 show gr +/Times-BoldItalic findfont 12.00 scalefont setfont +404 250 m +gs 1 -1 scale (No) col-1 show gr +/Times-Roman findfont 12.00 scalefont setfont +459 280 m +gs 1 -1 scale (Writable?) col-1 show gr +/Times-Roman findfont 18.00 scalefont setfont +102 335 m +gs 1 -1 scale (Return) col-1 show gr +/Times-Roman findfont 18.00 scalefont setfont +547 335 m +gs 1 -1 scale (Return) col-1 show gr +/Times-Italic findfont 12.00 scalefont setfont +454 164 m +gs 1 -1 scale (uid) col-1 show gr +/Times-Roman findfont 12.00 scalefont setfont +474 164 m +gs 1 -1 scale (== 0?) col-1 show gr +/Times-Roman findfont 12.00 scalefont setfont +192 215 m +gs 1 -1 scale (==) col-1 show gr +/Times-Roman findfont 18.00 scalefont setfont +369 335 m +gs 1 -1 scale (Return) col-1 show gr +/Times-BoldItalic findfont 18.00 scalefont setfont +487 355 m +gs 1 -1 scale (~USER) col-1 show gr +/Courier-Bold findfont 18.00 scalefont setfont +549 354 m +gs 1 -1 scale (.mailspool/) col-1 show gr +/Courier-Bold findfont 18.00 scalefont setfont +542 354 m +gs 1 -1 scale (/) col-1 show gr +/Courier findfont 11.00 scalefont setfont +461 264 m +gs 1 -1 scale (.mailspool/) col-1 show gr +/Courier findfont 12.00 scalefont setfont +459 263 m +gs 1 -1 scale (/) col-1 show gr +/Times-Italic findfont 12.00 scalefont setfont +424 264 m +gs 1 -1 scale (~USER) col-1 show gr +/Courier findfont 12.00 scalefont setfont +207 215 m +gs 1 -1 scale (home) col-1 show gr +/Times-Roman findfont 12.00 scalefont setfont +239 215 m +gs 1 -1 scale (?) col-1 show gr +/Times-Italic findfont 12.00 scalefont setfont +155 215 m +gs 1 -1 scale (NAME) col-1 show gr +/Times-Roman findfont 18.00 scalefont setfont +341 194 m +gs 1 -1 scale (Return) col-1 show gr +/Times-Italic findfont 12.00 scalefont setfont +284 102 m +gs 1 -1 scale (gid) col-1 show gr +/Times-Roman findfont 12.00 scalefont setfont +302 103 m +gs 1 -1 scale (== HLFS_GID?) col-1 show gr +/Times-Roman findfont 12.00 scalefont setfont +474 249 m +gs 1 -1 scale (Is) col-1 show gr +/Courier-Bold findfont 18.00 scalefont setfont +322 354 m +gs 1 -1 scale (/var/alt_mail/) col-1 show gr +/Times-BoldItalic findfont 18.00 scalefont setfont +189 354 m +gs 1 -1 scale (NAME) col-1 show gr +/Times-BoldItalic findfont 18.00 scalefont setfont +6 353 m +gs 1 -1 scale (~NAME) col-1 show gr +/Courier-Bold findfont 18.00 scalefont setfont +69 353 m +gs 1 -1 scale (/) col-1 show gr +/Courier-Bold findfont 18.00 scalefont setfont +73 353 m +gs 1 -1 scale (.mailspool/) col-1 show gr +/Courier-Bold findfont 18.00 scalefont setfont +300 214 m +gs 1 -1 scale (/.mailspool/) col-1 show gr +$F2psEnd +%%EndDocument + @endspecial 371 1515 a Fl(Figure)g(1:)j Fk(Hlfsd)c Fl(resolving)h(the)g +Fh(NAME)g Fl(comp)q(onen)o(t)f(of)h Fk(/mail/)p Fh(NAME)p 75 +1565 V 175 1707 a Fl(The)c Fk(hlfsd)f Fl(serv)o(er)j(\014nds)f(out)f(the)h +Fh(uid)782 1692 y Fg(2)810 1707 y Fl(of)f(the)h(pro)q(cess)h(that)e(is)g +(accessing)h(its)g(moun)o(t)d(p)q(oin)o(t,)i(and)g(resolv)o(es)75 +1756 y(the)j(pathname)e(comp)q(onen)o(t)g Fk(home)g Fl(as)i(a)f(sym)o(b)q +(olic)e(link)h(to)h(a)g(sub)q(directory)h(within)f(the)h(home)e(directory)h +(giv)o(en)75 1806 y(b)o(y)18 b(the)h Fh(uid)p Fl('s)f(en)o(try)h(in)e(the)i +(passw)o(ord)g(\014le.)30 b(See)19 b(T)m(able)f(1.)30 b(If)18 +b(the)h Fh(gid)f Fl(of)f(the)i(pro)q(cess)h(that)e(attempts)g(to)75 +1856 y(access)c(a)f(mailb)q(o)o(x)d(\014le)i(is)h(a)f(sp)q(ecial)h(one)g +(\(called)f(HLFS)p 976 1856 13 2 v 16 w(GID\),)f(then)j(the)f(serv)o(er)h +(maps)d(the)j(name)d(of)h(the)h(next)p 1795 1863 80 2 v 75 +1906 a(pathname)h(comp)q(onen)o(t)h(directly)h(to)g(the)g(user's)g(mailb)q(o) +o(x)d(\(T)m(able)i(2\).)23 b(This)15 b(is)h(necessary)h(so)f(that)g(access)h +(to)75 1956 y(a)d(mailb)q(o)o(x)e(\014le)i(b)o(y)h(users)h(other)f(than)g +(the)g(o)o(wner)g(can)f(succeed.)23 b(The)15 b(serv)o(er)h(has)f(safet)o(y)f +(features)i(in)e(case)i(of)75 2006 y(failures)d(suc)o(h)i(as)f(h)o(ung)g +(\014lesystems)g(or)g(home)e(directory)j(\014lesystems)f(that)g(are)g +(inaccessible)h(or)f(full.)175 2080 y(On)20 b(most)f(of)g(our)h(mac)o(hines,) +g(mail)e(gets)j(deliv)o(ered)f(to)g(the)h(directory)f Fk(/var/spool/mail)p +Fl(.)1720 2065 y Fg(3)1772 2080 y Fl(Man)o(y)75 2130 y(programs,)12 +b(including)g(UAs,)i(dep)q(end)h(on)e(that)h(path.)k Fk(Hlfsd)12 +b Fl(creates)k(a)d(directory)h Fk(/mail)p Fl(,)f(and)g(moun)o(ts)f(itself)75 +2180 y(on)18 b(top)h(of)f(that)h(directory)m(.)32 b Fk(Hlfsd)18 +b Fl(implem)o(en)o(ts)f(the)i(path)g(name)e(comp)q(onen)o(t)h(called)g +Fk(home)p Fl(,)h(p)q(oin)o(ting)e(to)75 2230 y(a)f(sub)q(directory)j(of)d +(the)h(user's)h(home)e(directory)m(.)27 b(W)m(e)16 b(ha)o(v)o(e)h(made)e +Fk(/var/spool/mail)f Fl(a)i(sym)o(b)q(olic)f(link)h(to)75 2280 +y Fk(/mail/home)p Fl(,)d(so)i(that)g(accessing)h Fk(/var/spool/mail)c +Fl(actually)i(causes)i(access)h(to)e(a)g(sub)q(directory)h(within)e(a)75 +2329 y(user's)h(home)e(directory)m(.)175 2404 y(The)20 b(rest)h(of)f(this)g +(pap)q(er)g(is)g(organized)g(as)g(follo)o(ws.)35 b(Section)21 +b(2)e(discusses)j(in)e(detail)f(the)i(problems)75 2454 y(and)e(limitations)d +(of)j(other)h(home-mai)o(l-deli)o(v)o(ery)d(metho)q(ds.)34 +b(Section)19 b(3)g(detail)g(the)h(design)f(of)g(the)h Fh(Home-)p +75 2488 720 2 v 121 2515 a Ff(1)139 2527 y Fe(In)10 b(Figure)g(1,)h +Fd(~)p Fc(NAME)h Fe(is)f(the)g(home)f(directory)e(of)j(the)g(user)f(whose)h +(user-name)d(is)j Fc(NAME)p Fe(;)i Fd(~)p Fc(USER)e Fe(is)h(the)e(home)g +(directory)75 2566 y(of)h(the)g(user)g(with)g(user-id)f Fc(uid)p +Fe(.)121 2594 y Ff(2)139 2606 y Fe(NFS)h(uses)g(e\013ectiv)o(e)e +Fc(uids)p Fe(.)121 2634 y Ff(3)139 2646 y Fe(Other)i(directories)f(used)h +(for)g(this)h(purp)q(ose)e(are)h Fd(/var/mail)f Fe(on)h(SVR4,)h +Fd(/usr/mail)d Fe(on)j(other)f(System)f(V-based)h(op)q(erating-)75 +2685 y(systems,)f(and)g Fd(/usr/spool/)o(mai)o(l)f Fe(on)i(BSD-based)e +(systems.)965 2825 y Fl(2)p eop +%%Page: 3 3 +bop 75 4 1800 5 v 229 58 a Fl(Conditions:)17 b Fh(uid)p Fl(=)p +Fk(ezk)p Fl(,)c Fh(gid)p Fi(6)p Fl(=HLFS)p 828 58 13 2 v 16 +w(GID,)f(and)i Fk(/users/ezk/.mailsp)o(ool/)c Fl(is)k(writable.)p +157 77 1636 2 v 156 127 2 50 v 165 127 V 190 112 a Fm(Resolving)p +453 127 V 1088 127 V 1784 127 V 1793 127 V 156 177 V 165 177 +V 190 162 a(comp)q(onen)o(t)p 453 177 V 58 w(P)o(athname)g(left)p +1088 177 V 337 w(V)l(alue)h(if)g(sym)o(b)q(olic)f(link)p 1784 +177 V 1793 177 V 157 179 1636 2 v 157 189 V 156 238 2 50 v +165 238 V 190 223 a Fk(/)p 453 238 V 267 w(var/mail/)p Fh(NAME)p +1088 238 V 1784 238 V 1793 238 V 157 240 1636 2 v 156 290 2 +50 v 165 290 V 190 275 a Fk(var)p Fl(/)p 453 290 V 202 w Fk(mail/)p +Fh(NAME)p 1088 290 V 1784 290 V 1793 290 V 157 291 1636 2 v +156 341 2 50 v 165 341 V 190 326 a Fk(mail)p Fl(@)p 453 341 +V 169 w Fk(/mail/home/)p Fh(NAME)p 1088 341 V 265 w Fk(mail)p +Fl(@)g Fi(\))f Fk(/mail/home)p 1784 341 V 1793 341 V 157 343 +1636 2 v 156 393 2 50 v 165 393 V 190 378 a(/)p 453 393 V 267 +w(mail/home/)p Fh(NAME)p 1088 393 V 1784 393 V 1793 393 V 157 +394 1636 2 v 156 444 2 50 v 165 444 V 190 429 a Fk(mail)p Fl(/)p +453 444 V 180 w Fk(home/)p Fh(NAME)p 1088 444 V 1784 444 V +1793 444 V 157 446 1636 2 v 156 496 2 50 v 165 496 V 190 481 +a Fk(home)p Fl(@)p 453 496 V 169 w Fh(NAME)p 1088 496 V 507 +w Fk(home)p Fl(@)h Fi(\))f Fk(/users/ezk/.mailsp)o(ool)p 1784 +496 V 1793 496 V 157 497 1636 2 v 156 547 2 50 v 165 547 V +190 532 a(/)p 453 547 V 267 w(users/ezk/.mailsp)o(ool/)o Fh(NAME)p +1088 547 V 1784 547 V 1793 547 V 157 549 1636 2 v 156 599 2 +50 v 165 599 V 190 584 a Fk(users)p Fl(/)p 453 599 V 158 w +Fk(ezk/.mailspool/)p Fh(NA)o(ME)p 1088 599 V 1784 599 V 1793 +599 V 157 600 1636 2 v 156 650 2 50 v 165 650 V 190 635 a Fk(ezk)p +Fl(/)p 453 650 V 202 w Fk(.mailspool/)p Fh(NAME)p 1088 650 +V 1784 650 V 1793 650 V 157 652 1636 2 v 156 702 2 50 v 165 +702 V 190 687 a Fk(.mailspool)p Fl(/)p 453 702 V 48 w Fh(NAME)p +1088 702 V 1784 702 V 1793 702 V 157 703 1636 2 v 156 753 2 +50 v 165 753 V 190 738 a(NAME)p 453 753 V 1088 753 V 1784 753 +V 1793 753 V 157 755 1636 2 v 290 829 a Fl(T)m(able)g(1:)18 +b(Resolving)13 b Fk(/var/mail/)p Fh(NAME)f Fl(to)h Fk(/users/ezk/.mailspo)o +(ol/)p Fh(NAME)p 75 879 1800 5 v 75 1000 a(Link)19 b(File)f(System)h +Fl(and)f(Section)g(4)g(describ)q(es)i(the)f(implemen)o(tation)c(of)i +Fk(hlfsd)o Fl(.)31 b(Section)19 b(5)f(ev)n(aluates)g(our)75 +1050 y(implemen)o(tatio)o(n.)e(Related)d(systems,)h(conclusions,)g(future)g +(directions,)g(and)g(alternativ)o(e)g(uses)h(are)f(describ)q(ed)75 +1100 y(in)f(Sections)i(6)f(and)f(7.)75 1208 y Fj(2)56 b(Bac)n(kground)175 +1283 y Fl(This)16 b(section)h(pro)o(vides)f(an)g(in-depth)g(discussion)h(of)f +(wh)o(y)g(a)o(v)n(ailable)d(metho)q(ds)j(for)g(deliv)o(ering)g(mail)d(to)75 +1333 y(home)g(directories)i(are)f(not)g(as)g(go)q(o)q(d)f(as)h(the)h(one)f +(used)h(b)o(y)e Fk(hlfsd)o Fl(.)75 1441 y Fj(2.1)56 b(Single-Host)17 +b(Mail)h(Sp)r(o)r(ol)g(Directory)175 1516 y Fl(The)d(most)e(common)f(metho)q +(d)i(for)g(mail)e(deliv)o(ery)i(is)h(for)f(mail)e(to)i(b)q(e)h(app)q(ended)h +(to)f(a)f(mailb)q(o)o(x)e(\014le)i(in)g(a)75 1566 y(standard)d(sp)q(o)q(ol)f +(directory)h(on)f(the)h(designated)g(\\mail)c(home")i(mac)o(hine)g(of)h(the)h +(user.)17 b(The)11 b(greatest)h(adv)n(an)o(tage)75 1616 y(of)i(this)h(metho)q +(d)f(is)g(that)h(it)f(is)h(the)g(default)f(metho)q(d)g(most)g(v)o(endors)h +(pro)o(vide)g(with)f(their)h(systems,)g(th)o(us)g(v)o(ery)75 +1665 y(little)h(\(if)g(an)o(y\))g(con\014guration)g(is)h(required)g(on)f(the) +i(SA's)e(part.)26 b(All)16 b(they)h(need)h(to)e(set)i(up)e(are)h(mail)d +(aliases)75 1715 y(directing)g(mail)c(to)j(the)h(host)g(on)f(whic)o(h)g(the)h +(user's)h(mailb)q(o)o(x)10 b(\014le)k(is)f(assigned.)18 b(\(Otherwise,)d +(mail)10 b(is)j(deliv)o(ered)75 1765 y(lo)q(cally)m(,)f(and)h(users)j(\014nd) +e(mailb)q(o)o(xes)d(on)j(man)o(y)e(mac)o(hines.\))175 1840 +y(As)k(users)i(b)q(ecome)e(more)f(sophisticated,)i(and)f(aided)g(b)o(y)g +(windo)o(wing)f(systems,)i(they)f(\014nd)h(themselv)o(es)75 +1890 y(logging)12 b(in)i(on)g(m)o(ultiple)e(hosts)j(at)f(once,)g(p)q +(erforming)f(sev)o(eral)i(tasks)g(concurren)o(tly)m(.)k(They)c(ask)f(to)g(b)q +(e)h(able)f(to)75 1939 y(read)g(their)h(mail)c(on)j(an)o(y)f(host)h(on)g(the) +g(net)o(w)o(ork,)g(not)g(just)g(the)g(one)g(designated)h(as)f(their)g(\\mail) +d(home.")75 2047 y Fj(2.2)56 b(Cen)n(tralized)18 b(Mail)g(Sp)r(o)r(ol)f +(Directory)175 2122 y Fl(A)f(p)q(opular)g(metho)q(d)f(for)h(pro)o(viding)f +(mail)f(readabilit)o(y)h(from)g(an)o(y)h(host)g(is)g(to)h(ha)o(v)o(e)f(all)f +(mail)e(deliv)o(ered)75 2172 y(to)18 b(a)g(mail)e(sp)q(o)q(ol)i(directory)h +(on)f(a)g(designated)h(\\mail-serv)o(er")e(whic)o(h)h(is)g(exp)q(orted)h(via) +f(NFS)g(to)h(all)e(of)g(the)75 2222 y(hosts)f(on)g(the)g(net)o(w)o(ork.)24 +b(Con\014guring)15 b(suc)o(h)h(a)f(system)h(is)f(relativ)o(ely)g(easy)m(.)24 +b(On)16 b(most)e(systems,)i(the)g(bulk)g(of)75 2272 y(the)i(w)o(ork)f(is)h(a) +f(one-time)f(addition)g(to)i(one)f(or)h(t)o(w)o(o)f(con\014guration)g +(\014les)h(in)f Fk(/etc)p Fl(.)28 b(The)17 b(\014le-serv)o(er's)i(sp)q(o)q +(ol)75 2322 y(directory)d(is)f(then)h(hard-moun)o(ted)e(across)i(ev)o(ery)g +(mac)o(hine)e(on)h(the)h(lo)q(cal)e(net)o(w)o(ork.)22 b(In)16 +b(small)d(en)o(vironmen)o(ts)75 2371 y(with)f(only)g(a)g(handful)g(of)g +(hosts)h(this)f(can)h(b)q(e)g(an)f(acceptable)i(solution.)i(In)d(our)f +(departmen)o(t,)h(with)f(a)g(couple)h(of)75 2421 y(h)o(undred)j(activ)o(e)f +(hosts)h(and)f(thousands)g(of)g(mail)d(messages)j(pro)q(cessed)j(daily)m(,)13 +b(this)i(w)o(as)g(deemed)g(completely)75 2471 y(unacceptable,)g(as)f(it)f(in) +o(tro)q(duced)i(sev)o(eral)f(t)o(yp)q(es)h(of)e(problems:)137 +2587 y Fi(\017)21 b Fm(Scalabili)o(t)o(y)12 b(and)i(P)o(erformance)p +Fl(:)h(as)d(more)g(and)h(more)f(mac)o(hines)g(get)h(added)g(to)g(the)g(net)o +(w)o(ork,)g(more)179 2637 y(mail)7 b(tra\016c)j(has)g(to)g(go)f(o)o(v)o(er)h +(NFS)g(to)g(and)g(from)e(the)j(mail-serv)o(er.)k(Users)c(lik)o(e)f(to)f(run)i +(mail-w)o(a)o(tc)o(hers[2)n(,)f(7)o(])179 2687 y(and)g(read)i(their)f(mail)d +(often.)17 b(The)11 b(stress)i(on)d(the)i(shared)g(infrastructure)g +(increases)g(with)f(ev)o(ery)g(user)h(and)965 2825 y(3)p eop +%%Page: 4 4 +bop 179 42 a Fl(host)14 b(added;)f(loads)g(on)h(the)g(mail)d(serv)o(er)k(w)o +(ould)e(most)f(certainly)i(b)q(e)g(high)f(since)i(all)d(mail)f(deliv)o(ery)j +(go)q(es)179 91 y(through)i(that)h(one)g(mac)o(hine.)672 76 +y Fg(4)715 91 y Fl(This)g(leads)g(to)f(lo)o(w)o(er)g(reliabilit)o(y)f(and)h +(p)q(erformance.)26 b(T)m(o)16 b(reduce)i(the)179 141 y(n)o(um)o(b)q(er)11 +b(of)g(concurren)o(t)j(connections)f(b)q(et)o(w)o(een)g(clien)o(ts)f(and)g +(the)h(serv)o(er)g(host,)f(some)f(SAs)i(ha)o(v)o(e)e(resorted)179 +191 y(to)16 b(automoun)o(ting)e(the)j(mail-sp)q(o)q(ol)c(directory)m(.)26 +b(But)17 b(this)g(solution)e(only)h(mak)o(es)f(things)h(w)o(orse:)24 +b(since)179 241 y(users)15 b(often)e(run)h(mail)d(w)o(atc)o(hers,)j(and)f +(man)o(y)e(p)q(opular)i(applications)g(suc)o(h)h(as)f Fk(trn)p +Fl(,)g Fk(emacs)p Fl(,)f Fk(csh)g Fl(or)i Fk(ksh)179 291 y +Fl(c)o(hec)o(k)h(p)q(erio)q(dically)f(for)g(new)h(mail,)d(the)j(automoun)o +(ted)e(directory)i(w)o(ould)f(b)q(e)h(e\013ectiv)o(ely)h(p)q(ermanen)o(tly) +179 340 y(moun)o(ted.)g(If)c(it)g(gets)i(unmoun)o(ted)d(automatically)e(b)o +(y)k(the)g(automoun)o(ter)e(program[3)n(],)h(it)g(is)g(most)f(lik)o(ely)179 +390 y(to)17 b(get)h(moun)o(ted)e(shortly)i(afterw)o(ards,)g(consuming)e(more) +h(I/O)g(resources)j(b)o(y)d(the)h(constan)o(t)g(cycle)h(of)179 +440 y Fk(mount)13 b Fl(and)g Fk(umount)g Fl(calls.)137 523 +y Fi(\017)21 b Fm(Reliabil)o(i)o(t)o(y)p Fl(:)16 b(the)f(mail-serv)o(er)f +(host)h(and)f(its)h(net)o(w)o(ork)f(connectivit)o(y)h(m)o(ust)f(b)q(e)h(v)o +(ery)g(reliable.)k(W)m(orse,)179 573 y(since)g(the)g(sp)q(o)q(ol)f(directory) +h(has)f(to)g(b)q(e)h(hard-moun)o(ted,)1117 558 y Fg(5)1153 +573 y Fl(man)o(y)d(pro)q(cesses)21 b(whic)o(h)d(access)i(the)f(sp)q(o)q(ol) +179 623 y(directory)f(\(v)n(arious)e(shells,)i Fk(login)p Fl(,)f +Fk(emacs)p Fl(,)f(etc.\))30 b(w)o(ould)16 b(b)q(e)i(h)o(ung)f(as)g(long)g(as) +g(connectivit)o(y)g(to)g(the)179 672 y(mail-serv)o(er)9 b(is)h(sev)o(ered.)19 +b(T)m(o)10 b(impro)o(v)o(e)f(reliabilit)o(y)m(,)f(SAs)j(ma)o(y)e(c)o(ho)q +(ose)i(to)f(bac)o(kup)h(the)g(mail-serv)o(er's)e(sp)q(o)q(ol)179 +722 y(partition)16 b(sev)o(eral)h(times)g(a)f(da)o(y)m(.)27 +b(This)17 b(ma)o(y)e(mak)o(e)g(things)i(w)o(orse)h(since)f(reading)g(or)g +(deliv)o(ering)g(mail)179 772 y(while)e(bac)o(kups)h(are)g(in)f(progress)i +(ma)o(y)d(cause)j(bac)o(kups)f(to)f(b)q(e)i(inconsisten)o(t;)f(more)f(bac)o +(kups)h(consume)179 822 y(more)d(bac)o(kup-media)f(resources,)k(and)d +(increase)j(the)e(load)f(on)h(the)g(mail-serv)o(er)f(host.)75 +946 y Fj(2.3)56 b(Distributed)17 b(Mail)h(Sp)r(o)r(ol)g(Service)175 +1022 y Fl(Despite)d(the)f(existence)i(of)e(a)g(few)g(systems)h(that)f(supp)q +(ort)h(deliv)o(ery)f(to)h(users')g(home)e(directories,)1763 +1007 y Fg(6)1797 1022 y Fl(mail)75 1071 y(deliv)o(ery)18 b(to)f(home)g +(directories)i(hasn't)e(caugh)o(t)h(on.)29 b(W)m(e)17 b(b)q(eliev)o(e)i(the)f +(main)d(reason)k(is)e(that)h(there)h(are)f(to)q(o)75 1121 y(man)o(y)12 +b(programs)h(that)h(\\kno)o(w")g(where)h(mailb)q(o)o(x)c(\014les)k(reside.)20 +b(Besides)15 b(the)g(ob)o(vious)f(\(the)h(deliv)o(ery)f(program)75 +1171 y Fk(/bin/mail)9 b Fl(and)i(mail)e(readers)k(lik)o(e)d +Fk(/usr/ucb/Mail)p Fl(,)f Fk(mush)p Fl(,)h Fk(mm)p Fl(,)h(etc.\),)h(other)g +(programs)e(that)h(kno)o(w)g(mailb)q(o)o(x)75 1221 y(lo)q(cation)g(are)g +Fk(login)p Fl(,)g Fk(from)p Fl(,)g(almost)e(ev)o(ery)j(shell,)g +Fk(xbiff)p Fl(,)e Fk(xmailbox)p Fl(,)g(and)h(ev)o(en)h(some)f(programs)f(not) +i(directly)75 1271 y(related)h(to)g(mail,)c(suc)o(h)14 b(as)f +Fk(emacs)e Fl(and)i Fk(trn)p Fl(.)k(Although)12 b(some)f(of)h(these)i +(programs)e(can)h(b)q(e)g(con\014gured)g(to)g(lo)q(ok)75 1320 +y(in)18 b(di\013eren)o(t)h(directories)g(with)f(the)g(use)h(of)e(en)o +(vironmen)o(t)g(v)n(ariables)h(and)g(other)g(resources,)j(man)o(y)16 +b(of)i(them)75 1370 y(cannot.)g(The)d(o)o(v)o(erall)d(p)q(orting)i(w)o(ork)f +(is)h(signi\014can)o(t.)175 1445 y(Other)g(metho)q(ds)f(that)g(ha)o(v)o(e)g +(y)o(et)g(to)g(catc)o(h)h(on)f(require)h(the)g(use)g(of)e(a)h(sp)q(ecial)h +(mail-reading)c(serv)o(er,)k(suc)o(h)75 1495 y(as)g(IMAP[16)o(])f(or)h(POP)q +([17)o(].)j(The)d(main)e(disadv)n(an)o(tage)h(of)g(these)i(systems)f(is)f +(that)h(UAs)g(need)h(to)e(b)q(e)h(mo)q(di\014ed)75 1545 y(to)i(use)h(these)g +(services)h(|)d(a)h(long)f(and)h(in)o(v)o(olv)o(ed)f(task.)24 +b(That)16 b(is)g(wh)o(y)f(they)i(are)f(not)g(p)q(opular)g(at)g(this)g(time.) +75 1594 y(See)f(Section)f(6.1)f(for)h(more)e(details.)175 1669 +y(Sev)o(eral)h(other)i(ideas)e(ha)o(v)o(e)h(b)q(een)g(prop)q(osed)h(and)e(ev) +o(en)h(used)h(in)e(v)n(arious)g(en)o(vironmen)o(ts.)k(None)d(of)f(them)75 +1719 y(is)g(robust.)18 b(They)c(are)g(mostly)d(v)o(ery)j(sp)q(ecialized,)f +(in\015exible,)g(and)g(do)g(not)g(extend)h(to)f(the)h(general)f(case.)19 +b(Some)75 1769 y(of)13 b(the)i(ideas)f(are)g(plain)f(bad,)g(p)q(oten)o +(tially)g(leading)g(to)h(lost)f(or)h(corrupt)h(mail:)137 1885 +y Fi(\017)21 b Fm(automoun)o(ter)o(s)p Fl(:)14 b(using)f(an)f(automoun)o(ter) +f(suc)o(h)i(as)g Fk(amd)p Fl([13)n(])f(to)g(pro)o(vide)g(a)g(set)i(of)d(sym)o +(b)q(olic)g(links)h(from)179 1935 y(the)h(normal)e(sp)q(o)q(ol)i(directory)g +(to)g(user)h(home)d(directories)j(is)f(not)g(su\016cien)o(t.)18 +b(UAs)13 b(rename,)f(unlink,)g(and)179 1985 y(recreate)20 b(the)f(mailb)q(o)o +(x)c(as)k(a)f(regular)g(\014le,)h(therefore)g(it)f(m)o(ust)f(b)q(e)i(a)f +(real)g(\014le,)h(not)f(a)g(sym)o(b)q(olic)e(link.)179 2034 +y(F)m(urthermore,)d(it)g(m)o(ust)f(reside)j(in)e(a)g(real)g(directory)i(whic) +o(h)e(is)g(writable)g(b)o(y)h(the)g(UAs)g(and)f(MT)m(As.)18 +b(This)179 2084 y(metho)q(d)c(ma)o(y)g(also)h(require)h(p)q(opulating)e +Fk(/var/spool/mail)e Fl(with)j(sym)o(b)q(olic)f(links)h(and)g(making)e(sure) +179 2134 y(they)j(are)g(up)q(dated.)24 b(Making)15 b Fk(amd)g +Fl(manage)f(that)i(directory)g(directly)g(fails,)f(since)i(man)o(y)c(v)n +(arious)i(lo)q(c)o(k)179 2184 y(\014les)g(need)g(to)g(b)q(e)g(managed)e(as)h +(w)o(ell)g(\(see)i(Section)f(4.6\).)k(Also,)14 b Fk(amd)g Fl(do)q(es)h(not)g +(pro)o(vide)f(all)g(of)g(the)h(NFS)179 2234 y(op)q(erations)f(whic)o(h)g(are) +g(required)h(to)f(write)g(mail)d(suc)o(h)k(as)f Fh(write)p +Fl(,)e Fh(cr)n(e)n(ate)p Fl(,)h Fh(r)n(emove)p Fl(,)g(and)g +Fh(unlink)p Fl(.)137 2317 y Fi(\017)21 b Fm($MAIL)p Fl(:)15 +b(setting)g(this)h(v)n(ariable)e(to)h(an)h(automoun)o(ted)e(directory)i(p)q +(oin)o(ting)e(to)h(the)h(user's)g(mail)d(sp)q(o)q(ol)179 2367 +y(host)g(only)f(solv)o(es)i(the)f(problem)f(for)h(those)g(programs)f(whic)o +(h)h(kno)o(w)f(and)h(use)h($MAIL.)f(Man)o(y)f(programs)179 +2416 y(don't,)j(therefore)i(this)e(solution)g(is)g(partial)g(and)g(of)g +(limited)e(\015exibilit)o(y)m(.)21 b(Also,)15 b(it)g(requires)i(the)f(SAs)g +(or)179 2466 y(the)e(users)i(to)d(set)i(it)f(themselv)o(es)g(|)f(an)h(added)g +(lev)o(el)f(of)h(incon)o(v)o(enience)g(and)g(p)q(ossible)g(failures.)p +75 2501 720 2 v 121 2528 a Ff(4)139 2539 y Fe(Deliv)o(ery)8 +b(via)i(NFS-moun)o(ted)e(\014lesystems)h(ma)o(y)g(require)g(usage)h(of)g +Fd(rpc.lockd)e Fe(and)i Fd(rpc.statd)d Fe(to)k(pro)o(vide)d(distributed)g +(\014le-)75 2579 y(lo)q(c)o(king,)j(b)q(oth)g(of)i(whic)o(h)f(are)g(widely)f +(regarded)g(as)h(unstable)f(and)g(unreliable.)16 b(F)m(urthermore,)10 +b(this)i(will)h(degrade)d(p)q(erformance)o(,)75 2618 y(as)h(lo)q(cal)g(pro)q +(cesses)e(as)i(w)o(ell)h(as)f(remote)f Fd(nfsd)g Fe(pro)q(cesses)g(are)h(k)o +(ept)f(busy)m(.)121 2646 y Ff(5)139 2658 y Fe(No)h(SA)h(in)f(their)g(righ)o +(t)f(minds)g(w)o(ould)h(soft-moun)o(t)e(read/write)g(partitions)g(|)j(the)f +(c)o(hances)e(for)i(data)g(loss)g(are)g(to)q(o)f(great.)121 +2686 y Ff(6)139 2697 y Fe(AIX)i(1.2's)e Fd(bellmail)f Fe(for)i(the)g(IBM)h +(PS/2)p Fc(s)p Fe([9)n(],)f Fd(/bin/mail)e Fe(on)i(SunOS)f(for)h(the)g(Sun)f +(386i)h(mac)o(hines,)e(and)h Fd(zmailer)p Fe([27)m(].)965 2825 +y Fl(4)p eop +%%Page: 5 5 +bop 137 42 a Fi(\017)21 b Fm(/bin/mail)o Fl(:)h(using)17 b(a)g(di\013eren)o +(t)h(mail)d(deliv)o(ery)i(agen)o(t)g(could)g(b)q(e)h(the)g(solution.)27 +b(One)18 b(suc)o(h)g(example)179 91 y(is)h Fk(hdmail)p Fl([6)n(].)34 +b(Ho)o(w)o(ev)o(er,)21 b Fk(hdmail)d Fl(still)h(requires)h(mo)q(difying)d +(all)h(UAs,)j(the)f(MT)m(A's)f(con\014guration,)179 141 y(installing)c(new)i +(daemons,)e(and)i(c)o(hanging)e(login)h(scripts.)27 b(This)16 +b(mak)o(es)g(the)h(system)f(less)h(upgradable)179 191 y(or)f(compatible)f +(with)i(others,)h(and)e(adds)h(one)g(more)f(complicated)f(system)h(for)h(SAs) +g(to)f(deal)h(with.)26 b(It)179 241 y(is)14 b(not)g(a)g(complete)g(solution)g +(b)q(ecause)i(it)e(still)f(requires)j(eac)o(h)f(user)g(ha)o(v)o(e)g(their)f +($MAIL)h(v)n(ariable)e(setup)179 291 y(correctly)m(,)h(and)g(that)g(ev)o(ery) +g(program)e(use)j(this)f(v)n(ariable.)75 415 y Fj(2.3.1)55 +b(Wh)n(y)19 b(Deliv)n(er)e(In)n(to)i(the)f(Home)f(Directory?)175 +490 y Fl(There)g(are)f(sev)o(eral)g(ma)r(jor)e(reasons)j(wh)o(y)f(SAs)g(migh) +o(t)e(w)o(an)o(t)h(to)h(deliv)o(er)g(mail)d(directly)j(in)o(to)f(the)i +(users')75 540 y(home)c(directories:)137 656 y Fi(\017)21 b +Fm(Lo)q(cation)p Fl(:)16 b(man)o(y)c(mail)g(readers)j(need)g(to)f(mo)o(v)o(e) +e(mail)f(from)h(the)j(sp)q(o)q(ol)e(directory)i(to)f(the)g(user's)h(home)179 +706 y(directory)m(.)j(It)13 b(sp)q(eeds)h(up)f(this)g(op)q(eration)g(if)e +(the)j(t)o(w)o(o)e(are)h(on)g(the)g(same)f(\014lesystem.)18 +b(If)12 b(for)g(some)g(reason)179 756 y(the)19 b(user's)g(home)e(directory)i +(is)g(inaccessible,)h(it)e(isn't)g(that)g(useful)g(to)h(b)q(e)g(able)f(to)g +(read)h(mail,)d(since)179 806 y(there)f(is)e(no)g(place)h(to)f(mo)o(v)o(e)f +(it)i(to.)737 791 y Fg(7)773 806 y Fl(In)f(some)g(cases,)i(trying)e(to)g(mo)o +(v)o(e)f(mail)f(to)i(a)h(non-existen)o(t)g(or)f(h)o(ung)179 +856 y(\014lesystem)g(ma)o(y)f(result)j(in)f(mail)d(loss.)137 +939 y Fi(\017)21 b Fm(Distrib)o(uti)o(on)o Fl(:)27 b(ha)o(ving)19 +b(all)f(mail)f(sp)q(o)q(ol)j(directories)h(spread)f(among)e(the)i(man)o(y)e +(more)h(\014lesystems)179 988 y(minim)o(izes)14 b(the)j(c)o(hances)h(that)f +(complete)f(en)o(vironmen)o(ts)g(will)f(grind)h(to)g(a)g(halt)g(when)h(a)f +(single)g(serv)o(er)179 1038 y(is)e(do)o(wn.)19 b(It)c(do)q(es)g(increase)g +(the)g(c)o(hance)h(that)e(there)i(will)d(b)q(e)i(someone)f(who)g(is)g(not)g +(able)g(to)h(read)g(their)179 1088 y(mail)d(when)j(a)g(mac)o(hine)e(is)i(do)o +(wn,)f(but)h(that)g(is)g(usually)f(preferred)j(to)d(ha)o(ving)g(no)h(one)g(b) +q(e)g(able)g(to)f(read)179 1138 y(their)j(mail)e(b)q(ecause)k(a)d(cen)o +(tralized)i(mail)d(serv)o(er)k(is)d(do)o(wn.)28 b(The)17 b(problem)f(of)h +(losing)f(some)g(mail)e(due)179 1188 y(to)i(the)h(\(presumably\))f(higher)g +(c)o(hances)i(that)e(a)g(user's)i(mac)o(hine)d(is)h(do)o(wn)g(is)g(minimi)o +(zed)e(in)i(HLFS)h(as)179 1237 y(describ)q(ed)e(in)f(Sections)h(4.3)d(and)i +(4.4.)137 1320 y Fi(\017)21 b Fm(Securit)o(y)p Fl(:)e(deliv)o(ering)d(mail)d +(to)j(users')g(home)f(directories)i(has)f(another)h(adv)n(an)o(tage)e(|)g +(enhanced)i(se-)179 1370 y(curit)o(y)e(and)g(priv)n(acy)m(.)21 +b(Since)15 b(a)g(shared)h(system)f(mail)d(sp)q(o)q(ol)j(directory)h(has)f(to) +g(b)q(e)h(w)o(orld-readable)e(and)179 1420 y(searc)o(hable,)376 +1405 y Fg(8)407 1420 y Fl(an)o(y)d(user)i(can)f(see)i(whether)f(other)f +(users)h(ha)o(v)o(e)f(mail,)d(when)k(they)f(last)g(receiv)o(ed)h(new)f(mail,) +179 1470 y(or)j(when)h(they)g(last)f(read)h(their)g(mail.)k(Programs)14 +b(suc)o(h)i(as)g Fk(finger)e Fl(displa)o(y)g(this)i(information,)c(whic)o(h) +179 1520 y(some)f(consider)i(an)f(infringemen)o(t)f(of)h(priv)n(acy)m(.)k +(While)c(it)g(is)g(p)q(ossible)g(to)g(disable)g(this)h(feature)g(of)e +Fk(finger)179 1570 y Fl(so)16 b(that)f(remote)g(users)j(cannot)d(see)i(a)f +(mailb)q(o)o(x)c(\014le's)k(status,)g(this)g(do)q(esn't)g(prev)o(en)o(t)h(lo) +q(cal)e(users)i(from)179 1619 y(getting)d(the)g(information.)i(F)m +(urthermore,)e(there)h(are)g(more)e(programs)g(whic)o(h)h(mak)o(e)e(use)j(of) +f(this)g(infor-)179 1669 y(mation.)24 b(In)17 b(shared)h(en)o(vironmen)o(ts,) +e(disabling)f(suc)o(h)j(programs)d(has)i(to)g(b)q(e)g(done)g(on)g(a)f +(system-wide)179 1719 y(basis,)i(but)g(with)g(mail)d(deliv)o(ered)j(to)g +(users')h(home)e(directories,)i(users)h(less)e(concerned)i(with)d(priv)n(acy) +179 1769 y(who)f Fh(do)g Fl(w)o(an)o(t)f(to)h(let)g(others)h(kno)o(w)f(when)g +(they)h(last)f(receiv)o(ed)h(or)f(read)g(mail)e(can)i(easily)f(do)h(so)g +(using)179 1819 y(\014le)e(protection)i(bits.)k(Lastly)m(,)14 +b(on)g(systems)h(that)g(do)f(not)h(exp)q(ort)g(their)g(NFS)g(\014lesystem)f +(with)h Fk(anon=0)p Fl(,)179 1868 y(sup)q(erusers)f(are)e(less)g(lik)o(ely)d +(to)j(sno)q(op)f(around)g(others')h(mail,)d(as)i(they)h(b)q(ecome)f(\\nob)q +(o)q(dies")g(across)h(NFS.)175 1985 y(In)j(summary)m(,)e(deliv)o(ering)i +(mail)d(to)k(home)e(directories)j(pro)o(vides)f(users)h(the)f(functionalit)o +(y)e(sough)o(t,)h(and)75 2034 y(also)e(a)o(v)o(oids)g(most)g(of)g(the)i +(problems)e(discussed)i(in)f(Section)g(2.2.)75 2142 y Fj(3)56 +b(Design)175 2218 y Fl(W)m(e)16 b(named)f(our)h(\014le)h(system)f(the)h +Fh(Home-Link)h(File)e(System)p Fl(,)h(b)q(ecause)h(that's)f(all)e(it)h(do)q +(es)h(|)f(pro)o(vide)75 2267 y(sym)o(b)q(olic)11 b(links)g(to)i(\014les)f +(and)h(directories)g(in)f(a)g(user's)i(home)d(directory)m(.)18 +b(The)13 b(soft)f(link)f(has)i(a)f(\014xed)h(name,)e(but)75 +2317 y(unlik)o(e)16 b(regular)h(soft)g(links,)f(what)h(it)f(p)q(oin)o(ts)h +(to)f(is)h(\\dynamic")e(dep)q(ending)i(on)f(who)h(accesses)i(the)f(sym)o(b)q +(olic)75 2367 y(link.)25 b(The)18 b(ideas)e(that)h(this)g(\014lesystem)f +(represen)o(ts)k(are)d(not)f(limited)f(just)i(to)f(handling)g(electronic)h +(mail)d(|)75 2417 y(that)g(is)g(only)f(one)h(application)e(of)i(this)g +(\014lesystem.)j(See)e(Sections)g(7.1)e(and)g(7.2)g(for)h(other)g(ideas.)175 +2491 y(Our)g(k)o(ey)g(goals)f(in)g(designing)h(HLFS)g(w)o(ere:)p +75 2526 720 2 v 121 2553 a Ff(7)139 2565 y Fe(This)e(assumes)f(that)h(they)g +(can)g(login)f(to)i(a)f(di\013eren)o(t)f(host.)18 b(Some)11 +b(systems,)g(suc)o(h)h(as)h(HP-UX,)h(do)e(not)g(allo)o(w)g(login)g(if)g(they) +75 2604 y(cannot)e Fd(chdir)g Fe(to)h(the)g(user's)f(home)g(directory)m(.)121 +2632 y Ff(8)139 2644 y Fe(System)g(V)i(has)g(the)f(mail)g(sp)q(o)q(ol)f +(directory)g(only)h(group)f(writable)h(but)g(that)g(mak)o(es)f(it)i(more)f +(di\016cult)g(to)g(install)g(other)f(UAs)75 2683 y(or)h(MT)m(As.)965 +2825 y Fl(5)p eop +%%Page: 6 6 +bop 126 42 a Fl(1.)20 b(T)m(o)13 b(pro)o(vide)h(ev)o(ery)g(user)h(with)f(the) +g(abilit)o(y)e(to)i(read)h(mail)c(from)h(an)o(y)h(host.)126 +125 y(2.)20 b(T)m(o)14 b(ensure)j(that)f(all)e(MT)m(As)h(and)g(UAs)h(in)f +(use,)h(as)f(w)o(ell)g(as)g(an)o(y)g(other)h(utilities)f(whic)o(h)g(dep)q +(end)h(on)f(the)179 174 y(standard)f(mail)d(sp)q(o)q(ol)i(directory)m(,)g +(face)h(no)g(problems)e(from)g(the)i(c)o(hange)g(in)f(the)h(underlying)g +(\014lesystem.)126 257 y(3.)20 b(T)m(o)13 b(minim)o(ize)e(the)k(p)q +(ossibilit)o(y)e(of)g(mail)e(b)q(eing)j(lost)g(or)f(b)q(ouncing)h(bac)o(k)g +(to)g(the)g(sender.)126 340 y(4.)20 b(T)m(o)13 b(pro)o(vide)h(more)e(priv)n +(acy)i(for)f(users')i(mail)d(\014les.)175 457 y(Since)g(most)f(sites)i(pro)o +(vide)f(access)i(to)e(users')i(home)c(directories)k(from)c(an)o(y)i(host,)g +(it)g(made)f(sense)j(to)e(store)75 506 y(incoming)f(mail)g(there)k(as)f(w)o +(ell.)j(That)c(w)o(a)o(y)m(,)f(as)i(long)f(as)g(users)i(could)f(log)e(in)o +(to)h(a)h(host)f(and)h(access)h(their)f(home)75 556 y(directories)f(via)e +(NFS,)h(their)g(mail)d(w)o(ould)i(b)q(e)h(accessible)h(as)f(w)o(ell.)17 +b(This)11 b(solv)o(ed)h(the)g(\014rst)h(problem.)j(Also,)11 +b(since)75 606 y(users)16 b(m)o(ust)e(login)f(in)i(order)g(to)g(read)g(their) +g(mail,)d(causing)i(their)i(home)d(directories)j(to)f(b)q(e)g(automoun)o +(ted,)e(no)75 656 y(extra)h(moun)o(ts)f(are)h(required)h(in)f(order)g(to)g(b) +q(egin)g(reading)f(mail.)175 731 y(The)f(second)g(problem)f(w)o(as)g(solv)o +(ed)h(b)o(y)f(making)e(sure)k(that)f(the)g(\014nal)f(access)j(of)d(the)h +(mail)d(sp)q(o)q(ol)i(directory)75 780 y(remains)17 b(a)g(\\real")h +(directory)g(\(not)g(a)g(read-only)f(pseudo-\014lesystem)i(pro)o(vided)f(b)o +(y)f(an)h(automoun)o(ter\).)29 b(All)75 830 y(UAs)20 b(access)h(the)f(sp)q(o) +q(ol)f(directory)h(for)f(reading)g(and)h(writing)e(the)i(user's)h(mail)16 +b(\014le)k(and)f(create)i(lo)q(c)o(k)e(\014les)75 880 y(there.)178 +865 y Fg(9)217 880 y Fl(That)14 b(means)f(that)h Fk(/var/spool/mail)d +Fl(needs)16 b(to)e(b)q(e)g(readable,)g(writable,)g(and)g(searc)o(hable)h(for) +e(UAs)75 930 y(and)i(MT)m(As)g(so)g(that)g(lo)q(c)o(k)f(\014les)h(can)g(b)q +(e)h(written)f(and)g(remo)o(v)o(ed.)20 b(See)c(also)e(Section)i(4.6.)k(F)m +(or)14 b(the)i(purp)q(ose)g(of)75 980 y(writing)g(the)i(mail)c(and)j(lo)q(c)o +(k)g(\014les,)g(a)g(sub)q(directory)h(inside)f(the)h(user's)g(home)e +(directory)i(is)e(su\016cien)o(t,)i(since)75 1029 y(it)d(is)f(already)h(o)o +(wned)g(b)o(y)g(that)g(user.)22 b(Ensuring)15 b(that)g(users)i(cannot)e +(access)i(other)e(users')h(\014les)g(can)f(easily)f(b)q(e)75 +1079 y(ac)o(hiev)o(ed)g(b)o(y)g(protecting)g(this)g(sub)q(directory)m(.)175 +1154 y(In)h(order)i(not)f(to)g(c)o(hange)g(the)g(b)q(eha)o(vior)g(of)f +(programs)g(lik)o(e)g Fk(comsat)p Fl([21)m(,)h(23)o(],)g Fk(from)f +Fl(or)g Fk(finger)p Fl(,)g(whic)o(h)75 1204 y(are)j(designed)g(to)g(read)g +(an)o(y)f(user's)h(mail,)e(w)o(e)i(implem)o(en)o(ted)e(a)h(sp)q(ecial)h(c)o +(hec)o(k)h(for)e(a)g(designated)h(group.)29 b(If)75 1254 y(the)17 +b(e\013ectiv)o(e)g Fh(gid)f Fl(of)g(the)g(pro)q(cess)i(is)e(the)h(designated) +g(group,)f(w)o(e)g(assume)g(that)g(suc)o(h)h(a)e(sp)q(ecial)i(program)d(is)75 +1303 y(executing,)20 b(and)e Fk(hlfsd)f Fl(arranges)i(to)f(do)g(the)h(lo)q +(okup)f(not)g(only)g(of)f(the)i(real)g(sp)q(o)q(ol)f(directory)m(,)h(but)g +(of)e(the)75 1353 y(mailb)q(o)o(x)f(itself.)34 b(See)20 b(T)m(able)e(2.)33 +b(Note)20 b(that)f(this)g(metho)q(d)g(only)f(supp)q(orts)i(read)g(access)h +(without)d(lo)q(c)o(king;)p 75 1415 1800 5 v 607 1469 a(Conditions:)f +Fh(gid)p Fl(=HLFS)p 1027 1469 13 2 v 15 w(GID)d(for)f(an)o(y)h +Fh(uid)p Fl(.)p 206 1487 1538 2 v 205 1537 2 50 v 214 1537 +V 239 1522 a Fm(Resolving)p 502 1537 V 919 1537 V 1735 1537 +V 1744 1537 V 205 1587 V 214 1587 V 239 1572 a(comp)q(onen)o(t)p +502 1587 V 58 w(P)o(athname)g(left)p 919 1587 V 120 w(V)l(alue)g(if)h(sym)o +(b)q(olic)f(link)p 1735 1587 V 1744 1587 V 206 1589 1538 2 +v 206 1599 V 205 1648 2 50 v 214 1648 V 239 1633 a Fk(/)p 502 +1648 V 267 w(var/mail/)p Fh(NAME)p 919 1648 V 1735 1648 V 1744 +1648 V 206 1650 1538 2 v 205 1700 2 50 v 214 1700 V 239 1685 +a Fk(var)p Fl(/)p 502 1700 V 202 w Fk(mail/)p Fh(NAME)p 919 +1700 V 1735 1700 V 1744 1700 V 206 1701 1538 2 v 205 1751 2 +50 v 214 1751 V 239 1736 a Fk(mail)p Fl(@)p 502 1751 V 169 +w Fk(/mail/home/)p Fh(NAME)p 919 1751 V 48 w Fk(mail)p Fl(@)f +Fi(\))g Fk(/mail/home)p 1735 1751 V 1744 1751 V 206 1753 1538 +2 v 205 1803 2 50 v 214 1803 V 239 1788 a(/)p 502 1803 V 267 +w(mail/home/)p Fh(NAME)p 919 1803 V 1735 1803 V 1744 1803 V +206 1804 1538 2 v 205 1854 2 50 v 214 1854 V 239 1839 a Fk(mail)p +Fl(/)p 502 1854 V 180 w Fk(home/)p Fh(NAME)p 919 1854 V 1735 +1854 V 1744 1854 V 206 1856 1538 2 v 205 1906 2 50 v 214 1906 +V 239 1891 a Fk(home)p Fl(@)p 502 1906 V 169 w Fh(NAME)p 919 +1906 V 290 w Fk(home)p Fl(@)g Fi(\))g Fk(.)p 1735 1906 V 1744 +1906 V 206 1907 1538 2 v 205 1957 2 50 v 214 1957 V 239 1942 +a(.)p Fl(/)p 502 1957 V 246 w Fh(NAME)p 919 1957 V 1735 1957 +V 1744 1957 V 206 1959 1538 2 v 206 1969 V 205 2019 2 50 v +214 2019 V 239 2004 a(NAME)p Fl(@)p 502 2019 V 919 2019 V 547 +w Fh(NAME)p Fl(@)h Fi(\))f Fk(~)p Fh(NAME)p Fk(/.mailspool/)p +Fh(NAME)p 1735 2019 V 1744 2019 V 206 2020 1538 2 v 205 2070 +2 50 v 214 2070 V 239 2055 a Fk(~)p Fh(NAME)p Fl(/)p 502 2070 +V 119 w Fk(.mailspool/)p Fh(NAME)p 919 2070 V 1735 2070 V 1744 +2070 V 206 2072 1538 2 v 205 2122 2 50 v 214 2122 V 239 2107 +a Fk(.mailspool)p Fl(/)p 502 2122 V 48 w Fh(NAME)p 919 2122 +V 1735 2122 V 1744 2122 V 206 2123 1538 2 v 205 2173 2 50 v +214 2173 V 239 2158 a(NAME)p 502 2173 V 919 2173 V 1735 2173 +V 1744 2173 V 206 2175 1538 2 v 243 2249 a Fl(T)m(able)g(2:)18 +b(Sp)q(ecially)13 b(resolving)h Fk(/var/mail/)p Fh(NAME)e Fl(to)h +Fm(~)p Fh(NAME)p Fk(/.mailspool/)p Fh(NAME)p 75 2299 1800 5 +v 75 2440 a Fl(ho)o(w)o(ev)o(er,)k(this)g(is)f(su\016cien)o(t)h(for)f(all)g +(programs)f(that)i(need)g(to)g(access)h(other)f(users')h(mailb)q(o)o(xes.)24 +b(All)15 b(that)i(is)75 2490 y(required)e(is)f(to)f(set)i(these)g(programs)e +(to)h(b)q(e)g Fh(setgid)g Fl(to)g(the)g(designated)h(group.)p +75 2525 720 2 v 121 2552 a Ff(9)139 2563 y Fe(Note)e(that,)g(in)g(order)g(to) +g(allo)o(w)g(mail)g(deliv)o(ery)e(to)i(NFS)q(-moun)o(ted)d(mail)j(sp)q(o)q +(ol)g(directories,)e(most)h(v)o(endors)g(ha)o(v)o(e)h(mo)q(di\014ed)75 +2603 y(the)d Fd(/bin/mail)e Fe(program)g(to)j(set)f(its)g Fc(uid)h +Fe(to)g(that)f(of)g(the)g(recipien)o(t)e(when)j(deliv)o(ering)d(mail.)13 +b(If)e(a)g(lo)q(cal)e(deliv)o(ery)g(agen)o(t)g(\(LD)o(A\))i(on)75 +2642 y(a)g(system)f(do)q(es)g(not)g(pro)o(vide)f(this)i(b)q(eha)o(vior,)d +(the)j(MT)m(A)i(m)o(ust)d(arrange)f(to)i(in)o(v)o(ok)o(e)e(it)i(with)g(the)f +Fc(uid)i Fe(of)f(the)f(recipien)o(t)f(|)j(this)e(can)75 2682 +y(b)q(e)h(done)f(b)o(y)h(a)h(wrapp)q(er)e(C)i(program.)965 +2825 y Fl(6)p eop +%%Page: 7 7 +bop 175 42 a Fl(The)14 b(third)h(problem)d(is)j(solv)o(ed)f(b)o(y)g(ensuring) +g(that)h(all)e(op)q(erations)h(whic)o(h)g(migh)o(t)f(hang)g +Fk(hlfsd)h Fl(are)g(p)q(er-)75 91 y(formed)e(in)h(the)h(bac)o(kground,)f +(while)g(still)g(pro)o(viding)f(service)j(in)e(the)h(paren)o(t)g(or)g(c)o +(hild)f(pro)q(cess.)20 b(F)m(urthermore,)75 141 y(if)12 b Fk(hlfsd)f +Fl(is)i(not)g(running)f(an)o(ymore,)f(or)i(if)f(the)h(user's)h(home)d +(\014lesystem)i(is)f(full,)f(mail)f(gets)k(deliv)o(ered)f(to)f(an)h(al-)75 +191 y(ternate)f(directory)g(\(See)g(also)f(Section)g(4.3\).)16 +b(A)11 b Fk(cron)f Fl(job)h(\(running)g(sev)o(eral)g(times)g(a)f(da)o(y)h(in) +f(our)i(departmen)o(t\),)75 241 y(lo)q(oks)h(at)h(the)h(alternate)g +(directory)m(,)f(and)g(attempts)f(to)h(resend)i(messages)e(in)g(it)f(to)h +(their)h(righ)o(tful)e(o)o(wners.)19 b(All)75 291 y(that)12 +b(is)h(incurred)g(is)g(a)f(dela)o(y)g(in)g(mail)d(deliv)o(ery)m(,)j(whic)o +(h,)g(in)g(most)f(cases,)j(is)e(no)g(longer)h(than)f(the)h(length)f(of)g +(time)75 340 y(b)q(et)o(w)o(een)j(consecutiv)o(e)h(in)o(v)o(o)q(cations)d(of) +g(the)h(lost-mail)d(remailing)h(script.)175 415 y(Ha)o(ving)h(a)h(sp)q(ecial) +g(mail-sp)q(o)q(ol)e(sub)q(directory)j(o)o(wned)g(and)f(con)o(trolled)g(b)o +(y)g(the)h(user)g(also)f(addresses)i(the)75 465 y(last)c(problem,)f(that)i +(of)f(priv)n(acy)m(.)k(Users)e(can)f(c)o(hange)g(the)g(protection)g(bits)g +(on)f(their)h(mailb)q(o)o(x)d(directory)j(inside)75 515 y(their)g(home)f +(directory)i(so)f(that)g(it)f(is)h(readable)g(and)g(searc)o(hable)h(only)e(b) +o(y)h(the)g(o)o(wner.)18 b(An)o(y)13 b(other)h(program)d(or)75 +565 y(user,)16 b(unless)f(running)g(as)g(the)g(sup)q(eruser)j(on)c(the)i +(same)e(host,)1091 549 y Fg(10)1141 565 y Fl(w)o(ould)g(not)h(b)q(e)g(able)g +(to)f(\014nd)h(out)g(whether)h(a)75 614 y(user)f(has)f(new)g(mail,)d(ho)o(w)j +(m)o(uc)o(h)e(of)i(it)f(there)i(is,)f(or)f(when)i(it)e(w)o(as)h(last)g(read.) +75 722 y Fj(4)56 b(Impleme)o(n)n(tation)16 b(of)j Fb(hlfsd)175 +797 y Fl(W)m(e)f(used)i(a)f(protot)o(yp)q(e)h(NFS)f(serv)o(er,)j(and)d +(implem)o(en)o(ted)e(only)i(the)g(op)q(erations)h(that)f(w)o(ere)h(needed.)75 +847 y(W)m(e)14 b(generated)i(NFS)e(stubs)i(using)e Fk(rpcgen)p +Fl(.)k(The)d(serv)o(er)h(w)o(as)e(dev)o(elop)q(ed)h(\014rst)g(under)h(SunOS)f +(v)o(ersion)f(4.1.2.)75 897 y(This)g(serv)o(er)i(w)o(as)e(incorp)q(orated)h +(in)o(to)e(the)i Fk(amd)e Fl(source)j(tree,)f(and)f(w)o(e)g(used)h(some)e(of) +h Fk(amd)p Fl('s)f(sources)j(as)e(utilit)o(y)75 947 y(functions,)k(since)g +(they)g(are)g(w)o(ell-written)f(to)h(handle)f(a)g(v)n(ariet)o(y)g(of)g(arc)o +(hitectures)j(and)d(op)q(erating)g(systems.)75 997 y(\(See)e(Section)f(4.7)f +(for)h(source)h(co)q(de)g(a)o(v)n(ailabil)o(it)o(y)l(.\))75 +1105 y Fj(4.1)56 b(The)18 b(\\Home-Link")d(File)j(Service)175 +1180 y Fl(This)10 b(subsection)i(includes)g(tec)o(hnical)f(details)f(of)h +(the)g(NFS)g(op)q(erations)g(and)g(ma)o(y)e(b)q(e)i(skipp)q(ed.)18 +b(Ho)o(w)o(ev)o(er,)75 1230 y(it)13 b(pro)o(vides)g(an)g(example)e(of)i(the)g +(design)h(and)f(implem)o(en)o(tation)d(of)i(a)h(small)e(sp)q(ecial-purp)q +(ose)j(NFS)g(serv)o(er)g(and)75 1279 y(ma)o(y)e(b)q(e)i(of)g(use)g(to)g +(others.)175 1354 y(HLFS)j(is)g(a)g(read-only)g(\014lesystem,)g(and)g(as)h +(suc)o(h,)g(all)e(op)q(erations)i(that)f(require)h(write)g(access)h(return)75 +1404 y(the)d(error)h(co)q(de)f(NFSERR)p 522 1404 13 2 v 14 +w(R)o(OFS)g(\(\\Read-Only)f(Filesystem"\):)20 b Fh(setattr,)c(write,)f(cr)n +(e)n(ate,)h(r)n(emove,)g(r)n(ename,)75 1454 y(link,)g(unlink,)g(symlink,)g +(mkdir,)f Fl(and)g Fh(rmdir)p Fl(.)21 b(T)m(rivially)13 b(implemen)o(ted)g(w) +o(ere)j(the)g Fh(nul)r(l)p Fl(,)f Fh(r)n(o)n(ot)p Fl(,)g(and)g +Fh(write)n(c)n(ache)75 1504 y Fl(op)q(erations.)i(W)m(e)11 +b(decided)h(to)e(ha)o(v)o(e)h Fh(statfs)f Fl(return)i(some)e(v)n(alue)h +(\(all)e(zeros)k(in)d(most)g(cases\).)18 b(The)11 b Fh(r)n(e)n(ad)g +Fl(op)q(eration)75 1553 y(simply)h(returns)j(NFSERR)p 524 1553 +V 15 w(A)o(CCES)f(\(\\P)o(ermission)f(Denied"\).)175 1628 y(The)e(remaining)e +(op)q(erations)i(are)h(the)f(heart)h(of)e(this)h(\014lesystem:)17 +b Fh(r)n(e)n(addir)p Fl(,)10 b Fh(getattr)p Fl(,)g Fh(lo)n(okup)p +Fl(,)i(and)f Fh(r)n(e)n(ad)r(link)p Fl(.)175 1703 y(Our)j(serv)o(er)h(m)o +(ust)d(distinguish)h(b)q(et)o(w)o(een)i(the)f(directory)g(and)g(the)g(link,)e +(so)i(w)o(e)f(assigned)h(them)f(di\013eren)o(t)75 1753 y(in)o(tegers)f(to)f +(serv)o(e)i(as)f(\014lehandles.)17 b(Note)12 b(that)f(these)i(need)g(not)e(b) +q(e)h(as)f(complicated)g(as)g(the)h(\014lehandles)g(usually)75 +1802 y(generated)j(b)o(y)f(NFS.)k(They)c(need)h(only)e(to)h(b)q(e)h(unique,)e +(and)h(their)g(v)n(alue)f(is)h(meaningful)d(only)i(to)h(the)h(serv)o(er.)75 +1910 y Fj(4.1.1)55 b(The)19 b(readdir)f(Op)r(eration)175 1985 +y Fl(Op)q(ening)h(this)g(directory)h(returns)h(the)f(\\.")33 +b(and)19 b(\\..")33 b(directories,)21 b(and)e(one)g(sym)o(b)q(olic)e(link,)i +Fk(home)p Fl(.)75 2035 y(A)o(ttempting)e(to)g(readdir)h(on)g(the)g(sym)o(b)q +(olic)e(link)h(results)i(in)f(an)f(NFSERR)p 1326 2035 V 15 +w(NOTDIR.)g(An)o(ything)g(else)i(is)e(a)75 2085 y(stale)d(\014lehandle.)75 +2193 y Fj(4.1.2)55 b(The)19 b(getattr)e(Op)r(eration)175 2268 +y Fh(Getattr)h Fl(returns)i(r-xr-xr-x)e(for)h(the)g(\\.")32 +b(and)18 b(\\..")32 b(directories.)h(The)19 b(link)f(itself,)h(named)e +Fk(home)h Fl(b)o(y)75 2318 y(default,)d(is)h(protected)h(as)f(rwxrwxrwx.)23 +b(It)16 b(do)q(es)g(not)g(matter)f(for)g(the)h(link)f(that)h(it)f(is)g(w)o +(orld-writable.)23 b(The)75 2368 y(mo)q(di\014cation)10 b(and)j(creation)f +(times)g(for)g(the)h(link)e(and)i(directories)g(are)g(the)g(startup)g(time)e +(of)h(the)h(serv)o(er.)19 b(If)12 b(the)75 2418 y(e\013ectiv)o(e)k +Fh(gid)f Fl(of)f(the)h(pro)q(cess)h(is)f(HLFS)p 721 2418 V +15 w(GID,)e(then)j(some)d(\014xed)i(v)n(alid)e(attributes)j(are)f(returned.) +22 b(An)o(y)14 b(other)75 2467 y(\014lehandle)i(giv)o(en)f(to)g +Fk(hlfsd)g Fl(is)g(considered)i(stale)f(and)f(the)i(NFSERR)p +1227 2467 V 14 w(ST)m(ALE)f(\(\\Stale)f(Filehandle"\))g(result)75 +2517 y(co)q(de)g(is)e(returned.)p 75 2544 720 2 v 106 2571 +a Ff(10)139 2582 y Fe(Or)e(as)h(the)f(sup)q(eruser)e(elsewhere,)h(if)h(the)g +(\014lesystem)e(is)i(NFS-exp)q(orted)e(with)j Fd(anon=0)p Fe(.)965 +2825 y Fl(7)p eop +%%Page: 8 8 +bop 75 42 a Fj(4.1.3)55 b(The)19 b(lo)r(okup)e(Op)r(eration)175 +117 y Fl(Ob)o(viously)m(,)c(w)o(e)i(only)f(allo)o(w)f(lo)q(oking)g(up)h(in)h +(the)g(\\.")20 b(and)14 b(\\..")20 b(directories,)15 b(b)q(oth)g(of)f(whic)o +(h)g(return)i(the)75 166 y(same)e(v)n(alues.)22 b(T)m(rying)15 +b(to)g(lo)q(okup)f(\\in")h(the)g(link)g(results)h(in)f(an)g(NFSERR)p +1312 166 13 2 v 15 w(NOTDIR)f(\(\\Not)i(a)f(Directory"\))75 +216 y(error)k(co)q(de.)32 b(An)o(y)18 b(link)g(not)g(kno)o(wn)g(to)g(the)h +(serv)o(er)g(returns)h(an)e(NFSERR)p 1338 216 V 15 w(NOENT)h(\(\\No)f(Suc)o +(h)h(En)o(try"\))75 266 y(error,)f(unless)f(the)g Fh(gid)g +Fl(of)e(the)j(requesting)f(pro)q(cess)h(is)f(HLFS)p 1088 266 +V 15 w(GID)f(and)g(the)h(name)e(corresp)q(onds)k(to)d(a)h(v)n(alid)75 +316 y(user.)i(In)12 b(this)g(case)h(the)g Fh(username)f Fl(for)g(that)g(user) +h(is)f(used)h(in)f(the)g(returned)i(\014lehandle,)e(allo)o(wing)e(the)i +(readlink)75 366 y(op)q(eration)i(to)f(return)j(the)e(correct)i(link.)h(An)o +(ything)c(else)i(is)e(a)h(stale)g(\014lehandle.)75 474 y Fj(4.1.4)55 +b(The)19 b(readlink)e(Op)r(eration)175 549 y Fl(This)d(is)h(the)g(most)f(imp) +q(ortan)o(t)e(op)q(eration,)j(the)g(cen)o(tral)g(p)q(oin)o(t)f(of)g(this)h(w) +o(ork.)20 b(W)m(e)15 b(get)g(the)g Fh(uid)g Fl(n)o(um)o(b)q(er)75 +599 y(from)c(the)j(creden)o(tials)g(sen)o(t)g(with)e(the)i(RPC)f(op)q +(eration.)k(W)m(e)c(mak)o(e)e(sure)j(that)f(Unix)g(Authen)o(tication)g(or)g +(DES)75 648 y(is)h(used)h(or)e(else)i(w)o(e)f(return)h(the)g(NFSERR)p +774 648 V 14 w(PERM)f(\(\\Not)g(Owner"\))h(co)q(de.)175 723 +y(If)j(the)h Fh(gid)g Fl(of)f(the)h(accessing)h(pro)q(cess)g(is)f(not)g(HLFS) +p 1064 723 V 15 w(GID,)e(the)i(v)n(alue)f(w)o(e)h(return)h(for)f(the)g(sym)o +(b)q(olic)75 773 y(link)13 b(named)g Fk(home)379 758 y Fg(11)427 +773 y Fl(is)h(a)g(string)g(represen)o(ting)i(the)f(home)e(directory)i(of)e +(the)i(user)g(whose)g Fh(uid)f Fl(w)o(e)h(just)f(found,)75 +823 y(concatenated)g(with)e(a)h(\014xed)g(comp)q(onen)o(t)e(name)h(represen)o +(ting)i(a)e(sub)q(directory)i(within)e(it.)17 b(W)m(e)c(used)g(a)f(binary)75 +873 y(searc)o(h)h(on)e(the)h(lo)q(okup)e(table)h(to)h(quic)o(kly)e(get)i(the) +g(righ)o(t)f(pathname.)16 b(Di\013eren)o(t)c(home)e(directories)i(for)f(m)o +(ultiple)75 922 y(passw)o(ord)i(database)f(en)o(tries)h(with)f(the)h(same)e +Fh(uid)i Fl(n)o(um)o(b)q(ers)f(ma)o(y)e(return)j(an)o(y)f(of)g(the)h(home)e +(directories.)18 b(Only)75 972 y Fh(uid)c Fl(0)g(is)f(guaran)o(teed)i(to)f +(return)h(\\)p Fk(/)p Fl(".)i(See)e(also)e(Section)h(5.3.)175 +1047 y(If)h(the)h(sym)o(b)q(olic)e(link)g(is)i(named)e Fk(home)h +Fl(and)g(the)h Fh(gid)g Fl(is)f(HLFS)p 1206 1047 V 15 w(GID,)g(w)o(e)h +(return)g(a)g(link)e(to)i(\\.",)e(whic)o(h)75 1097 y(causes)19 +b Fk(hlfsd)d Fl(to)h(b)q(e)h(used)g(to)f(resolv)o(e)h(the)g(next)g(pathname)e +(comp)q(onen)o(t.)27 b(This)17 b(is)h(designed)g(to)f(main)o(tain)75 +1147 y(functionalit)o(y)c(of)i(programs)f(suc)o(h)i(as)f Fk(from)p +Fl(.)20 b(If)15 b(the)h(sym)o(b)q(olic)d(link)h(is)h(not)g(named)f +Fk(home)g Fl(and)h(the)h Fh(gid)f Fl(of)f(the)75 1196 y(accessing)j(pro)q +(cess)g(is)e(HLFS)p 553 1196 V 16 w(GID,)f(w)o(e)i(return)g(a)f(v)n(alue)g(p) +q(oin)o(ting)g(to)g(the)h(user's)h(mailb)q(o)o(x)12 b(\014le)k(in)f(their)h +(mail)75 1246 y(sp)q(o)q(ol)c(directory)m(.)18 b(T)m(o)12 b(do)g(this,)g(w)o +(e)h(extract)g(the)h Fh(username)e Fl(from)f(the)i(\014lehandle,)f(whic)o(h)h +(w)o(as)f(returned)i(b)o(y)e(the)75 1296 y(lo)q(okup)h(op)q(eration.)18 +b(See)d(T)m(able)e(2.)175 1371 y(T)m(rying)c(to)i(readlink)f(on)h(one)g(of)f +(the)i(t)o(w)o(o)e(directories)i(results)g(in)e(an)h(NFSERR)p +1426 1371 V 15 w(ISDIR)f(\(\\Is)h(a)f(directory"\))75 1421 +y(error.)19 b(An)o(ything)13 b(else)i(is)f(a)f(stale)h(\014lehandle.)75 +1528 y Fj(4.2)56 b(Execution)17 b(Flo)n(w)175 1604 y Fl(A)o(t)12 +b(initialization)d(time,)i Fk(hlfsd)g Fl(creates)j(a)e(UDP)g(service,)i(and)e +(forks)g(a)g(c)o(hild.)17 b(The)c(c)o(hild)e(builds)h(the)h +Fh(uid)75 1653 y Fl(lo)q(okup)h(table,)g(sets)i(up)e(signal)g(handlers,)h +(and)f(in)o(terv)n(al)g(timers.)19 b(The)c(signal)e(handlers)i(are)g(mean)o +(t)f(to)g(reload)75 1703 y(the)i(lo)q(okup)f(table)g(at)g(expiration)g(time)f +(of)h(the)h(in)o(terv)n(al)f(timer,)f(or)i(when)g(a)f(SIGHUP)g(is)h(sen)o(t)g +(to)f(the)h(serv)o(er)75 1753 y(\(presumably)11 b(b)o(y)h(a)f(sup)q +(eruser\).)20 b(A)12 b(sp)q(ecial)g(clean)o(up)h(handler)f(is)f(setup)i(for)f +(SIGTERM,)f(to)g(ensure)j(the)e(serv)o(er)75 1803 y(terminates)i(cleanly)m(.) +j(Then)d(the)h Fk(svc)p 682 1803 14 2 v 15 w(run\(\))e Fl(routine)h(is)f(in)o +(v)o(ok)o(ed.)175 1878 y(Mean)o(while)i(the)i(paren)o(t)g(w)o(aits)f(for)f +(the)i(c)o(hild)f(to)g(initialize.)23 b(When)16 b(it)g(do)q(es,)h(the)g +(paren)o(t)f(moun)o(ts)f(the)75 1927 y(serv)o(er)g(on)f(the)g(moun)o(t)e(p)q +(oin)o(t.)18 b(Of)c(utmost)e(imp)q(ortance)h(is)h(to)g(mak)o(e)e(sure)j(the)f +(attribute)g(cac)o(he)h(is)f(turned)g(o\013.)75 1977 y(If)h(the)g(attribute)h +(cac)o(he)f(is)g(not)g(turned)h(o\013,)f(successiv)o(e)i(accesses)g(to)e +Fk(/mail/home)e Fl(w)o(ould)h(return)i(previously)75 2027 y(computed)f +(pathnames)g(p)q(oin)o(ting)f(to)i(another)g(user's)g(mail,)d(resulting)j(in) +f(mail)e(loss)i(or)h(misdeliv)o(ery)m(.)21 b(If)15 b(it)g(is)75 +2077 y(not)d(p)q(ossible)g(to)g(turn)h(o\013)e(the)i(attribute)g(cac)o(he,)f +Fk(hlfsd)f Fl(will)g(exit.)17 b(Ho)o(w)o(ev)o(er,)c(the)f(SA)g(has)h(the)f +(option)g(to)f(force)75 2127 y Fk(hlfsd)j Fl(to)h(con)o(tin)o(ue)g(running)g +(and)g(set)h(the)f(attribute)h(cac)o(he)g(to)f(as)g(short)g(an)g(in)o(terv)n +(al)f(as)h(p)q(ossible)h(\(See)g(also)75 2176 y(Section)e(5.3\).)j(A)o(t)d +(this)g(p)q(oin)o(t)g(the)g(paren)o(t)h(terminates,)e(lea)o(ving)f(the)j(c)o +(hild)e(to)h(run.)175 2251 y(When)j(an)f(in)o(terv)n(al)g(timer)g(go)q(es)h +(o\013)g(\(SIGALRM\))f(or)h(a)f(SIGHUP)h(is)g(sen)o(t)g(to)g(the)h(serv)o +(er,)g(the)f(serv)o(er)75 2301 y(forks)d(a)g(c)o(hild)g(that)g(con)o(tin)o +(ues)h(serving,)f(while)g(the)h(paren)o(t)g(reloads)f(the)h(lo)q(okup)f +(table.)19 b(When)14 b(the)h(paren)o(t)g(is)75 2351 y(\014nished)f(loading,)d +(it)i(sends)i(a)e(SIGKILL)g(to)g(the)h(c)o(hild)e(pro)q(cess,)j(and)e +(resumes)h(serving.)k(When)c(a)f(SIGTERM)75 2401 y(is)h(receiv)o(ed,)h(the)g +(serv)o(er)g(forks)f(a)g(c)o(hild)g(that)g(con)o(tin)o(ues)g(serving,)g +(while)g(it)g(tries)g(to)g(unmoun)o(t)f(the)i(\014lesystem.)75 +2450 y(If)f(and)f(when)i(that)f(succeeds,)i(b)q(oth)e(paren)o(t)g(and)g(c)o +(hild)f(exit.)175 2525 y(As)i(mail)d(service)k(is)e(v)o(ery)h(imp)q(ortan)o +(t,)d(w)o(e)j(w)o(an)o(ted)g(to)f(mak)o(e)g Fk(hlfsd)f Fl(as)i(robust)g(as)g +(p)q(ossible.)20 b(W)m(e)14 b(could)75 2575 y(ha)o(v)o(e)k(designed)g(it)f +(as)h(another)g Fk(amd)g Fl(\\\014lesystem)f(t)o(yp)q(e",)h(but)g(decided)h +(that)f(a)f(separate)i(daemon)e(pro)o(vides)75 2625 y(b)q(etter)i(reliabilit) +o(y)c(and)j(faster)g(service.)29 b(In)18 b(general,)g(w)o(e)f(try)h(to)f(do)g +(as)h(m)o(uc)o(h)e(as)h(p)q(ossible:)25 b(w)o(e)18 b(mak)o(e)e(sure)p +75 2659 720 2 v 106 2686 a Ff(11)139 2698 y Fe(The)11 b(name)f(of)h(the)g +(sym)o(b)q(olic)e(link)i(is)g(con\014gurable.)965 2825 y Fl(8)p +eop +%%Page: 9 9 +bop 75 42 a Fl(\014lesystems)10 b(are)h(accessible)h(and)e(con)o(tain)f(some) +h(disk)g(space)h(to)f(ha)o(v)o(e)g(mail)e(deliv)o(ered)j(there.)18 +b(Where)11 b(directories)75 91 y(are)j(exp)q(ected)h(w)o(e)f(mak)o(e)d(sure)k +(there)f(are)g(no)f(\014les)h(b)o(y)f(these)h(names;)f(where)h(sym)o(b)q +(olic)d(links)i(are)h(exp)q(ected,)h(w)o(e)75 141 y(mak)o(e)f(sure)i(there)h +(are)e(no)g(real)h(\014les)f(or)h(directories)g(with)f(the)h(same)e(name.)21 +b(Whenev)o(er)c(p)q(ossible,)e(w)o(e)g(create)75 191 y(directories,)f(with)f +(prop)q(er)i(o)o(wnership)f(and)f(p)q(ermissions.)k(W)m(e)c(ev)o(en)h(c)o +(hec)o(k)h(that)e(the)h(moun)o(t)e(p)q(oin)o(t)h(for)g Fk(hlfsd)75 +241 y Fl(is)h(w)o(orld)f(readable)h(and)g(executable,)h(since)f(if)f(it)h +(isn't,)f Fk(getwd\(".."\))e Fl(migh)o(t)h(fail.)75 349 y Fj(4.3)56 +b(Alternate)17 b(Mail)h(Sp)r(o)r(ol)g(Directories)175 424 y +Fk(Hlfsd)e Fl(tries)i(to)g(ensure)h(that)f(the)g(user's)g(home)f(directory)h +(is)f(accessible.)31 b(P)o(erio)q(dically)16 b(it)i(also)f(tests)75 +474 y(that)i(it)f(can)h(b)q(e)g(written)g(in)o(to)f(\(Section)h(4.5\).)31 +b(If)18 b(for)h(an)o(y)f(reason)h(a)f(failure)g(o)q(ccurs,)j +Fk(hlfsd)c Fl(rep)q(oin)o(ts)i(the)75 523 y(sym)o(b)q(olic)11 +b(link)h(for)g(that)h(user)h(to)f(an)f(alternate)h(lo)q(cal)f(directory)m(,)h +(whic)o(h)g(is)g(presumably)e(highly)h(a)o(v)n(ailable.)j(W)m(e)75 +573 y(use)g Fk(/var/spool/alt)p 457 573 14 2 v 13 w(mail)e +Fl(in)g(our)h(en)o(vironmen)o(t.)j(See)e(T)m(able)e(3.)1167 +558 y Fg(12)p 75 636 1800 5 v 238 690 a Fl(Conditions:)k(An)o(y)d +Fh(uid)p Fl(,)g Fh(gid)p Fi(6)p Fl(=HLFS)p 829 690 13 2 v 15 +w(GID,)f(and)g Fk(~)p Fh(USER)p Fk(/.mailspool/)f Fl(is)i(not)p +1479 697 60 2 v 14 w(writable.)p 343 710 1265 2 v 342 759 2 +50 v 351 759 V 376 744 a Fm(Resolving)p 629 759 V 1083 759 +V 1598 759 V 1607 759 V 342 809 V 351 809 V 376 794 a(comp)q(onen)o(t)p +629 809 V 47 w(P)o(athname)g(left)p 1083 809 V 157 w(V)l(alue)h(if)g(sym)o(b) +q(olic)f(link)p 1598 809 V 1607 809 V 343 811 1265 2 v 343 +821 V 342 871 2 50 v 351 871 V 376 856 a Fk(/)p 629 871 V 256 +w(var/mail/)p Fh(NAME)p 1083 871 V 1598 871 V 1607 871 V 343 +872 1265 2 v 342 922 2 50 v 351 922 V 376 907 a Fk(var)p Fl(/)p +629 922 V 191 w Fk(mail/)p Fh(NAME)p 1083 922 V 1598 922 V +1607 922 V 343 924 1265 2 v 342 974 2 50 v 351 974 V 376 959 +a Fk(mail)p Fl(@)p 629 974 V 158 w Fk(/mail/home/)p Fh(NAME)p +1083 974 V 85 w Fk(mail)p Fl(@)g Fi(\))f Fk(/mail/home)p 1598 +974 V 1607 974 V 343 975 1265 2 v 342 1025 2 50 v 351 1025 +V 376 1010 a(/)p 629 1025 V 256 w(mail/home/)p Fh(NAME)p 1083 +1025 V 1598 1025 V 1607 1025 V 343 1027 1265 2 v 342 1077 2 +50 v 351 1077 V 376 1062 a Fk(mail)p Fl(/)p 629 1077 V 169 +w Fk(home/)p Fh(NAME)p 1083 1077 V 1598 1077 V 1607 1077 V +343 1078 1265 2 v 342 1128 2 50 v 351 1128 V 376 1113 a Fk(home)p +Fl(@)p 629 1128 V 158 w Fh(NAME)p 1083 1128 V 327 w Fk(home)p +Fl(@)h Fi(\))f Fk(/var/alt)p 1476 1113 14 2 v 14 w(mail)p 1598 +1128 2 50 v 1607 1128 V 343 1130 1265 2 v 342 1180 2 50 v 351 +1180 V 376 1165 a(/)p 629 1180 V 256 w(var/alt)p 811 1165 14 +2 v 15 w(mail/)p Fh(NAME)p 1083 1180 2 50 v 1598 1180 V 1607 +1180 V 343 1181 1265 2 v 342 1231 2 50 v 351 1231 V 376 1216 +a Fk(var)p Fl(/)p 629 1231 V 191 w Fk(alt)p 723 1216 14 2 v +15 w(mail/)p Fh(NAME)p 1083 1231 2 50 v 1598 1231 V 1607 1231 +V 343 1233 1265 2 v 342 1282 2 50 v 351 1282 V 376 1268 a Fk(alt)p +445 1268 14 2 v 15 w(mail)p Fl(/)p 629 1282 2 50 v 88 w Fh(NAME)p +1083 1282 V 1598 1282 V 1607 1282 V 343 1284 1265 2 v 342 1334 +2 50 v 351 1334 V 376 1319 a(NAME)p 629 1334 V 1083 1334 V +1598 1334 V 1607 1334 V 343 1336 1265 2 v 380 1410 a Fl(T)m(able)g(3:)18 +b(Resolving)13 b Fk(/var/mail/)p Fh(NAME)f Fl(to)i Fk(/var/alt)p +1323 1410 14 2 v 14 w(mail/)p Fh(NAME)p 75 1460 1800 5 v 175 +1600 a Fl(When)f Fk(hlfsd)f Fl(starts)i(up,)f(and)g(b)q(efore)h(it)f(moun)o +(ts)f(itself)h(on)f(top)i(of)e(the)i(moun)o(t)d(p)q(oin)o(t,)i(hiding)f(an)o +(ything)75 1650 y(that)k(is)f(underneath,)i Fk(hlfsd)e Fl(creates)i(a)f +(\014xed)g(sym)o(b)q(olic)e(link)g(to)i(the)g(alternate)g(sp)q(o)q(ol)g +(directory)g(\(if)f(it)g(do)q(es)75 1700 y(not)e(exist)g(already\).)k(This)c +(is)g(done)g(so)g(that)f Fk(/var/spool/mail)e Fl(w)o(ould)i(not)h(b)q(e)g(a)g +(\\dangling")d(sym)o(b)q(olic)h(link,)75 1750 y(and)j(p)q(oin)o(ts)g(to)f(a)h +(real)g(directory)h(at)f(all)e(times,)h(ev)o(en)i(after)f Fk(hlfsd)f +Fl(terminates.)18 b(When)c Fk(hlfsd)f Fl(runs,)h(it)g(hides)75 +1799 y(this)h(sym)o(b)q(olic)e(link,)h(and)h(pro)o(vides)g(our)g(\\dynamic")e +(sym)o(b)q(olic)g(link.)20 b(This)15 b(tric)o(k)g(at)g(least)g(pro)o(vides)g +(us)g(with)75 1849 y(an)f(alternate)g(place)g(to)g(deliv)o(er)g(mail)d(when)j +(things)g(go)f(wrong,)h(rather)g(than)g(b)q(ounce)h(or)f(drop)g(the)g(mail.) +175 1924 y(A)g(cron)h(job)e(on)h(our)h(systems)f(c)o(hec)o(ks)i(the)f +(alternate)f(mail)e(sp)q(o)q(ol)i(directory)h(sev)o(eral)g(times)e(a)h(da)o +(y)m(.)k(An)o(y)75 1974 y(messages)12 b(found)g(there)i(are)f(resen)o(t)g(to) +g(their)f(righ)o(tful)f(o)o(wners.)19 b(The)12 b(remailing)e(script)j(can)g +(b)q(e)g(run)f(as)h(often)f(as)75 2024 y(needed.)19 b(Eac)o(h)14 +b(in)o(v)o(o)q(cation)e(of)h(the)g(script)h(deals)g(only)e(with)h(newly)g +(lost)g(mail)e(since)j(the)g(previous)g(in)o(v)o(o)q(cation;)75 +2073 y(the)f(script)g(lo)q(c)o(ks)g(and)f(renames)h(the)g(lost)f(mailb)q(o)o +(x)e(\014le)i(to)h(a)f(unique)h(name,)e(b)q(efore)i(parsing)f(and)h +(remailing)d(it.)175 2148 y(Similar)j(to)k Fk(amd)p Fl(,)f +Fk(hlfsd)f Fl(can)i(log)e(debugging)h(and)h(v)n(arious)e(status)j +(information)13 b(to)k(a)f(designated)h(log)75 2198 y(\014le)e(or)h(using)f +(the)h Fk(syslog)p Fl([22)n(])f(facilit)o(y)m(.)21 b(The)16 +b(SA)f(ma)o(y)f(c)o(ho)q(ose)i(to)g(w)o(atc)o(h)f(these)i(log)e(\014les)g +(and)h(facilities)e(and)75 2248 y(b)q(e)h(noti\014ed)e(when)i(serious)f +(problems)f(o)q(ccur)i(suc)o(h)g(as)f(a)g(full)e(\014lesystem.)75 +2356 y Fj(4.4)56 b(Av)n(oiding)18 b(Hangs)175 2431 y Fl(As)10 +b(describ)q(ed)i(in)e(Section)h(4.2,)e Fk(hlfsd)g Fl(forks)i(a)e(c)o(hild)h +(at)g(an)o(y)g(p)q(oin)o(t)g(where)h(w)o(e)g(susp)q(ect)h(that)e(an)g(op)q +(eration)75 2481 y(migh)o(t)h(hang.)17 b(If,)12 b(for)h(example,)e(the)j +(home)e(mac)o(hine)f(of)i(the)g(user)h(is)f(do)o(wn,)g(and)f(the)i +(\014lesystem)f(on)f(a)h(clien)o(t)g(is)75 2530 y(hard-moun)o(ted,)h +Fk(hlfsd)f Fl(will)h(hang)g(un)o(til)g(the)i(remote)e(serv)o(er)i(is)f(bac)o +(k)g(up.)21 b(P)o(erforming)13 b(these)j(op)q(erations)f(in)75 +2580 y(the)f(bac)o(kground)g(pro)o(vides)g(added)h(reliabilit)o(y)m(,)c(an)i +(idea)h(tak)o(en)g(from)e Fk(amd)p Fl(.)p 75 2615 720 2 v 106 +2642 a Ff(12)139 2653 y Fe(In)f(the)f(conditions)f(for)i(T)m(able)g(3,)g +Fd(~)p Fc(USER)h Fe(is)g(the)f(home)f(directory)f(of)i(the)g(user)f(with)i +(user-id)e Fc(uid)p Fe(.)965 2825 y Fl(9)p eop +%%Page: 10 10 +bop 75 42 a Fj(4.5)56 b(Disk)18 b(Space)g(Problems)175 117 +y Fk(Hlfsd)13 b Fl(c)o(hec)o(ks)j(if)e(the)h(user's)h(home)e(directory)h(is)g +(full)e(or)i(they)g(exceeded)i(their)e(quota.)20 b(It)15 b(attempts)f(to)75 +166 y(create)i(and)e(then)h(remo)o(v)o(e)e(a)h(simple)f(nonzero-length)i +(\014le)f(in)g(the)h(user's)g(sp)q(o)q(ol)f(directory)m(,)h(with)f(the)h +(e\013ectiv)o(e)75 216 y Fh(uid)j Fl(set)g(to)f(that)h(of)f(the)h(user.)30 +b(If)17 b(that)g(fails,)g(it)g(instead)h(returns)h(bac)o(k)e(the)h(name)e(of) +h(the)h(alternate)g(sp)q(o)q(ol)75 266 y(directory)d(as)f(the)g(v)n(alue)f +(of)h(the)g Fk(home)f Fl(sym)o(b)q(olic)f(link.)17 b(Otherwise)f(mail)11 +b(migh)o(t)h(b)q(e)i(dropp)q(ed)h(or)f(b)q(ounce.)175 341 y(An)o(y)j(success) +k(or)d(failure)f(state)h(is)g(recorded)i(in)d Fk(hlfsd)o Fl(.)30 +b(It)18 b(is)g(left)g(there)h(for)e(a)h(sp)q(eci\014ed)h(n)o(um)o(b)q(er)f +(of)75 391 y(seconds,)k(after)f(whic)o(h)e(the)i(en)o(try)g(\\times)d(out")i +(and)g(a)f(new)i(actual)e(bac)o(kgrounded)i(lo)q(okup)e(is)g(required.)75 +440 y(Otherwise,)14 b(the)g(cac)o(hed)g(result)g(is)f(used)g(and)g(no)g(exp)q +(ensiv)o(e)h Fk(fork)e Fl(is)h(required.)19 b(This)13 b(simple)e(cac)o(hing)i +(feature)75 490 y(of)g Fk(hlfsd)g Fl(has)h(greatly)g(impro)o(v)o(ed)e(its)i +(p)q(erformance)g(and)f(reliabilit)o(y)m(.)j(See)f(also)e(Section)h(5.3.)75 +598 y Fj(4.6)56 b(Lo)r(c)n(k)17 b(Files)175 673 y Fl(An)12 +b(alternativ)o(e)h(design)g(for)f Fk(hlfsd)f Fl(is)i(to)f(ha)o(v)o(e)h(it)f +(moun)o(t)f(on)h(top)h(of)f(the)h(mail)d(sp)q(o)q(ol)i(directory)i(directly)m +(,)75 723 y(instead)d(of)f(ha)o(ving)f(the)j(mail)c(sp)q(o)q(ol)i(directory)h +(b)q(e)g(a)g(sym)o(b)q(olic)e(link)g(to)i(another)g(link)e(\()p +Fk(home)p Fl(\))h(within)g(the)h(HLFS,)75 773 y(whic)o(h)k(p)q(oin)o(ts)g(to) +g(a)f(real)h(sub)q(directory)i(of)d(the)i(user's)g(home.)k(With)15 +b(some)f(mo)q(di\014cations)f(to)i(the)g(serv)o(er,)i(w)o(e)75 +823 y(could)d(ha)o(v)o(e)g(made)f(all)h(of)f(the)i(user's)h(mailb)q(o)o(x)11 +b(\014les)k(p)q(oin)o(t)f(to)g(the)h(righ)o(t)f(place,)g(but)g(it)g +(su\013ered)j(from)12 b(serious)75 873 y(dra)o(wbac)o(ks:)137 +977 y Fi(\017)21 b Fl(The)15 b(sp)q(o)q(ol)f(directory)i(w)o(ould)d(no)i +(longer)f(b)q(e)h(a)g(regular)f(directory)m(.)21 b(It)14 b(w)o(ould)g(ha)o(v) +o(e)h(to)f(b)q(e)h(managed)e(b)o(y)179 1027 y Fk(hlfsd)o Fl(.)18 +b(This)c(w)o(ould)f(require)h(the)h(implemen)o(tatio)o(n)c(of)i(more)g(NFS)h +(op)q(erations.)137 1105 y Fi(\017)21 b Fl(The)e(user's)h(sp)q(o)q(ol)f +(\014le)g(w)o(ould)g(not)g(b)q(e)g(a)g(regular)g(\014le,)h(but)f(a)g(sym)o(b) +q(olic)e(link)h(to)h(suc)o(h.)35 b(Some)18 b(mail)179 1155 +y(programs)e(remo)o(v)o(e)g(that)h(\014le,)g(not)g(c)o(hec)o(king)g(if)f +(it's)h(a)f(sym)o(b)q(olic)g(link.)26 b(Therefore)18 b(the)g(sym)o(b)q(olic)d +(link)179 1205 y(w)o(ould)10 b(b)q(e)i(remo)o(v)o(ed.)k(W)m(e)10 +b(w)o(ould)h(ha)o(v)o(e)g(had)f(to)h(c)o(hange)h(the)f(serv)o(er)i(so)e(that) +g(remo)o(ving)e(the)j(sym)o(b)q(olic)d(link)179 1255 y(w)o(ould)14 +b(\014rst)i(follo)o(w)d(it)i(and)g(remo)o(v)o(e)f(the)i(\014le)f(it)g(w)o(as) +g(p)q(oin)o(ting)f(to.)22 b(The)16 b(same)e(go)q(es)i(for)f(all)f(op)q +(erations)179 1304 y(whic)o(h)g(require)g(access)i(to)e(the)g(user's)h(mail)c +(sp)q(o)q(ol)j(\014le.)137 1383 y Fi(\017)21 b Fl(The)11 b(w)o(orst)f +(problem)f(w)o(as)h(that)h(di\013eren)o(t)g(UAs)g(and)f(MT)m(As)g(use)h +(di\013eren)o(t)h(metho)q(ds)d(for)h(lo)q(c)o(king)g(the)h(mail)179 +1432 y(\014le.)17 b(Some)12 b(of)g(them)h(create)h(temp)q(orary)e(\014les)h +(named)f Fk($)p Fi(f)p Fk(USER)p Fi(g)p Fk(.lock)p Fl(,)e(others)k(use)g(the) +f Fk(mktemp)f Fl(library)179 1482 y(call)17 b(to)h(generate)i(unique)e +(names.)31 b(Our)19 b(metho)q(d)e(a)o(v)o(oids)h(the)g(need)i(to)e(\014gure)h +(out)f(all)f(the)i(di\013eren)o(t)179 1532 y(metho)q(ds)13 +b(used)i(in)e(lo)q(c)o(king)g(mail)e(\014les,)j(and)g(usage)g(of)g(temp)q +(orary)f(\014les.)175 1636 y(An)g(alternate)h(w)o(a)o(y)e(to)h(a)o(v)o(oid)f +(the)i(need)g(for)f(lo)q(c)o(k)g(\014les)h(is)f(to)g(deliv)o(er)g(mail)e(one) +i(message)g(p)q(er)h(\014le)f(using)g(a)75 1686 y(di\013eren)o(t)i(system)g +(suc)o(h)g(as)f(with)h(INN[19)o(])f(and)g(NNTP[10];)f(ho)o(w)o(ev)o(er,)i +(this)f(w)o(ould)g(require)h(mo)q(di\014cations)e(to)75 1736 +y(all)g(UAs)h(and)g(MT)m(As.)75 1844 y Fj(4.7)56 b(Source)18 +b(Co)r(de)g(Size,)g(Av)m(ailabilit)n(y)-5 b(,)16 b(and)k(P)n(ortabilit)n(y) +175 1919 y Fk(Hlfsd)c Fl(is)h(less)h(than)f(2500)f(lines)h(of)f(C)h(co)q(de,) +i(including)d(commen)o(ts)f(and)i(white-spaces.)29 b(Ho)o(w)o(ev)o(er,)18 +b(it)75 1969 y(mak)o(es)13 b(use)h(of)g(almost)e(4000)h(lines)g(of)h(co)q(de) +g(from)f(the)h Fk(amd)f Fl(distribution)h(itself.)175 2044 +y Fk(Hlfsd)g Fl(is)h(a)o(v)n(ailable)e(in)i(source)i(form)c(as)j(part)f(of)g +(a)g(sp)q(ecial)h(distribution)e(of)h Fk(amd)p Fl(.)22 b(It)15 +b(can)h(b)q(e)g(retriev)o(ed)75 2094 y(via)d(anon)o(ymous)f +Fk(ftp)h Fl(from)f Fk(ftp.cs.columbia.edu)e Fl(in)k(the)g(directory)h +Fk(/pub/amd)p Fl(.)175 2168 y Fk(Hlfsd)h Fl(is)i(built)f(as)g(part)h(of)f +(the)h(sp)q(ecial)g(distribution)f(of)g Fk(amd)g Fl(a)o(v)n(ailable)f(from)g +(our)h(ftp)h(serv)o(er.)30 b(It)18 b(is)75 2218 y(almost)12 +b(as)j(p)q(ortable)f(as)g Fk(amd)g Fl(is.)k(It)c(is)h(only)e(the)i(lac)o(k)e +(of)h(access)i(to)e(certain)h(mac)o(hines)e(that)h(stopp)q(ed)h(us)g(from)75 +2268 y(p)q(orting)d Fk(hlfsd)f Fl(to)i(the)g(n)o(umerous)f(platforms)e +Fk(amd)i Fl(runs)h(on.)k(A)o(t)c(the)g(writing)f(of)f(this)i(pap)q(er,)g +Fk(hlfsd)e Fl(has)i(b)q(een)75 2318 y(successfully)h(p)q(orted)g(and)e +(running)h(on)f(SunOS)i(4.1.3,)c(HP-UX)k(9.0.1,)d(and)h(Solaris)g(2.2.)17 +b(Those)c(represen)o(t)i(the)75 2367 y(3)h(main)e(system)i(t)o(yp)q(es)h +Fk(amd)e Fl(runs)i(on)f(and)f(span)i(most)e(Unix)g(\015a)o(v)o(ors:)22 +b(a)16 b(BSD-st)o(yle)g(system,)g(an)g(SVR-BSD)75 2417 y(h)o(ybrid,)d(and)h +(a)f(system)h(v)o(ery)g(close)h(to)e(SVR4,)g(resp)q(ectiv)o(ely)m(.)75 +2525 y Fj(5)56 b(Ev)m(aluation)175 2600 y Fl(This)11 b(system)h(is)g(implem)o +(en)o(ted)e(and)i(has)g(b)q(een)h(in)e(use)i(on)e(a)h(n)o(um)o(b)q(er)f(of)g +(mac)o(hines)g(for)h(more)e(than)i(a)g(y)o(ear)75 2650 y(no)o(w.)20 +b(F)m(or)14 b(the)h(\014rst)g(nine)g(mon)o(ths)e Fk(hlfsd)h +Fl(w)o(as)g(in)g(exp)q(erimen)o(tal)g(use.)21 b(W)m(e)14 b(ha)o(v)o(e)h +(since)g(deplo)o(y)o(ed)g(it)f(on)g(most)75 2700 y(pro)q(duction)g(mac)o +(hines)f(in)h(our)f(departmen)o(t,)h(spanning)f(o)o(v)o(er)h(a)g(100)f(hosts) +h(and)g(3)g(di\013eren)o(t)g(arc)o(hitectures.)954 2825 y(10)p +eop +%%Page: 11 11 +bop 175 42 a Fl(The)11 b(goal)f(of)h(this)g(w)o(ork)g(is)f(to)h(expand)h(the) +f(accessibilit)o(y)g(of)g(electronic)h(mail,)d(impro)o(v)o(e)g(o)o(v)o(erall) +h(reliabilit)o(y)75 91 y(and)i(stabilit)o(y)f(of)g(this)h(vital)f(service,)j +(while)d(at)h(the)h(same)e(time)g(main)o(tain)e(the)k(sanit)o(y)f(of)f(our)h +(SAs)h(\(y)o(ours)f(truly)75 141 y(included\).)18 b(F)m(or)c(this)g(to)g +(really)f(w)o(ork,)g(it)g(m)o(ust)g(ha)o(v)o(e:)126 257 y(1.)20 +b(V)m(ery)14 b(high)f(a)o(v)n(ailabilit)o(y)l(.)126 340 y(2.)20 +b(Little)13 b(o)o(v)o(erhead.)126 423 y(3.)20 b(Little)14 b(hassle)g(for)g +(users)i(and)e(administrators)e(as)i(the)h(system)f(is)g(b)q(eing)g(used)h +(or)f(installed)g(for)f(the)i(\014rst)179 473 y(time.)75 598 +y Fj(5.1)56 b(P)n(erformance)175 673 y Fl(W)m(e)15 b(ha)o(v)o(e)g(carried)h +(out)g(some)e(measuremen)o(ts)h(to)h(quan)o(tify)e(the)i(ab)q(o)o(v)o(e)f +(requiremen)o(ts)h(and)g(more.)22 b(The)75 723 y(tests)15 b(w)o(ere)g(p)q +(erformed)f(on)f(a)h(Sun)g(SP)m(AR)o(Cstation-2)f(running)g(SunOS)i(4.1.3.) +175 797 y(Accessing)20 b(a)f(lo)q(cal)g(sp)q(o)q(ol)g(\014le)g(via)f +Fk(stat)h Fl(normally)d(tak)o(es)k(180)e(msec)h(without)g Fk(hlfsd)o +Fl(.)34 b(If)19 b Fk(hlfsd)f Fl(is)75 847 y(running)g(and)g(has)g(the)h +(user's)h(en)o(try)e(already)g(cac)o(hed,)i(it)e(tak)o(es)h(60)f(msec)g(more) +f(to)h(access)i(the)f(\014le.)31 b(This)75 897 y(o)o(v)o(erhead)19 +b(is)f(attributed)h(to)f(the)h(fact)g(that)f(the)h(k)o(ernel)g(has)g(to)f +(access)i(a)e(user-lev)o(el)h(NFS)g(serv)o(er,)h(making)75 +947 y(sev)o(eral)14 b(con)o(text)h(switc)o(hes.)175 1022 y(If)h(the)h(en)o +(try)h(is)e(not)h(cac)o(hed,)h Fk(hlfsd)e Fl(forks)g(a)h(c)o(hild)f(to)h(p)q +(erform)f(op)q(erations)h(whic)o(h)f(ma)o(y)f(cause)j(it)e(to)75 +1071 y(hang.)21 b(The)16 b(o)o(v)o(erhead)f(of)f(that)i Fk(fork)e +Fl(and)h(other)g(c)o(hec)o(ks)i(is)e(an)f(additional)g(70)g(msec)h(\(or)g +(130)f(msec)h(o)o(v)o(er)g(the)75 1121 y(regular)d(lo)q(okup)f(not)g(using)h +Fk(hlfsd)o Fl(\).)17 b(Ho)o(w)o(ev)o(er,)12 b(this)g(o)o(v)o(erhead)g(is)g +(incurred)h(only)d(once)j(in)e(5)h(min)o(utes,)e(b)q(ecause)75 +1171 y(the)k(result)h(of)e(eac)o(h)i(c)o(hec)o(k)g(is)e(cac)o(hed)i(for)f +(that)g(long)f(b)o(y)g(default.)175 1246 y(The)f(ab)q(o)o(v)o(e)g(times)f +(are)i(somewhat)e(signi\014can)o(t,)g(but)i(not)e(b)o(y)h(m)o(uc)o(h,)f +(considering)h(the)h(use)g(of)f(a)f(user-lev)o(el)75 1296 y(\014le-serv)o +(er.)19 b(\(By)12 b(comparison,)e(in)h(our)h(en)o(vironmen)o(t)f(it)g(tak)o +(es)h(ab)q(out)g(0.5)e(seconds)k(to)d(access)j(a)d(new)h(\014lesystem)75 +1345 y(using)h Fk(amd)p Fl(.\))18 b(Giv)o(en)13 b(the)h(b)q(ene\014ts)i(of)d +Fk(hlfsd)o Fl(,)g(w)o(e)h(feel)g(that)g(a)f(minima)o(l)e(access)k(slo)o(wdo)o +(wn)e(is)h(a)f(small)f(price)i(to)75 1395 y(pa)o(y)m(.)j(In)d(practice,)g(o)o +(v)o(er)g(12)g(mon)o(ths)e(of)i(usage)g(w)o(e)g(ha)o(v)o(e)g(noticed)g(no)g +(visible)f(degradation)g(of)h(service.)1734 1380 y Fg(13)175 +1470 y Fl(The)h(in)o(ternal)g(data)h(structures)h(\(tables)f(and)f(cac)o +(hes\))i(require)g(50)e(b)o(ytes)h(p)q(er)g(user)g(on)g(the)g(system.)22 +b(In)75 1520 y(our)16 b(en)o(vironmen)o(t,)e(with)i(750)f(users,)i(that)f +(translates)g(to)g(ab)q(out)f(37KB)h(|)f(rather)i(insigni\014can)o(t)e(giv)o +(en)g(that)75 1570 y(w)o(orkstations)f(these)h(da)o(ys)f(come)f(installed)g +(with)h(at)f(least)i(16-32MB)e(of)g(RAM.)75 1677 y Fj(5.1.1)55 +b(Remailing)16 b(Lost)i(Mail)175 1753 y Fl(The)h Fk(hlfsd)f +Fl(distribution)h(con)o(tains)g(a)f Fk(perl)p Fl([26)o(])g(script)i(called)f +Fk(lostaltmail)p Fl(.)31 b(Remailing)16 b(a)i(single)75 1802 +y(message)c(with)g(a)g(b)q(o)q(dy)g(size)h(of)f(1KB,)g(tak)o(es)h(an)f(a)o(v) +o(erage)g(of)g(1.2)f(seconds)j(\(total)d(time\).)18 b(In)c(our)h(departmen)o +(t,)75 1852 y(resending)g(an)e(a)o(v)o(erage)h(mailb)q(o)o(x)d(\014le)j(tak)o +(es)h(ab)q(out)e(20)h(seconds.)175 1927 y(Initially)f(w)o(e)j(ran)g(the)h +(script)f(once)h(a)e(da)o(y)m(,)g(but)h(found)g(ha)o(ving)f(to)g(w)o(ait)g +(up)h(to)g(24)f(hours)i(for)e(lost)h(mail)75 1977 y(redeliv)o(ery)f(to)q(o)g +(long.)k(W)m(e)14 b(then)i(exp)q(erimen)o(ted)f(with)f(running)g +Fk(lostaltmail)f Fl(once)i(an)f(hour.)21 b(Ho)o(w)o(ev)o(er,)15 +b(w)o(e)75 2027 y(found)c(that)g(frequency)h(to)q(o)f(fast.)17 +b(The)12 b(most)e(lik)o(ely)f(situation)i(in)g(whic)o(h)g Fk(hlfsd)f +Fl(will)f(rep)q(oin)o(t)j(its)f(sym)o(b)q(olic)e(link)75 2076 +y(to)14 b(the)g(alternate)g(sp)q(o)q(ol)g(directory)g(is)g(when)g(the)g +(user's)h(\014lesystem)f(is)f(full.)k(A)d(full)e(\014lesystem)i(is)g(a)f(p)q +(ersisten)o(t)75 2126 y(situation)18 b(that)h(in)f(most)f(cases)j(tak)o(es)f +(some)f(time)f(to)h(get)h(\014xed,)h(as)e(it)h(requires)g(h)o(uman)e(in)o +(terv)o(en)o(tion.)32 b(If)75 2176 y(the)19 b(situation)f(that)h(causes)h +Fk(hlfsd)e Fl(to)g(use)i(the)f(alternate)g(sp)q(o)q(ol)g(directory)g(is)g +(lik)o(ely)e(to)i(p)q(ersist,)h(running)75 2226 y(the)15 b +Fk(lostaltmail)e Fl(script)i(will)f(consume)g(unnecessary)j(resources,)g +(only)d(to)h(redeliv)o(er)g(the)h(mail)c(bac)o(k)j(to)f(the)75 +2276 y(alternate)f(sp)q(o)q(ol)f(directory)m(.)18 b(W)m(e)12 +b(\014nally)g(settled)h(on)g(running)f Fk(lostaltmail)e Fl(b)q(et)o(w)o(een)k +(6)e(and)h(12)f(times)f(a)h(da)o(y)m(.)75 2325 y(Dep)q(ending)i(on)g(the)g +(amoun)o(t)e(of)i(lost)f(mail)e(exp)q(ected,)16 b(the)e(script)h(could)f(b)q +(e)g(run)h(more)d(or)i(less)h(often.)75 2433 y Fj(5.1.2)55 +b(Reliabilit)n(y)175 2509 y Fl(W)m(e)11 b(ha)o(v)o(e)h(sim)o(ulated)f(w)o +(orst-case)i(scenarios)g(b)o(y)f(\014lling)e(up)i(a)g(user)h(\014lesystem)f +(and)g(letting)g Fk(hlfsd)f Fl(decide)75 2558 y(to)k(redirect)i(mail)12 +b(to)j(the)h(alternate)g(sp)q(o)q(ol)e(directory)m(.)22 b(A)o(t)16 +b(this)f(p)q(oin)o(t)f(w)o(e)i(\014lled)f(up)g(that)g(\014lesystem)g(as)g(w)o +(ell.)p 75 2593 720 2 v 106 2620 a Ff(13)139 2632 y Fe(The)g(SAs)h(group)e +(felt)h(so)g(con)o(vinced)e(that)i Fd(hlfsd)f Fe(w)o(as)i(w)o(orking)e(w)o +(ell,)j(that)d(w)o(e)i(w)o(ere)g(the)f(\014rst)g(to)g(use)g(it)g(on)g +Fc(our)i Fe(home)75 2671 y(mac)o(hines.)954 2825 y Fl(11)p +eop +%%Page: 12 12 +bop 75 42 a Fk(Hlfsd)16 b Fl(k)o(ept)i(on)e(p)q(oin)o(ting)g(to)h(the)h +(alternate)g(sp)q(o)q(ol)f(directory)g(during)g(the)h(cac)o(hed)g(en)o(try)g +(in)o(terv)n(al,)e(but)i(w)o(e)75 91 y(observ)o(ed)d(no)g(mail)c(lost.)19 +b(Instead,)c(the)g(sending)g(side)f(detected)j(that)d(the)h(\014lesystem)f(w) +o(as)h(full,)d(and)j(k)o(ept)f(the)75 141 y(message)g(in)f(the)i(remote)e +(\(priv)n(ate\))h(sp)q(o)q(ol)g(directory)m(.)k(This)c(is)f(the)i(default)e +(b)q(eha)o(vior)h Fk(sendmail)p Fl([1)n(])f(pro)o(vides.)175 +216 y Fk(Hlfsd)d Fl(do)q(es)i(not)g(in)o(tro)q(duce)g(an)o(y)f(new)h +(problems;)f(that)h(is,)f(if)g(a)h(\014lesystem)f(is)g(completely)g(full,)f +(whatev)o(er)75 266 y(b)q(eha)o(vior)j(y)o(our)g(curren)o(t)h(LD)o(A)f(pro)o +(vides)g(is)g(main)o(tained.)j(Since)e Fk(hlfsd)e Fl(uses)i(b)q(oth)f(the)h +(user's)g(\014lesystem)f(and)75 315 y(an)18 b(alternate)h(sp)q(o)q(ol)f +(directory)m(,)h(it)f(actually)g(increases)i(the)f(a)o(v)n(ailabili)o(t)o(y)c +(of)j(mail)e(services,)21 b(b)o(y)d(\\virtually")75 365 y(increasing)c(the)h +(disk)e(space)i(a)o(v)n(ailable)d(for)h(mail)f(sp)q(o)q(oling.)175 +440 y(Once)g(space)g(has)f(b)q(een)h(freed)g(in)f(the)g(user's)h +(\014lesystem,)f(and)g(the)h(cac)o(hed)g(en)o(try)f(expired,)h +Fk(hlfsd)e Fl(p)q(oin)o(ted)75 490 y(its)h(sym)o(b)q(olic)f(link)h(bac)o(k)g +(to)g(the)h(user's)h(home)d(directory)m(.)18 b(The)12 b(next)g(time)e(the)i +(remailing)d(script)j(ran,)f(all)g(\\lost")75 540 y(mail)g(got)j(resen)o(t)h +(to)f(its)g(o)o(wners.)175 614 y(Since)f(the)g(installation)d(of)i +Fk(hlfsd)f Fl(in)h(our)h(pro)q(duction)f(en)o(vironmen)o(t,)f(w)o(e)i(ha)o(v) +o(e)f(seen)i(a)e(few)h(cases)g(of)f(lost)75 664 y(mail)i(b)q(eing)i(resen)o +(t,)i(mostly)c(due)j(to)f(full)f(\014lesystems.)25 b(W)m(e)16 +b(kno)o(w)g(of)g(no)g(case)h(where)g(mail)d(w)o(as)i(completely)75 +714 y(lost.)75 822 y Fj(5.2)56 b(Installation)175 897 y Fl(Since)13 +b Fk(hlfsd)e Fl(w)o(as)i(written)g(b)o(y)f(SAs)h(for)f(other)h(SAs,)g(w)o(e)g +(ha)o(v)o(e)f(pro)o(vided)h(it)f(with)g(sev)o(eral)h(command-li)o(ne)75 +947 y(options)f(to)h(use)g(at)g(startup)g(time,)e(enabling)h +Fk(hlfsd)g Fl(to)g(b)q(e)h(tailored)g(for)f(a)g(particular)h(en)o(vironmen)o +(t.)j(Needless)75 997 y(to)g(sa)o(y)m(,)g(a)g(man)e(page)i(is)h(pro)o(vided,) +f(as)g(w)o(ell)g(as)g(complete)g(source)h(co)q(de.)26 b(F)m(urthermore,)16 +b(w)o(e)h(included)f(a)g(few)75 1046 y(scripts)f(written)f(in)f +Fk(sh)g Fl(and)h Fk(perl)e Fl(whic)o(h)i(w)o(e)g(use)g(in)f(our)h(en)o +(vironmen)o(t)e(to)i(re/start)h Fk(hlfsd)o Fl(,)e(test)h(for)g(p)q(ossible)75 +1096 y(con\014guration)f(anomalies,)f(and)h(resend)j(\\lost")d(mail.)175 +1171 y(The)e(most)f(signi\014can)o(t)h(w)o(ork)f(that)i(SAs)f(need)h(to)f(do) +g(is)g(iden)o(tify)f(programs)g(that)h(need)h(to)f(access)i(mailb)q(o)o(x)75 +1221 y(\014les)18 b(of)f(other)i(users,)h(and)d(\\)p Fh(setgid)p +Fl(")h(them)f(to)g(HLFS)p 967 1221 13 2 v 15 w(GID.)g(In)h(our)g(en)o +(vironmen)o(t)e(w)o(e)i(had)g(to)g(do)f(that)h(for)75 1271 +y Fk(comsat)p Fl(,)f Fk(from)p Fl(,)g Fk(finger)g Fl(and)g(a)h(few)g(others.) +30 b(Our)19 b(en)o(vironmen)o(t)d(uses)j(the)g Fk(rdist)p Fl([5)n(])e +(automatic)f(soft)o(w)o(are)75 1320 y(distribution)i(program,)g(and)g(th)o +(us)h(these)h(c)o(hanges)f(w)o(ere)h(required)f(only)f(in)g(one)h(place)f(|)g +(the)i(top)e(of)g(our)75 1370 y Fk(rdist)13 b Fl(tree.)75 1478 +y Fj(5.3)56 b(Problems)175 1553 y Fl(There)15 b(are)f(a)g(few)g(problems,)e +(some)h(of)g(whic)o(h)h(cannot)g(b)q(e)h(easily)e(resolv)o(ed:)137 +1670 y Fi(\017)21 b Fl(Some)15 b(programs)g(need)i(to)f(b)q(e)h +Fh(setgid)g Fl(to)f(the)h(sp)q(ecial)f(HLFS)p 1181 1670 V 15 +w(GID)g(group.)25 b(There)17 b(is)g(no)f(easy)g(w)o(a)o(y)g(to)179 +1719 y(lo)q(cate)f(them)g(other)h(than)g(kno)o(wing)e(ahead)i(of)f(time)f +(what)h(they)h(do.)23 b(Note)16 b(that)f(if)g(the)h(programs)f(are)179 +1769 y(not)c Fh(setgid)p Fl(,)g(the)h(only)f(consequence)i(is)e(that)h(these) +g(programs)f(are)g(unable)g(to)g(\014nd)h(mailb)q(o)o(xes.)j(Ho)o(w)o(ev)o +(er,)179 1819 y(with)e(other)i(metho)q(ds,)e(if)g($MAIL)h(is)f(not)h(used,)g +(mail)e(is)h(not)h(deliv)o(ered.)137 1902 y Fi(\017)21 b Fl(It)12 +b(is)f(p)q(ossible)h(that)g(the)h(status)f(of)g(a)f(home)g(directory)h +(access)i(will)c(c)o(hange)j(during)e(the)i(time)d(that)i Fk(hlfsd)179 +1952 y Fl(cac)o(hes)17 b(this)g(information.)23 b(Pic)o(king)15 +b(a)h(smaller)f(cac)o(he)i(expiration)f(time)f(can)i(alleviate)e(this)i +(problem,)179 2002 y(but)d(it)g(increases)h(the)g(resources)h(tak)o(en)e(b)o +(y)g Fk(hlfsd)f Fl(and)h(slo)o(ws)f(do)o(wn)h(access)i(to)e(mail.)h(It)f(is)g +(left)g(for)f(the)179 2051 y(individual)f(SAs)i(to)g(c)o(hange)g(this)g +(default)f(v)n(alue.)137 2134 y Fi(\017)21 b Fl(An)o(y)14 b(logins)e(with)i +(the)h(same)e Fh(uid)h Fl(and)f(a)h(di\013eren)o(t)h(home)e(directory)h(ma)o +(y)e(ha)o(v)o(e)i(mail)d(deliv)o(ered)k(or)e(read)179 2184 +y(from)c(an)o(y)i(of)f(their)h(home)f(directory)i(pathnames.)k +Fk(Hlfsd)10 b Fl(stores)j(pathnames)d(in)g(an)h(in)o(ternal)g(hash)g(table) +179 2234 y(k)o(ey)o(ed)i(b)o(y)g(the)g Fh(uid)p Fl(;)g(therefore,)h(it)f(is)g +(unde\014ned)h(whic)o(h)f(pathname)f(is)g(returned)j(in)d(the)i(case)g(of)e +(m)o(ultiple)179 2284 y(users)k(with)e(the)h(same)f Fh(uid)h +Fl(and)g(di\013eren)o(t)g(home)f(directories.)21 b(W)m(e)14 +b(pro)o(vide)h(a)f(script)i(whic)o(h)e(c)o(hec)o(ks)i(for)179 +2334 y(this)e(situation)f(and)h(w)o(arns)g(the)g(SAs.)137 2417 +y Fi(\017)21 b Fl(On)16 b(systems)g(that)g(cannot)g(turn)g(o\013)g(the)g(NFS) +g(attribute)g(cac)o(he,)h(the)g(k)o(ernel)f(migh)o(t)d(return)k(the)g(same) +179 2467 y(sym)o(b)q(olic)8 b(link)h(name)f(for)i(t)o(w)o(o)f(di\013eren)o(t) +i(users)g(who)f(access)h(the)g(sp)q(o)q(ol)e(directory)i(consecutiv)o(ely)m +(,)f(p)q(ossibly)179 2516 y(resulting)17 b(in)f(mail)e(getting)i(deliv)o +(ered)h(to)g(the)g(wrong)g(mailb)q(o)o(x!)23 b(On)17 b(these)h(systems,)f +Fk(hlfsd)f Fl(will)f(not)179 2566 y(run)h(unless)g(started)g(with)f(a)h(sp)q +(ecial)f(option.)22 b(In)16 b(that)f(case)i(it)e(will)f(set)i(the)g +(attribute)g(cac)o(he)g(v)n(alue)f(to)179 2616 y(the)f(shortest)i(p)q +(ossible)e(in)o(terv)n(al,)e(but)i(it)g(ma)o(y)e(not)i(b)q(e)g(su\016cien)o +(t.)954 2825 y(12)p eop +%%Page: 13 13 +bop 75 42 a Fj(6)56 b(Related)17 b(W)-5 b(ork)175 117 y Fl(The)18 +b(idea)f(of)h(dynamic)e(or)h(v)n(ariable)g(pathname)g(comp)q(onen)o(ts)g(is)h +(not)g(new.)30 b(HP-UX)18 b(do)q(es)g(this)g(with)75 166 y(con)o(text-dep)q +(enden)o(t)g(\014les[8],)d(and)g(Mac)o(h)h(with)f(the)h(\\)p +Fk(@SYS)p Fl(")f(v)n(ariables[4)n(].)23 b(Both)16 b(of)f(these)i(implemen)o +(tations)75 216 y(supp)q(ort)11 b(replacemen)o(t)f(of)f(pathname)g(comp)q +(onen)o(ts)h(b)o(y)g(k)o(ernel)g(v)n(ariables.)16 b(Ap)q(ollo's)9 +b(DOMAIN/OS)i(supp)q(orted)75 266 y(a)20 b(more)g(sophisticated)h(system)f +(where)i(arbitrary)e(user)i(en)o(vironmen)o(t)d(v)n(ariables)h(could)g(b)q(e) +h(referenced)i(in)75 316 y(pathnames[11)n(,)12 b(12].)k(On)d(the)g(issue)g +(of)e(ha)o(ving)g(a)h(user's)i(home)d(\014les)h(and)g(mailb)q(o)o(x)e(\014le) +i(reside)h(in)f(one)g(lo)q(cation,)75 366 y(Plan)h(9's)h Fh(attach)g +Fl(op)q(erator)h(can)f(b)q(e)g(used)h(to)f(unify)f(sev)o(eral)h(\014le)g +(serv)o(ers)i(in)o(to)d(one)h(user)h(name)e(space[14].)175 +440 y(What)f(is)h(new)g(ab)q(out)g(our)g(idea)g(is)g(that)g(w)o(e)g(do)f(not) +h(require)h(an)o(y)f(c)o(hange)g(to)g(an)o(y)f(part)h(of)g(the)g +(\014lesystem)75 490 y(implemen)o(tatio)o(n)c(in)i(the)i(k)o(ernel.)18 +b(All)10 b(that)i(is)g(required)h(are)f(RPC)f(and)h(NFS,)f(making)f(the)i +(system)f(m)o(uc)o(h)g(more)75 540 y(widely)i(applicable.)175 +615 y(Though)i(at)h(\014rst)h(it)e(ma)o(y)f(app)q(ear)i(that)g +Fk(amd)f Fl(can)i(do)e(what)h(hlfsd)f(do)q(es,)i(it)f(can't.)24 +b Fk(Amd)15 b Fl(cannot)h(return)75 665 y(di\013eren)o(t)d(pathnames)f(as)g +(a)g(v)n(alue)g(of)g(a)g(sym)o(b)q(olic)f(link)g(dep)q(ending)i(on)f(who)g +(accessed)j(it.)i(See)c(also)f(Section)h(2.3)75 714 y(for)h(more)e(details)i +(on)g(v)n(arious)f(w)o(a)o(ys)g(in)h(whic)o(h)g Fk(amd)f Fl(cannot)h(help)g +(the)g(w)o(a)o(y)g Fk(hlfsd)e Fl(can.)75 822 y Fj(6.1)56 b(Mail-reading)17 +b(Serv)n(ers)175 897 y Fl(The)11 b(future)g(of)g(mail)d(reading)i(and)h +(sending)g(ma)o(y)e(b)q(e)i(similar)e(to)h(that)h(used)h(b)o(y)f(the)g(NNTP)g +(proto)q(col)g(used)75 947 y(for)g(managing)d(NetNews[10)q(,)j(19)o(].)17 +b(That)11 b(is,)g(a)g(sp)q(ecial-purp)q(ose)h(serv)o(er)h(whic)o(h)e(pro)o +(vides)h(net)o(w)o(ork)f(connections)75 997 y(for)j(reading)f(and)h(writing)f +(mail)e(remotely)m(.)175 1072 y(Sev)o(eral)19 b(suc)o(h)g(programs)f(exist,)i +(most)e(notably)g(IMAP[16])g(and)h(POP[17].)32 b(Ho)o(w)o(ev)o(er,)20 +b(use)g(of)f(these)75 1122 y(serv)o(ers)14 b(is)e(limited)e(at)i(this)g(time) +e(b)q(ecause)k(most)d(MT)m(As)h(and)g(UAs)h(ha)o(v)o(e)f(not)g(b)q(een)h(con) +o(v)o(erted)g(to)f(use)h(them,)e(or)75 1171 y(they)i(require)h(sp)q(ecial)f +(en)o(vironmen)o(ts)f(\(the)i Fh(A)o(ndr)n(ew)f(Message)i(Delivery)e(System)p +Fl([18)o(])g(requires)h(AFS\).)e(P)o(orting)75 1221 y(those)18 +b(applications)f(for)h(most)e(p)q(opular)i(en)o(vironmen)o(ts)f(is)g(not)h +(going)f(to)g(b)q(e)i(an)e(easy)h(task.)30 b(Nev)o(ertheless,)75 +1271 y(the)15 b(b)q(ene\014ts)h(of)d(suc)o(h)i(services)h(o)o(v)o(er)e(that)g +(of)g Fk(hlfsd)f Fl(w)o(ould)g(include)h(faster)h(and)f(more)f(reliable)h +(service,)h(plus)75 1321 y(greatly)e(expanded)h(functionalit)o(y)e(\(p)q +(ossibly)h(pro)o(viding)f(threads)i(information)c(for)j(threaded)i(mail)10 +b(readers\).)75 1429 y Fj(7)56 b(Conclusion)175 1504 y Fl(W)m(e)16 +b(ha)o(v)o(e)h(describ)q(ed)i(the)f(b)q(ene\014ts)h(of)d(deliv)o(ering)h +(mail)d(to)j(users')h(home)e(directories,)j(the)e(traditional)75 +1554 y(w)o(a)o(ys)10 b(to)f(do)h(that)g(and)g(wh)o(y)f(w)o(e)i(think)e(they)h +(are)h(inadequate,)f(and)g(the)g(design,)h(implemen)o(tatio)o(n,)d(p)q +(erformance,)75 1604 y(and)14 b(con)o(v)o(enience)h(of)e(our)h(alternativ)o +(e.)175 1678 y(The)i(main)f(con)o(tribution)g(of)h(our)g(w)o(ork)g(is)h(the)g +(idea)f(mail)d(can)k(b)q(e)g(reliably)e(deliv)o(ered)i(to)f(user's)h(home)75 +1728 y(directories)12 b(for)e(easy)h(access)i(with)d(v)o(ery)h(little)f(o)o +(v)o(erhead,)h(user)g(hassle,)h(or)e(the)i(need)f(for)f(extensiv)o(e)i(in)o +(terv)o(en)o(tion)75 1778 y(on)i(the)g(part)g(of)f(SAs.)175 +1853 y(A)h(w)o(orking)f(protot)o(yp)q(e)i(v)o(ersion)f(of)g +Fk(hlfsd)f Fl(w)o(as)h(written)h(in)f(one)g(w)o(eek)o(end.)20 +b(Ho)o(w)o(ev)o(er,)15 b(the)f(ideas)h(repre-)75 1902 y(sen)o(ted)e(in)e(the) +i(w)o(ork)e(span)h(sev)o(eral)h(y)o(ears)f(of)f(exp)q(erience)j(in)d(net)o(w) +o(ork)h(programming)c(\(esp)q(ecially)13 b(RPC)o(\),)f(NFS,)75 +1952 y Fk(amd)p Fl(,)h(and)g(mail)f(systems.)75 2060 y Fj(7.1)56 +b(F)-5 b(uture)18 b(W)-5 b(ork)175 2135 y Fl(It)15 b(w)o(ould)e(b)q(e)j(p)q +(ossible)f(to)g(in)o(tegrate)g(some)f(of)g Fk(hlfsd)o Fl('s)g(functionalit)o +(y)g(in)o(to)g Fk(amd)p Fl(,)g(b)o(y)g(pro)o(viding)g(sp)q(ecial)75 +2185 y(k)o(eyw)o(ords)g(lik)o(e)f Fk($)p Fi(f)p Fk(home)p Fi(g)p +Fl(,)f Fk($)p Fi(f)p Fk(user)p Fi(g)g Fl(and)i Fk($)p Fi(f)p +Fk(group)p Fi(g)e Fl(for)i(use)h(in)e Fk(amd)p Fl('s)g(maps.)175 +2260 y(W)m(e)e(plan)g(on)g(making)e(sure)k Fk(hlfsd)d Fl(is)h(as)h(p)q +(ortable)g(as)f Fk(amd)g Fl(is,)g(and)h(impro)o(ving)d(its)i(p)q(erformance)h +(as)f(m)o(uc)o(h)75 2310 y(as)j(p)q(ossible.)k(An)c(RPC)g(in)o(terface)g(for) +g(querying)g Fk(hlfsd)o Fl('s)f(status)i(is)f(needed)h(as)f(w)o(ell.)75 +2418 y Fj(7.2)56 b(Alternativ)n(e)17 b(Uses)175 2493 y Fk(Hlfsd)o +Fl('s)g(primary)e(use)j(is)f(that)h(of)e(a)h(mail-sp)q(o)q(ol)e(redirector.) +29 b(Ho)o(w)o(ev)o(er,)18 b(it)f(can)h(b)q(e)g(used)g(to)f(p)q(erform)75 +2543 y(other)e(tasks.)j(All)13 b(it)h(tak)o(es)g(are)g(the)h(righ)o(t)e +(command-li)o(ne)f(options:)137 2650 y Fi(\017)21 b Fk(Hlfsd)10 +b Fl(can)h(manage)e(the)j Fk(/var/tmp)d Fl(directory)m(.)17 +b(Th)o(us)12 b(ev)o(ery)f(user)h(who)f(uses)h Fk(/var/tmp)e +Fl(w)o(ould)g(actually)179 2700 y(b)q(e)j(using)e(a)h(sub)q(directory)i +(within)d(their)i(o)o(wn)e(home)g(directory)m(,)i(rather)g(than)f(taking)f +(from)f(system-wide)954 2825 y(13)p eop +%%Page: 14 14 +bop 179 42 a Fl(resources.)137 124 y Fi(\017)21 b Fl(Other)13 +b(t)o(yp)q(es)g(of)e(user-sp)q(eci\014c)k(\014les)d(whic)o(h)g(get)h(sp)q(o)q +(oled)f(to)g(a)g(particular)g(host,)g(suc)o(h)h(as)f Fh(Se)n(cr)n(et)h(Mail)p +Fl([24)n(])179 173 y(or)h(electronic)h(faxes)f(can)g(also)f(b)q(e)h +(redirected)i(for)e(sp)q(o)q(oling)f(in)o(to)g(home)g(directories.)75 +296 y Fj(8)56 b(Ac)n(kno)n(wledgmen)n(ts)175 371 y Fl(Sp)q(ecial)10 +b(thanks)h(go)e(to)i(Daniel)e(Duc)o(hamp)g(for)h(his)g(in)o(v)n(aluable)f +(commen)o(ts)f(on)i(the)h(pap)q(er,)h(to)e(James)g(T)m(anis)75 +421 y(who)g(wrote)h(the)f(remailing)e(script)j(and)f(pro)o(vided)g(useful)g +(feedbac)o(k,)h(and)f(to)g(all)f(mem)o(b)q(ers)g(of)g(the)i(tec)o(hnical)g +(sta\013)75 471 y(who)e(help)q(ed)h(in)f(stress-testing)i Fk(hlfsd)o +Fl(.)17 b(W)m(e)9 b(also)f(thank)h(man)o(y)f(mem)o(b)q(ers)g(of)g(the)i +Fk(amd-workers@acl.lan)o(l.gov)75 520 y Fl(mailing)h(list)i(for)h(pro)o +(viding)e(v)n(aluable)h(discussion)h(on)g(the)g(sub)r(ject.)175 +595 y(This)f(w)o(ork)h(w)o(as)f(supp)q(orted)i(in)e(part)h(b)o(y)f(a)h +(National)e(Science)j(F)m(oundation)d(CISE)i(Institutional)f(Infras-)75 +645 y(tructure)j(gran)o(t,)d(n)o(um)o(b)q(er)g(CD)o(A-90-24735.)175 +720 y(As)i Fk(hlfsd)f Fl(uses)i(parts)f(of)f(the)i Fk(amd)e +Fl(distribution,)g(it)h(is)f(distributed)i(under)g(the)f(same)f(restrictions) +i(and)75 769 y(licenses)f(that)f Fk(amd)f Fl(is.)75 877 y Fj(9)56 +b(References)75 952 y Fl([1])20 b(E.)14 b(Allman.)k(SENDMAIL)d({)f(An)h(In)o +(ternet)o(w)o(ork)h(Mail)d(Router.)21 b(In)14 b Fh(UNIX)i(System)f(Manager's) +h(Manual.)140 1002 y Fl(Univ)o(ersit)o(y)d(of)h(California,)d(Berk)o(eley)m +(,)j(1986.)75 1084 y([2])20 b(F.)g(C.)g(Baran.)39 b(MW:)20 +b(Mail-W)m(atc)o(h.)37 b(An)21 b(unpublished)g(man)o(ual)d(page,)k(Academic)e +(Systems)h(Group,)140 1134 y(Colum)o(bia)11 b(Univ)o(ersit)o(y)i(Cen)o(ter)i +(for)f(Computing)e(Activities,)h(1987.)75 1216 y([3])20 b(B.)12 +b(Callaghan)f(and)h(T.)g(Ly)o(on.)j(The)e(Automoun)o(ter.)i(In)e +Fh(Pr)n(o)n(c.)g(1989)h(Winter)g(USENIX)g(Conf.)p Fl(,)e(pp.)g(43{51,)140 +1266 y(Jan)o(uary)h(1989.)75 1348 y([4])20 b(M.)13 b(N.)g(Condict.)18 +b(Con\014guring)13 b(and)g(Building)g(Mac)o(h)h(3.0.)i(OSF)e(Researc)o(h)h +(Institute,)f(Grenoble,)g(F)m(rance.)140 1398 y(Unpublished)g(notes)g(a)o(v)n +(ailable)e(via)h(ftp)h(from)e Fk(mach.cs.cmu.edu:d)o(oc/no)o(tes/k)o(ernel)p +1595 1398 14 2 v 12 w(build.doc)p Fl(.)75 1480 y([5])20 b(M.)13 +b(A.)g(Co)q(op)q(er.)18 b(Ov)o(erhauling)13 b(Rdist)g(for)h(the)g('90s.)j +Fh(L)n(ar)n(ge)d(Instal)r(lation)h(System)g(A)n(dministr)n(ators)e(Work-)140 +1530 y(shop)i(Pr)n(o)n(c)n(e)n(e)n(dings)p Fl(,)e(pp.)h(1-8,)f(USENIX,)h +(Long)f(Beac)o(h,)h(CA,)g(Octob)q(er)h(19-June)f(23,)f(1992.)75 +1612 y([6])20 b(A.)13 b(J.)h(Findla)o(y)m(.)i(The)e(Home-Directory)f(Mail)g +(System.)18 b(In)13 b Fh(EUUG)i(News)p Fl(,)e(Autumn)g(1988.)75 +1694 y([7])20 b(J.)13 b(F)m(ulton.)k(MIT)d(X)g(Consortium.)j(X11R5)12 +b(Reference)k(Man)o(ual)d(P)o(ages,)h(Section)g(1:)k(\\xbi\013\(1\)",)12 +b(1988.)75 1776 y([8])20 b(Hewlett-P)o(ac)o(k)n(ard)14 b(Compan)o(y)m(.)j +(HP-UX)e(Release)g(9.0)e(Reference)j(Man)o(ual,)d(Section)i(4:)k +(\\cdf\(4\)",)13 b(August)140 1826 y(1992.)75 1908 y([9])20 +b(IBM)11 b(Corp.)j(AIX)e(Comma)o(nds)d(Reference,)k(V)m(olume)d(1,)h(\\b)q +(ellmail\(1\)")o(,)e(pp.)i(1-84|1-87,)e(Decem)o(b)q(er)i(1989.)75 +1990 y([10])19 b(B.)14 b(Kan)o(tor)g(and)g(P)m(.)f(Lapsley)m(.)k(Net)o(w)o +(ork)e(News)f(T)m(ransfer)h(Proto)q(col.)j(RF)o(C)13 b(977,)f(F)m(ebruary)j +(1986;)d(27)h(p.)75 2073 y([11])19 b(P)m(.)14 b(J.)h(Leac)o(h,)g(P)m(.)f(H.)g +(Levine,)h(B.)f(P)m(.)g(Douros,)h(J.)f(A.)h(Hamilton,)c(D.L.)j(Nelson,)g(and) +h(B.)g(L.)f(Stumpf.)19 b Fh(The)140 2122 y(A)o(r)n(chite)n(ctur)n(e)14 +b(of)j(an)f(Inte)n(gr)n(ate)n(d)g(L)n(o)n(c)n(al)g(Network.)22 +b Fl(In)15 b Fh(IEEE)i(Journal)f(on)h(Sele)n(cte)n(d)f(A)o(r)n(e)n(as)g(in)g +(Communi-)140 2172 y(c)n(ations,)d Fm(SA)o(C-1)p Fl(\(5\),)g(pp.)h(842-856,)e +(No)o(v)o(em)o(b)q(er)h(1983.)75 2254 y([12])19 b(P)m(.)12 +b(H.)f(Levine.)16 b Fh(The)d(Ap)n(ol)r(lo)g(DOMAIN)g(Distribute)n(d)g(File)f +(System.)k Fl(In)c Fh(NA)m(TO)g(ASI)i(Series:)j(The)n(ory)c(and)140 +2304 y(Pr)n(actic)n(e)k(of)i(Distribute)n(d)f(Op)n(er)n(ating)g(Systems,)g +Fl(Y.)g(P)o(ak)o(er,)g(J-P)m(.)g(Banatre,)h(M.)e(Bozyi\024)-21 +b(git,)18 b(pp.)f(241-260,)140 2354 y(editors,)d(Springer-V)m(erlag,)f(1987.) +75 2436 y([13])19 b(J.)14 b(S.)g(P)o(endry)h(and)f(N.)g(William)o(s.)j +Fh(A)o(md)e(-)g(The)g(4.4)g(BSD)h(A)o(utomounter)p Fl(.)k(Imp)q(erial)12 +b(College)i(of)g(Science)140 2486 y(T)m(ec)o(hnology)f(and)g(Medicine,)h +(London.)f(Marc)o(h)h(1991.)75 2568 y([14])19 b(R.)14 b(Pik)o(e,)g(D.)f +(Presotto,)i(K.)f(Thompson,)f(and)h(H.)g(T)m(ric)o(k)o(ey)m(.)19 +b Fh(Plan)d(9)f(fr)n(om)g(Bel)r(l)g(L)n(abs)p Fl(.)k(In)c Fh(Pr)n(o)n(c)n(e)n +(e)n(dings)g(of)140 2618 y(the)g(Summer)f(1990)i(UKUUG)f(Conf.)p +Fl(,)e(London,)g(July)m(,)f(1990,)h(pp.)g(1-9.)75 2700 y([15])19 +b(J.)14 b(B.)g(P)o(ostel.)k(Simple)12 b(Mail)h(T)m(ransfer)h(Proto)q(col.)k +(RF)o(C)13 b(821,)g(August)h(1982;)f(68)g(p.)954 2825 y(14)p +eop +%%Page: 15 15 +bop 75 42 a Fl([16])19 b(J.)14 b(Rice.)k(In)o(teractiv)o(e)d(Mail)d(Access)k +(Proto)q(col.)i(RF)o(C)c(1203,)e(F)m(ebruary)i(1991;)f(49)g(p.)75 +125 y([17])19 b(M.)14 b(Rose.)k(P)o(ost)c(O\016ce)h(Proto)q(col.)j(RF)o(C)13 +b(1225,)f(Ma)o(y)i(1991;)e(16)h(p.)75 208 y([18])19 b(J.)f(Roseneb)q(erg,)h +(C.)f(F.)f(Ev)o(erhart,)i(and)f(N.)g(S.)f(Borenstein.)32 b +Fh(A)o(n)19 b(Overview)f(of)g(the)h(A)o(ndr)n(ew)f(Message)140 +257 y(System)p Fl(.)i(In)15 b Fh(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)f(the)h(A)o +(CM)f(SIGCOMM)h('87)g(Workshop)p Fl(,)g(Sto)o(w)o(e,)e(V)m(ermon)o(t,)f +(August)j(11-13,)140 307 y(1987,)c(pp.)h(99-108.)75 390 y([19])19 +b(R.)d(Salz.)24 b Fh(InterNetNews:)e(Usenet)17 b(tr)n(ansp)n(ort)g(for)f +(Internet)h(sites)p Fl(.)24 b(In)17 b Fh(Pr)n(o)n(c.)f(1992)i(Summer)f +(USENIX)140 440 y(Conf.)p Fl(,)c(pages)h(93{98,)e(June)j(1992.)75 +523 y([20])k(R.)14 b(Sandb)q(erg)h(et)g(al.)k(Design)c(and)f(Implemen)o +(tation)e(of)i(the)h(Sun)f(Net)o(w)o(ork)h(Filesystem.)20 b(In)14 +b Fh(Pr)n(o)n(c.)h(1985)140 573 y(Summer)g(Usenix)g(Conf.)p +Fl(,)e(pages)h(119-130,)e(June)i(1985.)75 656 y([21])19 b(Sun)13 +b(Microsystems,)f(Inc.)k(SunOS)d(Reference)h(Man)o(ual,)e(V)m(olume)e(I,)i +(Section)h(1:)k(\\bi\013\(1\)",)12 b(Septem)o(b)q(er)h(9,)140 +706 y(1987.)75 789 y([22])19 b(Sun)11 b(Microsystems,)f(Inc.)j(SunOS)e +(Reference)i(Man)o(ual,)d(V)m(olume)e(I)q(I,)i(Section)h(3:)16 +b(\\syslog\(3\)",)10 b(Septem)o(b)q(er)140 839 y(9,)j(1987.)75 +922 y([23])19 b(Sun)g(Microsystems,)f(Inc.)33 b(SunOS)19 b(Reference)h(Man)o +(ual,)e(V)m(olume)f(I,)h(Section)h(1:)27 b(\\comsat\(8c\)",)18 +b(and)140 971 y(\\in.comsat\(8c\)",)11 b(Septem)o(b)q(er)k(9,)e(1987.)75 +1054 y([24])19 b(Sun)14 b(Microsystems,)f(Inc.)k(SunOS)d(Reference)h(Man)o +(ual,)d(V)m(olume)f(I,)i(Section)h(1:)j(\\xsend\(1\)",)d(\\xget\(1\)",)140 +1104 y(and)f(\\enroll\(1\)",)g(Septem)o(b)q(er)h(9,)f(1987.)75 +1187 y([25])19 b(Sun)f(Microsystems,)g(Inc.)31 b(NFS:)18 b(Net)o(w)o(ork)g +(File)g(System)f(Proto)q(col)h(sp)q(eci\014cation.)31 b(RF)o(C)17 +b(1094,)h(1989)140 1237 y(Marc)o(h;)13 b(27)h(p.)75 1320 y([26])19 +b(L.)c(W)m(all)f(and)h(R.)f(L.)h(Sc)o(h)o(w)o(artz.)23 b Fh(Pr)n(o)n(gr)n +(amming)16 b(Perl)p Fl(.)22 b(O'Reilly)14 b(&)h(Asso)q(ciates,)i(Inc.,)e +(Sebastop)q(ol,)h(CA)140 1370 y(\(1991\).)75 1453 y([27])j(R.)d(S.)g(Zac)o +(hariassen.)26 b Fh(ZMOG:)18 b(The)f(ZMailer)g(Op)n(er)n(ations)f(Guide)p +Fl(.)26 b(Av)n(ailable)15 b(via)g(ftp)i(as)f(part)h(of)e(the)140 +1503 y(ZMailer)e(distribution)h(from)e Fk(ftp.uu.net:/netwo)o(rkin)o(g/mai)o +(l/zma)o(iler)p Fl(.)75 1627 y Fj(10)56 b(Author)19 b(Information)175 +1702 y Fm(Erez)f(Zadok)e Fl(is)g(an)f(MS)h(candidate)g(and)g(full-time)d +(Sta\013)k(Asso)q(ciate)f(in)g(the)g(Computer)g(Science)h(De-)75 +1752 y(partmen)o(t)11 b(at)h(Colum)o(bia)d(Univ)o(ersit)o(y)m(.)16 +b(His)c(primary)e(in)o(terests)k(include)e(op)q(erating)f(systems,)h(\014le)g +(systems,)g(and)75 1802 y(w)o(a)o(ys)j(to)g(ease)h(system)f(administration)e +(tasks.)23 b(In)15 b(Ma)o(y)g(1991,)f(he)i(receiv)o(ed)g(his)f(B.S.)g(in)g +(Computer)g(Science)75 1852 y(from)g(Colum)o(bia's)f(Sc)o(ho)q(ol)i(of)g +(Engineering)h(and)f(Applied)h(Science.)28 b(Erez)18 b(came)e(to)g(the)i +(United)f(States)g(six)75 1902 y(y)o(ears)d(ago)e(and)i(has)f(liv)o(ed)g(in)g +(New)g(Y)m(ork)g(\\Sin")g(Cit)o(y)f(ev)o(er)j(since.)j(In)c(his)f(rare)h +(free)g(time)e(Erez)j(is)e(an)g(amateur)75 1951 y(photographer,)h(science)h +(\014ction)f(dev)o(otee,)h(and)e(ro)q(c)o(k-n-roll)g(fan.)175 +2026 y(Mailing)h(address:)25 b(500)16 b(W)m(est)h(120)747 2011 +y Fa(th)797 2026 y Fl(Street,)h(Colum)o(bia)c(Univ)o(ersit)o(y)m(,)i(New)h(Y) +m(ork,)g(NY)f(10027.)25 b(Email)75 2076 y(address:)19 b Fk +(ezk@cs.columbia.edu)o Fl(.)175 2151 y Fm(Alexander)10 b(Dupuy)g +Fl(has)h(b)q(een)h(a)e(Senior)h(Researc)o(h)i(Sta\013)e(Asso)q(ciate)h(for)e +(the)i(Distributed)f(Computing)75 2200 y(and)i(Comm)o(uni)o(cations)d(Lab)j +(in)f(the)i(Computer)e(Science)i(Departmen)o(t)f(at)f(Colum)o(bia)e(Univ)o +(ersit)o(y)j(for)g(the)g(last)75 2250 y(7)h(y)o(ears.)21 b(He)16 +b(has)f(recen)o(tly)g(tak)o(en)g(a)f(p)q(osition)h(at)f(System)g(Managemen)o +(t)g(AR)m(TS,)f(a)i(small)d(startup)k(compan)o(y)75 2300 y(dev)o(eloping)e +(net)o(w)o(ork)h(and)g(systems)g(managemen)o(t)d(tec)o(hnology)m(.)20 +b(A)15 b(nativ)o(e)g(b)q(orn)g(and)g(bred)g(New)h(Y)m(ork)o(er,)e(he)75 +2350 y(insists)g(that)g(w)o(orking)f(in)h(the)g(suburbs)h(is)f(not)g(the)g +(\014rst)h(step)g(to)o(w)o(ards)f(living)e(there.)175 2425 +y(Mailing)h(address:)23 b(System)15 b(Managemen)o(t)f(AR)m(TS,)g(199)h(Main)g +(Street,)h(Suite)g(900,)f(White)g(Plains,)g(NY)75 2474 y(10601.)i(Email)11 +b(address:)20 b Fk(dupuy@smarts.co)o(m)p Fl(.)954 2825 y(15)p +eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/doc/stamp-vti b/doc/stamp-vti new file mode 100644 index 0000000..ca62e30 --- /dev/null +++ b/doc/stamp-vti @@ -0,0 +1,3 @@ +@set UPDATED 19 October 1998 +@set EDITION 6.0b2s2 +@set VERSION 6.0b2s2 diff --git a/doc/texinfo.tex b/doc/texinfo.tex new file mode 100644 index 0000000..b5ecaa4 --- /dev/null +++ b/doc/texinfo.tex @@ -0,0 +1,4935 @@ +%% TeX macros to handle Texinfo files. +%% $Id: texinfo.tex,v 1.1 1998/11/05 02:04:58 ezk Exp $ + +% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, +% 94, 95, 96, 97 Free Software Foundation, Inc. + +%This texinfo.tex file is free software; you can redistribute it and/or +%modify it under the terms of the GNU General Public License as +%published by the Free Software Foundation; either version 2, or (at +%your option) any later version. + +%This texinfo.tex file is distributed in the hope that it will be +%useful, but WITHOUT ANY WARRANTY; without even the implied warranty +%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%General Public License for more details. + +%You should have received a copy of the GNU General Public License +%along with this texinfo.tex file; see the file COPYING. If not, write +%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +%Boston, MA 02111-1307, USA. + + +%In other words, you are welcome to use, share and improve this program. +%You are forbidden to forbid anyone else to use, share and improve +%what you give them. Help stamp out software-hoarding! + + +% Send bug reports to bug-texinfo@prep.ai.mit.edu. +% Please include a *precise* test case in each bug report. + + +% Make it possible to create a .fmt file just by loading this file: +% if the underlying format is not loaded, start by loading it now. +% Added by gildea November 1993. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi + +% This automatically updates the version number based on RCS. +\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} +\deftexinfoversion$Revision: 1.1 $ +\message{Loading texinfo package [Version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}\message{} + \catcode`+=\active \catcode`\_=\active} + +% Save some parts of plain tex whose names we will redefine. + +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv = \equiv +\let\ptexi=\i +\let\ptexlbrace=\{ +\let\ptexrbrace=\} +\let\ptexstar=\* +\let\ptext=\t + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + + +\message{Basics,} +\chardef\other=12 + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Set up fixed words for English. +\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi% +\def\putwordInfo{Info}% +\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi% +\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi% +\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi% +\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi% +\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi% +\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi% +\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi% +\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi% +\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi% + +% Ignore a token. +% +\def\gobble#1{} + +\hyphenation{ap-pen-dix} +\hyphenation{mini-buf-fer mini-buf-fers} +\hyphenation{eshell} +\hyphenation{white-space} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen \bindingoffset +\newdimen \normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{\tracingcommands2 \tracingstats2 + \tracingpages1 \tracingoutput1 \tracinglostchars1 + \tracingmacros2 \tracingparagraphs1 \tracingrestores1 + \showboxbreadth\maxdimen\showboxdepth\maxdimen +}% + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\cornerlong \newdimen\cornerthick +\newdimen\topandbottommargin +\newdimen\outerhsize \newdimen\outervsize +\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks +\outerhsize=7in +%\outervsize=9.5in +% Alternative @smallbook page size is 9.25in +\outervsize=9.25in +\topandbottommargin=.75in + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \escapechar = `\\ % use backslash in output files. + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + \shipout\vbox{% + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingxxx.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 2\baselineskip + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \turnoffactive + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1 \unvbox#1 +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg#1{% + \let\next = #1% + \begingroup + \obeylines + \futurelet\temp\parseargx +} + +% If the next token is an obeyed space (from an @example environment or +% the like), remove it and recurse. Otherwise, we're done. +\def\parseargx{% + % \obeyedspace is defined far below, after the definition of \sepspaces. + \ifx\obeyedspace\temp + \expandafter\parseargdiscardspace + \else + \expandafter\parseargline + \fi +} + +% Remove a single space (as the delimiter token to the macro call). +{\obeyspaces % + \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + % + % First remove any @c comment, then any @comment. + % Result of each macro is put in \toks0. + \argremovec #1\c\relax % + \expandafter\argremovecomment \the\toks0 \comment\relax % + % + % Call the caller's macro, saved as \next in \parsearg. + \expandafter\next\expandafter{\the\toks0}% + }% +} + +% Since all \c{,omment} does is throw away the argument, we can let TeX +% do that for us. The \relax here is matched by the \relax in the call +% in \parseargline; it could be more or less anything, its purpose is +% just to delimit the argument to the \c. +\def\argremovec#1\c#2\relax{\toks0 = {#1}} +\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} + +% \argremovec{,omment} might leave us with trailing spaces, though; e.g., +% @end itemize @c foo +% will have two active spaces as part of the argument with the +% `itemize'. Here we remove all active spaces from #1, and assign the +% result to \toks0. +% +% This loses if there are any *other* active characters besides spaces +% in the argument -- _ ^ +, for example -- since they get expanded. +% Fortunately, Texinfo does not define any such commands. (If it ever +% does, the catcode of the characters in questionwill have to be changed +% here.) But this means we cannot call \removeactivespaces as part of +% \argremovec{,omment}, since @c uses \parsearg, and thus the argument +% that \parsearg gets might well have any character at all in it. +% +\def\removeactivespaces#1{% + \begingroup + \ignoreactivespaces + \edef\temp{#1}% + \global\toks0 = \expandafter{\temp}% + \endgroup +} + +% Change the active space to expand to nothing. +% +\begingroup + \obeyspaces + \gdef\ignoreactivespaces{\obeyspaces\let =\empty} +\endgroup + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +%% These are used to keep @begin/@end levels from running away +%% Call \inENV within environments (after a \begingroup) +\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} +\def\ENVcheck{% +\ifENV\errmessage{Still within an environment. Type Return to continue.} +\endgroup\fi} % This is not perfect, but it should reduce lossage + +% @begin foo is the same as @foo, for now. +\newhelp\EMsimple{Type to continue.} + +\outer\def\begin{\parsearg\beginxxx} + +\def\beginxxx #1{% +\expandafter\ifx\csname #1\endcsname\relax +{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else +\csname #1\endcsname\fi} + +% @end foo executes the definition of \Efoo. +% +\def\end{\parsearg\endxxx} +\def\endxxx #1{% + \removeactivespaces{#1}% + \edef\endthing{\the\toks0}% + % + \expandafter\ifx\csname E\endthing\endcsname\relax + \expandafter\ifx\csname \endthing\endcsname\relax + % There's no \foo, i.e., no ``environment'' foo. + \errhelp = \EMsimple + \errmessage{Undefined command `@end \endthing'}% + \else + \unmatchedenderror\endthing + \fi + \else + % Everything's ok; the right environment has been started. + \csname E\endthing\endcsname + \fi +} + +% There is an environment #1, but it hasn't been started. Give an error. +% +\def\unmatchedenderror#1{% + \errhelp = \EMsimple + \errmessage{This `@end #1' doesn't have a matching `@#1'}% +} + +% Define the control sequence \E#1 to give an unmatched @end error. +% +\def\defineunmatchedend#1{% + \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% +} + + +% Single-spacing is done by various environments (specifically, in +% \nonfillstart and \quotations). +\newskip\singlespaceskip \singlespaceskip = 12.5pt +\def\singlespace{% + % Why was this kern here? It messes up equalizing space above and below + % environments. --karl, 6may93 + %{\advance \baselineskip by -\singlespaceskip + %\kern \baselineskip}% + \setleading \singlespaceskip +} + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt \char '100}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt \char '173}} +\def\myrbrace {{\tt \char '175}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce actual \{ & \} command in an index. + \catcode`\{ = 12 \catcode`\} = 12 + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\@ = 0 \catcode`\\ = 12 + @gdef@lbracecmd[\{]% + @gdef@rbracecmd[\}]% +@endgroup + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown +% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=3000 } + +% @enddots{} is an end-of-sentence ellipsis. +\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} + +% @! is an end-of-sentence bang. +\gdef\!{!\spacefactor=3000 } + +% @? is an end-of-sentence query. +\gdef\?{?\spacefactor=3000 } + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +\def\group{\begingroup + \ifnum\catcode13=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + % + % The \vtop we start below produces a box with normal height and large + % depth; thus, TeX puts \baselineskip glue before it, and (when the + % next line of text is done) \lineskip glue after it. (See p.82 of + % the TeXbook.) Thus, space below is not quite equal to space + % above. But it's pretty close. + \def\Egroup{% + \egroup % End the \vtop. + \endgroup % End the \group. + }% + % + \vtop\bgroup + % We have to put a strut on the last line in case the @group is in + % the midst of an example, rather than completely enclosing it. + % Otherwise, the interline space between the last line of the group + % and the first line afterwards is too small. But we can't put the + % strut in \Egroup, since there it would be on a line by itself. + % Hence this just inserts a strut at the beginning of each line. + \everypar = {\strut}% + % + % Since we have a strut on every line, we don't need any of TeX's + % normal interline spacing. + \offinterlineskip + % + % OK, but now we have to do something about blank + % lines in the input in @example-like environments, which normally + % just turn into \lisppar, which will insert no space now that we've + % turned off the interline space. Simplest is to make them be an + % empty paragraph. + \ifx\par\lisppar + \edef\par{\leavevmode \par}% + % + % Reset ^^M's definition to new definition of \par. + \obeylines + \fi + % + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +\def\need{\parsearg\needx} + +% Old definition--didn't work. +%\def\needx #1{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000 +%\prevdepth=-1000pt +%}} + +\def\needx#1{% + % Go into vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % Don't add any leading before our big empty box, but allow a page + % break, since the best break might be right here. + \allowbreak + \nointerlineskip + \vtop to #1\mil{\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak +} + +% @br forces paragraph break + +\let\br = \par + +% @dots{} output some dots + +\def\dots{$\ldots$} + +% @page forces the start of a new page + +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\def\exdent{\parsearg\exdentyyy} +\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} + +% This defn is used inside nofill environments such as @example. +\def\nofillexdent{\parsearg\nofillexdentyyy} +\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount +\leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. + +\def\inmargin#1{% +\strut\vadjust{\nobreak\kern-\strutdepth + \vtop to \strutdepth{\baselineskip\strutdepth\vss + \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} + +%\hbox{{\rm#1}}\hfil\break}} + +% @include file insert text of that file as input. +% Allow normal characters that we make active in the argument (a file name). +\def\include{\begingroup + \catcode`\\=12 + \catcode`~=12 + \catcode`^=12 + \catcode`_=12 + \catcode`|=12 + \catcode`<=12 + \catcode`>=12 + \catcode`+=12 + \parsearg\includezzz} +% Restore active chars for included file. +\def\includezzz#1{\endgroup\begingroup + % Read the included file in a group so nested @include's work. + \def\thisfile{#1}% + \input\thisfile +\endgroup} + +\def\thisfile{} + +% @center line outputs that line, centered + +\def\center{\parsearg\centerzzz} +\def\centerzzz #1{{\advance\hsize by -\leftskip +\advance\hsize by -\rightskip +\centerline{#1}}} + +% @sp n outputs n lines of vertical space + +\def\sp{\parsearg\spxxx} +\def\spxxx #1{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other% +\parsearg \commentxxx} + +\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } + +\let\c=\comment + +% @paragraphindent is defined for the Info formatting commands only. +\let\paragraphindent=\comment + +% Prevent errors for section commands. +% Used in @ignore and in failing conditionals. +\def\ignoresections{% +\let\chapter=\relax +\let\unnumbered=\relax +\let\top=\relax +\let\unnumberedsec=\relax +\let\unnumberedsection=\relax +\let\unnumberedsubsec=\relax +\let\unnumberedsubsection=\relax +\let\unnumberedsubsubsec=\relax +\let\unnumberedsubsubsection=\relax +\let\section=\relax +\let\subsec=\relax +\let\subsubsec=\relax +\let\subsection=\relax +\let\subsubsection=\relax +\let\appendix=\relax +\let\appendixsec=\relax +\let\appendixsection=\relax +\let\appendixsubsec=\relax +\let\appendixsubsection=\relax +\let\appendixsubsubsec=\relax +\let\appendixsubsubsection=\relax +\let\contents=\relax +\let\smallbook=\relax +\let\titlepage=\relax +} + +% Used in nested conditionals, where we have to parse the Texinfo source +% and so want to turn off most commands, in case they are used +% incorrectly. +% +\def\ignoremorecommands{% + \let\defcodeindex = \relax + \let\defcv = \relax + \let\deffn = \relax + \let\deffnx = \relax + \let\defindex = \relax + \let\defivar = \relax + \let\defmac = \relax + \let\defmethod = \relax + \let\defop = \relax + \let\defopt = \relax + \let\defspec = \relax + \let\deftp = \relax + \let\deftypefn = \relax + \let\deftypefun = \relax + \let\deftypevar = \relax + \let\deftypevr = \relax + \let\defun = \relax + \let\defvar = \relax + \let\defvr = \relax + \let\ref = \relax + \let\xref = \relax + \let\printindex = \relax + \let\pxref = \relax + \let\settitle = \relax + \let\setchapternewpage = \relax + \let\setchapterstyle = \relax + \let\everyheading = \relax + \let\evenheading = \relax + \let\oddheading = \relax + \let\everyfooting = \relax + \let\evenfooting = \relax + \let\oddfooting = \relax + \let\headings = \relax + \let\include = \relax + \let\lowersections = \relax + \let\down = \relax + \let\raisesections = \relax + \let\up = \relax + \let\set = \relax + \let\clear = \relax + \let\item = \relax +} + +% Ignore @ignore ... @end ignore. +% +\def\ignore{\doignore{ignore}} + +% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. +% +\def\ifinfo{\doignore{ifinfo}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifnottex{\doignore{ifnottex}} +\def\html{\doignore{html}} +\def\menu{\doignore{menu}} +\def\direntry{\doignore{direntry}} + +% Also ignore @macro ... @end macro. The user must run texi2dvi, +% which runs makeinfo to do macro expansion. Ignore @unmacro, too. +\def\macro{\doignore{macro}} +\let\unmacro = \comment + + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory = \comment + +% Ignore text until a line `@end #1'. +% +\def\doignore#1{\begingroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define a command to swallow text until we reach `@end #1'. + \long\def\doignoretext##1\end #1{\enddoignore}% + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \catcode32 = 10 + % + % Ignore braces, too, so mismatched braces don't cause trouble. + \catcode`\{ = 9 + \catcode`\} = 9 + % + % And now expand that command. + \doignoretext +} + +% What we do to finish off ignored text. +% +\def\enddoignore{\endgroup\ignorespaces}% + +\newif\ifwarnedobs\warnedobsfalse +\def\obstexwarn{% + \ifwarnedobs\relax\else + % We need to warn folks that they may have trouble with TeX 3.0. + % This uses \immediate\write16 rather than \message to get newlines. + \immediate\write16{} + \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} + \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} + \immediate\write16{If you are running another version of TeX, relax.} + \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} + \immediate\write16{ Then upgrade your TeX installation if you can.} + \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)} + \immediate\write16{If you are stuck with version 3.0, run the} + \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} + \immediate\write16{ to use a workaround.} + \immediate\write16{} + \global\warnedobstrue + \fi +} + +% **In TeX 3.0, setting text in \nullfont hangs tex. For a +% workaround (which requires the file ``dummy.tfm'' to be installed), +% uncomment the following line: +%%%%%\font\nullfont=dummy\let\obstexwarn=\relax + +% Ignore text, except that we keep track of conditional commands for +% purposes of nesting, up to an `@end #1' command. +% +\def\nestedignore#1{% + \obstexwarn + % We must actually expand the ignored text to look for the @end + % command, so that nested ignore constructs work. Thus, we put the + % text into a \vbox and then do nothing with the result. To minimize + % the change of memory overflow, we follow the approach outlined on + % page 401 of the TeXbook: make the current font be a dummy font. + % + \setbox0 = \vbox\bgroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define `@end #1' to end the box, which will in turn undefine the + % @end command again. + \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% + % + % We are going to be parsing Texinfo commands. Most cause no + % trouble when they are used incorrectly, but some commands do + % complicated argument parsing or otherwise get confused, so we + % undefine them. + % + % We can't do anything about stray @-signs, unfortunately; + % they'll produce `undefined control sequence' errors. + \ignoremorecommands + % + % Set the current font to be \nullfont, a TeX primitive, and define + % all the font commands to also use \nullfont. We don't use + % dummy.tfm, as suggested in the TeXbook, because not all sites + % might have that installed. Therefore, math mode will still + % produce output, but that should be an extremely small amount of + % stuff compared to the main input. + % + \nullfont + \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont + \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont + \let\tensf = \nullfont + % Similarly for index fonts (mostly for their use in + % smallexample) + \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont + \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont + \let\indsf = \nullfont + % + % Don't complain when characters are missing from the fonts. + \tracinglostchars = 0 + % + % Don't bother to do space factor calculations. + \frenchspacing + % + % Don't report underfull hboxes. + \hbadness = 10000 + % + % Do minimal line-breaking. + \pretolerance = 10000 + % + % Do not execute instructions in @tex + \def\tex{\doignore{tex}}% +} + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. Make sure the catcode of space is correct to avoid +% losing inside @example, for instance. +% +\def\set{\begingroup\catcode` =10 + \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. + \parsearg\setxxx} +\def\setxxx#1{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + \def\temp{#2}% + \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty + \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. + \fi + \endgroup +} +% Can't use \xdef to pre-expand #2 and save some time, since \temp or +% \next or other control sequences that we've defined might get us into +% an infinite loop. Consider `@set foo @cite{bar}'. +\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\def\clear{\parsearg\clearxxx} +\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} + +% @value{foo} gets the text saved in variable foo. +% +\def\value{\begingroup + \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. + \valuexxx} +\def\valuexxx#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {\{No value for ``#1''\}}% + \else + \csname SET#1\endcsname + \fi +\endgroup} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +\def\ifset{\parsearg\ifsetxxx} +\def\ifsetxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifsetfail + \else + \expandafter\ifsetsucceed + \fi +} +\def\ifsetsucceed{\conditionalsucceed{ifset}} +\def\ifsetfail{\nestedignore{ifset}} +\defineunmatchedend{ifset} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +\def\ifclear{\parsearg\ifclearxxx} +\def\ifclearxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifclearsucceed + \else + \expandafter\ifclearfail + \fi +} +\def\ifclearsucceed{\conditionalsucceed{ifclear}} +\def\ifclearfail{\nestedignore{ifclear}} +\defineunmatchedend{ifclear} + +% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text +% following, through the first @end iftex (etc.). Make `@end iftex' +% (etc.) valid only after an @iftex. +% +\def\iftex{\conditionalsucceed{iftex}} +\def\ifnothtml{\conditionalsucceed{ifnothtml}} +\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} +\defineunmatchedend{iftex} +\defineunmatchedend{ifnothtml} +\defineunmatchedend{ifnotinfo} + +% We can't just want to start a group at @iftex (for example) and end it +% at @end iftex, since then @set commands inside the conditional have no +% effect (they'd get reverted at the end of the group). So we must +% define \Eiftex to redefine itself to be its previous value. (We can't +% just define it to fail again with an ``unmatched end'' error, since +% the @ifset might be nested.) +% +\def\conditionalsucceed#1{% + \edef\temp{% + % Remember the current value of \E#1. + \let\nece{prevE#1} = \nece{E#1}% + % + % At the `@end #1', redefine \E#1 to be its previous value. + \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% + }% + \temp +} + +% We need to expand lots of \csname's, but we don't want to expand the +% control sequences after we've constructed them. +% +\def\nece#1{\expandafter\noexpand\csname#1\endcsname} + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math means output in math mode. +% We don't use $'s directly in the definition of \math because control +% sequences like \math are expanded when the toc file is written. Then, +% we read the toc file back, the $'s will be normal characters (as they +% should be, according to the definition of Texinfo). So we must use a +% control sequence to switch into and out of math mode. +% +% This isn't quite enough for @math to work properly in indices, but it +% seems unlikely it will ever be needed there. +% +\let\implicitmath = $ +\def\math#1{\implicitmath #1\implicitmath} + +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{\implicitmath\ptexbullet\implicitmath} +\def\minus{\implicitmath-\implicitmath} + +\def\node{\ENVcheck\parsearg\nodezzz} +\def\nodezzz#1{\nodexxx [#1,]} +\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} +\let\nwnode=\node +\let\lastnode=\relax + +\def\donoderef{\ifx\lastnode\relax\else +\expandafter\expandafter\expandafter\setref{\lastnode}\fi +\global\let\lastnode=\relax} + +\def\unnumbnoderef{\ifx\lastnode\relax\else +\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi +\global\let\lastnode=\relax} + +\def\appendixnoderef{\ifx\lastnode\relax\else +\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi +\global\let\lastnode=\relax} + +% @refill is a no-op. +\let\refill=\relax + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \readauxfile + \opencontents + \openindices + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \global\let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + % Just to be on the safe side, close the input stream before the \input. + \openin 1 texinfo.cnf + \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi + \closein1 + \temp + % + \comment % Ignore the actual filename. +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + +% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} +% \def\macroxxx#1#2 \end macro{% +% \expandafter\gdef\macrotemp#1{#2}% +% \endgroup} + +%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} +%\def\linemacroxxx#1#2 \end linemacro{% +%\let\parsearg=\relax +%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}% +%\expandafter\xdef\macrotemp{\parsearg\macrotempx}% +%\expandafter\gdef\macrotempx#1{#2}% +%\endgroup} + +%\def\butfirst#1{} + + +\message{fonts,} + +% Font-change commands. + +% Texinfo supports the sans serif font style, which plain TeX does not. +% So we set up a \sf analogous to plain's \rm, etc. +\newfam\sffam +\def\sf{\fam=\sffam \tensf} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this one. +\def\ttsl{\tenttsl} + +% Use Computer Modern fonts at \magstephalf (11pt). +\newcount\mainmagstep +\mainmagstep=\magstephalf + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor +\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +\ifx\bigger\relax +\let\mainmagstep=\magstep1 +\setfont\textrm\rmshape{12}{1000} +\setfont\texttt\ttshape{12}{1000} +\else +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} +\fi +% Instead of cmb10, you many want to use cmbx10. +% cmbx10 is a prettier font on its own, but cmb10 +% looks better when embedded in a line with cmr10. +\setfont\textbf\bfshape{10}{\mainmagstep} +\setfont\textit\itshape{10}{\mainmagstep} +\setfont\textsl\slshape{10}{\mainmagstep} +\setfont\textsf\sfshape{10}{\mainmagstep} +\setfont\textsc\scshape{10}{\mainmagstep} +\setfont\textttsl\ttslshape{10}{\mainmagstep} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep + +% A few fonts for @defun, etc. +\setfont\defbf\bxshape{10}{\magstep1} %was 1314 +\setfont\deftt\ttshape{10}{\magstep1} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} + +% Fonts for indices and small examples (9pt). +% We actually use the slanted font rather than the italic, +% because texinfo normally uses the slanted fonts for that. +% Do not make many font distinctions in general in the index, since they +% aren't very useful. +\setfont\ninett\ttshape{9}{1000} +\setfont\indrm\rmshape{9}{1000} +\setfont\indit\slshape{9}{1000} +\let\indsl=\indit +\let\indtt=\ninett +\let\indttsl=\ninett +\let\indsf=\indrm +\let\indbf=\indrm +\setfont\indsc\scshape{10}{900} +\font\indi=cmmi9 +\font\indsy=cmsy9 + +% Fonts for title page: +\setfont\titlerm\rmbshape{12}{\magstep3} +\setfont\titleit\itbshape{10}{\magstep4} +\setfont\titlesl\slbshape{10}{\magstep4} +\setfont\titlett\ttbshape{12}{\magstep3} +\setfont\titlettsl\ttslshape{10}{\magstep4} +\setfont\titlesf\sfbshape{17}{\magstep1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} + +% Chapter (and unnumbered) fonts (17.28pt). +\setfont\chaprm\rmbshape{12}{\magstep2} +\setfont\chapit\itbshape{10}{\magstep3} +\setfont\chapsl\slbshape{10}{\magstep3} +\setfont\chaptt\ttbshape{12}{\magstep2} +\setfont\chapttsl\ttslshape{10}{\magstep3} +\setfont\chapsf\sfbshape{17}{1000} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 + +% Section fonts (14.4pt). +\setfont\secrm\rmbshape{12}{\magstep1} +\setfont\secit\itbshape{10}{\magstep2} +\setfont\secsl\slbshape{10}{\magstep2} +\setfont\sectt\ttbshape{12}{\magstep1} +\setfont\secttsl\ttslshape{10}{\magstep2} +\setfont\secsf\sfbshape{12}{\magstep1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 + +% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. +% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. +% \setfont\ssecsl\slshape{10}{\magstep1} +% \setfont\ssectt\ttshape{10}{\magstep1} +% \setfont\ssecsf\sfshape{10}{\magstep1} + +%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. +%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than +%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. +%\setfont\ssectt\ttshape{10}{1315} +%\setfont\ssecsf\sfshape{10}{1315} + +%\let\ssecbf=\ssecrm + +% Subsection fonts (13.15pt). +\setfont\ssecrm\rmbshape{12}{\magstephalf} +\setfont\ssecit\itbshape{10}{1315} +\setfont\ssecsl\slbshape{10}{1315} +\setfont\ssectt\ttbshape{12}{\magstephalf} +\setfont\ssecttsl\ttslshape{10}{1315} +\setfont\ssecsf\sfbshape{12}{\magstephalf} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{\magstep1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +% The smallcaps and symbol fonts should actually be scaled \magstep1.5, +% but that is not a standard magnification. + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts, we +% don't bother to reset \scriptfont and \scriptscriptfont (which would +% also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy + \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf + \textfont\ttfam = \tentt \textfont\sffam = \tensf +} + + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this so that font changes will continue to work +% in math mode, where it is the current \fam that is relevant in most +% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam +% \tenbf}, for example. By redefining \tenbf, we obviate the need to +% redefine \bf itself. +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl + \resetmathfonts} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? +\def\indexfonts{% + \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl + \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc + \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl + \resetmathfonts \setleading{12pt}} + +% Set up the default fonts, so we can use them for creating boxes. +% +\textfonts + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000} +\setfont\shortcontbf\bxshape{12}{1000} +\setfont\shortcontsl\slshape{12}{1000} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} +\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\var=\smartitalic +\let\dfn=\smartitalic +\let\emph=\smartitalic +\let\cite=\smartitalic + +\def\b#1{{\bf #1}} +\let\strong=\b + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +\def\t#1{% + {\tt \rawbackslash \frenchspacing #1}% + \null +} +\let\ttfont=\t +\def\samp #1{`\tclose{#1}'\null} +\setfont\smallrm\rmshape{8}{1000} +\font\smallsy=cmsy9 +\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% + \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +\let\file=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \frenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in \code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ +\catcode`\-=\active +\catcode`\_=\active +\catcode`\|=\active +\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex} +% The following is used by \doprintindex to insure that long function names +% wrap around. It is necessary for - and _ to be active before the index is +% read from the file, as \entry parses the arguments long before \code is +% ever called. -- mycroft +% _ is always active; and it shouldn't be \let = to an _ that is a +% subscript character anyway. Then, @cindex @samp{_} (for example) +% fails. --karl +\global\def\indexbreaks{% + \catcode`\-=\active \let-\realdash +} +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} +\def\codex #1{\tclose{#1}\endgroup} + +%\let\exp=\tclose %Was temporary + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\def\kbdinputstyle{\parsearg\kbdinputstylexxx} +\def\kbdinputstylexxx#1{% + \def\arg{#1}% + \ifx\arg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\arg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\arg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is kbdinputdistinct. (Too much of a hassle to call the macro, +% the catcodes are wrong for parsearg to work.) +\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% @url. Quotes do not seem necessary, so use \code. +\let\url=\code + +% @uref (abbreviation for `urlref') takes an optional second argument +% specifying the text to display. First (mandatory) arg is the url. +% Perhaps eventually put in a hypertex \special here. +% +\def\uref#1{\urefxxx #1,,\finish} +\def\urefxxx#1,#2,#3\finish{% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \unhbox0\ (\code{#1})% + \else + \code{#1}% + \fi +} + +% rms does not like the angle brackets --karl, 17may97. +% So now @email is just like @uref. +%\def\email#1{$\langle${\tt #1}$\rangle$} +\let\email=\uref + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of +% @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +\def\r#1{{\rm #1}} % roman font +% Use of \lowercase was suggested. +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @pounds{} is a sterling sign. +\def\pounds{{\it\$}} + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +\def\shorttitlepage{\parsearg\shorttitlepagezzz} +\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\def\titlepage{\begingroup \parindent=0pt \textfonts + \let\subtitlerm=\tenrm +% I deinstalled the following change because \cmr12 is undefined. +% This change was not in the ChangeLog anyway. --rms. +% \let\subtitlerm=\cmr12 + \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% + % + \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% + % + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % + % Now you can print the title using @title. + \def\title{\parsearg\titlezzz}% + \def\titlezzz##1{\leftline{\titlefonts\rm ##1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Now you can put text using @subtitle. + \def\subtitle{\parsearg\subtitlezzz}% + \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% + % + % @author should come last, but may come many times. + \def\author{\parsearg\authorzzz}% + \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi + {\authorfont \leftline{##1}}}% + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \oldpage + \let\page = \oldpage + \hbox{}}% +% \def\page{\oldpage \hbox{}} +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + \HEADINGSon +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks \evenheadline % Token sequence for heading line of even pages +\newtoks \oddheadline % Token sequence for heading line of odd pages +\newtoks \evenfootline % Token sequence for footing line of even pages +\newtoks \oddfootline % Token sequence for footing line of odd pages + +% Now make Tex use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + +\def\evenheading{\parsearg\evenheadingxxx} +\def\oddheading{\parsearg\oddheadingxxx} +\def\everyheading{\parsearg\everyheadingxxx} + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\oddfooting{\parsearg\oddfootingxxx} +\def\everyfooting{\parsearg\everyfootingxxx} + +{\catcode`\@=0 % + +\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} +\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} +\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} +\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} +\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -\baselineskip + \global\advance\vsize by -\baselineskip +} + +\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} +% +}% unbind the catcode of @. + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{ +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{ +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{ +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% Produces Day Month Year style of output. +\def\today{\number\day\space +\ifcase\month\or +January\or February\or March\or April\or May\or June\or +July\or August\or September\or October\or November\or December\fi +\space\number\year} + +% Use this if you want the Month Day, Year style of output. +%\def\today{\ifcase\month\or +%January\or February\or March\or April\or May\or June\or +%July\or August\or September\or October\or November\or December\fi +%\space\number\day, \number\year} + +% @settitle line... specifies the title of the document, for headings +% It generates no output of its own + +\def\thistitle{No Title} +\def\settitle{\parsearg\settitlezzz} +\def\settitlezzz #1{\gdef\thistitle{#1}} + + +\message{tables,} + +% @tabs -- simple alignment + +% These don't work. For one thing, \+ is defined as outer. +% So these macros cannot even be defined. + +%\def\tabs{\parsearg\tabszzz} +%\def\tabszzz #1{\settabs\+#1\cr} +%\def\tabline{\parsearg\tablinezzz} +%\def\tablinezzz #1{\+#1\cr} +%\def\&{&} + +% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @vtable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} +\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} + +\def\internalBkitem{\smallbreak \parsearg\kitemzzz} +\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} + +\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% + \itemzzz {#1}} + +\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% + \itemzzz {#1}} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemfont{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % Be sure we are not still in the middle of a paragraph. + %{\parskip = 0in + %\par + %}% + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. Unfortunately + % we can't prevent a possible page break at the following + % \baselineskip glue. + \nobreak + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. Since that + % text will be indented by \tableindent, we make the item text be in + % a zero-width box. + \noindent + \rlap{\hskip -\tableindent\box0}\ignorespaces% + \endgroup% + \itemxneedsnegativevskiptrue% + \fi +} + +\def\item{\errmessage{@item while not in a table}} +\def\itemx{\errmessage{@itemx while not in a table}} +\def\kitem{\errmessage{@kitem while not in a table}} +\def\kitemx{\errmessage{@kitemx while not in a table}} +\def\xitem{\errmessage{@xitem while not in a table}} +\def\xitemx{\errmessage{@xitemx while not in a table}} + +%% Contains a kludge to get @end[description] to work +\def\description{\tablez{\dontindex}{1}{}{}{}{}} + +\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} +{\obeylines\obeyspaces% +\gdef\tablex #1^^M{% +\tabley\dontindex#1 \endtabley}} + +\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} +{\obeylines\obeyspaces% +\gdef\ftablex #1^^M{% +\tabley\fnitemindex#1 \endtabley +\def\Eftable{\endgraf\afterenvbreak\endgroup}% +\let\Etable=\relax}} + +\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} +{\obeylines\obeyspaces% +\gdef\vtablex #1^^M{% +\tabley\vritemindex#1 \endtabley +\def\Evtable{\endgraf\afterenvbreak\endgroup}% +\let\Etable=\relax}} + +\def\dontindex #1{} +\def\fnitemindex #1{\doind {fn}{\code{#1}}}% +\def\vritemindex #1{\doind {vr}{\code{#1}}}% + +{\obeyspaces % +\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% +\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} + +\def\tablez #1#2#3#4#5#6{% +\aboveenvbreak % +\begingroup % +\def\Edescription{\Etable}% Necessary kludge. +\let\itemindex=#1% +\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % +\ifnum 0#4>0 \tableindent=#4\mil \fi % +\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % +\def\itemfont{#2}% +\itemmax=\tableindent % +\advance \itemmax by -\itemmargin % +\advance \leftskip by \tableindent % +\exdentamount=\tableindent +\parindent = 0pt +\parskip = \smallskipamount +\ifdim \parskip=0pt \parskip=2pt \fi% +\def\Etable{\endgraf\afterenvbreak\endgroup}% +\let\item = \internalBitem % +\let\itemx = \internalBitemx % +\let\kitem = \internalBkitem % +\let\kitemx = \internalBkitemx % +\let\xitem = \internalBxitem % +\let\xitemx = \internalBxitemx % +} + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\def\itemize{\parsearg\itemizezzz} + +\def\itemizezzz #1{% + \begingroup % ended by the @end itemsize + \itemizey {#1}{\Eitemize} +} + +\def\itemizey #1#2{% +\aboveenvbreak % +\itemmax=\itemindent % +\advance \itemmax by -\itemmargin % +\advance \leftskip by \itemindent % +\exdentamount=\itemindent +\parindent = 0pt % +\parskip = \smallskipamount % +\ifdim \parskip=0pt \parskip=2pt \fi% +\def#2{\endgraf\afterenvbreak\endgroup}% +\def\itemcontents{#1}% +\let\item=\itemizeitem} + +% Set sfcode to normal for the chars that usually have another value. +% These are `.?!:;,' +\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 + \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\def\enumerate{\parsearg\enumeratezzz} +\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + \begingroup % ended by the @end enumerate + % + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call itemizey, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \itemizey{#1.}\Eenumerate\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + +% Definition of @item while inside @itemize. + +\def\itemizeitem{% +\advance\itemno by 1 +{\let\par=\endgraf \smallbreak}% +\ifhmode \errmessage{In hmode at itemizeitem}\fi +{\parskip=0in \hskip 0pt +\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% +\vadjust{\penalty 1200}}% +\flushcr} + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. +% +% For those who want to use more than one line's worth of words in +% the preamble, break the line within one argument and it +% will parse correctly, i.e., +% +% @multitable {Column 1 template} {Column 2 template} {Column 3 +% template} +% Not: +% @multitable {Column 1 template} {Column 2 template} +% {Column 3 template} + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab, @multitable or @end multitable do not need to be on their +% own lines, but it will not hurt if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. + +%%%% +% Dimensions + +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +%%%% +% Macros used to set up halign preamble: +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +%% 2/1/96, to allow fractions to be given with more than one digit. +\def\pickupwholefraction#1 {\global\advance\colcount by1 % +\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% +\setuptable} + +\newcount\colcount +\def\setuptable#1{\def\firstarg{#1}% +\ifx\firstarg\xendsetuptable\let\go\relax% +\else + \ifx\firstarg\xcolumnfractions\global\setpercenttrue% + \else + \ifsetpercent + \let\go\pickupwholefraction % In this case arg of setuptable + % is the decimal point before the + % number given in percent of hsize. + % We don't need this so we don't use it. + \else + \global\advance\colcount by1 + \setbox0=\hbox{#1 }% Add a normal word space as a separator; + % typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi% + \fi% +\ifx\go\pickupwholefraction\else\let\go\setuptable\fi% +\fi\go} + +%%%% +% multitable syntax +\def\tab{&\hskip1sp\relax} % 2/2/96 + % tiny skip here makes sure this column space is + % maintained, even if it is never used. + + +%%%% +% @multitable ... @end multitable definitions: + +\def\multitable{\parsearg\dotable} + +\def\dotable#1{\bgroup +\let\item\cr +\tolerance=9500 +\hbadness=9500 +\setmultitablespacing +\parskip=\multitableparskip +\parindent=\multitableparindent +\overfullrule=0pt +\global\colcount=0\relax% +\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% + % To parse everything between @multitable and @item : +\setuptable#1 \endsetuptable + % Need to reset this to 0 after \setuptable. +\global\colcount=0\relax% + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. +\halign\bgroup&\global\advance\colcount by 1\relax% +\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % If user has set preamble in terms of percent of \hsize + % we will use that dimension as the width of the column, and + % the \leftskip will keep entries from bumping into each other. + % Table will start at left margin and final column will justify at + % right margin. +\ifnum\colcount=1 +\else + \ifsetpercent + \else + % If user has set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: +\leftskip=\multitablecolspace +\fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively marking + % characters. + \noindent\ignorespaces##\unskip\multistrut}\cr + % \everycr will reset column counter, \colcount, at the end of + % each line. Every column entry will cause \colcount to advance by one. + % The table preamble + % looks at the current \colcount to find the correct column width. +\global\everycr{\noalign{% +% \filbreak%% keeps underfull box messages off when table breaks over pages. +% Maybe so, but it also creates really weird page breaks when the table +% breaks over pages Wouldn't \vfil be better? Wait until the problem +% manifests itself, so it can be fixed for real --karl. +\global\colcount=0\relax}} +} + +\def\setmultitablespacing{% test to see if user has set \multitablelinespace. +% If so, do nothing. If not, give it an appropriate dimension based on +% current baselineskip. +\ifdim\multitablelinespace=0pt +%% strut to put in table in case some entry doesn't have descenders, +%% to keep lines equally spaced +\let\multistrut = \strut +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\else +\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 +width0pt\relax} \fi +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within \newindex. +{\catcode`\@=11 +\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. + +\def\newindex #1{ +\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\doindex {#1}} +} + +% @defindex foo == \newindex{foo} + +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. + +\def\newcodeindex #1{ +\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\docodeindex {#1}} +} + +\def\defcodeindex{\parsearg\newcodeindex} + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +\def\synindex #1 #2 {% +\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname +\expandafter\let\csname#1indfile\endcsname=\synindexfoo +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\doindex {#2}}% +} + +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +\def\syncodeindex #1 #2 {% +\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname +\expandafter\let\csname#1indfile\endcsname=\synindexfoo +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\docodeindex {#2}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +\def\indexdummies{% +% Take care of the plain tex accent commands. +\def\"{\realbackslash "}% +\def\`{\realbackslash `}% +\def\'{\realbackslash '}% +\def\^{\realbackslash ^}% +\def\~{\realbackslash ~}% +\def\={\realbackslash =}% +\def\b{\realbackslash b}% +\def\c{\realbackslash c}% +\def\d{\realbackslash d}% +\def\u{\realbackslash u}% +\def\v{\realbackslash v}% +\def\H{\realbackslash H}% +% Take care of the plain tex special European modified letters. +\def\oe{\realbackslash oe}% +\def\ae{\realbackslash ae}% +\def\aa{\realbackslash aa}% +\def\OE{\realbackslash OE}% +\def\AE{\realbackslash AE}% +\def\AA{\realbackslash AA}% +\def\o{\realbackslash o}% +\def\O{\realbackslash O}% +\def\l{\realbackslash l}% +\def\L{\realbackslash L}% +\def\ss{\realbackslash ss}% +% Take care of texinfo commands likely to appear in an index entry. +% (Must be a way to avoid doing expansion at all, and thus not have to +% laboriously list every single command here.) +\def\@{@}% will be @@ when we switch to @ as escape char. +%\let\{ = \lbracecmd +%\let\} = \rbracecmd +\def\_{{\realbackslash _}}% +\def\w{\realbackslash w }% +\def\bf{\realbackslash bf }% +%\def\rm{\realbackslash rm }% +\def\sl{\realbackslash sl }% +\def\sf{\realbackslash sf}% +\def\tt{\realbackslash tt}% +\def\gtr{\realbackslash gtr}% +\def\less{\realbackslash less}% +\def\hat{\realbackslash hat}% +%\def\char{\realbackslash char}% +\def\TeX{\realbackslash TeX}% +\def\dots{\realbackslash dots }% +\def\result{\realbackslash result}% +\def\equiv{\realbackslash equiv}% +\def\expansion{\realbackslash expansion}% +\def\print{\realbackslash print}% +\def\error{\realbackslash error}% +\def\point{\realbackslash point}% +\def\copyright{\realbackslash copyright}% +\def\tclose##1{\realbackslash tclose {##1}}% +\def\code##1{\realbackslash code {##1}}% +\def\dotless##1{\realbackslash dotless {##1}}% +\def\samp##1{\realbackslash samp {##1}}% +\def\,##1{\realbackslash ,{##1}}% +\def\t##1{\realbackslash t {##1}}% +\def\r##1{\realbackslash r {##1}}% +\def\i##1{\realbackslash i {##1}}% +\def\b##1{\realbackslash b {##1}}% +\def\sc##1{\realbackslash sc {##1}}% +\def\cite##1{\realbackslash cite {##1}}% +\def\key##1{\realbackslash key {##1}}% +\def\file##1{\realbackslash file {##1}}% +\def\var##1{\realbackslash var {##1}}% +\def\kbd##1{\realbackslash kbd {##1}}% +\def\dfn##1{\realbackslash dfn {##1}}% +\def\emph##1{\realbackslash emph {##1}}% +\def\value##1{\realbackslash value {##1}}% +\unsepspaces +} + +% If an index command is used in an @example environment, any spaces +% therein should become regular spaces in the raw index file, not the +% expansion of \tie (\\leavevmode \penalty \@M \ ). +{\obeyspaces + \gdef\unsepspaces{\obeyspaces\let =\space}} + +% \indexnofonts no-ops all font-change commands. +% This is used when outputting the strings to sort the index by. +\def\indexdummyfont#1{#1} +\def\indexdummytex{TeX} +\def\indexdummydots{...} + +\def\indexnofonts{% +% Just ignore accents. +\let\,=\indexdummyfont +\let\"=\indexdummyfont +\let\`=\indexdummyfont +\let\'=\indexdummyfont +\let\^=\indexdummyfont +\let\~=\indexdummyfont +\let\==\indexdummyfont +\let\b=\indexdummyfont +\let\c=\indexdummyfont +\let\d=\indexdummyfont +\let\u=\indexdummyfont +\let\v=\indexdummyfont +\let\H=\indexdummyfont +\let\dotless=\indexdummyfont +% Take care of the plain tex special European modified letters. +\def\oe{oe}% +\def\ae{ae}% +\def\aa{aa}% +\def\OE{OE}% +\def\AE{AE}% +\def\AA{AA}% +\def\o{o}% +\def\O{O}% +\def\l{l}% +\def\L{L}% +\def\ss{ss}% +\let\w=\indexdummyfont +\let\t=\indexdummyfont +\let\r=\indexdummyfont +\let\i=\indexdummyfont +\let\b=\indexdummyfont +\let\emph=\indexdummyfont +\let\strong=\indexdummyfont +\let\cite=\indexdummyfont +\let\sc=\indexdummyfont +%Don't no-op \tt, since it isn't a user-level command +% and is used in the definitions of the active chars like <, >, |... +%\let\tt=\indexdummyfont +\let\tclose=\indexdummyfont +\let\code=\indexdummyfont +\let\file=\indexdummyfont +\let\samp=\indexdummyfont +\let\kbd=\indexdummyfont +\let\key=\indexdummyfont +\let\var=\indexdummyfont +\let\TeX=\indexdummytex +\let\dots=\indexdummydots +\def\@{@}% +} + +% To define \realbackslash, we must make \ not be an escape. +% We must first make another character (@) an escape +% so we do not become unable to do a definition. + +{\catcode`\@=0 \catcode`\\=\other +@gdef@realbackslash{\}} + +\let\indexbackslash=0 %overridden during \printindex. + +\let\SETmarginindex=\relax %initialize! +% workhorse for all \fooindexes +% #1 is name of index, #2 is stuff to put there +\def\doind #1#2{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% + \fi + {% + \count255=\lastpenalty + {% + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + {% + \let\folio=0% We will expand all macros now EXCEPT \folio. + \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % First process the index-string with all font commands turned off + % to get the string to sort by. + {\indexnofonts \xdef\indexsorttmp{#2}}% + % + % Now produce the complete index entry, with both the sort key and the + % original text, including any font commands. + \toks0 = {#2}% + \edef\temp{% + \write\csname#1indfile\endcsname{% + \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% + }% + \temp + }% + }% + \penalty\count255 + }% +} + +\def\dosubind #1#2#3{% +{\count10=\lastpenalty % +{\indexdummies % Must do this here, since \bf, etc expand at this stage +\escapechar=`\\% +{\let\folio=0% +\def\rawbackslashxx{\indexbackslash}% +% +% Now process the index-string once, with all font commands turned off, +% to get the string to sort the index by. +{\indexnofonts +\xdef\temp1{#2 #3}% +}% +% Now produce the complete index entry. We process the index-string again, +% this time with font commands expanded, to get what to print in the index. +\edef\temp{% +\write \csname#1indfile\endcsname{% +\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% +\temp }% +}\penalty\count10}} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\def\printindex{\parsearg\doprintindex} +\def\doprintindex#1{\begingroup + \dobreak \chapheadingskip{10000}% + % + \indexfonts \rm + \tolerance = 9500 + \indexbreaks + % + % See if the index file exists and is nonempty. + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + (Index is nonexistent) + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + (Index is empty) + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\rawbackslashxx}% + \catcode`\\ = 0 + \catcode`\@ = 11 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +% Same as \bigskipamount except no shrink. +% \balancecolumns gets confused if there is any shrink. +\newskip\initialskipamount \initialskipamount 12pt plus4pt + +\def\initial #1{% +{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt +\ifdim\lastskip<\initialskipamount +\removelastskip \penalty-200 \vskip \initialskipamount\fi +\line{\secbf#1\hfill}\kern 2pt\penalty10000}} + +% This typesets a paragraph consisting of #1, dot leaders, and then #2 +% flush to the right margin. It is used for index and table of contents +% entries. The paragraph is indented by \leftskip. +% +\def\entry #1#2{\begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent=2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % Start a ``paragraph'' for the index entry so the line breaking + % parameters we've set above will have an effect. + \noindent + % + % Insert the text of the index entry. TeX will do line-breaking on it. + #1% + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \def\tempa{{\rm }}% + \def\tempb{#2}% + \edef\tempc{\tempa}% + \edef\tempd{\tempb}% + \ifx\tempc\tempd\ \else% + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ #2% The page number ends the paragraph. + \fi% + \par +\endgroup} + +% Like \dotfill except takes at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm + +\def\secondary #1#2{ +{\parfillskip=0in \parskip=0in +\hangindent =1in \hangafter=1 +\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {\global\setbox\partialpage = \vbox{% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case, we must prevent the second \partialpage from + % simply overwriting the first, causing us to lose the page. + % This will preserve it until a real output routine can ship it + % out. Generally, \partialpage will be empty when this runs and + % this will be a no-op. + \unvbox\partialpage + % + % Unvbox the main output page. + \unvbox255 + \kern-\topskip \kern\baselineskip + }}% + \eject + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +\def\pagesofar{% + % Re-output the contents of the output page -- any previous material, + % followed by the two boxes we just split. + \unvbox\partialpage + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% +} +\def\enddoublecolumns{% + \output = {\balancecolumns}\eject % split what we have + \endgroup % started in \begindoublecolumns + % + % Back to normal single-column typesetting, but take account of the + % fact that we just accumulated some stuff on the output page. + \pagegoal = \vsize +} +\def\balancecolumns{% + % Called at the end of the double column material. + \setbox0 = \vbox{\unvbox255}% + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {\vbadness=10000 \loop + \global\setbox3=\copy0 + \global\setbox1=\vsplit3 to\dimen@ + \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt + \repeat}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Define chapters, sections, etc. + +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +\def\appendixletter{\char\the\appendixno} + +\newwrite\contentsfile +% This is called from \setfilename. +\def\opencontents{\openout\contentsfile = \jobname.toc } + +% Each @chapter defines this as the name of the chapter. +% page headings and footings can use it. @section does likewise + +\def\thischapter{} \def\thissection{} +\def\seccheck#1{\ifnum \pageno<0 + \errmessage{@#1 not allowed after generating table of contents}% +\fi} + +\def\chapternofonts{% + \let\rawbackslash=\relax + \let\frenchspacing=\relax + \def\result{\realbackslash result}% + \def\equiv{\realbackslash equiv}% + \def\expansion{\realbackslash expansion}% + \def\print{\realbackslash print}% + \def\TeX{\realbackslash TeX}% + \def\dots{\realbackslash dots}% + \def\result{\realbackslash result}% + \def\equiv{\realbackslash equiv}% + \def\expansion{\realbackslash expansion}% + \def\print{\realbackslash print}% + \def\error{\realbackslash error}% + \def\point{\realbackslash point}% + \def\copyright{\realbackslash copyright}% + \def\tt{\realbackslash tt}% + \def\bf{\realbackslash bf}% + \def\w{\realbackslash w}% + \def\less{\realbackslash less}% + \def\gtr{\realbackslash gtr}% + \def\hat{\realbackslash hat}% + \def\char{\realbackslash char}% + \def\tclose##1{\realbackslash tclose{##1}}% + \def\code##1{\realbackslash code{##1}}% + \def\samp##1{\realbackslash samp{##1}}% + \def\r##1{\realbackslash r{##1}}% + \def\b##1{\realbackslash b{##1}}% + \def\key##1{\realbackslash key{##1}}% + \def\file##1{\realbackslash file{##1}}% + \def\kbd##1{\realbackslash kbd{##1}}% + % These are redefined because @smartitalic wouldn't work inside xdef. + \def\i##1{\realbackslash i{##1}}% + \def\cite##1{\realbackslash cite{##1}}% + \def\var##1{\realbackslash var{##1}}% + \def\emph##1{\realbackslash emph{##1}}% + \def\dfn##1{\realbackslash dfn{##1}}% +} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raise/lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% Choose a numbered-heading macro +% #1 is heading level if unmodified by @raisesections or @lowersections +% #2 is text for heading +\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 +\ifcase\absseclevel + \chapterzzz{#2} +\or + \seczzz{#2} +\or + \numberedsubseczzz{#2} +\or + \numberedsubsubseczzz{#2} +\else + \ifnum \absseclevel<0 + \chapterzzz{#2} + \else + \numberedsubsubseczzz{#2} + \fi +\fi +} + +% like \numhead, but chooses appendix heading levels +\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 +\ifcase\absseclevel + \appendixzzz{#2} +\or + \appendixsectionzzz{#2} +\or + \appendixsubseczzz{#2} +\or + \appendixsubsubseczzz{#2} +\else + \ifnum \absseclevel<0 + \appendixzzz{#2} + \else + \appendixsubsubseczzz{#2} + \fi +\fi +} + +% like \numhead, but chooses numberless heading levels +\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 +\ifcase\absseclevel + \unnumberedzzz{#2} +\or + \unnumberedseczzz{#2} +\or + \unnumberedsubseczzz{#2} +\or + \unnumberedsubsubseczzz{#2} +\else + \ifnum \absseclevel<0 + \unnumberedzzz{#2} + \else + \unnumberedsubsubseczzz{#2} + \fi +\fi +} + + +\def\thischaptername{No Chapter Title} +\outer\def\chapter{\parsearg\chapteryyy} +\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz #1{\seccheck{chapter}% +\secno=0 \subsecno=0 \subsubsecno=0 +\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}% +\chapmacro {#1}{\the\chapno}% +\gdef\thissection{#1}% +\gdef\thischaptername{#1}% +% We don't substitute the actual chapter name into \thischapter +% because we don't want its macros evaluated now. +\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\global\let\section = \numberedsec +\global\let\subsection = \numberedsubsec +\global\let\subsubsection = \numberedsubsubsec +}} + +\outer\def\appendix{\parsearg\appendixyyy} +\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz #1{\seccheck{appendix}% +\secno=0 \subsecno=0 \subsubsecno=0 +\global\advance \appendixno by 1 \message{Appendix \appendixletter}% +\chapmacro {#1}{\putwordAppendix{} \appendixletter}% +\gdef\thissection{#1}% +\gdef\thischaptername{#1}% +\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash chapentry{\the\toks0}% + {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\global\let\section = \appendixsec +\global\let\subsection = \appendixsubsec +\global\let\subsubsection = \appendixsubsubsec +}} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\def\centerchap{\parsearg\centerchapyyy} +\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} + +\outer\def\top{\parsearg\unnumberedyyy} +\outer\def\unnumbered{\parsearg\unnumberedyyy} +\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz #1{\seccheck{unnumbered}% +\secno=0 \subsecno=0 \subsubsecno=0 +% +% This used to be simply \message{#1}, but TeX fully expands the +% argument to \message. Therefore, if #1 contained @-commands, TeX +% expanded them. For example, in `@unnumbered The @cite{Book}', TeX +% expanded @cite (which turns out to cause errors because \cite is meant +% to be executed, not expanded). +% +% Anyway, we don't want the fully-expanded definition of @cite to appear +% as a result of the \message, we just want `@cite' itself. We use +% \the to achieve this: TeX expands \the only once, +% simply yielding the contents of the . +\toks0 = {#1}\message{(\the\toks0)}% +% +\unnumbchapmacro {#1}% +\gdef\thischapter{#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\global\let\section = \unnumberedsec +\global\let\subsection = \unnumberedsubsec +\global\let\subsubsection = \unnumberedsubsubsec +}} + +\outer\def\numberedsec{\parsearg\secyyy} +\def\secyyy #1{\numhead1{#1}} % normally calls seczzz +\def\seczzz #1{\seccheck{section}% +\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % +\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash secentry % +{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\penalty 10000 % +}} + +\outer\def\appendixsection{\parsearg\appendixsecyyy} +\outer\def\appendixsec{\parsearg\appendixsecyyy} +\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz #1{\seccheck{appendixsection}% +\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % +\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash secentry % +{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\penalty 10000 % +}} + +\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} +\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% +\plainsecheading {#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\penalty 10000 % +}} + +\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} +\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz #1{\seccheck{subsection}% +\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % +\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsecentry % +{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\penalty 10000 % +}} + +\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} +\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% +\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % +\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsecentry % +{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\penalty 10000 % +}} + +\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} +\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% +\plainsubsecheading {#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\penalty 10000 % +}} + +\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} +\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% +\gdef\thissection{#1}\global\advance \subsubsecno by 1 % +\subsubsecheading {#1} + {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsubsecentry{\the\toks0} + {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} + {\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\penalty 10000 % +}} + +\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} +\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% +\gdef\thissection{#1}\global\advance \subsubsecno by 1 % +\subsubsecheading {#1} + {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsubsecentry{\the\toks0}% + {\appendixletter} + {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\penalty 10000 % +}} + +\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} +\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% +\plainsubsubsecheading {#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\penalty 10000 % +}} + +% These are variants which are not "outer", so they can appear in @ifinfo. +% Actually, they should now be obsolete; ordinary section commands should work. +\def\infotop{\parsearg\unnumberedzzz} +\def\infounnumbered{\parsearg\unnumberedzzz} +\def\infounnumberedsec{\parsearg\unnumberedseczzz} +\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} +\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} + +\def\infoappendix{\parsearg\appendixzzz} +\def\infoappendixsec{\parsearg\appendixseczzz} +\def\infoappendixsubsec{\parsearg\appendixsubseczzz} +\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} + +\def\infochapter{\parsearg\chapterzzz} +\def\infosection{\parsearg\sectionzzz} +\def\infosubsection{\parsearg\subsectionzzz} +\def\infosubsubsection{\parsearg\subsubsectionzzz} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\global\let\section = \numberedsec +\global\let\subsection = \numberedsubsec +\global\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and +% such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + + +\def\majorheading{\parsearg\majorheadingzzz} +\def\majorheadingzzz #1{% +{\advance\chapheadingskip by 10pt \chapbreak }% +{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\penalty 200} + +\def\chapheading{\parsearg\chapheadingzzz} +\def\chapheadingzzz #1{\chapbreak % +{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\penalty 200} + +% @heading, @subheading, @subsubheading. +\def\heading{\parsearg\plainsecheading} +\def\subheading{\parsearg\plainsubsecheading} +\def\subsubheading{\parsearg\plainsubsubsecheading} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{ +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{ +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{ +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +\def\CHAPFplain{ +\global\let\chapmacro=\chfplain +\global\let\unnumbchapmacro=\unnchfplain +\global\let\centerchapmacro=\centerchfplain} + +% Plain chapter opening. +% #1 is the text, #2 the chapter number or empty if unnumbered. +\def\chfplain#1#2{% + \pchapsepmacro + {% + \chapfonts \rm + \def\chapnum{#2}% + \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% Plain opening for unnumbered. +\def\unnchfplain#1{\chfplain{#1}{}} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerchfplain#1{{% + \def\centerparametersmaybe{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt + }% + \chfplain{#1}{}% +}} + +\CHAPFplain % The default + +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\penalty 10000 % +} + +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} + +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 % +} + +\def\CHAPFopen{ +\global\let\chapmacro=\chfopen +\global\let\unnumbchapmacro=\unnchfopen +\global\let\centerchapmacro=\centerchfopen} + + +% Section titles. +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} +\def\plainsecheading#1{\sectionheading{sec}{}{#1}} + +% Subsection titles. +\newskip \subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} +\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} +\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} + +% Subsubsection titles. +\let\subsubsecheadingskip = \subsecheadingskip +\let\subsubsecheadingbreak = \subsecheadingbreak +\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} +\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} + + +% Print any size section title. +% +% #1 is the section type (sec/subsec/subsubsec), #2 is the section +% number (maybe empty), #3 the text. +\def\sectionheading#1#2#3{% + {% + \expandafter\advance\csname #1headingskip\endcsname by \parskip + \csname #1headingbreak\endcsname + }% + {% + % Switch to the right set of fonts. + \csname #1fonts\endcsname \rm + % + % Only insert the separating space if we have a section number. + \def\secnum{#2}% + \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% + % + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 % zero if no section number + \unhbox0 #3}% + }% + \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak +} + + +\message{toc printing,} +% Finish up the main text and prepare to read what we've written +% to \contentsfile. + +\newskip\contentsrightmargin \contentsrightmargin=1in +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout \contentsfile + \ifnum \pageno>0 + \pageno = -1 % Request roman numbered pages. + \fi + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \unnumbchapmacro{#1}\def\thischapter{}% + \begingroup % Set up to handle contents files properly. + \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 + % We can't do this, because then an actual ^ in a section + % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. + %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. +} + + +% Normal (long) toc. +\outer\def\contents{% + \startcontents{\putwordTableofContents}% + \input \jobname.toc + \endgroup + \vfill \eject +} + +% And just the chapters. +\outer\def\summarycontents{% + \startcontents{\putwordShortContents}% + % + \let\chapentry = \shortchapentry + \let\unnumbchapentry = \shortunnumberedentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\secentry ##1##2##3##4{} + \def\unnumbsecentry ##1##2{} + \def\subsecentry ##1##2##3##4##5{} + \def\unnumbsubsecentry ##1##2{} + \def\subsubsecentry ##1##2##3##4##5##6{} + \def\unnumbsubsubsecentry ##1##2{} + \input \jobname.toc + \endgroup + \vfill \eject +} +\let\shortcontents = \summarycontents + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapter-level things, for both the long and short contents. +\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} + +% See comments in \dochapentry re vbox and related settings +\def\shortchapentry#1#2#3{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% +} + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. +% We could simplify the code here by writing out an \appendixentry +% command in the toc file for appendices, instead of using \chapentry +% for both, but it doesn't seem worth it. +\setbox0 = \hbox{\shortcontrm \putwordAppendix } +\newdimen\shortappendixwidth \shortappendixwidth = \wd0 + +\def\shortchaplabel#1{% + % We typeset #1 in a box of constant width, regardless of the text of + % #1, so the chapter titles will come out aligned. + \setbox0 = \hbox{#1}% + \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi + % + % This space should be plenty, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + \advance\dimen0 by 1.1em + \hbox to \dimen0{#1\hfil}% +} + +\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} +\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} + +% Sections. +\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} +\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} + +% Subsections. +\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} +\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} + +% And subsubsections. +\def\subsubsecentry#1#2#3#4#5#6{% + \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} +\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} + +% This parameter controls the indentation of the various levels. +\newdimen\tocindent \tocindent = 3pc + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno{#2}}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno{#2}}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno{#2}}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno{#2}}% +\endgroup} + +% Final typesetting of a toc entry; we use the same \entry macro as for +% the index entries, but we want to suppress hyphenation here. (We +% can't do that in the \entry macro, since index entries might consist +% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) +% +% \turnoffactive is for the sake of @" used for umlauts. +\def\tocentry#1#2{\begingroup + \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks + \entry{\turnoffactive #1}{\turnoffactive #2}% +\endgroup} + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\let\subsecentryfonts = \textfonts +\let\subsubsecentryfonts = \textfonts + + +\message{environments,} + +% Since these characters are used in examples, it should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% Furthermore, these definitions must come after we define our fonts. +\newbox\dblarrowbox \newbox\longdblarrowbox +\newbox\pushcharbox \newbox\bullbox +\newbox\equivbox \newbox\errorbox + +%{\tentt +%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} +%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} +%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} +%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} +% Adapted from the manmac format (p.420 of TeXbook) +%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex +% depth .1ex\hfil} +%} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +\def\point{$\star$} +\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% Adapted from the TeXbook's \boxit. +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} + +\global\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{ + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} + +% The @error{} command. +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\def\tex{\begingroup +\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 +\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 +\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie +\catcode `\%=14 +\catcode 43=12 % plus +\catcode`\"=12 +\catcode`\==12 +\catcode`\|=12 +\catcode`\<=12 +\catcode`\>=12 +\escapechar=`\\ +% +\let\,=\ptexcomma +\let\{=\ptexlbrace +\let\}=\ptexrbrace +\let\.=\ptexdot +\let\*=\ptexstar +\let\dots=\ptexdots +\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% +\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% +\def\@{@}% +\let\bullet=\ptexbullet +\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext +% +\let\Etex=\endgroup} + +% Define @lisp ... @endlisp. +% @lisp does a \begingroup so it can rebind things, +% including the definition of @endlisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% Make each space character in the input produce a normal interword +% space in the output. Don't allow a line break at this space, as this +% is used only in environments like @example, where each line of input +% should produce a line of output anyway. +% +{\obeyspaces % +\gdef\sepspaces{\obeyspaces\let =\tie}} + +% Define \obeyedspace to be our active space, whatever it is. This is +% for use in \parsearg. +{\sepspaces% +\global\let\obeyedspace= } + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip +% +\def\aboveenvbreak{{\advance\envskipamount by \parskip +\endgraf \ifdim\lastskip<\envskipamount +\removelastskip \penalty-50 \vskip\envskipamount \fi}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. +\let\nonarrowing=\relax + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \cartouche: draw rectangle w/rounded corners around argument +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\long\def\cartouche{% +\begingroup + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt %we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18pt % allow for 3pt kerns on either +% side, and for 6pt waste from +% each corner char + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \hsize=\cartinner + \kern3pt + \begingroup + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip +\def\Ecartouche{% + \endgroup + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup +\endgroup +}} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \inENV % This group ends at the end of the body + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \singlespace + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + % @cartouche defines \nonarrowing to inhibit narrowing + % at next level down. + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \let\exdent=\nofillexdent + \let\nonarrowing=\relax + \fi +} + +% To ending an @example-like environment, we first end the paragraph +% (via \afterenvbreak's vertical glue), and then the group. That way we +% keep the zero \parskip that the environments set -- \parskip glue +% will be inserted at the beginning of the next paragraph in the +% document, after the environment. +% +\def\nonfillfinish{\afterenvbreak\endgroup}% + +\def\lisp{\begingroup + \nonfillstart + \let\Elisp = \nonfillfinish + \tt + % Make @kbd do something special, if requested. + \let\kbdfont\kbdexamplefont + \rawbackslash % have \ input char produce \ char from current font + \gobble +} + +% Define the \E... control sequence only if we are inside the +% environment, so the error checking in \end will work. +% +% We must call \lisp last in the definition, since it reads the +% return following the @example (or whatever) command. +% +\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} +\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp} +\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp} + +% @smallexample and @smalllisp. This is not used unless the @smallbook +% command is given. Originally contributed by Pavel@xerox. +% +\def\smalllispx{\begingroup + \nonfillstart + \let\Esmalllisp = \nonfillfinish + \let\Esmallexample = \nonfillfinish + % + % Smaller fonts for small examples. + \indexfonts \tt + \rawbackslash % make \ output the \ character from the current font (tt) + \gobble +} + +% This is @display; same as @lisp except use roman font. +% +\def\display{\begingroup + \nonfillstart + \let\Edisplay = \nonfillfinish + \gobble +} + +% This is @format; same as @display except don't narrow margins. +% +\def\format{\begingroup + \let\nonarrowing = t + \nonfillstart + \let\Eformat = \nonfillfinish + \gobble +} + +% @flushleft (same as @format) and @flushright. +% +\def\flushleft{\begingroup + \let\nonarrowing = t + \nonfillstart + \let\Eflushleft = \nonfillfinish + \gobble +} +\def\flushright{\begingroup + \let\nonarrowing = t + \nonfillstart + \let\Eflushright = \nonfillfinish + \advance\leftskip by 0pt plus 1fill + \gobble} + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. +% +\def\quotation{% + \begingroup\inENV %This group ends at the end of the @quotation body + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \singlespace + \parindent=0pt + % We have retained a nonzero parskip for the environment, since we're + % doing normal filling. So to avoid extra space below the environment... + \def\Equotation{\parskip = 0pt \nonfillfinish}% + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \let\nonarrowing = \relax + \fi +} + +\message{defuns,} +% Define formatter for defuns +% First, allow user to change definition object font (\df) internally +\def\setdeffont #1 {\csname DEF#1\endcsname} + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deftypemargin \deftypemargin=12pt +\newskip\deflastargmargin \deflastargmargin=18pt + +\newcount\parencount +% define \functionparens, which makes ( and ) and & do special things. +% \functionparens affects the group it is contained in. +\def\activeparens{% +\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active +\catcode`\[=\active \catcode`\]=\active} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +\global\let(=\lparen \global\let)=\rparen +\global\let[=\lbrack \global\let]=\rbrack + +\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } +\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} +% This is used to turn on special parens +% but make & act ordinary (given that it's active). +\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} + +% Definitions of (, ) and & used in args for functions. +% This is the definition of ( outside of all parentheses. +\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested + \global\advance\parencount by 1 +} +% +% This is the definition of ( when already inside a level of parens. +\gdef\opnested{\char`\(\global\advance\parencount by 1 } +% +\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. + % also in that case restore the outer-level definition of (. + \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi + \global\advance \parencount by -1 } +% If we encounter &foo, then turn on ()-hacking afterwards +\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } +% +\gdef\normalparens{\boldbrax\let&=\ampnr} +} % End of definition inside \activeparens +%% These parens (in \boldbrax) actually are a little bolder than the +%% contained text. This is especially needed for [ and ] +\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } +\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } +\def\ampnr{\&} +\def\lbrb{{\bf\char`\[}} +\def\rbrb{{\bf\char`\]}} + +% First, defname, which formats the header line itself. +% #1 should be the function name. +% #2 should be the type of definition, such as "Function". + +\def\defname #1#2{% +% Get the values of \leftskip and \rightskip as they were +% outside the @def... +\dimen2=\leftskip +\advance\dimen2 by -\defbodyindent +\dimen3=\rightskip +\advance\dimen3 by -\defbodyindent +\noindent % +\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% +\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line +\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations +\parshape 2 0in \dimen0 \defargsindent \dimen1 % +% Now output arg 2 ("Function" or some such) +% ending at \deftypemargin from the right margin, +% but stuck inside a box of width 0 so it does not interfere with linebreaking +{% Adjust \hsize to exclude the ambient margins, +% so that \rightline will obey them. +\advance \hsize by -\dimen2 \advance \hsize by -\dimen3 +\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% +% Make all lines underfull and no complaints: +\tolerance=10000 \hbadness=10000 +\advance\leftskip by -\defbodyindent +\exdentamount=\defbodyindent +{\df #1}\enskip % Generate function name +} + +% Actually process the body of a definition +% #1 should be the terminating control sequence, such as \Edefun. +% #2 should be the "another name" control sequence, such as \defunx. +% #3 should be the control sequence that actually processes the header, +% such as \defunheader. + +\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup % +\catcode 61=\active % 61 is `=' +\obeylines\activeparens\spacesplit#3} + +\def\defmethparsebody #1#2#3#4 {\begingroup\inENV % +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} + +\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2##1 ##2 {\def#4{##1}% +\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup\obeylines\activeparens\spacesplit{#3{#5}}} + +% These parsing functions are similar to the preceding ones +% except that they do not make parens into active characters. +% These are used for "variables" since they have no arguments. + +\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2{\begingroup\obeylines\spacesplit#3}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup % +\catcode 61=\active % +\obeylines\spacesplit#3} + +% This is used for \def{tp,vr}parsebody. It could probably be used for +% some of the others, too, with some judicious conditionals. +% +\def\parsebodycommon#1#2#3{% + \begingroup\inENV % + \medbreak % + % Define the end token that this defining construct specifies + % so that it will exit this group. + \def#1{\endgraf\endgroup\medbreak}% + \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% + \parindent=0in + \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent + \exdentamount=\defbodyindent + \begingroup\obeylines +} + +\def\defvrparsebody#1#2#3#4 {% + \parsebodycommon{#1}{#2}{#3}% + \spacesplit{#3{#4}}% +} + +% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the +% type is just `struct', because we lose the braces in `{struct +% termios}' when \spacesplit reads its undelimited argument. Sigh. +% \let\deftpparsebody=\defvrparsebody +% +% So, to get around this, we put \empty in with the type name. That +% way, TeX won't find exactly `{...}' as an undelimited argument, and +% won't strip off the braces. +% +\def\deftpparsebody #1#2#3#4 {% + \parsebodycommon{#1}{#2}{#3}% + \spacesplit{\parsetpheaderline{#3{#4}}}\empty +} + +% Fine, but then we have to eventually remove the \empty *and* the +% braces (if any). That's what this does. +% +\def\removeemptybraces\empty#1\relax{#1} + +% After \spacesplit has done its work, this is called -- #1 is the final +% thing to call, #2 the type name (which starts with \empty), and #3 +% (which might be empty) the arguments. +% +\def\parsetpheaderline#1#2#3{% + #1{\removeemptybraces#2\relax}{#3}% +}% + +\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2##1 ##2 {\def#4{##1}% +\begingroup\obeylines\spacesplit{#3{##2}}}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup\obeylines\spacesplit{#3{#5}}} + +% Split up #2 at the first space token. +% call #1 with two arguments: +% the first is all of #2 before the space token, +% the second is all of #2 after that space token. +% If #2 contains no space token, all of it is passed as the first arg +% and the second is passed as empty. + +{\obeylines +\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% +\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% +\ifx\relax #3% +#1{#2}{}\else #1{#2}{#3#4}\fi}} + +% So much for the things common to all kinds of definitions. + +% Define @defun. + +% First, define the processing that is wanted for arguments of \defun +% Use this to expand the args and terminate the paragraph they make up + +\def\defunargs #1{\functionparens \sl +% Expand, preventing hyphenation at `-' chars. +% Note that groups don't affect changes in \hyphenchar. +\hyphenchar\tensl=0 +#1% +\hyphenchar\tensl=45 +\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% +\interlinepenalty=10000 +\advance\rightskip by 0pt plus 1fil +\endgraf\penalty 10000\vskip -\parskip\penalty 10000% +} + +\def\deftypefunargs #1{% +% Expand, preventing hyphenation at `-' chars. +% Note that groups don't affect changes in \hyphenchar. +% Use \boldbraxnoamp, not \functionparens, so that & is not special. +\boldbraxnoamp +\tclose{#1}% avoid \code because of side effects on active chars +\interlinepenalty=10000 +\advance\rightskip by 0pt plus 1fil +\endgraf\penalty 10000\vskip -\parskip\penalty 10000% +} + +% Do complete processing of one @defun or @defunx line already parsed. + +% @deffn Command forward-char nchars + +\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} + +\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% +\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @defun == @deffn Function + +\def\defun{\defparsebody\Edefun\defunx\defunheader} + +\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index +\begingroup\defname {#1}{Function}% +\defunargs {#2}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @deftypefun int foobar (int @var{foo}, float @var{bar}) + +\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} + +% #1 is the data type. #2 is the name and args. +\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} +% #1 is the data type, #2 the name, #3 the args. +\def\deftypefunheaderx #1#2 #3\relax{% +\doind {fn}{\code{#2}}% Make entry in function index +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% +\deftypefunargs {#3}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) + +\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} + +% \defheaderxcond#1\relax$$$ +% puts #1 in @code, followed by a space, but does nothing if #1 is null. +\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} + +% #1 is the classification. #2 is the data type. #3 is the name and args. +\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} +% #1 is the classification, #2 the data type, #3 the name, #4 the args. +\def\deftypefnheaderx #1#2#3 #4\relax{% +\doind {fn}{\code{#3}}% Make entry in function index +\begingroup +\normalparens % notably, turn off `&' magic, which prevents +% at least some C++ text from working +\defname {\defheaderxcond#2\relax$$$#3}{#1}% +\deftypefunargs {#4}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @defmac == @deffn Macro + +\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} + +\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index +\begingroup\defname {#1}{Macro}% +\defunargs {#2}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @defspec == @deffn Special Form + +\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} + +\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index +\begingroup\defname {#1}{Special Form}% +\defunargs {#2}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% This definition is run if you use @defunx +% anywhere other than immediately after a @defun or @defunx. + +\def\deffnx #1 {\errmessage{@deffnx in invalid context}} +\def\defunx #1 {\errmessage{@defunx in invalid context}} +\def\defmacx #1 {\errmessage{@defmacx in invalid context}} +\def\defspecx #1 {\errmessage{@defspecx in invalid context}} +\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} +\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}} +\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} + +% @defmethod, and so on + +% @defop {Funny Method} foo-class frobnicate argument + +\def\defop #1 {\def\defoptype{#1}% +\defopparsebody\Edefop\defopx\defopheader\defoptype} + +\def\defopheader #1#2#3{% +\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index +\begingroup\defname {#2}{\defoptype{} on #1}% +\defunargs {#3}\endgroup % +} + +% @deftypemethod foo-class return-type foo-method args +% +\def\deftypemethod{% + \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} +% +% #1 is the class name, #2 the data type, #3 the method name, #4 the args. +\def\deftypemethodheader#1#2#3#4{% + \deftypefnheaderx{Method on #1}{#2}#3 #4\relax +} + +% @defmethod == @defop Method + +\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} + +\def\defmethodheader #1#2#3{% +\dosubind {fn}{\code{#2}}{on #1}% entry in function index +\begingroup\defname {#2}{Method on #1}% +\defunargs {#3}\endgroup % +} + +% @defcv {Class Option} foo-class foo-flag + +\def\defcv #1 {\def\defcvtype{#1}% +\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} + +\def\defcvarheader #1#2#3{% +\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index +\begingroup\defname {#2}{\defcvtype{} of #1}% +\defvarargs {#3}\endgroup % +} + +% @defivar == @defcv {Instance Variable} + +\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} + +\def\defivarheader #1#2#3{% +\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index +\begingroup\defname {#2}{Instance Variable of #1}% +\defvarargs {#3}\endgroup % +} + +% These definitions are run if you use @defmethodx, etc., +% anywhere other than immediately after a @defmethod, etc. + +\def\defopx #1 {\errmessage{@defopx in invalid context}} +\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} +\def\defcvx #1 {\errmessage{@defcvx in invalid context}} +\def\defivarx #1 {\errmessage{@defivarx in invalid context}} + +% Now @defvar + +% First, define the processing that is wanted for arguments of @defvar. +% This is actually simple: just print them in roman. +% This must expand the args and terminate the paragraph they make up +\def\defvarargs #1{\normalparens #1% +\interlinepenalty=10000 +\endgraf\penalty 10000\vskip -\parskip\penalty 10000} + +% @defvr Counter foo-count + +\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} + +\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% +\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} + +% @defvar == @defvr Variable + +\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} + +\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index +\begingroup\defname {#1}{Variable}% +\defvarargs {#2}\endgroup % +} + +% @defopt == @defvr {User Option} + +\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} + +\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index +\begingroup\defname {#1}{User Option}% +\defvarargs {#2}\endgroup % +} + +% @deftypevar int foobar + +\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} + +% #1 is the data type. #2 is the name, perhaps followed by text that +% is actually part of the data type, which should not be put into the index. +\def\deftypevarheader #1#2{% +\dovarind#2 \relax% Make entry in variables index +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% +\interlinepenalty=10000 +\endgraf\penalty 10000\vskip -\parskip\penalty 10000 +\endgroup} +\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} + +% @deftypevr {Global Flag} int enable + +\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} + +\def\deftypevrheader #1#2#3{\dovarind#3 \relax% +\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} +\interlinepenalty=10000 +\endgraf\penalty 10000\vskip -\parskip\penalty 10000 +\endgroup} + +% This definition is run if you use @defvarx +% anywhere other than immediately after a @defvar or @defvarx. + +\def\defvrx #1 {\errmessage{@defvrx in invalid context}} +\def\defvarx #1 {\errmessage{@defvarx in invalid context}} +\def\defoptx #1 {\errmessage{@defoptx in invalid context}} +\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} +\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} + +% Now define @deftp +% Args are printed in bold, a slight difference from @defvar. + +\def\deftpargs #1{\bf \defvarargs{#1}} + +% @deftp Class window height width ... + +\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} + +\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% +\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} + +% This definition is run if you use @deftpx, etc +% anywhere other than immediately after a @deftp, etc. + +\def\deftpx #1 {\errmessage{@deftpx in invalid context}} + + +\message{cross reference,} +% Define cross-reference macros +\newwrite \auxfile + +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% \setref{foo} defines a cross-reference point named foo. + +\def\setref#1{% +\dosetq{#1-title}{Ytitle}% +\dosetq{#1-pg}{Ypagenumber}% +\dosetq{#1-snt}{Ysectionnumberandtype}} + +\def\unnumbsetref#1{% +\dosetq{#1-title}{Ytitle}% +\dosetq{#1-pg}{Ypagenumber}% +\dosetq{#1-snt}{Ynothing}} + +\def\appendixsetref#1{% +\dosetq{#1-title}{Ytitle}% +\dosetq{#1-pg}{Ypagenumber}% +\dosetq{#1-snt}{Yappendixletterandtype}} + +% \xref, \pxref, and \ref generate cross-references to specified points. +% For \xrefX, #1 is the node name, #2 the name of the Info +% cross-reference, #3 the printed node name, #4 the name of the Info +% file, #5 the name of the printed manual. All but the node name can be +% omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \def\printedmanual{\ignorespaces #5}% + \def\printednodename{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual}% + \setbox0=\hbox{\printednodename}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printednodename{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1>0pt% + % It is in another manual, so we don't have it. + \def\printednodename{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printednodename{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printednodename{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive \refx{#1-snt}{}}% + \space [\printednodename],\space + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi +\endgroup} + +% \dosetq is the interface for calls from other macros + +% Use \turnoffactive so that punctuation chars such as underscore +% work in node names. +\def\dosetq #1#2{{\let\folio=0 \turnoffactive +\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% +\next}} + +% \internalsetq {foo}{page} expands into +% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} +% When the aux file is read, ' is the escape character + +\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} + +% Things to be expanded by \internalsetq + +\def\Ypagenumber{\folio} + +\def\Ytitle{\thissection} + +\def\Ynothing{} + +\def\Ysectionnumberandtype{% +\ifnum\secno=0 \putwordChapter\xreftie\the\chapno % +\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno % +\else \ifnum \subsubsecno=0 % +\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno % +\else % +\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % +\fi \fi \fi } + +\def\Yappendixletterandtype{% +\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}% +\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno % +\else \ifnum \subsubsecno=0 % +\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno % +\else % +\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % +\fi \fi \fi } + +\gdef\xreftie{'tie} + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Non-3.0. +\else + \def\linenumber{\the\inputlineno:\space} +\fi + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. + +\def\refx#1#2{% + \expandafter\ifx\csname X#1\endcsname\relax + % If not defined, say something at least. + $\langle$un\-de\-fined$\rangle$% + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \else + % It's defined, so just use it. + \csname X#1\endcsname + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. +\def\xrdef #1#2{{% + \catcode`\'=\other + \expandafter\gdef\csname X#1\endcsname{#2}% +}} + +% Read the last existing aux file, if any. No error if none exists. +\def\readauxfile{\begingroup + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + \catcode`\@=\other + \catcode`\^=\other + % It was suggested to define this as 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + % `\+ does not work, so use 43. + \catcode43=\other + % Make the characters 128-255 be printing characters + {% + \count 1=128 + \def\loop{% + \catcode\count 1=\other + \advance\count 1 by 1 + \ifnum \count 1<256 \loop \fi + }% + }% + % The aux file uses ' as the escape (for now). + % Turn off \ as an escape so we do not lose on + % entries which were dumped with control sequences in their names. + % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ + % Reference to such entries still does not work the way one would wish, + % but at least they do not bomb out when the aux file is read in. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\%=\other + \catcode`\'=0 + \catcode`\\=\other + % + \openin 1 \jobname.aux + \ifeof 1 \else + \closein 1 + \input \jobname.aux + \global\havexrefstrue + \global\warnedobstrue + \fi + % Open the new aux file. TeX will close it automatically at exit. + \openout\auxfile=\jobname.aux +\endgroup} + + +% Footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +\let\ptexfootnote=\footnote + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \footnotezzz +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset and anything else that uses +% \parseargline fail inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\long\gdef\footnotezzz{\insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + % Hang the footnote text off the number. + \hang + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t + \else\let\next\f@t\fi \next} +\def\f@@t{\bgroup\aftergroup\@foot\let\next} +\def\f@t#1{#1\@foot} +\def\@foot{\strut\egroup} + +}%end \catcode `\@=11 + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +\def\setleading#1{% + \normalbaselineskip = #1\relax + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = xepsf.tex +\ifeof 1 \else + \closein 1 + \def\epsfannounce{\toks0 = }% do not bother showing banner + \input epsf.tex +\fi +% +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://ftp.tug.org/tex/epsf.tex.} +% +% Only complain once about lack of epsf.tex. +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is just the usual extra ignored arg for parsing this stuff. +\def\imagexxx#1,#2,#3,#4\finish{% + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% +} + +% End of control word definitions. + + +\message{and turning on texinfo input format.} + +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% Set some numeric style parameters, for 8.5 x 11 format. + +\hsize = 6in +\hoffset = .25in +\newdimen\defaultparindent \defaultparindent = 15pt +\parindent = \defaultparindent +\parskip 3pt plus 2pt minus 1pt +\setleading{13.2pt} +\advance\topskip by 1.2cm + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness=10000 + +% Following George Bush, just get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. This makes it come to about 9pt for the 8.5x11 format. +% +\ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% +\else + \emergencystretch = \hsize + \divide\emergencystretch by 45 +\fi + +% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) +\def\smallbook{ + \global\chapheadingskip = 15pt plus 4pt minus 2pt + \global\secheadingskip = 12pt plus 3pt minus 2pt + \global\subsecheadingskip = 9pt plus 2pt minus 2pt + % + \global\lispnarrowing = 0.3in + \setleading{12pt} + \advance\topskip by -1cm + \global\parskip 2pt plus 1pt + \global\hsize = 5in + \global\vsize=7.5in + \global\tolerance=700 + \global\hfuzz=1pt + \global\contentsrightmargin=0pt + \global\deftypemargin=0pt + \global\defbodyindent=.5cm + % + \global\pagewidth=\hsize + \global\pageheight=\vsize + % + \global\let\smalllisp=\smalllispx + \global\let\smallexample=\smalllispx + \global\def\Esmallexample{\Esmalllisp} +} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{ +\global\tolerance=700 +\global\hfuzz=1pt +\setleading{12pt} +\global\parskip 15pt plus 1pt + +\global\vsize= 53\baselineskip +\advance\vsize by \topskip +%\global\hsize= 5.85in % A4 wide 10pt +\global\hsize= 6.5in +\global\outerhsize=\hsize +\global\advance\outerhsize by 0.5in +\global\outervsize=\vsize +\global\advance\outervsize by 0.6in + +\global\pagewidth=\hsize +\global\pageheight=\vsize +} + +\bindingoffset=0pt +\normaloffset=\hoffset +\pagewidth=\hsize +\pageheight=\vsize + +% Allow control of the text dimensions. Parameters in order: textheight; +% textwidth; voffset; hoffset; binding offset; topskip. +% All require a dimension; +% header is additional; added length extends the bottom of the page. + +\def\changepagesizes#1#2#3#4#5#6{ + \global\vsize= #1 + \global\topskip= #6 + \advance\vsize by \topskip + \global\voffset= #3 + \global\hsize= #2 + \global\outerhsize=\hsize + \global\advance\outerhsize by 0.5in + \global\outervsize=\vsize + \global\advance\outervsize by 0.6in + \global\pagewidth=\hsize + \global\pageheight=\vsize + \global\normaloffset= #4 + \global\bindingoffset= #5} + +% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin +% 29mm, hence bottom margin 28mm, nominal side margin 3cm. +\def\afourlatex + {\global\tolerance=700 + \global\hfuzz=1pt + \setleading{12pt} + \global\parskip 15pt plus 1pt + \advance\baselineskip by 1.6pt + \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm} + } + +% Use @afourwide to print on European A4 paper in wide format. +\def\afourwide{\afourpaper +\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} + +% This macro is used to make a character print one way in ttfont +% where it can probably just be output, and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt \char '042}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt \char '176}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} + +\catcode`\|=\active +\def|{{\tt \char '174}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +%\catcode 27=\active +%\def^^[{$\diamondsuit$} + +% Set up an active definition for =, but don't enable it most of the time. +{\catcode`\==\active +\global\def={{\tt \char 61}}} + +\catcode`+=\active +\catcode`\_=\active + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +\catcode`\@=0 + +% \rawbackslashxx output one backslash character in current font +\global\chardef\rawbackslashxx=`\\ +%{\catcode`\\=\other +%@gdef@rawbackslashxx{\}} + +% \rawbackslash redefines \ as input to do \rawbackslashxx. +{\catcode`\\=\active +@gdef@rawbackslash{@let\=@rawbackslashxx }} + +% \normalbackslash outputs one backslash in fixed width font. +\def\normalbackslash{{\tt\rawbackslashxx}} + +% Say @foo, not \foo, in error messages. +\escapechar=`\@ + +% \catcode 17=0 % Define control-q +\catcode`\\=\active + +% Used sometimes to turn off (effectively) the active characters +% even after parsing them. +@def@turnoffactive{@let"=@normaldoublequote +@let\=@realbackslash +@let~=@normaltilde +@let^=@normalcaret +@let_=@normalunderscore +@let|=@normalverticalbar +@let<=@normalless +@let>=@normalgreater +@let+=@normalplus} + +@def@normalturnoffactive{@let"=@normaldoublequote +@let\=@normalbackslash +@let~=@normaltilde +@let^=@normalcaret +@let_=@normalunderscore +@let|=@normalverticalbar +@let<=@normalless +@let>=@normalgreater +@let+=@normalplus} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\{ in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also back turn on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active @catcode`@_=@active} + +%% These look ok in all fonts, so just make them not special. The @rm below +%% makes sure that the current font starts out as the newly loaded cmr10 +@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other + +@textfonts +@rm + +@c Local variables: +@c page-delimiter: "^\\\\message" +@c End: diff --git a/doc/version.texi b/doc/version.texi new file mode 100644 index 0000000..ca62e30 --- /dev/null +++ b/doc/version.texi @@ -0,0 +1,3 @@ +@set UPDATED 19 October 1998 +@set EDITION 6.0b2s2 +@set VERSION 6.0b2s2 diff --git a/fixmount/Makefile.am b/fixmount/Makefile.am new file mode 100644 index 0000000..9a8f75e --- /dev/null +++ b/fixmount/Makefile.am @@ -0,0 +1,40 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for fixmount/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = fixmount + +# man pages +man_MANS = fixmount.8 + +# headers this depends on, not to be installed +#noinst_HEADERS = + +fixmount_SOURCES = fixmount.c +EXTRA_fixmount_OBJECTS = check_mount.o +LDADD = $(EXTRA_fixmount_OBJECTS) ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS) $(EXTRA_fixmount_OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) diff --git a/fixmount/Makefile.in b/fixmount/Makefile.in new file mode 100644 index 0000000..7bcb4c6 --- /dev/null +++ b/fixmount/Makefile.in @@ -0,0 +1,367 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for fixmount/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = fixmount + +# man pages +man_MANS = fixmount.8 + +# headers this depends on, not to be installed +#noinst_HEADERS = + +fixmount_SOURCES = fixmount.c +EXTRA_fixmount_OBJECTS = check_mount.o +LDADD = $(EXTRA_fixmount_OBJECTS) ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +fixmount_OBJECTS = fixmount.o +fixmount_LDADD = $(LDADD) +fixmount_DEPENDENCIES = check_mount.o ../libamu/libamu.la +fixmount_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(fixmount_SOURCES) +OBJECTS = $(fixmount_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps fixmount/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +fixmount: $(fixmount_OBJECTS) $(fixmount_DEPENDENCIES) + @rm -f fixmount + $(LINK) $(fixmount_LDFLAGS) $(fixmount_OBJECTS) $(fixmount_LDADD) $(LIBS) + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = fixmount + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(sbindir) $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man8 \ +uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS) $(EXTRA_fixmount_OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/fixmount/fixmount.8 b/fixmount/fixmount.8 new file mode 100644 index 0000000..6c47a45 --- /dev/null +++ b/fixmount/fixmount.8 @@ -0,0 +1,159 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1990 Jan-Simon Pendry +.\" Copyright (c) 1990 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1990 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" %W% (Berkeley) %G% +.\" +.\" $Id: fixmount.8,v 1.1 1998/11/05 02:04:53 ezk Exp $ +.\" +.TH FIXMOUNT 8L "26 Feb 1993" +.SH NAME +fixmount \- fix remote mount entries +.SH SYNOPSIS +.B fixmount +[ +.B \-adervq +] +[ +.B \-h +.I name +] +.I host +\&... +.SH DESCRIPTION +.IX "fixmount command" "" "\fLfixmount\fP \(em fix remote mount entries" +.LP +.B fixmount +is a variant of +.BR showmount (8) +that can delete bogus mount entries in remote +.BR mountd (8C) +daemons. +The actions specified by the options are performed for each +.I host +in turn. +.SH OPTIONS +.TP +.B \-a \-d \-e +These options work as in +.BR showmount (8) +except that only entries pertaining to the local host are printed. +.TP +.B \-r +Removes those remote mount entries on +.I host +that do not correspond to current mounts, i.e., which are left-over +from a crash or are the result of improper mount protocol. +The actuality of mounts is verified using the entries in +.BR /etc/mtab . +.TP +.B \-v +Verify remote mounts. Similar to +.B \-r +except that only a notification message is printed for each bogus entry +found. The remote mount table is not changed. +.TP +.B \-A +Issues a command to the remote mountd declaring that ALL of its filesystems +have been unmounted. This should be used with caution, as it removes all +remote mount entries pertaining to the local system, whether or not any +filesystems are still mounted locally. +.TP +.B \-q +Be quiet. +Suppresses error messages due to timeouts and "Program not registered", +i.e., due to remote hosts not supporting RPC or not running mountd. +.TP +.BI \-h \ name +Pretend the local hostname is +.IR name . +This is useful after the local hostname has been changed and rmtab entries +using the old name remain on a remote machine. +Unfortunately, most mountd's won't be able to successfully handle removal +of such entries, so this option is useful in combination with +.B \-v +only. +.br +This option also saves time as comparisons of remotely recorded and local +hostnames by address are avoided. +.SH FILES +.PD 0 +.TP 20 +.B /etc/mtab +List of current mounts. +.TP +.B /etc/rmtab +Backup file for remote mount entries on NFS server. +.PD +.SH "SEE ALSO" +.BR showmount (8), +.BR mtab (5), +.BR rmtab (5), +.BR mountd (8C). +.SH BUGS +No attempt is made to verify the information in +.B /etc/mtab +itself. +.PP +Since swap file mounts are not recorded in +.BR /etc/mtab , +a heuristic specific to SunOS is used to determine whether such a mount +is actual (replacing the string "swap" with "root" and verifying the resulting +path). +.PP +Symbolic links on the server will cause the path in the remote entry to differ +from the one in +.BR /etc/mtab . +To catch those cases, a filesystem is also deemed mounted if its +.I local +mount point is identical to the remote entry. +I.e., on a SunOS diskless client, +.B server:/export/share/sunos.4.1.1 +is actually +.BR /usr/share . +Since the local mount point is +.B /usr/share +as well this will be handled correctly. +.PP +There is no way to clear a stale entry in a remote mountd after the +local hostname (or whatever reverse name resolution returns for it) +has been changed. To take care of these cases, +the remote /etc/rmtab file has to be edited and mountd restarted. +.PP +The RPC timeouts for mountd calls can only be changed by recompiling. +The defaults are 2 seconds for client handle creation and 5 seconds for +RPC calls. diff --git a/fixmount/fixmount.c b/fixmount/fixmount.c new file mode 100644 index 0000000..a73dd10 --- /dev/null +++ b/fixmount/fixmount.c @@ -0,0 +1,613 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fixmount.c,v 1.1 1998/11/05 02:04:53 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +#define CREATE_TIMEOUT 2 /* seconds */ +#define CALL_TIMEOUT 5 /* seconds */ + +#ifndef INADDR_NONE +# define INADDR_NONE 0xffffffff +#endif /* not INADDR_NONE */ + +/* Constant defs */ +#define ALL 1 +#define DIRS 2 + +#define DODUMP 0x1 +#define DOEXPORTS 0x2 +#define DOREMOVE 0x4 +#define DOVERIFY 0x8 +#define DOREMALL 0x10 + +extern int fixmount_check_mount(char *host, struct in_addr hostaddr, char *path); + +static char dir_path[NFS_MAXPATHLEN]; +static char localhost[] = "localhost"; +static char thishost[MAXHOSTNAMELEN + 1] = ""; +static exports mntexports; +static int quiet = 0; +static int type = 0; +static jmp_buf before_rpc; +static mountlist mntdump; +static struct in_addr thisaddr; +static CLIENT *clnt_create_timeout(char *, struct timeval *); + +RETSIGTYPE create_timeout(int); +int is_same_host(char *, char *, struct in_addr); +int main(int, char *[]); +int remove_all(CLIENT *, char *); +int remove_mount(CLIENT *, char *, mountlist, int); +void fix_rmtab(CLIENT *, char *, mountlist, int, int); +void print_dump(mountlist); +void usage(void); + +/* dummy variables */ +char *progname; +char hostname[MAXHOSTNAMELEN]; +int orig_umask, foreground, debug_flags; +pid_t mypid; +serv_state amd_state; + +void +usage(void) +{ + fprintf(stderr, "usage: fixmount [-adervAqf] [-h hostname] host ...\n"); + exit(1); +} + + +/* + * Check hostname against other name and its IP address + */ +int +is_same_host(char *name1, char *name2, struct in_addr addr2) +{ + if (strcasecmp(name1, name2) == 0) { + return 1; + } else if (addr2.s_addr == INADDR_NONE) { + return 0; + } else { + static char lasthost[MAXHOSTNAMELEN] = ""; + static struct in_addr addr1; + struct hostent *he; + + /* + * To save nameserver lookups, and because this function + * is typically called repeatedly on the same names, + * cache the last lookup result and reuse it if possible. + */ + if (strcasecmp(name1, lasthost) == 0) { + return (addr1.s_addr == addr2.s_addr); + } else if (!(he = gethostbyname(name1))) { + return 0; + } else { + strncpy(lasthost, name1, sizeof(lasthost) - 1); + memcpy(&addr1, he->h_addr, sizeof(addr1)); + return (addr1.s_addr == addr2.s_addr); + } + } +} + + +/* + * Print the binary tree in inorder so that output is sorted. + */ +void +print_dump(mountlist mp) +{ + if (mp == NULL) + return; + if (is_same_host(mp->ml_hostname, thishost, thisaddr)) { + switch (type) { + case ALL: + printf("%s:%s\n", mp->ml_hostname, mp->ml_directory); + break; + case DIRS: + printf("%s\n", mp->ml_directory); + break; + default: + printf("%s\n", mp->ml_hostname); + break; + }; + } + if (mp->ml_next) + print_dump(mp->ml_next); +} + + +/* + * remove entry from remote rmtab + */ +int +remove_mount(CLIENT *client, char *host, mountlist ml, int fixit) +{ + enum clnt_stat estat; + struct timeval tv; + char *pathp = dir_path; + + strncpy(dir_path, ml->ml_directory, sizeof(dir_path)); + + if (!fixit) { + printf("%s: bogus mount %s:%s\n", host, ml->ml_hostname, ml->ml_directory); + fflush(stdout); + } else { + printf("%s: removing %s:%s\n", host, ml->ml_hostname, ml->ml_directory); + fflush(stdout); + + tv.tv_sec = CALL_TIMEOUT; + tv.tv_usec = 0; + + if ((estat = clnt_call(client, + MOUNTPROC_UMNT, + (XDRPROC_T_TYPE) xdr_dirpath, + (char *) &pathp, + (XDRPROC_T_TYPE) xdr_void, + (char *) 0, + tv)) != RPC_SUCCESS) { + fprintf(stderr, "%s:%s MOUNTPROC_UMNT: ", + host, ml->ml_directory); + clnt_perrno(estat); + fflush(stderr); + return -1; + } + } + return 0; +} + + +/* + * fix mount list on remote host + */ +void +fix_rmtab(CLIENT *client, char *host, mountlist mp, int fixit, int force) +{ + mountlist p; + struct hostent *he; + struct in_addr hostaddr; + + /* + * Obtain remote address for comparisons + */ + if ((he = gethostbyname(host))) { + memcpy(&hostaddr, he->h_addr, sizeof(hostaddr)); + } else { + hostaddr.s_addr = INADDR_NONE; + } + + for (p = mp; p; p = p->ml_next) { + if (is_same_host(p->ml_hostname, thishost, thisaddr)) { + if (force || !fixmount_check_mount(host, hostaddr, p->ml_directory)) + remove_mount(client, host, p, fixit); + } + } +} + + +/* + * remove all entries from remote rmtab + */ +int +remove_all(CLIENT *client, char *host) +{ + enum clnt_stat estat; + struct timeval tv; + + printf("%s: removing ALL\n", host); + fflush(stdout); + + tv.tv_sec = CALL_TIMEOUT; + tv.tv_usec = 0; + + if ((estat = clnt_call(client, + MOUNTPROC_UMNTALL, + (XDRPROC_T_TYPE) xdr_void, + (char *) 0, + (XDRPROC_T_TYPE) xdr_void, + (char *) 0, + tv)) != RPC_SUCCESS) { + /* + * RPC_SYSTEMERROR is returned even if all went well + */ + if (estat != RPC_SYSTEMERROR) { + fprintf(stderr, "%s MOUNTPROC_UMNTALL: ", host); + clnt_perrno(estat); + fflush(stderr); + return -1; + } + } + + return 0; +} + + +/* + * This command queries the NFS mount daemon for it's mount list and/or + * it's exports list and prints them out. + * See "NFS: Network File System Protocol Specification, RFC1094, Appendix A" + * for detailed information on the protocol. + */ +int +main(int argc, char *argv[]) +{ + AUTH *auth; + CLIENT *client; + char *host; + enum clnt_stat estat; + exports exp; + extern char *optarg; + extern int optind; + groups grp; + int ch; + int force = 0; + int morethanone; + register int rpcs = 0; + struct timeval tv; + + while ((ch = getopt(argc, argv, "adervAqfh:")) != EOF) + switch ((char) ch) { + + case 'a': + if (type == 0) { + type = ALL; + rpcs |= DODUMP; + } else + usage(); + break; + + case 'd': + if (type == 0) { + type = DIRS; + rpcs |= DODUMP; + } else + usage(); + break; + + case 'e': + rpcs |= DOEXPORTS; + break; + + case 'r': + rpcs |= DOREMOVE; + break; + + case 'A': + rpcs |= DOREMALL; + break; + + case 'v': + rpcs |= DOVERIFY; + break; + + case 'q': + quiet = 1; + break; + + case 'f': + force = 1; + break; + + case 'h': + strncpy(thishost, optarg, sizeof(thishost)); + thishost[sizeof(thishost) - 1] = '\0'; + break; + + case '?': + default: + usage(); + } + + if (optind == argc) + usage(); + + if (rpcs == 0) + rpcs = DODUMP; + + if (!*thishost) { + struct hostent *he; + + if (gethostname(thishost, sizeof(thishost)) < 0) { + perror("gethostname"); + exit(1); + } + thishost[sizeof(thishost) - 1] = '\0'; + + /* + * We need the hostname as it appears to the other side's + * mountd, so get our own hostname by reverse address + * resolution. + */ + if (!(he = gethostbyname(thishost))) { + fprintf(stderr, "gethostbyname failed on %s\n", + thishost); + exit(1); + } + memcpy(&thisaddr, he->h_addr, sizeof(thisaddr)); + if (!(he = gethostbyaddr((char *) &thisaddr, sizeof(thisaddr), + he->h_addrtype))) { + fprintf(stderr, "gethostbyaddr failed on %s\n", + inet_ntoa(thisaddr)); + exit(1); + } + strncpy(thishost, he->h_name, sizeof(thishost)); + thishost[sizeof(thishost) - 1] = '\0'; + } else { + thisaddr.s_addr = INADDR_NONE; + } + + if (!(auth = authunix_create_default())) { + fprintf(stderr, "couldn't create authentication handle\n"); + exit(1); + } + morethanone = (optind + 1 < argc); + + for (; optind < argc; optind++) { + + host = argv[optind]; + tv.tv_sec = CREATE_TIMEOUT; + tv.tv_usec = 0; + + if (!(client = clnt_create_timeout(host, &tv))) + continue; + + client->cl_auth = auth; + tv.tv_sec = CALL_TIMEOUT; + tv.tv_usec = 0; + + if (rpcs & (DODUMP | DOREMOVE | DOVERIFY)) + if ((estat = clnt_call(client, + MOUNTPROC_DUMP, + (XDRPROC_T_TYPE) xdr_void, + (char *) 0, + (XDRPROC_T_TYPE) xdr_mountlist, + (char *) &mntdump, + tv)) != RPC_SUCCESS) { + fprintf(stderr, "%s: MOUNTPROC_DUMP: ", host); + clnt_perrno(estat); + fflush(stderr); + mntdump = NULL; + goto next; + } + if (rpcs & DOEXPORTS) + if ((estat = clnt_call(client, + MOUNTPROC_EXPORT, + (XDRPROC_T_TYPE) xdr_void, + (char *) 0, + (XDRPROC_T_TYPE) xdr_exports, + (char *) &mntexports, + tv)) != RPC_SUCCESS) { + fprintf(stderr, "%s: MOUNTPROC_EXPORT: ", host); + clnt_perrno(estat); + fflush(stderr); + mntexports = NULL; + goto next; + } + + /* Now just print out the results */ + if ((rpcs & (DODUMP | DOEXPORTS)) && + morethanone) { + printf(">>> %s <<<\n", host); + fflush(stdout); + } + + if (rpcs & DODUMP) { + print_dump(mntdump); + } + + if (rpcs & DOEXPORTS) { + exp = mntexports; + while (exp) { + printf("%-35s", exp->ex_dir); + grp = exp->ex_groups; + if (grp == NULL) { + printf("Everyone\n"); + } else { + while (grp) { + printf("%s ", grp->gr_name); + grp = grp->gr_next; + } + printf("\n"); + } + exp = exp->ex_next; + } + } + + if (rpcs & DOVERIFY) + fix_rmtab(client, host, mntdump, 0, force); + + if (rpcs & DOREMOVE) + fix_rmtab(client, host, mntdump, 1, force); + + if (rpcs & DOREMALL) + remove_all(client, host); + + next: + if (mntdump) + (void) clnt_freeres(client, + (XDRPROC_T_TYPE) xdr_mountlist, + (char *) &mntdump); + if (mntexports) + (void) clnt_freeres(client, + (XDRPROC_T_TYPE) xdr_exports, + (char *) &mntexports); + + clnt_destroy(client); + } + exit(0); + return 0; /* should never reach here */ +} + + +RETSIGTYPE +create_timeout(int sig) +{ + signal(SIGALRM, SIG_DFL); + longjmp(before_rpc, 1); +} + + +#ifndef HAVE_TRANSPORT_TYPE_TLI +/* + * inetresport creates a datagram socket and attempts to bind it to a + * secure port. + * returns: The bound socket, or -1 to indicate an error. + */ +static int +inetresport(int ty) +{ + int alport; + struct sockaddr_in addr; + int fd; + + /* Use internet address family */ + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + if ((fd = socket(AF_INET, ty, 0)) < 0) + return -1; + + for (alport = IPPORT_RESERVED - 1; alport > IPPORT_RESERVED / 2 + 1; alport--) { + addr.sin_port = htons((u_short) alport); + if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) >= 0) + return fd; + if (errno != EADDRINUSE) { + close(fd); + return -1; + } + } + close(fd); + errno = EAGAIN; + return -1; +} + + +/* + * Privsock() calls inetresport() to attempt to bind a socket to a secure + * port. If inetresport() fails, privsock returns a magic socket number which + * indicates to RPC that it should make its own socket. + * returns: A privileged socket # or RPC_ANYSOCK. + */ +static int +privsock(int ty) +{ + int sock = inetresport(ty); + + if (sock < 0) { + errno = 0; + /* Couldn't get a secure port, let RPC make an insecure one */ + sock = RPC_ANYSOCK; + } + return sock; +} +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + +static CLIENT * +clnt_create_timeout(char *host, struct timeval *tvp) +{ + CLIENT *clnt; + struct sockaddr_in host_addr; + struct hostent *hp; +#ifndef HAVE_TRANSPORT_TYPE_TLI + int s; +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + if (setjmp(before_rpc)) { + if (!quiet) { + fprintf(stderr, "%s: ", host); + clnt_perrno(RPC_TIMEDOUT); + fprintf(stderr, "\n"); + fflush(stderr); + } + return NULL; + } + signal(SIGALRM, create_timeout); + ualarm(tvp->tv_sec * 1000000 + tvp->tv_usec, 0); + + /* + * Get address of host + */ + if ((hp = gethostbyname(host)) == 0 && !STREQ(host, localhost)) { + fprintf(stderr, "can't get address of %s\n", host); + return NULL; + } + memset(&host_addr, 0, sizeof host_addr); + host_addr.sin_family = AF_INET; + if (hp) { + memmove((voidp) &host_addr.sin_addr, (voidp) hp->h_addr, + sizeof(host_addr.sin_addr)); + } else { + /* fake "localhost" */ + host_addr.sin_addr.s_addr = htonl(0x7f000001); + } + +#ifdef HAVE_TRANSPORT_TYPE_TLI + /* try TCP first (in case return data is large), then UDP */ + clnt = clnt_create(host, MOUNTPROG, MOUNTVERS, "tcp"); + if (!clnt) + clnt = clnt_create(host, MOUNTPROG, MOUNTVERS, "udp"); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + s = RPC_ANYSOCK; + clnt = clnttcp_create(&host_addr, MOUNTPROG, MOUNTVERS, &s, 0, 0); + if (!clnt) { + /* XXX: do we need to close(s) ? */ + s = privsock(SOCK_DGRAM); + clnt = clntudp_create(&host_addr, MOUNTPROG, MOUNTVERS, *tvp, &s); + } +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + if (!clnt) { + ualarm(0, 0); + if (!quiet) { + clnt_pcreateerror(host); + fflush(stderr); + } + return NULL; + } + + ualarm(0, 0); + return clnt; +} diff --git a/fsinfo/Makefile.am b/fsinfo/Makefile.am new file mode 100644 index 0000000..e45d646 --- /dev/null +++ b/fsinfo/Makefile.am @@ -0,0 +1,84 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for fsinfo/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = fsinfo + +# man pages +man_MANS = fsinfo.8 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + fsi_data.h \ + fsinfo.h + +# *.y must be listed before *.l, because of a bug in automake-1.2 +# which will not generate the .h needs for the lex file from the yacc file. +# I took out the conf .y/.l files b/c of bad interaction between bsd44 make +# and automake-1.2 rules. +fsinfo_SOURCES = \ + fsi_analyze.c \ + fsi_dict.c \ + fsi_util.c \ + fsinfo.c \ + wr_atab.c \ + wr_bparam.c \ + wr_dumpset.c \ + wr_exportfs.c \ + wr_fstab.c + +# Cannot specify fsi_gram.y and fsi_lex.l in automake 1.0 because the +# generated .c files get added to DIST_FILES, instead of the yacc/lex +# sources. So I'm manually adding the .o files from them to the list +# of objects, and telling automake to add the yacc/lex sources to the +# distribution list. +# And automake 1.2 has a different problem (interaction with bsd44 make). +EXTRA_fsinfo_OBJECTS = fsi_gram.o fsi_lex.o +EXTRA_DIST = \ + fsi_gram.y \ + fsi_lex.l \ + $(man_MANS) + +# these files get automatically generated by yacc/lex +CLEANFILES = fsi_gram.c fsi_gram.h fsi_lex.c + +LDADD = $(EXTRA_fsinfo_OBJECTS) ../libamu/libamu.la +# must manually add f/lex library to LIBS, and not to LDADD. +LIBS = @LIBS@ @LEXLIB@ + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) +YACC = @YACC@ +YFLAGS = -d + +# dependencies +$(PROGRAMS): $(LDADD) +fsinfo.o: fsi_gram.h +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Must use my rules, b/c ones supplied by automake-1.2 don't work +# with bsd44 make (they have built-in rules to build yacc/lex files). +# Code generated by yacc/lex: +fsi_lex.c: fsi_lex.l + $(LEX) $? + mv lex.yy.c fsi_lex.c + +fsi_gram.c fsi_gram.h: fsi_gram.y + @echo Expect two shift/reduce errors... + $(YACC) -d $? + mv y.tab.c fsi_gram.c + mv y.tab.h fsi_gram.h diff --git a/fsinfo/Makefile.in b/fsinfo/Makefile.in new file mode 100644 index 0000000..d9c6834 --- /dev/null +++ b/fsinfo/Makefile.in @@ -0,0 +1,413 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for fsinfo/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = fsinfo + +# man pages +man_MANS = fsinfo.8 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + fsi_data.h \ + fsinfo.h + +# *.y must be listed before *.l, because of a bug in automake-1.2 +# which will not generate the .h needs for the lex file from the yacc file. +# I took out the conf .y/.l files b/c of bad interaction between bsd44 make +# and automake-1.2 rules. +fsinfo_SOURCES = \ + fsi_analyze.c \ + fsi_dict.c \ + fsi_util.c \ + fsinfo.c \ + wr_atab.c \ + wr_bparam.c \ + wr_dumpset.c \ + wr_exportfs.c \ + wr_fstab.c + +# Cannot specify fsi_gram.y and fsi_lex.l in automake 1.0 because the +# generated .c files get added to DIST_FILES, instead of the yacc/lex +# sources. So I'm manually adding the .o files from them to the list +# of objects, and telling automake to add the yacc/lex sources to the +# distribution list. +# And automake 1.2 has a different problem (interaction with bsd44 make). +EXTRA_fsinfo_OBJECTS = fsi_gram.o fsi_lex.o +EXTRA_DIST = \ + fsi_gram.y \ + fsi_lex.l \ + $(man_MANS) + +# these files get automatically generated by yacc/lex +CLEANFILES = fsi_gram.c fsi_gram.h fsi_lex.c + +LDADD = $(EXTRA_fsinfo_OBJECTS) ../libamu/libamu.la +# must manually add f/lex library to LIBS, and not to LDADD. +LIBS = @LIBS@ @LEXLIB@ + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) +YACC = @YACC@ +YFLAGS = -d +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +fsinfo_OBJECTS = fsi_analyze.o fsi_dict.o fsi_util.o fsinfo.o wr_atab.o \ +wr_bparam.o wr_dumpset.o wr_exportfs.o wr_fstab.o +fsinfo_LDADD = $(LDADD) +fsinfo_DEPENDENCIES = fsi_gram.o fsi_lex.o ../libamu/libamu.la +fsinfo_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(fsinfo_SOURCES) +OBJECTS = $(fsinfo_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps fsinfo/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +fsinfo: $(fsinfo_OBJECTS) $(fsinfo_DEPENDENCIES) + @rm -f fsinfo + $(LINK) $(fsinfo_LDFLAGS) $(fsinfo_OBJECTS) $(fsinfo_LDADD) $(LIBS) + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = fsinfo + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(sbindir) $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man8 \ +uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +fsinfo.o: fsi_gram.h +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Must use my rules, b/c ones supplied by automake-1.2 don't work +# with bsd44 make (they have built-in rules to build yacc/lex files). +# Code generated by yacc/lex: +fsi_lex.c: fsi_lex.l + $(LEX) $? + mv lex.yy.c fsi_lex.c + +fsi_gram.c fsi_gram.h: fsi_gram.y + @echo Expect two shift/reduce errors... + $(YACC) -d $? + mv y.tab.c fsi_gram.c + mv y.tab.h fsi_gram.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/fsinfo/fsi_analyze.c b/fsinfo/fsi_analyze.c new file mode 100644 index 0000000..586b5be --- /dev/null +++ b/fsinfo/fsi_analyze.c @@ -0,0 +1,670 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsi_analyze.c,v 1.1 1998/11/05 02:04:53 ezk Exp $ + * + */ + +/* + * Analyze filesystem declarations + * + * Note: most of this is magic! + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + +char *disk_fs_strings[] = +{ + "fstype", "opts", "dumpset", "passno", "freq", "mount", "log", 0, +}; + +char *mount_strings[] = +{ + "volname", "exportfs", 0, +}; + +char *fsmount_strings[] = +{ + "as", "volname", "fstype", "opts", "from", 0, +}; + +char *host_strings[] = +{ + "host", "netif", "config", "arch", "cluster", "os", 0, +}; + +char *ether_if_strings[] = +{ + "inaddr", "netmask", "hwaddr", 0, +}; + + +/* + * Strip off the trailing part of a domain + * to produce a short-form domain relative + * to the local host domain. + * Note that this has no effect if the domain + * names do not have the same number of + * components. If that restriction proves + * to be a problem then the loop needs recoding + * to skip from right to left and do partial + * matches along the way -- ie more expensive. + */ +void +domain_strip(char *otherdom, char *localdom) +{ + char *p1, *p2; + + if ((p1 = strchr(otherdom, '.')) && + (p2 = strchr(localdom, '.')) && + STREQ(p1 + 1, p2 + 1)) + *p1 = '\0'; +} + + +/* + * Take a little-endian domain name and + * transform into a big-endian Un*x pathname. + * For example: kiska.doc.ic -> ic/doc/kiska + */ +static char * +compute_hostpath(char *hn) +{ + char *p = strdup(hn); + char *d; + char path[MAXPATHLEN]; + + domain_strip(p, hostname); + path[0] = '\0'; + + do { + d = strrchr(p, '.'); + if (d) { + *d = 0; + strcat(path, d + 1); + strcat(path, "/"); + } else { + strcat(path, p); + } + } while (d); + + log("hostpath of '%s' is '%s'", hn, path); + + strcpy(p, path); + return p; +} + + +static dict_ent * +find_volname(char *nn) +{ + dict_ent *de; + char *p = strdup(nn); + char *q; + + do { + log("Searching for volname %s", p); + de = dict_locate(dict_of_volnames, p); + q = strrchr(p, '/'); + if (q) + *q = '\0'; + } while (!de && q); + + XFREE(p); + return de; +} + + +static void +show_required(ioloc *l, int mask, char *info, char *hostname, char *strings[]) +{ + int i; + log("mask left for %s:%s is %#x", hostname, info, mask); + + for (i = 0; strings[i]; i++) + if (ISSET(mask, i)) + lerror(l, "%s:%s needs field \"%s\"", hostname, info, strings[i]); +} + + +/* + * Check and fill in "exportfs" details. + * Make sure the m_exported field references + * the most local node with an "exportfs" entry. + */ +static int +check_exportfs(qelem *q, fsi_mount *e) +{ + fsi_mount *mp; + int errors = 0; + + ITER(mp, fsi_mount, q) { + if (ISSET(mp->m_mask, DM_EXPORTFS)) { + if (e) + lwarning(mp->m_ioloc, "%s has duplicate exportfs data", mp->m_name); + mp->m_exported = mp; + if (!ISSET(mp->m_mask, DM_VOLNAME)) + set_mount(mp, DM_VOLNAME, strdup(mp->m_name)); + } else { + mp->m_exported = e; + } + + /* + * Recursively descend the mount tree + */ + if (mp->m_mount) + errors += check_exportfs(mp->m_mount, mp->m_exported); + + /* + * If a volume name has been specified, but this node and none + * of its parents has been exported, report an error. + */ + if (ISSET(mp->m_mask, DM_VOLNAME) && !mp->m_exported) { + lerror(mp->m_ioloc, "%s has a volname but no exportfs data", mp->m_name); + errors++; + } + } + + return errors; +} + + +static int +analyze_dkmount_tree(qelem *q, fsi_mount *parent, disk_fs *dk) +{ + fsi_mount *mp; + int errors = 0; + + ITER(mp, fsi_mount, q) { + log("Mount %s:", mp->m_name); + if (parent) { + char n[MAXPATHLEN]; + sprintf(n, "%s/%s", parent->m_name, mp->m_name); + if (*mp->m_name == '/') + lerror(mp->m_ioloc, "sub-directory %s of %s starts with '/'", mp->m_name, parent->m_name); + else if (STREQ(mp->m_name, "default")) + lwarning(mp->m_ioloc, "sub-directory of %s is named \"default\"", parent->m_name); + log("Changing name %s to %s", mp->m_name, n); + XFREE(mp->m_name); + mp->m_name = strdup(n); + } + + mp->m_name_len = strlen(mp->m_name); + mp->m_parent = parent; + mp->m_dk = dk; + if (mp->m_mount) + analyze_dkmount_tree(mp->m_mount, mp, dk); + } + + return errors; +} + + +/* + * The mount tree is a singleton list + * containing the top-level mount + * point for a disk. + */ +static int +analyze_dkmounts(disk_fs *dk, qelem *q) +{ + int errors = 0; + fsi_mount *mp, *mp2 = 0; + int i = 0; + + /* + * First scan the list of subdirs to make + * sure there is only one - and remember it + */ + if (q) { + ITER(mp, fsi_mount, q) { + mp2 = mp; + i++; + } + } + + /* + * Check... + */ + if (i < 1) { + lerror(dk->d_ioloc, "%s:%s has no mount point", dk->d_host->h_hostname, dk->d_dev); + return 1; + } + + if (i > 1) { + lerror(dk->d_ioloc, "%s:%s has more than one mount point", dk->d_host->h_hostname, dk->d_dev); + errors++; + } + + /* + * Now see if a default mount point is required + */ + if (STREQ(mp2->m_name, "default")) { + if (ISSET(mp2->m_mask, DM_VOLNAME)) { + char nbuf[1024]; + compute_automount_point(nbuf, dk->d_host, mp2->m_volname); + XFREE(mp2->m_name); + mp2->m_name = strdup(nbuf); + log("%s:%s has default mount on %s", dk->d_host->h_hostname, dk->d_dev, mp2->m_name); + } else { + lerror(dk->d_ioloc, "no volname given for %s:%s", dk->d_host->h_hostname, dk->d_dev); + errors++; + } + } + + /* + * Fill in the disk mount point + */ + if (!errors && mp2 && mp2->m_name) + dk->d_mountpt = strdup(mp2->m_name); + else + dk->d_mountpt = strdup("error"); + + /* + * Analyze the mount tree + */ + errors += analyze_dkmount_tree(q, 0, dk); + + /* + * Analyze the export tree + */ + errors += check_exportfs(q, 0); + + return errors; +} + + +static void +fixup_required_disk_info(disk_fs *dp) +{ + /* + * "fstype" + */ + if (ISSET(dp->d_mask, DF_FSTYPE)) { + if (STREQ(dp->d_fstype, "swap")) { + + /* + * Fixup for a swap device + */ + if (!ISSET(dp->d_mask, DF_PASSNO)) { + dp->d_passno = 0; + BITSET(dp->d_mask, DF_PASSNO); + } else if (dp->d_freq != 0) { + lwarning(dp->d_ioloc, + "Pass number for %s:%s is non-zero", + dp->d_host->h_hostname, dp->d_dev); + } + + /* + * "freq" + */ + if (!ISSET(dp->d_mask, DF_FREQ)) { + dp->d_freq = 0; + BITSET(dp->d_mask, DF_FREQ); + } else if (dp->d_freq != 0) { + lwarning(dp->d_ioloc, + "dump frequency for %s:%s is non-zero", + dp->d_host->h_hostname, dp->d_dev); + } + + /* + * "opts" + */ + if (!ISSET(dp->d_mask, DF_OPTS)) + set_disk_fs(dp, DF_OPTS, strdup("swap")); + + /* + * "mount" + */ + if (!ISSET(dp->d_mask, DF_MOUNT)) { + qelem *q = new_que(); + fsi_mount *m = new_mount(); + + m->m_name = strdup("swap"); + m->m_mount = new_que(); + ins_que(&m->m_q, q->q_back); + dp->d_mount = q; + BITSET(dp->d_mask, DF_MOUNT); + } else { + lerror(dp->d_ioloc, "%s: mount field specified for swap partition", dp->d_host->h_hostname); + } + } else if (STREQ(dp->d_fstype, "export")) { + + /* + * "passno" + */ + if (!ISSET(dp->d_mask, DF_PASSNO)) { + dp->d_passno = 0; + BITSET(dp->d_mask, DF_PASSNO); + } else if (dp->d_passno != 0) { + lwarning(dp->d_ioloc, + "pass number for %s:%s is non-zero", + dp->d_host->h_hostname, dp->d_dev); + } + + /* + * "freq" + */ + if (!ISSET(dp->d_mask, DF_FREQ)) { + dp->d_freq = 0; + BITSET(dp->d_mask, DF_FREQ); + } else if (dp->d_freq != 0) { + lwarning(dp->d_ioloc, + "dump frequency for %s:%s is non-zero", + dp->d_host->h_hostname, dp->d_dev); + } + + /* + * "opts" + */ + if (!ISSET(dp->d_mask, DF_OPTS)) + set_disk_fs(dp, DF_OPTS, strdup("rw,defaults")); + + } + } +} + + +static void +fixup_required_mount_info(fsmount *fp, dict_ent *de) +{ + if (!ISSET(fp->f_mask, FM_FROM)) { + if (de->de_count != 1) { + lerror(fp->f_ioloc, "ambiguous mount: %s is a replicated filesystem", fp->f_volname); + } else { + dict_data *dd; + fsi_mount *mp = 0; + dd = AM_FIRST(dict_data, &de->de_q); + mp = (fsi_mount *) dd->dd_data; + if (!mp) + abort(); + fp->f_ref = mp; + set_fsmount(fp, FM_FROM, mp->m_dk->d_host->h_hostname); + log("set: %s comes from %s", fp->f_volname, fp->f_from); + } + } + + if (!ISSET(fp->f_mask, FM_FSTYPE)) { + set_fsmount(fp, FM_FSTYPE, strdup("nfs")); + log("set: fstype is %s", fp->f_fstype); + } + + if (!ISSET(fp->f_mask, FM_OPTS)) { + set_fsmount(fp, FM_OPTS, strdup("rw,nosuid,grpid,defaults")); + log("set: opts are %s", fp->f_opts); + } + + if (!ISSET(fp->f_mask, FM_LOCALNAME)) { + if (fp->f_ref) { + set_fsmount(fp, FM_LOCALNAME, strdup(fp->f_volname)); + log("set: localname is %s", fp->f_localname); + } else { + lerror(fp->f_ioloc, "cannot determine localname since volname %s is not uniquely defined", fp->f_volname); + } + } +} + + +/* + * For each disk on a host + * analyze the mount information + * and fill in any derivable + * details. + */ +static void +analyze_drives(host *hp) +{ + qelem *q = hp->h_disk_fs; + disk_fs *dp; + + ITER(dp, disk_fs, q) { + int req; + log("Disk %s:", dp->d_dev); + dp->d_host = hp; + fixup_required_disk_info(dp); + req = ~dp->d_mask & DF_REQUIRED; + if (req) + show_required(dp->d_ioloc, req, dp->d_dev, hp->h_hostname, disk_fs_strings); + analyze_dkmounts(dp, dp->d_mount); + } +} + + +/* + * Check that all static mounts make sense and + * that the source volumes exist. + */ +static void +analyze_mounts(host *hp) +{ + qelem *q = hp->h_mount; + fsmount *fp; + int netbootp = 0; + + ITER(fp, fsmount, q) { + char *p; + char *nn = strdup(fp->f_volname); + int req; + dict_ent *de = (dict_ent *) NULL; + int found = 0; + int matched = 0; + + if (ISSET(fp->f_mask, FM_DIRECT)) { + found = 1; + matched = 1; + } else + do { + p = 0; + de = find_volname(nn); + log("Mount: %s (trying %s)", fp->f_volname, nn); + + if (de) { + found = 1; + + /* + * Check that the from field is really exporting + * the filesystem requested. + * LBL: If fake mount, then don't care about + * consistency check. + */ + if (ISSET(fp->f_mask, FM_FROM) && !ISSET(fp->f_mask, FM_DIRECT)) { + dict_data *dd; + fsi_mount *mp2 = 0; + + ITER(dd, dict_data, &de->de_q) { + fsi_mount *mp = (fsi_mount *) dd->dd_data; + + if (STREQ(mp->m_dk->d_host->h_hostname, fp->f_from)) { + mp2 = mp; + break; + } + } + + if (mp2) { + fp->f_ref = mp2; + matched = 1; + break; + } + } else { + matched = 1; + break; + } + } + p = strrchr(nn, '/'); + if (p) + *p = 0; + } while (de && p); + XFREE(nn); + + if (!found) { + lerror(fp->f_ioloc, "volname %s unknown", fp->f_volname); + } else if (matched) { + + fixup_required_mount_info(fp, de); + req = ~fp->f_mask & FM_REQUIRED; + if (req) { + show_required(fp->f_ioloc, req, fp->f_volname, hp->h_hostname, + fsmount_strings); + } else if (STREQ(fp->f_localname, "/")) { + hp->h_netroot = fp; + netbootp |= FM_NETROOT; + } else if (STREQ(fp->f_localname, "swap")) { + hp->h_netswap = fp; + netbootp |= FM_NETSWAP; + } + + } else { + lerror(fp->f_ioloc, "volname %s not exported from %s", fp->f_volname, + fp->f_from ? fp->f_from : "anywhere"); + } + } + + if (netbootp && (netbootp != FM_NETBOOT)) + lerror(hp->h_ioloc, "network booting requires both root and swap areas"); +} + + +void +analyze_hosts(qelem *q) +{ + host *hp; + + show_area_being_processed("analyze hosts", 5); + + /* + * Check all drives + */ + ITER(hp, host, q) { + log("disks on host %s", hp->h_hostname); + show_new("ana-host"); + hp->h_hostpath = compute_hostpath(hp->h_hostname); + + if (hp->h_disk_fs) + analyze_drives(hp); + + } + + show_area_being_processed("analyze mounts", 5); + + /* + * Check static mounts + */ + ITER(hp, host, q) { + log("mounts on host %s", hp->h_hostname); + show_new("ana-mount"); + if (hp->h_mount) + analyze_mounts(hp); + + } +} + + +/* + * Check an automount request + */ +static void +analyze_automount(automount *ap) +{ + dict_ent *de = find_volname(ap->a_volname); + + if (de) { + ap->a_mounted = de; + } else { + if (STREQ(ap->a_volname, ap->a_name)) + lerror(ap->a_ioloc, "unknown volname %s automounted", ap->a_volname); + else + lerror(ap->a_ioloc, "unknown volname %s automounted on %s", ap->a_volname, ap->a_name); + } +} + + +static void +analyze_automount_tree(qelem *q, char *pref, int lvl) +{ + automount *ap; + + ITER(ap, automount, q) { + char nname[1024]; + + if (lvl > 0 || ap->a_mount) + if (ap->a_name[1] && strchr(ap->a_name + 1, '/')) + lerror(ap->a_ioloc, "not allowed '/' in a directory name"); + sprintf(nname, "%s/%s", pref, ap->a_name); + XFREE(ap->a_name); + ap->a_name = strdup(nname[1] == '/' ? nname + 1 : nname); + log("automount point %s:", ap->a_name); + show_new("ana-automount"); + + if (ap->a_mount) { + analyze_automount_tree(ap->a_mount, ap->a_name, lvl + 1); + } else if (ap->a_hardwiredfs) { + log("\thardwired from %s to %s", ap->a_volname, ap->a_hardwiredfs); + } else if (ap->a_volname) { + log("\tautomount from %s", ap->a_volname); + analyze_automount(ap); + } else if (ap->a_symlink) { + log("\tsymlink to %s", ap->a_symlink); + } else { + ap->a_volname = strdup(ap->a_name); + log("\timplicit automount from %s", ap->a_volname); + analyze_automount(ap); + } + } +} + + +void +analyze_automounts(qelem *q) +{ + auto_tree *tp; + + show_area_being_processed("analyze automount", 5); + + /* + * q is a list of automounts + */ + ITER(tp, auto_tree, q) + analyze_automount_tree(tp->t_mount, "", 0); +} diff --git a/fsinfo/fsi_data.h b/fsinfo/fsi_data.h new file mode 100644 index 0000000..e07587a --- /dev/null +++ b/fsinfo/fsi_data.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsi_data.h,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +typedef struct auto_tree auto_tree; +typedef struct automount automount; +typedef struct dict dict; +typedef struct dict_data dict_data; +typedef struct dict_ent dict_ent; +typedef struct disk_fs disk_fs; +typedef struct ether_if ether_if; +typedef struct fsmount fsmount; +typedef struct host host; +typedef struct ioloc ioloc; +typedef struct fsi_mount fsi_mount; + + +/* + * Automount tree + */ +struct automount { + qelem a_q; + ioloc *a_ioloc; + char *a_name; /* Automount key */ + char *a_volname; /* Equivalent volume to be referenced */ + char *a_symlink; /* Symlink representation */ + char *a_opts; /* opts for mounting */ + char *a_hardwiredfs; /* hack to bypass bogus fs definitions */ + qelem *a_mount; /* Tree representation */ + dict_ent *a_mounted; +}; + +/* + * List of automount trees + */ +struct auto_tree { + qelem t_q; + ioloc *t_ioloc; + char *t_defaults; + qelem *t_mount; +}; + +/* + * A host + */ +struct host { + qelem q; + int h_mask; + ioloc *h_ioloc; + fsmount *h_netroot, *h_netswap; +#define HF_HOST 0 + char *h_hostname; /* The full name of the host */ + char *h_lochost; /* The name of the host with local domains stripped */ + char *h_hostpath; /* The filesystem path to the host (cf + compute_hostpath) */ +#define HF_ETHER 1 + qelem *h_ether; +#define HF_CONFIG 2 + qelem *h_config; +#define HF_ARCH 3 + char *h_arch; +#define HF_CLUSTER 4 + char *h_cluster; +#define HF_OS 5 + char *h_os; + qelem *h_disk_fs; + qelem *h_mount; +}; + +/* + * An ethernet interface + */ +struct ether_if { + qelem e_q; + int e_mask; + ioloc *e_ioloc; + char *e_if; +#define EF_INADDR 0 + struct in_addr e_inaddr; +#define EF_NETMASK 1 + u_long e_netmask; +#define EF_HWADDR 2 + char *e_hwaddr; +}; + +/* + * Disk filesystem structure. + * + * If the DF_* numbers are changed + * disk_fs_strings in analyze.c will + * need updating. + */ +struct disk_fs { + qelem d_q; + int d_mask; + ioloc *d_ioloc; + host *d_host; + char *d_mountpt; + char *d_dev; +#define DF_FSTYPE 0 + char *d_fstype; +#define DF_OPTS 1 + char *d_opts; +#define DF_DUMPSET 2 + char *d_dumpset; +#define DF_PASSNO 3 + int d_passno; +#define DF_FREQ 4 + int d_freq; +#define DF_MOUNT 5 + qelem *d_mount; +#define DF_LOG 6 + char *d_log; +}; + +#define DF_REQUIRED ((1< +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + + +static int +dict_hash(char *k) +{ + u_int h; + + for (h = 0; *k; h += *k++) ; + return h % DICTHASH; +} + + +dict * +new_dict(void) +{ + dict *dp = CALLOC(struct dict); + + return dp; +} + + +static void +dict_add_data(dict_ent *de, char *v) +{ + dict_data *dd = CALLOC(struct dict_data); + + dd->dd_data = v; + ins_que(&dd->dd_q, de->de_q.q_back); + de->de_count++; +} + + +static dict_ent * +new_dict_ent(char *k) +{ + dict_ent *de = CALLOC(struct dict_ent); + + de->de_key = k; + init_que(&de->de_q); + return de; +} + + +dict_ent * +dict_locate(dict *dp, char *k) +{ + dict_ent *de = dp->de[dict_hash(k)]; + + while (de && !STREQ(de->de_key, k)) + de = de->de_next; + return de; +} + + +void +dict_add(dict *dp, char *k, char *v) +{ + dict_ent *de = dict_locate(dp, k); + + if (!de) { + dict_ent **dep = &dp->de[dict_hash(k)]; + de = new_dict_ent(k); + de->de_next = *dep; + *dep = de; + } + dict_add_data(de, v); +} + + +int +dict_iter(dict *dp, int (*fn) (qelem *)) +{ + int i; + int errors = 0; + + for (i = 0; i < DICTHASH; i++) { + dict_ent *de = dp->de[i]; + while (de) { + errors += (*fn) (&de->de_q); + de = de->de_next; + } + } + return errors; +} diff --git a/fsinfo/fsi_gram.y b/fsinfo/fsi_gram.y new file mode 100644 index 0000000..7b4f99b --- /dev/null +++ b/fsinfo/fsi_gram.y @@ -0,0 +1,419 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsi_gram.y,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +%{ +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + +extern qelem *list_of_hosts, *list_of_automounts; +%} + +%union { + auto_tree *a; + disk_fs *d; + ether_if *e; + host *h; + qelem *q; + char *s; + fsi_mount *m; + fsmount *f; +} + +%token tARCH +%token tAS +%token tAUTOMOUNT +%token tCLUSTER +%token tCONFIG +%token tDUMPSET +%token tEQ +%token tNFSEQ +%token tEXPORTFS +%token tFREQ +%token tFROM +%token tFS +%token tFSTYPE +%token tHWADDR +%token tINADDR +%token tHOST +%token tLOCALHOST +%token tLOG +%token tMOUNT +%token tNETMASK +%token tNETIF +%token tVOLNAME +%token tOPTS +%token tOS +%token tPASSNO +%token tDIRECT +%token tSEL +%token tSTR + +%start list_of_hosts + +%type
automount +%type automount_tree +%type ether_attr +%type dir_tree_info +%type filesystem fs_info_list +%type host host_attr host_attr_list +%type list_of_hosts list_of_filesystems list_of_mounts dir_tree +%type localinfo_list +%type opt_auto_opts + +%% + +list_of_hosts : + /* empty */ + { $$ = new_que(); } + + | list_of_hosts host + { if ($2) ins_que((qelem *) $2, list_of_hosts->q_back); + $$ = $1; } + + | list_of_hosts automount + { if ($2) ins_que((qelem *) $2, list_of_automounts->q_back); + $$ = $1; } + ; + +/* + * A new host: + * + * host foo.domain + */ +host : + tHOST host_attr list_of_filesystems list_of_mounts + { $$ = $2; $$->h_disk_fs = $3; $$->h_mount = $4; } + + | error tHOST host_attr list_of_filesystems list_of_mounts + { $$ = $3; $$->h_disk_fs = $4; $$->h_mount = $5; } + + ; + +host_attr : + tSTR + { $$ = new_host(); set_host($$, HF_HOST, $1); } + + | '{' host_attr_list '}' tSTR + { $$ = $2; set_host($$, HF_HOST, $4); } + + ; + +host_attr_list : + /* empty */ + { $$ = new_host(); } + + | host_attr_list tNETIF tSTR '{' ether_attr '}' + { if ($5) { + $5->e_if = $3; + $$ = $1; set_host($$, HF_ETHER, (char *) $5); } + } + + | host_attr_list tCONFIG tSTR + { $$ = $1; set_host($$, HF_CONFIG, $3); } + + | host_attr_list tARCH '=' tSTR + { $$ = $1; set_host($$, HF_ARCH, $4); } + + | host_attr_list tOS '=' tSTR + { $$ = $1; set_host($$, HF_OS, $4); } + + | host_attr_list tCLUSTER '=' tSTR + { $$ = $1; set_host($$, HF_CLUSTER, $4); } + + | host_attr_list error '=' tSTR + { yyerror("unknown host attribute"); } + ; + +ether_attr : + /* empty */ + { $$ = new_ether_if(); } + + | ether_attr tINADDR '=' tSTR + { $$ = $1; set_ether_if($$, EF_INADDR, $4); } + | ether_attr tNETMASK '=' tSTR + { $$ = $1; set_ether_if($$, EF_NETMASK, $4); } + | ether_attr tHWADDR '=' tSTR + { $$ = $1; set_ether_if($$, EF_HWADDR, $4); } + ; + +/* + * A new automount tree: + * + * automount /mountpoint { ... } + */ +automount : + tAUTOMOUNT opt_auto_opts automount_tree + { if ($3) { + $$ = new_auto_tree($2, $3); + } else { + $$ = 0; + } + } + + | tAUTOMOUNT error + { $$ = 0; } + ; + +opt_auto_opts : + /* empty */ + { $$ = strdup(""); } + + | tOPTS tSTR + { $$ = $2; } + ; + +list_of_filesystems : + /* empty */ + { $$ = 0; } + + | list_of_filesystems filesystem + { if ($2) { + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&$2->d_q, $$->q_back); + } else { + $$ = $1; + } + } + ; + +/* + * A new filesystem: + * + * fs /dev/whatever { ... } + */ +filesystem : + tFS tSTR '{' fs_info_list '}' + { $4->d_dev = $2; $$ = $4; } + + | tFS error '}' + { $$ = (disk_fs *) 0; } + ; + +/* + * Per-filesystem information: + * + * fstype - the type of the filesystem (4.2, nfs, swap, export) + * opts - the mount options ("rw,grpid") + * passno - fsck pass number + * freq - dump frequency + * dumpset - tape set for filesystem dumps + * mount - where to mount this filesystem + * log - log device + */ +fs_info_list : + /* empty */ + { $$ = new_disk_fs(); } + + | fs_info_list tFSTYPE '=' tSTR + { $$ = $1; set_disk_fs($$, DF_FSTYPE, $4); } + + | fs_info_list tOPTS '=' tSTR + { $$ = $1; set_disk_fs($$, DF_OPTS, $4); } + + | fs_info_list tPASSNO '=' tSTR + { $$ = $1; set_disk_fs($$, DF_PASSNO, $4); } + + | fs_info_list tFREQ '=' tSTR + { $$ = $1; set_disk_fs($$, DF_FREQ, $4); } + + | fs_info_list tMOUNT dir_tree + { $$ = $1; set_disk_fs($$, DF_MOUNT, (char *) $3); } + + | fs_info_list tDUMPSET '=' tSTR + { $$ = $1; set_disk_fs($$, DF_DUMPSET, $4); } + + | fs_info_list tLOG '=' tSTR + { $$ = $1; set_disk_fs($$, DF_LOG, $4); } + + | fs_info_list error '=' tSTR + { yyerror("unknown filesystem attribute"); } + ; + +/* + * An automount tree: + * + * name = "volname" name is a reference to volname + * name -> "string" name is a link to "string" + * name nfsalias "string" name is a link to "string", string parsed as NFS + * pathname. + * name { ... } name is an automount tree + */ +automount_tree : + /* empty */ + { $$ = 0; } + + | automount_tree tSTR opt_auto_opts '=' tSTR + { automount *a = new_automount($2); + a->a_volname = $5; + a->a_opts = $3; + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&a->a_q, $$->q_back); + } + | automount_tree tSTR opt_auto_opts tNFSEQ tSTR + { automount *a = new_automount($2); + a->a_hardwiredfs = $5; + a->a_opts = $3; + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&a->a_q, $$->q_back); + } + + | automount_tree tSTR tEQ tSTR + { automount *a = new_automount($2); + a->a_symlink = $4; + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&a->a_q, $$->q_back); + } + + | automount_tree tSTR opt_auto_opts '{' automount_tree '}' + { automount *a = new_automount($2); + a->a_mount = $5; + a->a_opts = $3; + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&a->a_q, $$->q_back); + } + ; + +dir_tree : + /* empty */ + { $$ = 0; } + + | dir_tree tSTR '{' dir_tree_info dir_tree '}' + { $4->m_mount = $5; + $4->m_name = $2; + if ($2[0] != '/' && $2[1] && strchr($2+1, '/')) + yyerror("not allowed '/' in a directory name"); + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&$4->m_q, $$->q_back); + } + ; + +dir_tree_info : + /* empty */ + { $$ = new_mount(); } + + | dir_tree_info tEXPORTFS tSTR + { $$ = $1; set_mount($$, DM_EXPORTFS, $3); } + + | dir_tree_info tVOLNAME tSTR + { $$ = $1; set_mount($$, DM_VOLNAME, $3); } + + | dir_tree_info tSEL tSTR + { $$ = $1; set_mount($$, DM_SEL, $3); } + + | dir_tree_info error '=' tSTR + { yyerror("unknown directory attribute"); } + ; + +/* + * Additional mounts on a host + * + * mount "volname" ... + */ +list_of_mounts : + /* empty */ + { $$ = 0; } + + | list_of_mounts tMOUNT tSTR localinfo_list + { set_fsmount($4, FM_VOLNAME, $3); + if ($1) + $$ = $1; + else + $$ = new_que(); + ins_que(&$4->f_q, $$->q_back); + } + ; + +/* + * Mount info: + * + * from "hostname" - obtain the object from the named host + * as "string" - where to mount, if different from the volname + * opts "string" - mount options + * fstype "type" - type of filesystem mount, if not nfs + * direct - mount entry, no need to create ad-hoc hosts file + */ +localinfo_list : + /* empty */ + { $$ = new_fsmount(); } + + | localinfo_list tDIRECT + { $$ = $1; set_fsmount($$, FM_DIRECT, ""); } + + | localinfo_list tAS tSTR + { $$ = $1; set_fsmount($$, FM_LOCALNAME, $3); } + + | localinfo_list tFROM tSTR + { $$ = $1; set_fsmount($$, FM_FROM, $3); } + + | localinfo_list tFSTYPE tSTR + { $$ = $1; set_fsmount($$, FM_FSTYPE, $3); } + + | localinfo_list tOPTS tSTR + { $$ = $1; set_fsmount($$, FM_OPTS, $3); } + + | localinfo_list error '=' tSTR + { yyerror("unknown mount attribute"); } + ; diff --git a/fsinfo/fsi_lex.l b/fsinfo/fsi_lex.l new file mode 100644 index 0000000..54d1e75 --- /dev/null +++ b/fsinfo/fsi_lex.l @@ -0,0 +1,270 @@ +%{ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsi_lex.l,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +/* + * Lexical analyzer for fsinfo. + * TODO: Needs rewriting. + */ + +#ifdef FLEX_SCANNER +static int yylineno; +# define INIT_STATE { \ + switch ((yy_start - 1) / 2) { \ + case 0: \ + BEGIN F; \ + break; \ + } \ +} + +#else /* not FLEX_SCANNER */ + +/* + * Using old lex... + */ +# define INIT_STATE { \ + switch (yybgin - yysvec - 1) { \ + case 0: \ + BEGIN F; \ + break; \ + } \ +} + +#endif /* end FLEX_SCANNER */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +/* + * Some systems include a definition for the macro ECHO in , + * and their (bad) version of lex defines it too at the very beginning of + * the generated lex.yy.c file (before it can be easily undefined), + * resulting in a conflict. So undefine it here before needed. + * Luckily, it does not appear that this macro is actually used in the rest + * of the generated lex.yy.c file. + */ +#ifdef ECHO +# undef ECHO +#endif /* ECHO */ +#include +#include +#include +#include +/* and once again undefine this, just in case */ +#ifdef ECHO +# undef ECHO +#endif /* ECHO */ + +/* + * There are some things that need to be defined only if using GNU flex. + * These must not be defined if using standard lex + */ +#ifdef FLEX_SCANNER +# ifndef ECHO +# define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +# endif /* not ECHO */ +#endif /* FLEX_SCANNER */ + +/* + * some systems such as DU-4.x have a different GNU flex in /usr/bin + * which automatically generates yywrap macros and symbols. So I must + * distinguish between them and when yywrap is actually needed. + */ +#ifndef yywrap +int yywrap(void); +#endif /* not yywrap */ + +YYSTYPE yylval; +static char *fsi_filename; +static char *optr; +static char ostr[1024]; +static int find_resword(char *); +static int quoted; + +struct r { + char *rw; + int tok; +} rr[] = { + { "->", tEQ }, + { "arch", tARCH }, + { "as", tAS }, + { "automount", tAUTOMOUNT }, + { "cluster", tCLUSTER }, + { "config", tCONFIG }, + { "direct", tDIRECT }, + { "dumpset", tDUMPSET }, + { "exportfs", tEXPORTFS }, + { "freq", tFREQ }, + { "from", tFROM }, + { "fs", tFS }, + { "fstype", tFSTYPE }, + { "host", tHOST }, + { "hwaddr", tHWADDR }, + { "inaddr", tINADDR }, + { "localhost", tLOCALHOST }, + { "log", tLOG }, + { "mount", tMOUNT }, + { "netif", tNETIF }, + { "netmask", tNETMASK }, + { "nfsalias", tNFSEQ }, + { "opts", tOPTS }, + { "os", tOS }, + { "passno", tPASSNO }, + { "sel", tSEL }, + { "volname", tVOLNAME }, + { 0, 0 }, +}; +#define NRES_WORDS (sizeof(rr)/sizeof(rr[0])-1) + +%} + +%start F Q + +%% + INIT_STATE; /* witchcraft */ + +[^ \t\n"={}]+ { return find_resword(yytext); } /* dummy " */ +[ \t] ; +"\n" { yylineno++; } +[={}] { return *yytext; } + +\" { BEGIN Q; optr = ostr; quoted = 1; } +\n { yylineno++; yyerror("\" expected"); BEGIN F; } +\\b { *optr++ = '\b'; /* escape */ } +\\t { *optr++ = '\t'; /* escape */ } +\\\" { *optr++ = '\"'; /* escape */ } +\\\\ { *optr++ = '\\'; /* escape */ } +\\\n { yylineno++; /* continue */ } +\\r { *optr++ = '\r'; /* escape */ } +\\n { *optr++ = '\n'; /* escape */ } +\\f { *optr++ = '\f'; /* escape */ } +"\\ " { *optr++ = ' '; /* force space */ } +\\. { yyerror("Unknown \\ sequence"); } +([ \t]|"\\\n"){2,} { char *p = (char *) yytext-1; while ((p = strchr(p+1, '\n'))) yylineno++; } +\" { BEGIN F; quoted = 0; + *optr = '\0'; + yylval.s = strdup(ostr); + return tSTR; + } +. { *optr++ = *yytext; } + +%% + + +static int +find_resword(char *s) +{ + int tok = 0; + int l = 0, m = NRES_WORDS/2, h = NRES_WORDS-1; + int rc = 0; + + m = NRES_WORDS/2; + +#define FSTRCMP(p, q) ((*(p) == *(q)) ? strcmp((p)+1, (q)+1) : *(p) - *(q)) + + while ((l <= h) && (rc = FSTRCMP(s, rr[m].rw))) { + if (rc < 0) + h = m - 1; + else + l = m + 1; + m = (h + l) / 2; + } + + if (rc == 0) + tok = rr[m].tok; + + switch (tok) { + case tLOCALHOST: + s = "${host}"; + /* fall through... */ + case 0: + yylval.s = strdup(s); + tok = tSTR; + /* fall through... */ + default: + return tok; + } +} + + +int +yyerror(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + col_cleanup(0); + fprintf(stderr, "%s:%d: ", fsi_filename ? fsi_filename : "/dev/stdin", yylineno); + fprintf(stderr, fmt, ap); + fputc('\n', stderr); + parse_errors++; + va_end(ap); + return 0; + + /* this call will never happen */ + unput(0); +} + + +ioloc * +current_location(void) +{ + ioloc *ip = CALLOC(struct ioloc); + ip->i_line = yylineno; + ip->i_file = fsi_filename; + return ip; +} + + +/* + * some systems such as DU-4.x have a different GNU flex in /usr/bin + * which automatically generates yywrap macros and symbols. So I must + * distinguish between them and when yywrap is actually needed. + */ +#ifndef yywrap +int yywrap(void) +{ + return 1; +} +#endif /* not yywrap */ diff --git a/fsinfo/fsi_util.c b/fsinfo/fsi_util.c new file mode 100644 index 0000000..c53c345 --- /dev/null +++ b/fsinfo/fsi_util.c @@ -0,0 +1,693 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsi_util.c,v 1.1 1998/11/05 02:04:53 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + +/* static variables */ +static int show_range = 10; +static int col = 0; +static int total_shown = 0; +static int total_mmm = 8; + + +static int +col_output(int len) +{ + int wrapped = 0; + + col += len; + if (col > 77) { + fputc('\n', stdout); + col = len; + wrapped = 1; + } + return wrapped; +} + + +static void +show_total(void) +{ + if (total_mmm != -show_range + 1) { + char n[8]; + int len; + + if (total_mmm < 0) + fputc('*', stdout); + sprintf(n, "%d", total_shown); + len = strlen(n); + if (col_output(len)) + fputc(' ', stdout); + fputs(n, stdout); + fflush(stdout); + total_mmm = -show_range; + } +} + + +void +col_cleanup(int eoj) +{ + if (verbose < 0) + return; + if (eoj) { + show_total(); + fputs(")]", stdout); + } + if (col) { + fputc('\n', stdout); + col = 0; + } +} + + +/* + * Lots of ways of reporting errors... + */ +void +error(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + col_cleanup(0); + fprintf(stderr, "%s: Error, ", progname); + fprintf(stderr, fmt, ap); + fputc('\n', stderr); + errors++; + va_end(ap); +} + + +void +lerror(ioloc *l, char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + col_cleanup(0); + fprintf(stderr, "%s:%d: ", l->i_file, l->i_line); + fprintf(stderr, fmt, ap); + fputc('\n', stderr); + errors++; + va_end(ap); +} + + +void +lwarning(ioloc *l, char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + col_cleanup(0); + fprintf(stderr, "%s:%d: ", l->i_file, l->i_line); + fprintf(stderr, fmt, ap); + fputc('\n', stderr); + va_end(ap); +} + + +void +fatal(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + col_cleanup(1); + fprintf(stderr, "%s: Fatal, ", progname); + fprintf(stderr, fmt, ap); + fputc('\n', stderr); + va_end(ap); + exit(1); +} + + +/* + * Debug log + */ +void +log(char *fmt, ...) +{ + va_list ap; + + if (verbose > 0) { + va_start(ap, fmt); + fputc('#', stdout); + fprintf(stdout, "%s: ", progname); + fprintf(stdout, fmt, ap); + putc('\n', stdout); + va_end(ap); + } +} + + +void +info_hdr(FILE *ef, char *info) +{ + fprintf(ef, "# *** NOTE: This file contains %s info\n", info); +} + + +void +gen_hdr(FILE *ef, char *hn) +{ + fprintf(ef, "# *** NOTE: Only for use on %s\n", hn); +} + + +static void +make_banner(FILE *fp) +{ + time_t t = time((time_t *) 0); + char *cp = ctime(&t); + + fprintf(fp, + "\ +# *** This file was automatically generated -- DO NOT EDIT HERE ***\n\ +# \"%s\" run by %s@%s on %s\ +#\n\ +", + progname, username, hostname, cp); +} + + +void +show_new(char *msg) +{ + if (verbose < 0) + return; + + total_shown++; + if (total_mmm > show_range) { + show_total(); + } else if (total_mmm == 0) { + fputc('*', stdout); + fflush(stdout); + col += 1; + } + total_mmm++; +} + + +void +show_area_being_processed(char *area, int n) +{ + static char *last_area = 0; + + if (verbose < 0) + return; + if (last_area) { + if (total_shown) + show_total(); + fputs(")", stdout); + col += 1; + } + + if (!last_area || !STREQ(area, last_area)) { + if (last_area) { + col_cleanup(0); + total_shown = 0; + total_mmm = show_range + 1; + } + (void) col_output(strlen(area) + 2); + fprintf(stdout, "[%s", area); + last_area = area; + } + + fputs(" (", stdout); + col += 2; + show_range = n; + total_mmm = n + 1; + + fflush(stdout); +} + + +/* + * Open a file with the given prefix and name + */ +FILE * +pref_open(char *pref, char *hn, void (*hdr) (FILE *, char *), char *arg) +{ + char p[MAXPATHLEN]; + FILE *ef; + + sprintf(p, "%s%s", pref, hn); + log("Writing %s info for %s to %s", pref, hn, p); + ef = fopen(p, "w"); + if (ef) { + (*hdr) (ef, arg); + make_banner(ef); + } else { + error("can't open %s for writing", p); + } + + return ef; +} + + +int +pref_close(FILE *fp) +{ + return fclose(fp) == 0; +} + + +/* + * Determine where Amd would automount the host/volname pair + */ +void +compute_automount_point(char *buf, host *hp, char *vn) +{ + sprintf(buf, "%s/%s%s", autodir, hp->h_lochost, vn); +} + + +char * +xcalloc(int i, int s) +{ + char *p = (char *) calloc(i, (unsigned) s); + + if (!p) + fatal("Out of memory"); + return p; +} + + +/* + * Data constructors.. + */ +automount * +new_automount(char *name) +{ + automount *ap = CALLOC(struct automount); + + ap->a_ioloc = current_location(); + ap->a_name = name; + ap->a_volname = 0; + ap->a_mount = 0; + ap->a_opts = 0; + show_new("automount"); + return ap; +} + + +auto_tree * +new_auto_tree(char *def, qelem *ap) +{ + auto_tree *tp = CALLOC(struct auto_tree); + + tp->t_ioloc = current_location(); + tp->t_defaults = def; + tp->t_mount = ap; + show_new("auto_tree"); + return tp; +} + + +host * +new_host(void) +{ + host *hp = CALLOC(struct host); + + hp->h_ioloc = current_location(); + hp->h_mask = 0; + show_new("host"); + return hp; +} + + +void +set_host(host *hp, int k, char *v) +{ + int m = 1 << k; + + if (hp->h_mask & m) { + yyerror("host field \"%s\" already set", host_strings[k]); + return; + } + hp->h_mask |= m; + + switch (k) { + + case HF_HOST:{ + char *p = strdup(v); + dict_ent *de = dict_locate(dict_of_hosts, v); + + if (de) + yyerror("duplicate host %s!", v); + else + dict_add(dict_of_hosts, v, (char *) hp); + hp->h_hostname = v; + domain_strip(p, hostname); + if (strchr(p, '.') != 0) + XFREE(p); + else + hp->h_lochost = p; + } + break; + + case HF_CONFIG:{ + qelem *q; + qelem *vq = (qelem *) v; + + hp->h_mask &= ~m; + if (hp->h_config) + q = hp->h_config; + else + q = hp->h_config = new_que(); + ins_que(vq, q->q_back); + } + break; + + case HF_ETHER:{ + qelem *q; + qelem *vq = (qelem *) v; + + hp->h_mask &= ~m; + if (hp->h_ether) + q = hp->h_ether; + else + q = hp->h_ether = new_que(); + ins_que(vq, q->q_back); + } + break; + + case HF_ARCH: + hp->h_arch = v; + break; + + case HF_OS: + hp->h_os = v; + break; + + case HF_CLUSTER: + hp->h_cluster = v; + break; + + default: + abort(); + break; + } +} + + +ether_if * +new_ether_if(void) +{ + ether_if *ep = CALLOC(struct ether_if); + + ep->e_mask = 0; + ep->e_ioloc = current_location(); + show_new("ether_if"); + return ep; +} + + +void +set_ether_if(ether_if *ep, int k, char *v) +{ + int m = 1 << k; + + if (ep->e_mask & m) { + yyerror("netif field \"%s\" already set", ether_if_strings[k]); + return; + } + ep->e_mask |= m; + + switch (k) { + + case EF_INADDR:{ + ep->e_inaddr.s_addr = inet_addr(v); + if (ep->e_inaddr.s_addr == (u_long) - 1) + yyerror("malformed IP dotted quad: %s", v); + XFREE(v); + } + break; + + case EF_NETMASK:{ + u_long nm = 0; + + if ((sscanf(v, "0x%lx", &nm) == 1 || sscanf(v, "%lx", &nm) == 1) && nm != 0) + ep->e_netmask = htonl(nm); + else + yyerror("malformed netmask: %s", v); + XFREE(v); + } + break; + + case EF_HWADDR: + ep->e_hwaddr = v; + break; + + default: + abort(); + break; + } +} + + +void +set_disk_fs(disk_fs *dp, int k, char *v) +{ + int m = 1 << k; + + if (dp->d_mask & m) { + yyerror("fs field \"%s\" already set", disk_fs_strings[k]); + return; + } + dp->d_mask |= m; + + switch (k) { + + case DF_FSTYPE: + dp->d_fstype = v; + break; + + case DF_OPTS: + dp->d_opts = v; + break; + + case DF_DUMPSET: + dp->d_dumpset = v; + break; + + case DF_LOG: + dp->d_log = v; + break; + + case DF_PASSNO: + dp->d_passno = atoi(v); + XFREE(v); + break; + + case DF_FREQ: + dp->d_freq = atoi(v); + XFREE(v); + break; + + case DF_MOUNT: + dp->d_mount = &((fsi_mount *) v)->m_q; + break; + + default: + abort(); + break; + } +} + + +disk_fs * +new_disk_fs(void) +{ + disk_fs *dp = CALLOC(struct disk_fs); + + dp->d_ioloc = current_location(); + show_new("disk_fs"); + return dp; +} + + +void +set_mount(fsi_mount *mp, int k, char *v) +{ + int m = 1 << k; + + if (mp->m_mask & m) { + yyerror("mount tree field \"%s\" already set", mount_strings[k]); + return; + } + mp->m_mask |= m; + + switch (k) { + + case DM_VOLNAME: + dict_add(dict_of_volnames, v, (char *) mp); + mp->m_volname = v; + break; + + case DM_EXPORTFS: + mp->m_exportfs = v; + break; + + case DM_SEL: + mp->m_sel = v; + break; + + default: + abort(); + break; + } +} + + +fsi_mount * +new_mount(void) +{ + fsi_mount *fp = CALLOC(struct fsi_mount); + + fp->m_ioloc = current_location(); + show_new("mount"); + return fp; +} + + +void +set_fsmount(fsmount *fp, int k, char *v) +{ + int m = 1 << k; + + if (fp->f_mask & m) { + yyerror("mount field \"%s\" already set", fsmount_strings[k]); + return; + } + fp->f_mask |= m; + + switch (k) { + + case FM_LOCALNAME: + fp->f_localname = v; + break; + + case FM_VOLNAME: + fp->f_volname = v; + break; + + case FM_FSTYPE: + fp->f_fstype = v; + break; + + case FM_OPTS: + fp->f_opts = v; + break; + + case FM_FROM: + fp->f_from = v; + break; + + case FM_DIRECT: + break; + + default: + abort(); + break; + } +} + + +fsmount * +new_fsmount(void) +{ + fsmount *fp = CALLOC(struct fsmount); + + fp->f_ioloc = current_location(); + show_new("fsmount"); + return fp; +} + + +void +init_que(qelem *q) +{ + q->q_forw = q->q_back = q; +} + + +qelem * +new_que(void) +{ + qelem *q = CALLOC(qelem); + + init_que(q); + return q; +} + + +void +ins_que(qelem *elem, qelem *pred) +{ + qelem *p; + + p = pred->q_forw; + elem->q_back = pred; + elem->q_forw = p; + pred->q_forw = elem; + p->q_back = elem; +} + + +void +rem_que(qelem *elem) +{ + qelem *p, *p2; + + p = elem->q_forw; + p2 = elem->q_back; + + p2->q_forw = p; + p->q_back = p2; +} diff --git a/fsinfo/fsinfo.8 b/fsinfo/fsinfo.8 new file mode 100644 index 0000000..7565f86 --- /dev/null +++ b/fsinfo/fsinfo.8 @@ -0,0 +1,101 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1993 Jan-Simon Pendry. +.\" Copyright (c) 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" from: @(#)fsinfo.8 8.1 (Berkeley) 6/28/93 +.\" $Id: fsinfo.8,v 1.1 1998/11/05 02:04:54 ezk Exp $ +.\" +.TH FSINFO 8 "June 28, 1993" +.SH NAME +fsinfo \- co-ordinate site-wide filesystem information +.SH SYNOPSIS +.B fsinfo +[ +.B \-v +] [ +.B \-a +.I autodir +] [ +.B \-b +.I bootparams +] [ +.B \-d +.I dumpsets +] [ +.B \-e +.I exports +] [ +.B \-f +.I fstabs +] [ +.B \-h +.I hostname +] [ +.B \-m +.I automounts +] [ +.B \-I +.I dir +] [ +.B \-D +.I string[=string]] +] [ +.B \-U +.I string[=string]] +] +.I config +.I ... +.SH DESCRIPTION +The +.B fsinfo +utility takes a set of system configuration information, and generates +a co-ordinated set of +.I amd +, +.I mount +and +.I mountd +configuration files. +.PP +The +.B fsinfo +command is fully described in the document +.I "Amd - The 4.4BSD Automounter" +.SH "SEE ALSO" +.BR amd (8), +.BR mount (8), +.BR mountd (8). +.SH HISTORY +The +.B fsinfo +command first appeared in 4.4BSD. diff --git a/fsinfo/fsinfo.c b/fsinfo/fsinfo.c new file mode 100644 index 0000000..ff3a783 --- /dev/null +++ b/fsinfo/fsinfo.c @@ -0,0 +1,293 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsinfo.c,v 1.1 1998/11/05 02:04:53 ezk Exp $ + * + */ + +/* + * fsinfo + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include +#include + +/* globals */ +char **g_argv; +char *autodir = "/a"; +char *progname; +char *username; +char hostname[MAXHOSTNAMELEN + 1]; +char idvbuf[1024]; +dict *dict_of_hosts; +dict *dict_of_volnames; +int errors; +int file_io_errors; +int parse_errors; +int verbose; +qelem *list_of_automounts; +qelem *list_of_hosts; + +/* + * Output file prefixes + */ +char *bootparams_pref; +char *dumpset_pref; +char *exportfs_pref; +char *fstab_pref; +char *mount_pref; + +/* dummy variables */ +int orig_umask, foreground, debug_flags; +pid_t mypid; +serv_state amd_state; + + +/* + * Argument cracking... + */ +static void +fsi_get_args(int c, char *v[]) +{ + int ch; + int usage = 0; + char *iptr = idvbuf; + + /* + * Determine program name + */ + if (v[0]) { + progname = strrchr(v[0], '/'); + if (progname && progname[1]) + progname++; + else + progname = v[0]; + } + + if (!progname) + progname = "fsinfo"; + + while ((ch = getopt(c, v, "a:b:d:e:f:h:m:D:U:I:qv")) != EOF) + + switch (ch) { + + case 'a': + autodir = optarg; + break; + + case 'b': + if (bootparams_pref) + fatal("-b option specified twice"); + bootparams_pref = optarg; + break; + + case 'd': + if (dumpset_pref) + fatal("-d option specified twice"); + dumpset_pref = optarg; + break; + + case 'h': + strncpy(hostname, optarg, sizeof(hostname) - 1); + break; + + case 'e': + if (exportfs_pref) + fatal("-e option specified twice"); + exportfs_pref = optarg; + break; + + case 'f': + if (fstab_pref) + fatal("-f option specified twice"); + fstab_pref = optarg; + break; + + case 'm': + if (mount_pref) + fatal("-m option specified twice"); + mount_pref = optarg; + break; + + case 'q': + verbose = -1; + break; + + case 'v': + verbose = 1; + break; + + case 'I': + case 'D': + case 'U': + sprintf(iptr, "-%c%s ", ch, optarg); + iptr += strlen(iptr); + break; + + default: + usage++; + break; + } + + if (c != optind) { + g_argv = v + optind - 1; + if (yywrap()) + fatal("Cannot read any input files"); + } else { + usage++; + } + + if (usage) { + fprintf(stderr, + "\ +Usage: %s [-v] [-a autodir] [-h hostname] [-b bootparams] [-d dumpsets]\n\ +\t[-e exports] [-f fstabs] [-m automounts]\n\ +\t[-I dir] [-D|-U string[=string]] config ...\n", progname); + exit(1); + } + + if (g_argv[0]) + log("g_argv[0] = %s", g_argv[0]); + else + log("g_argv[0] = (nil)"); +} + + +/* + * Determine username of caller + */ +static char * +find_username(void) +{ + char *u = getlogin(); + + if (!u) { + struct passwd *pw = getpwuid(getuid()); + if (pw) + u = pw->pw_name; + } + + if (!u) + u = getenv("USER"); + if (!u) + u = getenv("LOGNAME"); + if (!u) + u = "root"; + + return strdup(u); +} + + +/* + * MAIN + */ +int +main(int argc, char *argv[]) +{ + /* + * Process arguments + */ + fsi_get_args(argc, argv); + + /* + * If no hostname given then use the local name + */ + if (!*hostname && gethostname(hostname, sizeof(hostname)) < 0) { + perror("gethostname"); + exit(1); + } + + /* + * Get the username + */ + username = find_username(); + + /* + * New hosts and automounts + */ + list_of_hosts = new_que(); + list_of_automounts = new_que(); + + /* + * New dictionaries + */ + dict_of_volnames = new_dict(); + dict_of_hosts = new_dict(); + + /* + * Parse input + */ + show_area_being_processed("read config", 11); + if (yyparse()) + errors = 1; + errors += file_io_errors + parse_errors; + + if (errors == 0) { + /* + * Do semantic analysis of input + */ + analyze_hosts(list_of_hosts); + analyze_automounts(list_of_automounts); + } + + /* + * Give up if errors + */ + if (errors == 0) { + /* + * Output data files + */ + + write_atab(list_of_automounts); + write_bootparams(list_of_hosts); + write_dumpset(list_of_hosts); + write_exportfs(list_of_hosts); + write_fstab(list_of_hosts); + } + col_cleanup(1); + + exit(errors); + return errors; /* should never reach here */ +} diff --git a/fsinfo/fsinfo.h b/fsinfo/fsinfo.h new file mode 100644 index 0000000..3d65d72 --- /dev/null +++ b/fsinfo/fsinfo.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: fsinfo.h,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +extern FILE *pref_open(char *pref, char *hn, void (*hdr) (FILE *, char *), char *arg); +extern auto_tree *new_auto_tree(char *, qelem *); +extern automount *new_automount(char *); +extern char **g_argv; +extern char *autodir; +extern char *bootparams_pref; +extern char *disk_fs_strings[]; +extern char *dumpset_pref; +extern char *ether_if_strings[]; +extern char *exportfs_pref; +extern char *fsmount_strings[]; +extern char *fstab_pref; +extern char *host_strings[]; +extern char *mount_pref; +extern char *mount_strings[]; +extern char *progname; +extern char *username; +extern char *xcalloc(int, int); +extern char hostname[]; +extern char idvbuf[]; +extern dict *dict_of_hosts; +extern dict *dict_of_volnames; +extern dict *new_dict(void); +extern dict_ent *dict_locate(dict *, char *); +extern disk_fs *new_disk_fs(void); +extern ether_if *new_ether_if(void); +extern fsmount *new_fsmount(void); +extern host *new_host(void); +extern int dict_iter(dict *, int (*)(qelem *)); +extern int errors; +extern int file_io_errors; +extern int parse_errors; +extern int pref_close(FILE *fp); +extern int verbose; +extern ioloc *current_location(void); +extern fsi_mount *new_mount(void); +extern qelem *new_que(void); +extern void analyze_automounts(qelem *); +extern void analyze_hosts(qelem *); +extern void compute_automount_point(char *, host *, char *); +extern void dict_add(dict *, char *, char *); +extern void error(char *fmt, ...); +extern void fatal(char *fmt, ...); +extern void gen_hdr(FILE *ef, char *hn); +extern void info_hdr(FILE *ef, char *info); +extern void init_que(qelem *); +extern void ins_que(qelem *, qelem *); +extern void lerror(ioloc *l, char *fmt, ...); +extern void log(char *fmt, ...); +extern void lwarning(ioloc *l, char *fmt, ...); +extern void rem_que(qelem *); +extern void set_disk_fs(disk_fs *, int, char *); +extern void set_fsmount(fsmount *, int, char *); +extern void set_mount(fsi_mount *, int, char *); +extern void show_area_being_processed(char *area, int n); +extern void show_new(char *msg); +extern void warning(void); + +extern int yyerror(char *fmt, ...); +extern void domain_strip(char *otherdom, char *localdom); +/* + * some systems such as DU-4.x have a different GNU flex in /usr/bin + * which automatically generates yywrap macros and symbols. So I must + * distinguish between them and when yywrap is actually needed. + */ +#ifndef yywrap +extern int yywrap(void); +#endif /* not yywrap */ +extern int yyparse(void); +extern int write_atab(qelem *q); +extern int write_bootparams(qelem *q); +extern int write_dumpset(qelem *q); +extern int write_exportfs(qelem *q); +extern int write_fstab(qelem *q); +extern void col_cleanup(int eoj); +extern void set_host(host *hp, int k, char *v); +extern void set_ether_if(ether_if *ep, int k, char *v); +extern int yylex(void); + + +#define BITSET(m,b) ((m) |= (1<<(b))) +#define AM_FIRST(ty, q) ((ty *) ((q)->q_forw)) +#define HEAD(ty, q) ((ty *) q) +#define ISSET(m,b) ((m) & (1<<(b))) +#define ITER(v, ty, q) for ((v) = AM_FIRST(ty,(q)); (v) != HEAD(ty,(q)); (v) = NEXT(ty,(v))) +#define AM_LAST(ty, q) ((ty *) ((q)->q_back)) +#define NEXT(ty, q) ((ty *) (((qelem *) q)->q_forw)) diff --git a/fsinfo/wr_atab.c b/fsinfo/wr_atab.c new file mode 100644 index 0000000..38852ad --- /dev/null +++ b/fsinfo/wr_atab.c @@ -0,0 +1,334 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wr_atab.c,v 1.1 1998/11/05 02:04:53 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + + +/* + * Write a sequence of automount mount map entries + */ +static int +write_amount_info(FILE *af, automount *ap, int sk) +{ + int errors = 0; + + if (ap->a_mount) { + /* + * A pseudo-directory. + * This can also be a top-level directory, in which + * case the type:=auto is not wanted... + * + * type:=auto;fs:=${map};pref:=whatever/ + */ + automount *ap2; + if (strlen(ap->a_name) > sk) { + fprintf(af, "%s type:=auto;fs:=${map};pref:=%s/\n", + ap->a_name + sk, ap->a_name + sk); + } + ITER(ap2, automount, ap->a_mount) + errors += write_amount_info(af, ap2, sk); + } else if (ap->a_hardwiredfs) { + + /* + * A hardwired filesystem "hostname:path" + * rhost:=hostname;rfs:=path + */ + char *key = ap->a_name + sk; + char *hostname = ap->a_hardwiredfs; + char *path = strrchr(hostname, (int) ':'); + + if (path == NULL) { + fprintf(stderr, "%s: %s not an NFS filesystem\n", ap->a_name, ap->a_hardwiredfs); + errors++; + } else { + *path = '\0'; + path++; + + /* + * Output the map key + */ + fputs(key, af); + fprintf(af, " rhost:=%s", hostname); + fprintf(af, ";rfs:=%s", path); + if (ap->a_opts && !STREQ(ap->a_opts, "")) { + fprintf(af, ";%s", ap->a_opts); + } + fputc('\n', af); + path--; + *path = ':'; + } + } else if (ap->a_mounted) { + + /* + * A mounted partition + * type:=link [ link entries ] type:=nfs [ nfs entries ] + */ + dict_data *dd; + dict_ent *de = ap->a_mounted; + int done_type_link = 0; + char *key = ap->a_name + sk; + + /* + * Output the map key + */ + fputs(key, af); + + /* + * First output any Link locations that would not + * otherwise be correctly mounted. These refer + * to filesystem which are not mounted in the same + * place which the automounter would use. + */ + ITER(dd, dict_data, &de->de_q) { + fsi_mount *mp = (fsi_mount *) dd->dd_data; + /* + * If the mount point and the exported volname are the + * same then this filesystem will be recognized by + * the restart code - so we don't need to put out a + * special rule for it. + */ + if (mp->m_dk->d_host->h_lochost) { + char amountpt[1024]; + compute_automount_point(amountpt, mp->m_dk->d_host, mp->m_exported->m_volname); + if (!STREQ(mp->m_dk->d_mountpt, amountpt)) { + /* + * ap->a_volname is the name of the aliased volume + * mp->m_name is the mount point of the filesystem + * mp->m_volname is the volume name of the filesystems + */ + + /* + * Find length of key and volume names + */ + int avlen = strlen(ap->a_volname); + int mnlen = strlen(mp->m_volname); + + /* + * Make sure a -type:=link is output once + */ + if (!done_type_link) { + done_type_link = 1; + fputs(" -type:=link", af); + } + + /* + * Output a selector for the hostname, + * the device from which to mount and + * where to mount. This will correspond + * to the values output for the fstab. + */ + if (mp->m_dk->d_host->h_lochost) + fprintf(af, " host==%s", mp->m_dk->d_host->h_lochost); + else + fprintf(af, " hostd==%s", mp->m_dk->d_host->h_hostname); + fprintf(af, ";fs:=%s", mp->m_name); + + /* + * ... and a sublink if needed + */ + if (mnlen < avlen) { + char *sublink = ap->a_volname + mnlen + 1; + fprintf(af, "/%s", sublink); + } + fputs(" ||", af); + } + } + } + + /* + * Next do the NFS locations + */ + if (done_type_link) + fputs(" -", af); + + ITER(dd, dict_data, &de->de_q) { + fsi_mount *mp = (fsi_mount *) dd->dd_data; + int namelen = mp->m_name_len; + int exp_namelen = mp->m_exported->m_name_len; + int volnlen = strlen(ap->a_volname); + int mvolnlen = strlen(mp->m_volname); + + fputc(' ', af); + + /* + * Output any selectors + */ + if (mp->m_sel) + fprintf(af, "%s;", mp->m_sel); + + /* + * Print host and volname of exported filesystem + */ + fprintf(af, "rhost:=%s", + mp->m_dk->d_host->h_lochost ? + mp->m_dk->d_host->h_lochost : + mp->m_dk->d_host->h_hostname); + fprintf(af, ";rfs:=%s", mp->m_exported->m_volname); + if (ap->a_opts && !STREQ(ap->a_opts, "")) { + fprintf(af, ";%s", ap->a_opts); + } + + /* + * Now determine whether a sublink is required. + */ + if (exp_namelen < namelen || mvolnlen < volnlen) { + char sublink[1024]; + sublink[0] = '\0'; + if (exp_namelen < namelen) { + strcat(sublink, mp->m_name + exp_namelen + 1); + if (mvolnlen < volnlen) + strcat(sublink, "/"); + } + if (mvolnlen < volnlen) + strcat(sublink, ap->a_volname + mvolnlen + 1); + + fprintf(af, ";sublink:=%s", sublink); + } + } + fputc('\n', af); + } else if (ap->a_symlink) { + + /* + * A specific link. + * + * type:=link;fs:=whatever + */ + fprintf(af, "%s type:=link;fs:=%s\n", ap->a_name + sk, ap->a_symlink); + } + + return errors; +} + + +/* + * Write a single automount configuration file + */ +static int +write_amount( qelem *q, char *def) +{ + automount *ap; + int errors = 0; + int direct = 0; + + /* + * Output all indirect maps + */ + ITER(ap, automount, q) { + FILE *af; + char *p; + + /* + * If there is no a_mount node then this is really + * a direct mount, so just keep a count and continue. + * Direct mounts are output into a special file during + * the second pass below. + */ + if (!ap->a_mount) { + direct++; + continue; + } + + p = strrchr(ap->a_name, '/'); + if (!p) + p = ap->a_name; + else + p++; + + af = pref_open(mount_pref, p, gen_hdr, ap->a_name); + if (af) { + show_new(ap->a_name); + fputs("/defaults ", af); + if (*def) + fprintf(af, "%s;", def); + fputs("type:=nfs\n", af); + errors += write_amount_info(af, ap, strlen(ap->a_name) + 1); + errors += pref_close(af); + } + } + + /* + * Output any direct map entries which were found during the + * previous pass over the data. + */ + if (direct) { + FILE *af = pref_open(mount_pref, "direct.map", info_hdr, "direct mount"); + + if (af) { + show_new("direct mounts"); + fputs("/defaults ", af); + if (*def) + fprintf(af, "%s;", def); + fputs("type:=nfs\n", af); + ITER(ap, automount, q) + if (!ap->a_mount) + errors += write_amount_info(af, ap, 1); + errors += pref_close(af); + } + } + return errors; +} + + +/* + * Write all the needed automount configuration files + */ +int +write_atab(qelem *q) +{ + int errors = 0; + + if (mount_pref) { + auto_tree *tp; + show_area_being_processed("write automount", 5); + ITER(tp, auto_tree, q) + errors += write_amount(tp->t_mount, tp->t_defaults); + } + + return errors; +} diff --git a/fsinfo/wr_bparam.c b/fsinfo/wr_bparam.c new file mode 100644 index 0000000..c53a4ad --- /dev/null +++ b/fsinfo/wr_bparam.c @@ -0,0 +1,109 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wr_bparam.c,v 1.1 1998/11/05 02:04:53 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + + +/* + * Write a host/path in NFS format + */ +static int +write_nfsname(FILE *ef, fsmount *fp, char *hn) +{ + int errors = 0; + char *h = strdup(fp->f_ref->m_dk->d_host->h_hostname); + + domain_strip(h, hn); + fprintf(ef, "%s:%s", h, fp->f_volname); + XFREE(h); + return errors; +} + + +/* + * Write a bootparams entry for a host + */ +static int +write_boot_info(FILE *ef, host *hp) +{ + int errors = 0; + + fprintf(ef, "%s\troot=", hp->h_hostname); + errors += write_nfsname(ef, hp->h_netroot, hp->h_hostname); + fputs(" swap=", ef); + errors += write_nfsname(ef, hp->h_netswap, hp->h_hostname); + fputs("\n", ef); + + return 0; +} + + +/* + * Output a bootparams file + */ +int +write_bootparams(qelem *q) +{ + int errors = 0; + + if (bootparams_pref) { + FILE *ef = pref_open(bootparams_pref, "bootparams", info_hdr, "bootparams"); + if (ef) { + host *hp; + ITER(hp, host, q) + if (hp->h_netroot && hp->h_netswap) + errors += write_boot_info(ef, hp); + errors += pref_close(ef); + } else { + errors++; + } + } + + return errors; +} diff --git a/fsinfo/wr_dumpset.c b/fsinfo/wr_dumpset.c new file mode 100644 index 0000000..c320829 --- /dev/null +++ b/fsinfo/wr_dumpset.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wr_dumpset.c,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + + +static int +write_dumpset_info(FILE *ef, qelem *q) +{ + int errors = 0; + disk_fs *dp; + + ITER(dp, disk_fs, q) { + if (dp->d_dumpset) { + fprintf(ef, "%s\t%s:%-30s\t# %s\n", + dp->d_dumpset, + dp->d_host->h_lochost ? + dp->d_host->h_lochost : + dp->d_host->h_hostname, + dp->d_mountpt, + dp->d_dev); + } + } + return errors; +} + + +int +write_dumpset(qelem *q) +{ + int errors = 0; + + if (dumpset_pref) { + FILE *ef = pref_open(dumpset_pref, "dumpsets", info_hdr, "exabyte dumpset"); + if (ef) { + host *hp; + + ITER(hp, host, q) { + if (hp->h_disk_fs) { + errors += write_dumpset_info(ef, hp->h_disk_fs); + } + } + errors += pref_close(ef); + } else { + errors++; + } + } + + return errors; +} diff --git a/fsinfo/wr_exportfs.c b/fsinfo/wr_exportfs.c new file mode 100644 index 0000000..409b087 --- /dev/null +++ b/fsinfo/wr_exportfs.c @@ -0,0 +1,108 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wr_exportfs.c,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + + +static int +write_export_info(FILE *ef, qelem *q, int errors) +{ + fsi_mount *mp; + + ITER(mp, fsi_mount, q) { + if (mp->m_mask & (1 << DM_EXPORTFS)) + fprintf(ef, "%s\t%s\n", mp->m_volname, mp->m_exportfs); + if (mp->m_mount) + errors += write_export_info(ef, mp->m_mount, 0); + } + + return errors; +} + + +static int +write_dkexports(FILE *ef, qelem *q) +{ + int errors = 0; + disk_fs *dp; + + ITER(dp, disk_fs, q) { + if (dp->d_mount) + errors += write_export_info(ef, dp->d_mount, 0); + } + + return errors; +} + + +int +write_exportfs(qelem *q) +{ + int errors = 0; + + if (exportfs_pref) { + host *hp; + + show_area_being_processed("write exportfs", 5); + ITER(hp, host, q) { + if (hp->h_disk_fs) { + FILE *ef = pref_open(exportfs_pref, hp->h_hostname, gen_hdr, hp->h_hostname); + if (ef) { + show_new(hp->h_hostname); + errors += write_dkexports(ef, hp->h_disk_fs); + errors += pref_close(ef); + } else { + errors++; + } + } + } + } + + return errors; +} diff --git a/fsinfo/wr_fstab.c b/fsinfo/wr_fstab.c new file mode 100644 index 0000000..504b101 --- /dev/null +++ b/fsinfo/wr_fstab.c @@ -0,0 +1,342 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wr_fstab.c,v 1.1 1998/11/05 02:04:54 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include +#include + +#define GENERIC_OS_NAME "generic" + +/* forward definitions */ +static void write_aix1_dkfstab(FILE *ef, disk_fs *dp); +static void write_aix1_dkrmount(FILE *ef, char *hn, fsmount *fp); +static void write_aix3_dkfstab(FILE *ef, disk_fs *dp); +static void write_aix3_dkrmount(FILE *ef, char *hn, fsmount *fp); +static int write_dkfstab(FILE *ef, qelem *q, void (*output) (FILE *, disk_fs *)); +static int write_dkrmount(FILE *ef, qelem *q, char *hn, void (*output) (FILE *, char *, fsmount *)); +static void write_generic_dkfstab(FILE *ef, disk_fs *dp); +static void write_generic_dkrmount(FILE *ef, char *hn, fsmount *fp); +static void write_ultrix_dkfstab(FILE *ef, disk_fs *dp); +static void write_ultrix_dkrmount(FILE *ef, char *hn, fsmount *fp); + +/* ----------------------------------------------- */ + +static struct os_fstab_type { + char *os_name; + void (*op_fstab) (FILE *ef, disk_fs *dp); + void (*op_mount) (FILE *ef, char *hn, fsmount *fp); +} os_tabs[] = { + + { + "aix1", write_aix1_dkfstab, write_aix1_dkrmount + }, /* AIX 1 */ + { + "aix3", write_aix3_dkfstab, write_aix3_dkrmount + }, /* AIX 3 */ + { + "generic", write_generic_dkfstab, write_generic_dkrmount + }, /* Generic */ + { + "u2_0", write_ultrix_dkfstab, write_ultrix_dkrmount + }, /* Ultrix */ + { + "u3_0", write_ultrix_dkfstab, write_ultrix_dkrmount + }, /* Ultrix */ + { + "u4_0", write_ultrix_dkfstab, write_ultrix_dkrmount + }, /* Ultrix */ + { + 0, 0, 0 + } +}; + + +/* ---------- AIX 1 ------------------------------ */ + +/* + * AIX 1 format + */ +static void +write_aix1_dkfstab(FILE *ef, disk_fs *dp) +{ + char *hp = strdup(dp->d_host->h_hostname); + char *p = strchr(hp, '.'); + + if (p) + *p = '\0'; + + fprintf(ef, "\n%s:\n\tdev = %s\n\tvfs = %s\n\ttype = %s\n\tlog = %s\n\tvol = %s\n\topts = %s\n\tmount = true\n\tcheck = true\n\tfree = false\n", + dp->d_mountpt, + dp->d_dev, + dp->d_fstype, + dp->d_fstype, + dp->d_log, + dp->d_mountpt, + dp->d_opts); + XFREE(hp); +} + + +static void +write_aix1_dkrmount(FILE *ef, char *hn, fsmount *fp) +{ + char *h = strdup(fp->f_ref->m_dk->d_host->h_hostname); + char *hp = strdup(h); + char *p = strchr(hp, '.'); + + if (p) + *p = '\0'; + domain_strip(h, hn); + fprintf(ef, "\n%s:\n\tsite = %s\n\tdev = %s:%s\n\tvfs = %s\n\ttype = %s\n\tvol = %s\n\topts = %s\n\tmount = true\n\tcheck = true\n\tfree = false\n", + fp->f_localname, + hp, + h, + fp->f_volname, + fp->f_fstype, + fp->f_fstype, + fp->f_localname, + fp->f_opts); + + XFREE(hp); + XFREE(h); +} + + +/* ---------- AIX 3 ------------------------------ */ + +/* + * AIX 3 format + */ +static void +write_aix3_dkfstab(FILE *ef, disk_fs *dp) +{ + if (STREQ(dp->d_fstype, "jfs") && + NSTREQ(dp->d_dev, "/dev/", 5) && + !dp->d_log) + error("aix 3 needs a log device for journalled filesystem (jfs) mounts"); + + fprintf(ef, "\n%s:\n\tdev = %s\n\tvfs = %s\n\ttype = %s\n\tlog = %s\n\tvol = %s\n\topts = %s\n\tmount = true\n\tcheck = true\n\tfree = false\n", + dp->d_mountpt, + dp->d_dev, + dp->d_fstype, + dp->d_fstype, + dp->d_log, + dp->d_mountpt, + dp->d_opts); +} + + +static void +write_aix3_dkrmount(FILE *ef, char *hn, fsmount *fp) +{ + char *h = strdup(fp->f_ref->m_dk->d_host->h_hostname); + + domain_strip(h, hn); + fprintf(ef, "\n%s:\n\tdev = %s:%s\n\tvfs = %s\n\ttype = %s\n\tvol = %s\n\topts = %s\n\tmount = true\n\tcheck = true\n\tfree = false\n", + fp->f_localname, + h, + fp->f_volname, + fp->f_fstype, + fp->f_fstype, + fp->f_localname, + fp->f_opts); + + XFREE(h); +} + + +/* ---------- Ultrix ----------------------------- */ + +static void +write_ultrix_dkfstab(FILE *ef, disk_fs *dp) +{ + fprintf(ef, "%s:%s:%s:%s:%d:%d\n", + dp->d_dev, + dp->d_mountpt, + dp->d_fstype, + dp->d_opts, + dp->d_freq, + dp->d_passno); +} + + +static void +write_ultrix_dkrmount(FILE *ef, char *hn, fsmount *fp) +{ + char *h = strdup(fp->f_ref->m_dk->d_host->h_hostname); + + domain_strip(h, hn); + fprintf(ef, "%s@%s:%s:%s:%s:0:0\n", + fp->f_volname, + h, + fp->f_localname, + fp->f_fstype, + fp->f_opts); + XFREE(h); +} + + +/* ---------- Generic ---------------------------- */ + +/* + * Generic (BSD, SunOS, HPUX) format + */ +static void +write_generic_dkfstab(FILE *ef, disk_fs *dp) +{ + fprintf(ef, "%s %s %s %s %d %d\n", + dp->d_dev, + dp->d_mountpt, + dp->d_fstype, + dp->d_opts, + dp->d_freq, + dp->d_passno); +} + + +static void +write_generic_dkrmount(FILE *ef, char *hn, fsmount *fp) +{ + char *h; + + if (fp->f_ref) { + h = strdup(fp->f_ref->m_dk->d_host->h_hostname); + } else { + h = strdup(fp->f_from); + } + domain_strip(h, hn); + fprintf(ef, "%s:%s %s %s %s 0 0\n", + h, + fp->f_volname, + fp->f_localname, + fp->f_fstype, + fp->f_opts); + XFREE(h); +} + + +static struct os_fstab_type * +find_fstab_type(host *hp) +{ + struct os_fstab_type *op = 0; + char *os_name = 0; + +again:; + if (os_name == 0) { + if (ISSET(hp->h_mask, HF_OS)) + os_name = hp->h_os; + else + os_name = GENERIC_OS_NAME; + } + for (op = os_tabs; op->os_name; op++) + if (STREQ(os_name, op->os_name)) + return op; + + os_name = GENERIC_OS_NAME; + goto again; +} + + +static int +write_dkfstab(FILE *ef, qelem *q, void (*output) (FILE *, disk_fs *)) +{ + int errors = 0; + disk_fs *dp; + + ITER(dp, disk_fs, q) + if (!STREQ(dp->d_fstype, "export")) + (*output) (ef, dp); + + return errors; +} + + +static int +write_dkrmount(FILE *ef, qelem *q, char *hn, void (*output) (FILE *, char *, fsmount *)) +{ + int errors = 0; + fsmount *fp; + + ITER(fp, fsmount, q) + (*output) (ef, hn, fp); + + return errors; +} + + +int +write_fstab(qelem *q) +{ + int errors = 0; + + if (fstab_pref) { + host *hp; + + show_area_being_processed("write fstab", 4); + ITER(hp, host, q) { + if (hp->h_disk_fs || hp->h_mount) { + FILE *ef = pref_open(fstab_pref, hp->h_hostname, gen_hdr, hp->h_hostname); + if (ef) { + struct os_fstab_type *op = find_fstab_type(hp); + show_new(hp->h_hostname); + if (hp->h_disk_fs) + errors += write_dkfstab(ef, hp->h_disk_fs, op->op_fstab); + else + log("No local disk mounts on %s", hp->h_hostname); + + if (hp->h_mount) + errors += write_dkrmount(ef, hp->h_mount, hp->h_hostname, op->op_mount); + + pref_close(ef); + } + } else { + error("no disk mounts on %s", hp->h_hostname); + } + } + } + return errors; +} diff --git a/hlfsd/Makefile.am b/hlfsd/Makefile.am new file mode 100644 index 0000000..e83491f --- /dev/null +++ b/hlfsd/Makefile.am @@ -0,0 +1,45 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for hlfsd/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = hlfsd + +# man pages +man_MANS = hlfsd.8 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + hlfsd.h + +hlfsd_SOURCES = \ + hlfsd.c \ + homedir.c \ + nfs_prot_svc.c \ + stubs.c + +LDADD = ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) diff --git a/hlfsd/Makefile.in b/hlfsd/Makefile.in new file mode 100644 index 0000000..c26aeb0 --- /dev/null +++ b/hlfsd/Makefile.in @@ -0,0 +1,374 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for hlfsd/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = hlfsd + +# man pages +man_MANS = hlfsd.8 + +# headers this depends on, not to be installed +noinst_HEADERS = \ + hlfsd.h + +hlfsd_SOURCES = \ + hlfsd.c \ + homedir.c \ + nfs_prot_svc.c \ + stubs.c + +LDADD = ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +hlfsd_OBJECTS = hlfsd.o homedir.o nfs_prot_svc.o stubs.o +hlfsd_LDADD = $(LDADD) +hlfsd_DEPENDENCIES = ../libamu/libamu.la +hlfsd_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(hlfsd_SOURCES) +OBJECTS = $(hlfsd_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps hlfsd/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +hlfsd: $(hlfsd_OBJECTS) $(hlfsd_DEPENDENCIES) + @rm -f hlfsd + $(LINK) $(hlfsd_LDFLAGS) $(hlfsd_OBJECTS) $(hlfsd_LDADD) $(LIBS) + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = hlfsd + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(sbindir) $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man8 \ +uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/hlfsd/hlfsd.8 b/hlfsd/hlfsd.8 new file mode 100644 index 0000000..dfbffed --- /dev/null +++ b/hlfsd/hlfsd.8 @@ -0,0 +1,310 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1989 Jan-Simon Pendry +.\" Copyright (c) 1989 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1989 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $Id: hlfsd.8,v 1.1 1998/11/05 02:04:55 ezk Exp $ +.\" +.\" HLFSD was written at Columbia University Computer Science Department, by +.\" Erez Zadok and Alexander Dupuy +.\" It is distributed under the same terms and conditions as AMD. +.\" +.TH HLFSD 8 "14 September 1993" +.SH NAME +hlfsd \- home-link file system daemon +.SH SYNOPSIS +.B hlfsd +[ +.B \-fhnpvC +] [ +.BI \-a " alt_dir" +] [ +.BI \-c " cache-interval" +] [ +.BI \-g " group" +] [ +.BI \-i " reload-interval" +] [ +.BI \-l " logfile" +] [ +.BI \-o " mount-options" +] [ +.BI \-x " log-options" +] [ +.BI \-D " debug-options" +] [ +.BI \-P " password-file" +] +[ +.I linkname +.RI [ " subdir " ] +] +.SH DESCRIPTION +.B Hlfsd +is a daemon which implements a filesystem containing a symbolic link to +subdirectory within a user's home directory, depending on the user +which accessed that link. It was primarily designed to redirect +incoming mail to users' home directories, so that it can read from +anywhere. +.LP +.B Hlfsd +operates by mounting itself as an +.SM NFS +server for the directory containing +.IR linkname , +which defaults to +.BR /hlfs/home . +Lookups within that directory are handled by +.BR hlfsd , +which uses the password map to determine how to resolve the lookup. +The directory will be created if it doesn't already exist. The symbolic link will be to the accessing user's home directory, with +.I subdir +appended to it. If not specified, +.I subdir +defaults to +.BR .hlfsdir . +This directory will also be created if it does not already exist. +.LP +A SIGTERM sent to +.B hlfsd +will cause it to shutdown. A SIGHUP will flush the internal +caches, and reload the password map. It will also close and +reopen the log file, to enable the original log file to be +removed or rotated. A SIGUSR1 will cause it to dump its internal +table of user IDs and home directories to the file +.BR /usr/tmp/hlfsd.dump.XXXXXX . +.SH OPTIONS +.TP +.BI \-a " alt_dir" +Alternate directory. The name of the directory to which +the symbolic link returned by +.B hlfsd +will point, if it cannot access the home directory of the user. This +defaults to +.BR /var/hlfs . +This directory will be created if it doesn't exist. It is expected +that either users will read these files, or the system administrators +will run a script to resend this "lost mail" to its owner. +.TP +.BI \-c " cache-interval" +Caching interval. +.B Hlfsd +will cache the validity of home directories for this interval, in +seconds. Entries which have been verified within the last +.I cache-interval +seconds will not be verified again, since the operation could +be expensive, and the entries are most likely still valid. +After the interval has expired, +.B hlfsd +will re-verify the validity of the user's home directory, and +reset the cache time-counter. The default value for +.I cache-interval +is 300 seconds (5 minutes). +.TP +.B \-f +Force fast startup. This option tells +.B hlfsd +to skip startup-time consistency checks such as existence of mount +directory, alternate spool directory, symlink to be hidden under the +mount directory, their permissions and validity. +.TP +.BI \-g " group" +Set the special group HLFS_GID to +.IR group . +Programs such as +.B from +or +.BR comsat , +which access the mailboxes of other users) must be setgid HLFS_GID to +work properly. The default group is "hlfs". If no group is provided, +and there is no group "hlfs", this feature is disabled. +.TP +.B \-h +Help. Print a brief help message, and exit. +.TP +.BI \-i " reload-interval" +Map-reloading interval. Each +.I reload-interval +seconds, +.B hlfsd +will reload the password map. +.B Hlfsd +needs the password map for the UIDs and home directory pathnames. +.B Hlfsd +schedules a SIGALRM to reload the password maps. A SIGHUP sent to +.B hlfsd +will force it to reload the maps immediately. The default +value for +.I reload-interval +is 900 seconds (15 minutes.) +.TP +.BI \-l " logfile" +Specify a log file to which +.B hlfsd +will record events. If +.I logfile +is the string +.B syslog +then the log messages will be sent to the system log daemon by +.IR syslog (3), +using the LOG_DAEMON facility. +This is also the default. +.TP +.B \-n +No verify. +.B Hlfsd +will not verify the validity of the symbolic link it will be +returning, or that the user's home directory contains +sufficient disk-space for spooling. This can speed up +.B hlfsd +at the cost of possibly returning symbolic links to home +directories which are not currently accessible or are full. +By default, +.B hlfsd +validates the symbolic-link in the background. +The +.B \-n +option overrides the meaning of the +.B \-c +option, since no caching is necessary. +.TP +.BI \-o " mount-options" +Mount options. Mount options which +.B hlfsd +will use to mount itself on top of +.I dirname. +By default, +.IR mount-options +is set to "ro". If the system supports symbolic-link caching, default +options are set to "ro,nocache". +.TP +.B \-p +Print PID. +Outputs the process-id of +.B hlfsd +to standard output where it can be saved into a file. +.TP +.B \-v +Version. Displays version information to standard error. +.TP +.BI \-x " log-options" +Specify run-time logging options. The options are a comma separated +list chosen from: fatal, error, user, warn, info, map, stats, all. +.TP +.BI \-C +Force +.B hlfsd +to run on systems that cannot turn off the NFS attribute-cache. Use of +this option on those systems is discouraged, as it may result in loss +or misdelivery of mail. The option is ignored on systems that can turn +off the attribute-cache. +.TP +.BI \-D " log-options" +Select from a variety of debugging options. Prefixing an +option with the string +.B no +reverses the effect of that option. Options are cumulative. +The most useful option is +.BR all . +Since this option is only used for debugging other options are not +documented here. A fuller description is available in the program +source. A SIGUSR1 sent to +.B hlfsd +will cause it to dump its internal password map to the file +.BR /usr/tmp/hlfsd.dump.XXXXXX . +.TP +.BI \-P " password-file" +Read the user-name, user-id, and home directory information from the file +.I password-file. +Normally, +.B hlfsd +will use +.IR getpwent (3) +to read the password database. This option allows you to override the +default database, and is useful if you want to map users' mail files to a +directory other than their home directory. Only the username, uid, and +home-directory fields of the file +.I password-file +are read and checked. All other fields are ignored. The file +.I password-file +must otherwise be compliant with Unix System 7 colon-delimited format +.IR passwd (4). +.SH FILES +.PD 0 +.TP 5 +.B /hlfs +directory under which +.B hlfsd +mounts itself and manages the symbolic link +.BR home . +.TP 5 +.B .hlfsdir +default sub-directory in the user's home directory, to which the +.B home +symbolic link returned by +.B hlfsd +points. +.TP 5 +.B /var/hlfs +directory to which +.B home +symbolic link returned by +.B hlfsd +points if it is unable to verify the that +user's home directory is accessible. +.SH "SEE ALSO" +.BR amd (8), +.BR automount (8), +.BR cron(8), +.BR getgrent (3), +.BR getpwent (3), +.BR mail(1), +.BR mnttab (4), +.BR mount (8), +.BR mtab (5), +.BR passwd (4), +.BR sendmail (8), +.BR umount (8). +.LP +.IR "HLFSD: Delivering Email to Your $HOME" , +in +.IR "Proc. LISA-VII, The 7th Usenix System Administration Conference" , +November 1993. +.SH AUTHORS +Erez Zadok , Computer Science Department, +Columbia University, New York City, New York, USA, and +Alexander Dupuy , System Management ARTS, +White Plains, New York, USA. diff --git a/hlfsd/hlfsd.c b/hlfsd/hlfsd.c new file mode 100644 index 0000000..a63bd8f --- /dev/null +++ b/hlfsd/hlfsd.c @@ -0,0 +1,954 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: hlfsd.c,v 1.1 1998/11/05 02:04:55 ezk Exp $ + * + * HLFSD was written at Columbia University Computer Science Department, by + * Erez Zadok and Alexander Dupuy + * It is being distributed under the same terms and conditions as amd does. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * STATIC VARIABLES: + */ +static RETSIGTYPE proceed(int); +static RETSIGTYPE reaper(int); +static RETSIGTYPE reload(int); +static char *hlfs_group = DEFAULT_HLFS_GROUP; +static char default_dir_name[] = DEFAULT_DIRNAME; +static char *dir_name = default_dir_name; +static int printpid = 0; +static int stoplight = 0; +static void hlfsd_init(void); +static void usage(void); + +static struct itimerval reloadinterval = { + {DEFAULT_INTERVAL, 0}, + {DEFAULT_INTERVAL, 0} +}; + +/* + * default mount options. + */ +static char default_mntopts[] = "ro,noac"; + +/* + * GLOBALS: + */ +SVCXPRT *nfsxprt; +char *alt_spooldir = ALT_SPOOLDIR; +char *home_subdir = HOME_SUBDIR; +char *logfile = DEFAULT_LOGFILE; +char *passwdfile = NULL; /* alternate passwd file to use */ +char *progname; +char *slinkname = 0; +char hostname[MAXHOSTNAMELEN + 1] = "localhost"; +int cache_interval = DEFAULT_CACHE_INTERVAL; +int foreground = 1; /* This is the top-level server */ +gid_t hlfs_gid = (gid_t) INVALIDID; +int masterpid = 0; +int noverify = 0; +int orig_umask; +int serverpid = 0; +nfstime startup; +pid_t mypid; /* Current process id */ +serv_state amd_state; +u_short nfs_port; + +/* symbol must be available always */ +#ifdef MOUNT_TABLE_ON_FILE +char *mnttab_file_name = MNTTAB_FILE_NAME; +#else /* not MOUNT_TABLE_ON_FILE */ +char *mnttab_file_name = NULL; +#endif /* not MOUNT_TABLE_ON_FILE */ + +#ifdef DEBUG +int debug_flags = 0; +#endif /* DEBUG */ + +/* forward declarations */ +void hlfsd_going_down(int rc); + + +static void +usage(void) +{ + fprintf(stderr, + "Usage: %s [-Cfhnpv] [-a altdir] [-c cache-interval] [-g group]\n", + progname); + fprintf(stderr, "\t[-i interval] [-l logfile] [-o mntopts] [-P passwdfile]\n"); + show_opts('x', xlog_opt); +#ifdef DEBUG + show_opts('D', dbg_opt); +#endif /* DEBUG */ + fprintf(stderr, "\t[dir_name [subdir]]\n"); + exit(2); +} + + +int +main(int argc, char *argv[]) +{ + char *dot; + char *mntopts = (char *) NULL; + char hostpid_fs[MAXHOSTNAMELEN + 1 + 16]; /* room for ":(pid###)" */ + char progpid_fs[PROGNAMESZ + 1 + 11]; /* room for ":pid" */ + char preopts[128]; + int forcecache = 0; + int forcefast = 0; + int genflags = 0; + int opt, ret; + int opterrs = 0; + int retry; + int soNFS; /* NFS socket */ + int s = -99; + mntent_t mnt; + nfs_args_t nfs_args; + am_nfs_handle_t anh; + struct dirent *direntry; + struct group *grp; + struct stat stmodes; + DIR *mountdir; + MTYPE_TYPE type = MOUNT_TYPE_NFS; + +#ifdef HAVE_SIGACTION + struct sigaction sa; +#endif /* not HAVE_SIGACTION */ + +#ifndef HAVE_TRANSPORT_TYPE_TLI + struct sockaddr_in localsocket; +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + + /* get program name and truncate so we don't overflow progpid_fs */ + + if ((progname = strrchr(argv[0], '/')) != NULL) + progname++; + else + progname = argv[0]; + if ((int) strlen(progname) > PROGNAMESZ) /* truncate to reasonable size */ + progname[PROGNAMESZ] = '\0'; + + while ((opt = getopt(argc, argv, "a:c:CD:fg:hi:l:no:pP:x:v")) != EOF) + switch (opt) { + + case 'a': + if (!optarg || optarg[0] != '/') { + printf("%s: invalid directory for -a: %s\n", + progname, optarg); + exit(3); + } + alt_spooldir = optarg; + break; + + case 'c': + if (!atoi(optarg)) { + printf("%s: invalid interval for -c: %s\n", + progname, optarg); + exit(3); + } + cache_interval = atoi(optarg); + break; + + case 'C': + forcecache++; + break; + + case 'f': + forcefast++; + break; + + case 'g': + hlfs_group = optarg; + break; + + case 'i': + if (!atoi(optarg)) { + printf("%s: invalid interval for -i: %s\n", + progname, optarg); + exit(3); + } + reloadinterval.it_interval.tv_sec = atoi(optarg); + reloadinterval.it_value.tv_sec = atoi(optarg); + break; + + case 'l': + logfile = optarg; + break; + + case 'n': + noverify++; + break; + + case 'o': + mntopts = optarg; + break; + + case 'p': + printpid++; + break; + + case 'P': + passwdfile = optarg; + break; + + case 'v': + fprintf(stderr, "%s\n", HLFSD_VERSION); + exit(0); + + case 'x': + opterrs += switch_option(optarg); + break; + + case 'D': +#ifdef DEBUG + opterrs += debug_option(optarg); +#else /* not DEBUG */ + fprintf(stderr, "%s: not compiled with DEBUG -- sorry.\n", progname); +#endif /* not DEBUG */ + break; + + case 'h': + case '?': + opterrs++; + } + + /* set some default debugging options */ + if (xlog_level_init == ~0) + switch_option(""); + /* need my pid before any dlog/plog */ + mypid = getpid(); +#ifdef DEBUG + switch_option("debug"); +#endif /* DEBUG */ + +/* + * Terminate if did not ask to forcecache (-C) and hlfsd would not be able + * to set the minimum cache intervals. + */ +#if !defined(MNT2_NFS_OPT_ACREGMIN) && !defined(MNT2_NFS_OPT_NOAC) && !defined(HAVE_FIELD_NFS_ARGS_T_ACREGMIN) + if (!forcecache) { + fprintf(stderr, "%s: will not be able to turn off attribute caches.\n", progname); + exit(1); + } +#endif /* !defined(MNT2_NFS_OPT_ACREGMIN) && !defined(MNT2_NFS_OPT_NOAC) && !defined(HAVE_FIELD_NFS_ARGS_T_ACREGMIN) */ + + + switch (argc - optind) { + case 2: + home_subdir = argv[optind + 1]; + case 1: + dir_name = argv[optind]; + case 0: + break; + default: + opterrs++; + } + + if (opterrs) + usage(); + + /* ensure that only root can run hlfsd */ + if (geteuid()) { + fprintf(stderr, "hlfsd can only be run as root\n"); + exit(1); + } + setbuf(stdout, (char *) NULL); + umask(0); + + /* find gid for hlfs_group */ + if ((grp = getgrnam(hlfs_group)) == (struct group *) NULL) { + fprintf(stderr, "%s: cannot get gid for group \"%s\".\n", + progname, hlfs_group); + } else { + hlfs_gid = grp->gr_gid; + } + + /* get hostname for logging and open log before we reset umask */ + gethostname(hostname, sizeof(hostname)); + hostname[sizeof(hostname) - 1] = '\0'; + if ((dot = strchr(hostname, '.')) != NULL) + *dot = '\0'; + if (logfile) + switch_to_logfile(logfile); + orig_umask = umask(0); + +#if defined(DEBUG) && !defined(MOUNT_TABLE_ON_FILE) + if (debug_flags & D_MTAB) + dlog("-D mtab option ignored"); +#endif /* defined(DEBUG) && !defined(MOUNT_TABLE_ON_FILE) */ + + /* avoid hanging on other NFS servers if started elsewhere */ + if (chdir("/") < 0) + fatal("cannot chdir to /: %m"); + + if (geteuid() != 0) + fatal("must be root to mount filesystems"); + + /* + * dir_name must match "^(/.*)/([^/]+)$", and is split at last '/' with + * slinkname = `basename $dir_name` - requires dir_name be writable + */ + + if (dir_name[0] != '/' + || ((slinkname = strrchr(dir_name, '/')), *slinkname++ = '\0', + (dir_name[0] == '\0' || slinkname[0] == '\0'))) { + if (slinkname) + *--slinkname = '/'; + printf("%s: invalid mount directory/link %s\n", + progname, dir_name); + exit(3); + } + + clock_valid = 0; /* invalidate logging clock */ + + if (!forcefast) { + /* make sure mount point exists and is at least mode 555 */ + if (stat(dir_name, &stmodes) < 0) + if (errno != ENOENT || mkdirs(dir_name, 0555) < 0 + || stat(dir_name, &stmodes) < 0) + fatalerror(dir_name); + + if ((stmodes.st_mode & 0555) != 0555) { + fprintf(stderr, "%s: directory %s not read/executable\n", + progname, dir_name); + plog(XLOG_WARNING, "directory %s not read/executable", + dir_name); + } + + /* warn if extraneous stuff will be hidden by mount */ + if ((mountdir = opendir(dir_name)) == NULL) + fatalerror(dir_name); + + while ((direntry = readdir(mountdir)) != NULL) { + if (!NSTREQ(".", direntry->d_name, NAMLEN(direntry)) && + !NSTREQ("..", direntry->d_name, NAMLEN(direntry)) && + !NSTREQ(slinkname, direntry->d_name, NAMLEN(direntry))) + break; + } + + if (direntry != NULL) { + fprintf(stderr, "%s: %s/%s will be hidden by mount\n", + progname, dir_name, direntry->d_name); + plog(XLOG_WARNING, "%s/%s will be hidden by mount\n", + dir_name, direntry->d_name); + } + closedir(mountdir); + + /* make sure alternate spool dir exists */ + if ((errno = mkdirs(alt_spooldir, OPEN_SPOOLMODE))) { + fprintf(stderr, "%s: cannot create alternate dir ", + progname); + perror(alt_spooldir); + plog(XLOG_ERROR, "cannot create alternate dir %s: %m", + alt_spooldir); + } + chmod(alt_spooldir, OPEN_SPOOLMODE); + + /* create failsafe link to alternate spool directory */ + slinkname[-1] = '/'; /* unsplit dir_name to include link */ + if (lstat(dir_name, &stmodes) == 0 && + (stmodes.st_mode & S_IFMT) != S_IFLNK) { + fprintf(stderr, "%s: failsafe %s not a symlink\n", + progname, dir_name); + plog(XLOG_WARNING, "failsafe %s not a symlink\n", + dir_name); + } else { + unlink(dir_name); + + if (symlink(alt_spooldir, dir_name) < 0) { + fprintf(stderr, + "%s: cannot create failsafe symlink %s -> ", + progname, dir_name); + perror(alt_spooldir); + plog(XLOG_WARNING, + "cannot create failsafe symlink %s -> %s: %m", + dir_name, alt_spooldir); + } + } + + slinkname[-1] = '\0'; /* resplit dir_name */ + } /* end of "if (!forcefast) {" */ + + /* + * Register hlfsd as an nfs service with the portmapper. + */ +#ifdef HAVE_TRANSPORT_TYPE_TLI + ret = create_nfs_service(&soNFS, &nfs_port, &nfsxprt, nfs_program_2); +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + ret = create_nfs_service(&soNFS, &nfs_port, &nfsxprt, nfs_program_2); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + if (ret != 0) + fatal("cannot create NFS service"); + +#ifdef HAVE_SIGACTION + sa.sa_handler = proceed; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGUSR2); + sigaction(SIGUSR2, &sa, NULL); +#else /* not HAVE_SIGACTION */ + signal(SIGUSR2, proceed); +#endif /* not HAVE_SIGACTION */ + + plog(XLOG_INFO, "Initializing hlfsd..."); + hlfsd_init(); /* start up child (forking) to run svc_run */ + +#ifdef HAVE_SIGACTION + sa.sa_handler = reaper; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGCHLD); + sigaction(SIGCHLD, &sa, NULL); +#else /* not HAVE_SIGACTION */ + signal(SIGCHLD, reaper); +#endif /* not HAVE_SIGACTION */ + +#ifdef DEBUG + /* + * In the parent, if -D nodaemon (or -D daemon) , we don't need to + * set this signal handler. + */ + amuDebug(D_DAEMON) { +#endif /* DEBUG */ + /* XXX: port to use pure svr4 signals */ + s = -99; + while (stoplight != SIGUSR2) { + plog(XLOG_INFO, "parent waits for child to setup (stoplight=%d)", stoplight); + s = sigpause(0); /* wait for child to set up */ + sleep(1); + } +#ifdef DEBUG + } +#endif /* DEBUG */ + + /* + * setup options to mount table (/etc/{mtab,mnttab}) entry + */ + sprintf(hostpid_fs, "%s:(pid%d)", hostname, masterpid); + memset((char *) &mnt, 0, sizeof(mnt)); + mnt.mnt_dir = dir_name; /* i.e., "/mail" */ + mnt.mnt_fsname = hostpid_fs; + if (mntopts) { + mnt.mnt_opts = mntopts; + } else { + strcpy(preopts, default_mntopts); + /* + * Turn off all kinds of attribute and symlink caches as + * much as possible. Also make sure that mount does not + * show up to df. + */ +#ifdef MNTTAB_OPT_INTR + strcat(preopts, ","); + strcat(preopts, MNTTAB_OPT_INTR); +#endif /* MNTTAB_OPT_INTR */ +#ifdef MNTTAB_OPT_IGNORE + strcat(preopts, ","); + strcat(preopts, MNTTAB_OPT_IGNORE); +#endif /* MNTTAB_OPT_IGNORE */ +#ifdef MNT2_GEN_OPT_CACHE + strcat(preopts, ",nocache"); +#endif /* MNT2_GEN_OPT_CACHE */ +#ifdef MNT2_NFS_OPT_SYMTTL + strcat(preopts, ",symttl=0"); +#endif /* MNT2_NFS_OPT_SYMTTL */ + mnt.mnt_opts = preopts; + } + + /* + * Make sure that amd's top-level NFS mounts are hidden by default + * from df. + * If they don't appear to support the either the "ignore" mnttab + * option entry, or the "auto" one, set the mount type to "nfs". + */ + mnt.mnt_type = HIDE_MOUNT_TYPE; + /* some systems don't have a mount type, but a mount flag */ + +#ifndef HAVE_TRANSPORT_TYPE_TLI + amu_get_myaddress(&localsocket.sin_addr); + localsocket.sin_family = AF_INET; + localsocket.sin_port = htons(nfsxprt->xp_port); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /* + * Update hostname field. + * Make some name prog:pid (i.e., hlfsd:174) for hostname + */ + sprintf(progpid_fs, "%s:%d", progname, masterpid); + + /* Most kernels have a name length restriction. */ + if ((int) strlen(progpid_fs) >= (int) MAXHOSTNAMELEN) + strcpy(progpid_fs + MAXHOSTNAMELEN - 3, ".."); + + genflags = compute_mount_flags(&mnt); + + retry = hasmntval(&mnt, MNTTAB_OPT_RETRY); + if (retry <= 0) + retry = 1; /* XXX */ + + memmove(&anh.v2.fhs_fh, root_fhp, sizeof(*root_fhp)); +#ifdef HAVE_TRANSPORT_TYPE_TLI + compute_nfs_args(&nfs_args, + &mnt, + genflags, + nfsncp, + NULL, /* remote host IP addr is set below */ + NFS_VERSION, /* version 2 */ + "udp", /* XXX: shouldn't this be "udp"? */ + &anh, + progpid_fs, /* host name for kernel */ + hostpid_fs); /* filesystem name for kernel */ + /* + * IMPORTANT: set the correct IP address AFTERWARDS. It cannot + * be done using the normal mechanism of compute_nfs_args(), because + * that one will allocate a new address and use NFS_SA_DREF() to copy + * parts to it, while assuming that the ip_addr passed is always + * a "struct sockaddr_in". That assumption is incorrect on TLI systems, + * because they define a special macro HOST_SELF which is DIFFERENT + * than localhost (127.0.0.1)! + */ + nfs_args.addr = &nfsxprt->xp_ltaddr; +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + compute_nfs_args(&nfs_args, + &mnt, + genflags, + &localsocket, + NFS_VERSION, /* version 2 */ + "udp", /* XXX: shouldn't this be "udp"? */ + &anh, + progpid_fs, /* host name for kernel */ + hostpid_fs); /* filesystem name for kernel */ +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + /************************************************************************* + * NOTE: while compute_nfs_args() works ok for regular NFS mounts * + * the toplvl one is not, and so some options must be corrected by hand * + * more carefully, *after* compute_nfs_args() runs. * + *************************************************************************/ + compute_automounter_nfs_args(&nfs_args, &mnt); + + clock_valid = 0; /* invalidate logging clock */ + +/* + * The following code could be cleverly ifdef-ed, but I duplicated the + * mount_fs call three times for simplicity and readability. + */ +#ifdef DEBUG +/* + * For some reason, this mount may have to be done in the background, if I am + * using -D nodebug. I suspect that the actual act of mounting requires + * calling to hlfsd itself to invoke one or more of its nfs calls, to stat + * /mail. That means that even if you say -D nodaemon, at least the mount + * of hlfsd itself on top of /mail will be done in the background. + * The other alternative I have is to run svc_run, but set a special + * signal handler to perform the mount in N seconds via some alarm. + * -Erez Zadok. + */ + if (debug_flags & D_DAEMON) { /* asked for -D daemon */ + plog(XLOG_INFO, "parent NFS mounting hlfsd service points"); + if (mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type, 0, NULL, mnttab_file_name) < 0) + fatal("nfsmount: %m"); + } else { /* asked for -D nodaemon */ + if (fork() == 0) { /* child runs mount */ + mypid = getpid(); + foreground = 0; + plog(XLOG_INFO, "child NFS mounting hlfsd service points"); + if (mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type, 0, NULL, mnttab_file_name) < 0) { + fatal("nfsmount: %m"); + } + exit(0); /* all went well */ + } else { /* fork failed or parent running */ + plog(XLOG_INFO, "parent waiting 1sec for mount..."); + } + } +#else /* not DEBUG */ + plog(XLOG_INFO, "normal NFS mounting hlfsd service points"); + if (mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type, 2, "udp", mnttab_file_name) < 0) + fatal("nfsmount: %m"); +#endif /* not DEBUG */ + +#ifdef HAVE_TRANSPORT_TYPE_TLI + /* + * XXX: this free_knetconfig() was not done for hlfsd before, + * and apparently there was a reason for it, but why? -Erez + */ + free_knetconfig(nfs_args.knconf); + /* + * local automounter mounts do not allocate a special address, so + * no need to XFREE(nfs_args.addr) under TLI. + */ +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + + if (printpid) + printf("%d\n", masterpid); + + plog(XLOG_INFO, "hlfsd ready to serve"); +#ifdef DEBUG + /* + * If asked not to fork a daemon (-D nodaemon), then hlfsd_init() + * will not run svc_run. We must start svc_run here. + */ + dlog("starting no-daemon debugging svc_run"); + amuDebugNo(D_DAEMON) + svc_run(); +#endif /* DEBUG */ + + cleanup(0); /* should never happen here */ + return (0); /* everything went fine? */ +} + + +static void +hlfsd_init(void) +{ + int child = 0; +#ifdef HAVE_SIGACTION + struct sigaction sa; +#endif /* HAVE_SIGACTION */ + + clock_valid = 0; /* invalidate logging clock */ + + /* + * Initialize file handles. + */ + plog(XLOG_INFO, "initializing hlfsd file handles"); + hlfsd_init_filehandles(); + +#ifdef DEBUG + /* + * If -D daemon then we must fork. + */ + amuDebug(D_DAEMON) +#endif /* DEBUG */ + child = fork(); + + if (child < 0) + fatal("fork: %m"); + + if (child != 0) { /* parent process - save child pid */ + masterpid = child; + mypid = getpid(); /* for logging routines */ + return; + } + + /* + * CHILD CODE: + * initialize server + */ + + plog(XLOG_INFO, "initializing home directory database"); + plt_init(); /* initialize database */ + plog(XLOG_INFO, "home directory database initialized"); + + masterpid = serverpid = mypid = getpid(); /* for logging routines */ + + /* + * SIGALRM/SIGHUP: reload password database if timer expired + * or user sent HUP signal. + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = reload; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGALRM); + sigaddset(&(sa.sa_mask), SIGHUP); + sigaction(SIGALRM, &sa, NULL); + sigaction(SIGHUP, &sa, NULL); +#else /* not HAVE_SIGACTION */ + signal(SIGALRM, reload); + signal(SIGHUP, reload); +#endif /* not HAVE_SIGACTION */ + + /* + * SIGTERM: cleanup and exit. + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = cleanup; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGTERM); + sigaction(SIGTERM, &sa, NULL); +#else /* not HAVE_SIGACTION */ + signal(SIGTERM, cleanup); +#endif /* not HAVE_SIGACTION */ + + /* + * SIGCHLD: interlock synchronization and testing + */ +#ifdef HAVE_SIGACTION + sa.sa_handler = interlock; + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGCHLD); + sigaction(SIGCHLD, &sa, NULL); +#else /* not HAVE_SIGACTION */ + signal(SIGCHLD, interlock); +#endif /* not HAVE_SIGACTION */ + + /* + * SIGUSR1: dump internal hlfsd maps/cache to file + */ +#ifdef HAVE_SIGACTION +# if defined(DEBUG) || defined(DEBUG_PRINT) + sa.sa_handler = plt_print; +# else /* not defined(DEBUG) || defined(DEBUG_PRINT) */ + sa.sa_handler = SIG_IGN; +# endif /* not defined(DEBUG) || defined(DEBUG_PRINT) */ + sa.sa_flags = 0; + sigemptyset(&(sa.sa_mask)); + sigaddset(&(sa.sa_mask), SIGUSR1); + sigaction(SIGUSR1, &sa, NULL); +#else /* not HAVE_SIGACTION */ +# if defined(DEBUG) || defined(DEBUG_PRINT) + signal(SIGUSR1, plt_print); +# else /* not defined(DEBUG) || defined(DEBUG_PRINT) */ + signal(SIGUSR1, SIG_IGN); +# endif /* not defined(DEBUG) || defined(DEBUG_PRINT) */ +#endif /* not HAVE_SIGACTION */ + + if (setitimer(ITIMER_REAL, &reloadinterval, (struct itimerval *) 0) < 0) + fatal("setitimer: %m"); + + gettimeofday((struct timeval *) &startup, (struct timezone *) 0); + +#ifdef DEBUG + /* + * If -D daemon, then start serving here in the child, + * and the parent will exit. But if -D nodaemon, then + * skip this code and make sure svc_run is entered elsewhere. + */ + amuDebug(D_DAEMON) { +#endif /* DEBUG */ + + /* + * Dissociate from the controlling terminal + */ + amu_release_controlling_tty(); + + /* + * signal parent we are ready. parent should + * mount(2) and die. + */ + if (kill(getppid(), SIGUSR2) < 0) + fatal("kill: %m"); + plog(XLOG_INFO, "starting svc_run"); + svc_run(); + cleanup(0); /* should never happen, just in case */ +#ifdef DEBUG + } /* end of code that runs iff hlfsd daemonizes */ +#endif /* DEBUG */ + +} + + +static RETSIGTYPE +proceed(int signum) +{ + stoplight = signum; +} + + +static RETSIGTYPE +reload(int signum) +{ + int child; + int status; + + clock_valid = 0; /* invalidate logging clock */ + + if (getpid() != masterpid) + return; + + /* + * If received a SIGHUP, close and reopen the log file (so that it + * can be rotated) + */ + if (signum == SIGHUP && logfile) + switch_to_logfile(logfile); + + /* + * parent performs the reload, while the child continues to serve + * clients accessing the home dir link. + */ + if ((child = fork()) > 0) { + serverpid = child; /* parent runs here */ + mypid = getpid(); + + plt_init(); + + if (kill(child, SIGKILL) < 0) { + plog(XLOG_ERROR, "kill child: %m"); + } else { /* wait for child to die before continue */ + if (wait(&status) != child) { + /* + * I took out this line because it generates annoying output. It + * indicates a very small bug in hlfsd which is totally harmless. + * It causes hlfsd to work a bit harder than it should. + * Nevertheless, I intend on fixing it in a future release. + * -Erez Zadok + */ + /* plog(XLOG_ERROR, "unknown child"); */ + } + } + serverpid = masterpid; + } else if (child < 0) { + plog(XLOG_ERROR, "unable to fork: %m"); + } else { + /* let child handle requests while we reload */ + serverpid = getpid(); + mypid = getpid(); + } +} + + +RETSIGTYPE +cleanup(int signum) +{ + struct stat stbuf; + int umount_result; + + clock_valid = 0; /* invalidate logging clock */ + +#ifdef DEBUG + amuDebug(D_DAEMON) +#endif /* DEBUG */ + if (getpid() != masterpid) + return; + +#ifdef DEBUG + amuDebug(D_DAEMON) +#endif /* DEBUG */ + if (fork() != 0) { + masterpid = 0; + mypid = getpid(); + return; + } + mypid = getpid(); + + for (;;) { + while ((umount_result = UMOUNT_FS(dir_name, mnttab_file_name)) == EBUSY) { +#ifdef DEBUG + dlog("cleanup(): umount delaying for 10 seconds"); +#endif /* DEBUG */ + sleep(10); + } + if (stat(dir_name, &stbuf) == 0 && stbuf.st_ino == ROOTID) { + plog(XLOG_ERROR, "unable to unmount %s", dir_name); + plog(XLOG_ERROR, "suspending, unmount before terminating"); + kill(mypid, SIGSTOP); + continue; /* retry unmount */ + } + break; + } + +#ifdef DEBUG + dlog("cleanup(): killing processes and terminating"); + amuDebug(D_DAEMON) +#endif /* DEBUG */ + kill(masterpid, SIGKILL); + +#ifdef DEBUG + amuDebug(D_DAEMON) +#endif /* DEBUG */ + kill(serverpid, SIGKILL); + + plog(XLOG_INFO, "hlfsd terminating with status 0\n"); + exit(0); +} + + +static RETSIGTYPE +reaper(int signum) +{ + int result; + + if (wait(&result) == masterpid) { + exit(4); + } +} + + +void +hlfsd_going_down(int rc) +{ + int mypid = getpid(); + + if (mypid == masterpid) + cleanup(0); + else if (mypid == serverpid) + kill(masterpid, SIGTERM); + + exit(rc); +} + + +void +fatal(char *mess) +{ + if (logfile && !STREQ(logfile, "stderr")) { + char lessmess[128]; + int messlen; + + messlen = strlen(mess); + + if (!STREQ(&mess[messlen + 1 - sizeof(ERRM)], ERRM)) + fprintf(stderr, "%s: %s\n", progname, mess); + else { + strcpy(lessmess, mess); + lessmess[messlen - 4] = '\0'; + + if (errno < sys_nerr) + fprintf(stderr, "%s: %s: %s\n", progname, + lessmess, sys_errlist[errno]); + else + fprintf(stderr, "%s: %s: Error %d\n", + progname, lessmess, errno); + } + } + plog(XLOG_FATAL, mess); + + hlfsd_going_down(1); +} diff --git a/hlfsd/hlfsd.h b/hlfsd/hlfsd.h new file mode 100644 index 0000000..a573f6f --- /dev/null +++ b/hlfsd/hlfsd.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: hlfsd.h,v 1.1 1998/11/05 02:04:55 ezk Exp $ + * + * HLFSD was written at Columbia University Computer Science Department, by + * Erez Zadok and Alexander Dupuy + * It is being distributed under the same terms and conditions as amd does. + */ + +#ifndef _HLFSD_HLFS_H +#define _HLFSD_HLFS_H + +/* + * MACROS AND CONSTANTS: + */ + +#define HLFSD_VERSION "hlfsd 1.1 (March 4, 1997-1998)" +#define PERS_SPOOLMODE 0755 +#define OPEN_SPOOLMODE 01777 +#define DOTSTRING "." + +/* + * ROOTID and SLINKID are the fixed "faked" node IDs (inodes) for + * the '.' (also '..') and the one symlink within the hlfs. + * They must always be unique, and should never match what a UID + * could be. + * They used to be -1 and -2, respectively. + * + * I used to cast these to (uid_t) but it failed to compile + * with /opt/SUNWspro/bin/cc because uid_t is long, while struct fattr's + * uid field is u_int. Then it failed to compile on some linux systems + * which define uid_t to be unsigned short, so I used the lowest common + * size which is unsigned short. + */ +#ifdef EXPERIMENTAL_UID_SIZE +#define UID_SHIFT 30 +# define ROOTID ((1 << UID_SHIFT) - 1) +# define SLINKID ((1 << UID_SHIFT) - 2) +# define INVALIDID ((1 << UID_SHIFT) - 3) +#else /* not EXPERIMENTAL_UID_SIZE */ +/* + * XXX: this will cause problems to systems with UIDs greater than + * MAX_UNSIGNED_SHORT-3. + */ +# define ROOTID (((unsigned short) ~0) - 1) +# define SLINKID (((unsigned short) ~0) - 2) +# define INVALIDID (((unsigned short) ~0) - 3) +#endif /* not EXPERIMENTAL_UID_SIZE */ + + +#define DOTCOOKIE 1 +#define DOTDOTCOOKIE 2 +#define SLINKCOOKIE 3 + +#define ALT_SPOOLDIR "/var/hlfs" /* symlink to use if others fail */ +#define HOME_SUBDIR ".hlfsdir" /* dirname in user's home dir */ +#define DEFAULT_DIRNAME "/hlfs/home" +#define DEFAULT_INTERVAL 900 /* secs b/t re-reads of the password maps */ +#define DEFAULT_CACHE_INTERVAL 300 /* secs during which assume a link is up */ +#define DEFAULT_HLFS_GROUP "hlfs" /* Group name for special hlfs_gid */ + +#define PROGNAMESZ (MAXHOSTNAMELEN - 5) + +#ifdef HAVE_SYSLOG +# define DEFAULT_LOGFILE "syslog" +#else /* not HAVE)_SYSLOG */ +# define DEFAULT_LOGFILE 0 +#endif /* not HAVE)_SYSLOG */ + +#define ERRM ": %m" +#define fatalerror(str) \ + (fatal (strcat (strnsave ((str), strlen ((str)) + sizeof (ERRM) - 1), ERRM))) + +/* + * TYPEDEFS: + */ +typedef struct uid2home_t uid2home_t; +typedef struct username2uid_t username2uid_t; + + +/* + * STRUCTURES: + */ +struct uid2home_t { + uid_t uid; /* XXX: with or without UID_OFFSET? */ + pid_t child; + char *home; /* really allocated */ + char *uname; /* an xref ptr to username2uid_t->username */ + u_long last_access_time; + int last_status; /* 0=used $HOME/.hlfsspool; !0=used alt dir */ +}; + +struct username2uid_t { + char *username; /* really allocated */ + uid_t uid; /* XXX: with or without UID_OFFSET? */ + char *home; /* an xref ptr to uid2home_t->home */ +}; + +/* + * EXTERNALS: + */ +extern RETSIGTYPE cleanup(int); +extern RETSIGTYPE interlock(int); +extern SVCXPRT *nfs_program_2_transp; /* For quick_reply() */ +extern SVCXPRT *nfsxprt; +extern char *alt_spooldir; +extern char *home_subdir; +extern char *homedir(int); +extern char *mailbox(int, char *); +extern char *passwdfile; +extern char *slinkname; +extern char mboxfile[]; +extern gid_t hlfs_gid; +extern int cache_interval; +extern int noverify; +extern int serverpid; +extern int sys_nerr; +extern int untab_index(char *username); +extern am_nfs_fh *root_fhp; +extern am_nfs_fh root; +extern nfstime startup; +extern uid2home_t *plt_search(int); +extern username2uid_t *untab; /* user name table */ +extern void fatal(char *); +extern void plt_init(void); +extern void hlfsd_init_filehandles(void); + +#if defined(DEBUG) || defined(DEBUG_PRINT) +extern void plt_dump(uid2home_t *, pid_t); +extern void plt_print(int); +#endif /* defined(DEBUG) || defined(DEBUG_PRINT) */ + +#endif /* _HLFSD_HLFS_H */ diff --git a/hlfsd/homedir.c b/hlfsd/homedir.c new file mode 100644 index 0000000..1d6960b --- /dev/null +++ b/hlfsd/homedir.c @@ -0,0 +1,799 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: homedir.c,v 1.1 1998/11/05 02:04:55 ezk Exp $ + * + * HLFSD was written at Columbia University Computer Science Department, by + * Erez Zadok and Alexander Dupuy + * It is being distributed under the same terms and conditions as amd does. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * STATIC VARIABLES AND FUNCTIONS: + */ +static FILE *passwd_fp = NULL; +static char pw_name[16], pw_dir[128]; +static int cur_pwtab_num = 0, max_pwtab_num = 0; +static int hlfsd_diskspace(char *); +static int hlfsd_stat(char *, struct stat *); +static int passwd_line = 0; +static int plt_reset(void); +static struct passwd passwd_ent; +static uid2home_t *lastchild; +static uid2home_t *pwtab; +static void delay(uid2home_t *, int); +static void table_add(int, char *, char *); + +/* GLOBAL FUNCTIONS */ +char *homeof(char *username); +int uidof(char *username); + +/* GLOBALS VARIABLES */ +char mboxfile[MAXPATHLEN]; +username2uid_t *untab; /* user name table */ + + +/* + * Return the home directory pathname for the user with uid "userid". + */ +char * +homedir(int userid) +{ + static char linkval[MAXPATHLEN + 1]; + static struct timeval tp; + uid2home_t *found; + char *homename; + struct stat homestat; + + clock_valid = 0; /* invalidate logging clock */ + + if ((int) userid == 0) { /* force superuser to use "/" as home */ + sprintf(linkval, "/%s", home_subdir); + return linkval; + } + if ((found = plt_search(userid)) == (uid2home_t *) NULL) { + return alt_spooldir; /* use alt spool for unknown uid */ + } + homename = found->home; + + if (homename[0] != '/' || homename[1] == '\0') { + found->last_status = 1; + return alt_spooldir; /* use alt spool for / or rel. home */ + } + sprintf(linkval, "%s/%s", homename, home_subdir); + + if (noverify) { + found->last_status = 0; + return linkval; + } + + /* + * To optimize hlfsd, we don't actually check the validity of the + * symlink if it has been in checked in the last N seconds. It is + * very likely that the link, machine, and filesystem are still + * valid, as long as N is small. But if N ls large, that may not be + * true. That's why the default N is 5 minutes, but we allow the + * user to override this value via a command line option. Note that + * we do not update the last_access_time each time it is accessed, + * but only once every N seconds. + */ + if (gettimeofday(&tp, (struct timezone *) NULL) < 0) { + tp.tv_sec = 0; + } else { + if ((tp.tv_sec - found->last_access_time) < cache_interval) { + if (found->last_status == 0) { + return linkval; + } else { + return alt_spooldir; + } + } else { + found->last_access_time = tp.tv_sec; + } + } + +#ifdef DEBUG + /* + * only run this forking code if asked for -D fork + * or if did not ask for -D nofork + */ + amuDebug(D_FORK) { +#endif /* DEBUG */ + /* fork child to process request if none in progress */ + if (found->child && kill(found->child, 0)) + found->child = 0; + + if (found->child) + delay(found, 5); /* wait a bit if in progress */ + if (found->child) { /* better safe than sorry - maybe */ + found->last_status = 1; + return alt_spooldir; + } + if ((found->child = fork()) < 0) { + found->last_status = 1; + return alt_spooldir; + } + if (found->child) { /* PARENT */ +#ifdef DEBUG + if (lastchild) + plog(XLOG_INFO, "cache spill uid = %d, pid = %d, home = %s", + lastchild->uid, lastchild->child, + lastchild->home); +#endif /* DEBUG */ + lastchild = found; + return (char *) NULL; /* return NULL to parent, so it can continue */ + } +#ifdef DEBUG + } /* end of Debug(D_FORK) */ +#endif /* DEBUG */ + + /* + * CHILD: (or parent if -D nofork) + * + * Check and create dir if needed. + * Check disk space and/or quotas too. + * + * We don't need to set the _last_status field of found after the fork + * in the child, b/c that information would be later determined in + * nfsproc_readlink_2() and the correct exit status would be returned + * to the parent upon SIGCHLD in interlock(). + * + */ + mypid = getpid(); /* for logging routines */ + if (seteuid(userid) < 0) { + plog(XLOG_WARNING, "could not seteuid to %d: %m", userid); + return linkval; + } + if (hlfsd_stat(linkval, &homestat) < 0) { + if (errno == ENOENT) { /* make the spool dir if possible */ + /* don't use recursive mkdirs here */ + if (mkdir(linkval, PERS_SPOOLMODE) < 0) { + seteuid(0); + plog(XLOG_WARNING, "can't make directory %s: %m", linkval); + return alt_spooldir; + } + /* fall through to testing the disk space / quota */ + } else { /* the home dir itself must not exist then */ + seteuid(0); + plog(XLOG_WARNING, "bad link to %s: %m", linkval); + return alt_spooldir; + } + } + + /* + * If gets here, then either the spool dir in the home dir exists, + * or it was just created. In either case, we now need to + * test if we can create a small file and write at least one + * byte into it. This will test that we have both enough inodes + * and disk blocks to spare, or they fall within the user's quotas too. + * We are still seteuid to the user at this point. + */ + if (hlfsd_diskspace(linkval) < 0) { + seteuid(0); + plog(XLOG_WARNING, "no more space in %s: %m", linkval); + return alt_spooldir; + } else { + seteuid(0); + return linkval; + } +} + + +static int +hlfsd_diskspace(char *path) +{ + char buf[MAXPATHLEN]; + int fd, len; + + clock_valid = 0; /* invalidate logging clock */ + + sprintf(buf, "%s/._hlfstmp_%lu", path, (long) getpid()); + if ((fd = open(buf, O_RDWR | O_CREAT, 0600)) < 0) { + plog(XLOG_ERROR, "cannot open %s: %m", buf); + return -1; + } + len = strlen(buf); + if (write(fd, buf, len) < len) { + plog(XLOG_ERROR, "cannot write \"%s\" (%d bytes) to %s : %m", buf, len, buf); + close(fd); + unlink(buf); /* cleanup just in case */ + return -1; + } + if (unlink(buf) < 0) { + plog(XLOG_ERROR, "cannot unlink %s : %m", buf); + } + close(fd); + return 0; +} + + +static int +hlfsd_stat(char *path, struct stat *statp) +{ + if (stat(path, statp) < 0) + return -1; + else if (!S_ISDIR(statp->st_mode)) { + errno = ENOTDIR; + return -1; + } + return 0; +} + + +static void +delay(uid2home_t *found, int secs) +{ + struct timeval tv; + +#ifdef DEBUG + if (found) + dlog("delaying on child %d for %d seconds", found->child, secs); +#endif /* DEBUG */ + + tv.tv_usec = 0; + + do { + tv.tv_sec = secs; + if (select(0, 0, 0, 0, &tv) == 0) + break; + } while (--secs && found->child); +} + + +/* + * This function is called when a child has terminated after + * servicing an nfs request. We need to check the exit status and + * update the last_status field of the requesting user. + */ +RETSIGTYPE +interlock(int signum) +{ + int child; + uid2home_t *lostchild; + int status; + +#ifdef HAVE_WAITPID + while ((child = waitpid((pid_t) -1, &status, WNOHANG)) > 0) { +#else /* not HAVE_WAITPID */ + while ((child = wait3(&status, WNOHANG, (struct rusage *) 0)) > 0) { +#endif /* not HAVE_WAITPID */ + + /* high chances this was the last child forked */ + if (lastchild && lastchild->child == child) { + lastchild->child = 0; + + if (WIFEXITED(status)) + lastchild->last_status = WEXITSTATUS(status); + lastchild = (uid2home_t *) NULL; + } else { + /* and if not, we have to search for it... */ + for (lostchild = pwtab; lostchild < &pwtab[cur_pwtab_num]; lostchild++) { + if (lostchild->child == child) { + if (WIFEXITED(status)) + lostchild->last_status = WEXITSTATUS(status); + lostchild->child = 0; + break; + } + } + } + } +} + + +/* + * PASSWORD AND USERNAME LOOKUP TABLES FUNCTIONS + */ + +/* + * get index of UserName table entry which matches username. + * must not return uid_t because we want to return a negative number. + */ +int +untab_index(char *username) +{ + int max, min, mid, cmp; + + max = cur_pwtab_num - 1; + min = 0; + + do { + mid = (max + min) / 2; + cmp = strcmp(untab[mid].username, username); + if (cmp == 0) /* record found! */ + return mid; + if (cmp > 0) + max = mid; + else + min = mid; + } while (max > min + 1); + + if (STREQ(untab[max].username, username)) + return max; + if (STREQ(untab[min].username, username)) + return min; + + /* if gets here then record was not found */ + return -1; +} + + +/* + * Don't make this return a uid_t, because we need to return negative + * numbers as well (error codes.) + */ +int +uidof(char *username) +{ + int idx; + + if ((idx = untab_index(username)) < 0) /* not found */ + return INVALIDID; /* an invalid user id */ + return untab[idx].uid; +} + + +/* + * Don't make this return a uid_t, because we need to return negative + * numbers as well (error codes.) + */ +char * +homeof(char *username) +{ + int idx; + + if ((idx = untab_index(username)) < 0) /* not found */ + return (char *) NULL; /* an invalid user id */ + return untab[idx].home; +} + + +char * +mailbox(int uid, char *username) +{ + char *home; + + if (uid < 0) + return (char *) NULL; /* not found */ + + if ((home = homeof(username)) == (char *) NULL) + return (char *) NULL; + if (STREQ(home, "/")) + sprintf(mboxfile, "/%s/%s", home_subdir, username); + else + sprintf(mboxfile, "%s/%s/%s", home, home_subdir, username); + return mboxfile; +} + + +static int +plt_compare_fxn(const voidp x, const voidp y) + +{ + uid2home_t *i = (uid2home_t *) x; + uid2home_t *j = (uid2home_t *) y; + + return i->uid - j->uid; +} + + +static int +unt_compare_fxn(const voidp x, const voidp y) +{ + username2uid_t *i = (username2uid_t *) x; + username2uid_t *j = (username2uid_t *) y; + + return strcmp(i->username, j->username); +} + + +/* perform initialization of user passwd database */ +static void +hlfsd_setpwent(void) +{ + if (!passwdfile) { + setpwent(); + return; + } + + passwd_fp = fopen(passwdfile, "r"); + if (!passwd_fp) { + plog(XLOG_ERROR, "unable to read passwd file %s: %m", passwdfile); + return; + } + plog(XLOG_INFO, "reading password entries from file %s", passwdfile); + + passwd_line = 0; + memset((char *) &passwd_ent, 0, sizeof(struct passwd)); + passwd_ent.pw_name = (char *) &pw_name; + passwd_ent.pw_dir = (char *) &pw_dir; +} + + +/* perform de-initialization of user passwd database */ +static void +hlfsd_endpwent(void) +{ + if (!passwdfile) { + /* + * Don't actually run this because we will be making more passwd calls + * afterwards. On Solaris 2.5.1, making getpwent() calls after calling + * endpwent() results in a memory leak! (and no, even Purify didn't + * detect it...) + * + endpwent(); + */ + return; + } + + if (passwd_fp) { + fclose(passwd_fp); + } +} + + +/* perform record reading/parsing of individual passwd database records */ +static struct passwd * +hlfsd_getpwent(void) +{ + char buf[256], *cp; + + /* check if to perform standard unix function */ + if (!passwdfile) { + return getpwent(); + } + + clock_valid = 0; /* invalidate logging clock */ + + /* return here to read another entry */ +readent: + + /* return NULL if reached end of file */ + if (feof(passwd_fp)) + return NULL; + + pw_name[0] = pw_dir[0] = '\0'; + + /* read records */ + buf[0] = '\0'; + fgets(buf, 256, passwd_fp); + passwd_line++; + if (!buf || buf[0] == '\0') + goto readent; + + /* read user name */ + cp = strtok(buf, ":"); + if (!cp || cp[0] == '\0') { + plog(XLOG_ERROR, "no user name on line %d of %s", passwd_line, passwdfile); + goto readent; + } + strcpy(pw_name, cp); /* will show up in passwd_ent.pw_name */ + + /* skip passwd */ + strtok(NULL, ":"); + + /* read uid */ + cp = strtok(NULL, ":"); + if (!cp || cp[0] == '\0') { + plog(XLOG_ERROR, "no uid on line %d of %s", passwd_line, passwdfile); + goto readent; + } + passwd_ent.pw_uid = atoi(cp); + + /* skip gid and gcos */ + strtok(NULL, ":"); + strtok(NULL, ":"); + + /* read home dir */ + cp = strtok(NULL, ":"); + if (!cp || cp[0] == '\0') { + plog(XLOG_ERROR, "no home dir on line %d of %s", passwd_line, passwdfile); + goto readent; + } + strcpy(pw_dir, cp); /* will show up in passwd_ent.pw_dir */ + + /* the rest of the fields are unimportant and not being considered */ + + plog(XLOG_USER, "hlfsd_getpwent: name=%s, uid=%d, dir=%s", + passwd_ent.pw_name, passwd_ent.pw_uid, passwd_ent.pw_dir); + + return &passwd_ent; +} + + +/* + * read and hash the passwd file or NIS map + */ +void +plt_init(void) +{ + struct passwd *pent_p; + + if (plt_reset() < 0) /* could not reset table. skip. */ + return; + + plog(XLOG_INFO, "reading password map"); + + hlfsd_setpwent(); /* prepare to read passwd entries */ + while ((pent_p = hlfsd_getpwent()) != (struct passwd *) NULL) { + table_add(pent_p->pw_uid, pent_p->pw_dir, pent_p->pw_name); + } + hlfsd_endpwent(); + + qsort((char *) pwtab, cur_pwtab_num, sizeof(uid2home_t), + plt_compare_fxn); + qsort((char *) untab, cur_pwtab_num, sizeof(username2uid_t), + unt_compare_fxn); + + plog(XLOG_INFO, "password map read and sorted"); +} + + +/* + * This is essentially so that we don't reset known good lookup tables when a + * YP server goes down. + */ +static int +plt_reset(void) +{ + int i; + + clock_valid = 0; /* invalidate logging clock */ + + hlfsd_setpwent(); + if (hlfsd_getpwent() == (struct passwd *) NULL) { + hlfsd_endpwent(); + return -1; /* did not reset table */ + } + hlfsd_endpwent(); + + lastchild = (uid2home_t *) NULL; + + if (max_pwtab_num > 0) /* was used already. cleanup old table */ + for (i = 0; i < cur_pwtab_num; ++i) { + if (pwtab[i].home) { + XFREE(pwtab[i].home); + pwtab[i].home = (char *) NULL; + } + pwtab[i].uid = INVALIDID; /* not a valid uid (yet...) */ + pwtab[i].child = (pid_t) 0; + pwtab[i].uname = (char *) NULL; /* only a ptr to untab[i].username */ + if (untab[i].username) { + XFREE(untab[i].username); + untab[i].username = (char *) NULL; + } + untab[i].uid = INVALIDID; /* invalid uid */ + untab[i].home = (char *) NULL; /* only a ptr to pwtab[i].home */ + } + cur_pwtab_num = 0; /* zero current size */ + + return 0; /* resetting ok */ +} + + +/* + * u: uid number + * h: home directory + * n: user ID name + */ +static void +table_add(int u, char *h, char *n) +{ + int i; + + clock_valid = 0; /* invalidate logging clock */ + + if (max_pwtab_num <= 0) { /* was never initialized */ + max_pwtab_num = 1; + pwtab = (uid2home_t *) xmalloc(max_pwtab_num * + sizeof(uid2home_t)); + memset((char *) &pwtab[0], 0, max_pwtab_num * sizeof(uid2home_t)); + untab = (username2uid_t *) xmalloc(max_pwtab_num * + sizeof(username2uid_t)); + memset((char *) &untab[0], 0, max_pwtab_num * sizeof(username2uid_t)); + } + + /* check if need more space. */ + if (cur_pwtab_num + 1 > max_pwtab_num) { + /* need more space in table */ + max_pwtab_num *= 2; + plog(XLOG_INFO, "reallocating table spaces to %d entries", max_pwtab_num); + pwtab = (uid2home_t *) xrealloc(pwtab, + sizeof(uid2home_t) * max_pwtab_num); + untab = (username2uid_t *) xrealloc(untab, + sizeof(username2uid_t) * + max_pwtab_num); + /* zero out newly added entries */ + for (i=cur_pwtab_num; i u) + max = mid; + else + min = mid; + } while (max > min + 1); + + if (pwtab[max].uid == u) + return &pwtab[max]; + if (pwtab[min].uid == u) + return &pwtab[min]; + + /* if gets here then record was not found */ + return (uid2home_t *) NULL; +} + + +#if defined(DEBUG) || defined(DEBUG_PRINT) +void +plt_print(int signum) +{ + FILE *dumpfile; + int dumpfd; + char dumptmp[] = "/usr/tmp/hlfsd.dump.XXXXXX"; + int i; + +#ifdef HAVE_MKSTEMP + dumpfd = mkstemp(dumptmp); +#else /* not HAVE_MKSTEMP */ + mktemp(dumptmp); + if (!dumptmp) { + plot(XLOG_ERROR, "cannot create temporary dump file"); + return; + } + dumpfd = open(dumptmp, O_RDONLY); +#endif /* not HAVE_MKSTEMP */ + if (dumpfd < 0) { + plog(XLOG_ERROR, "cannot open temporary dump file"); + return; + } + if ((dumpfile = fdopen(dumpfd, "a")) != NULL) { + plog(XLOG_INFO, "dumping internal state to file %s", dumptmp); + fprintf(dumpfile, "\n\nNew plt_dump():\n"); + for (i = 0; i < cur_pwtab_num; ++i) + fprintf(dumpfile, + "%4d %5lu %10lu %1d %4lu \"%s\" uname=\"%s\"\n", + i, + (long) pwtab[i].child, + pwtab[i].last_access_time, + pwtab[i].last_status, + (long) pwtab[i].uid, + pwtab[i].home, + pwtab[i].uname); + fprintf(dumpfile, "\nUserName table by plt_print():\n"); + for (i = 0; i < cur_pwtab_num; ++i) + fprintf(dumpfile, "%4d : \"%s\" %4lu \"%s\"\n", i, + untab[i].username, (long) untab[i].uid, untab[i].home); + close(dumpfd); + fclose(dumpfile); + } +} + + +void +plt_dump(uid2home_t *lastc, pid_t this) +{ + FILE *dumpfile; + int i; + + if ((dumpfile = fopen("/var/tmp/hlfsdump", "a")) != NULL) { + fprintf(dumpfile, "\n\nNEW PLT_DUMP -- "); + fprintf(dumpfile, "lastchild->child=%d ", + (int) (lastc ? lastc->child : -999)); + fprintf(dumpfile, ", child from wait3=%lu:\n", (long) this); + for (i = 0; i < cur_pwtab_num; ++i) + fprintf(dumpfile, "%4d %5lu: %4lu \"%s\" uname=\"%s\"\n", i, + (long) pwtab[i].child, (long) pwtab[i].uid, + pwtab[i].home, pwtab[i].uname); + fprintf(dumpfile, "\nUserName table by plt_dump():\n"); + for (i = 0; i < cur_pwtab_num; ++i) + fprintf(dumpfile, "%4d : \"%s\" %4lu \"%s\"\n", i, + untab[i].username, (long) untab[i].uid, untab[i].home); + fprintf(dumpfile, "ezk: ent=%d, uid=%lu, home=\"%s\"\n", + untab_index("ezk"), + (long) untab[untab_index("ezk")].uid, + pwtab[untab[untab_index("ezk")].uid].home); + fprintf(dumpfile, "rezk: ent=%d, uid=%lu, home=\"%s\"\n", + untab_index("rezk"), + (long) untab[untab_index("rezk")].uid, + pwtab[untab[untab_index("rezk")].uid].home); + fclose(dumpfile); + } +} +#endif /* defined(DEBUG) || defined(DEBUG_PRINT) */ diff --git a/hlfsd/nfs_prot_svc.c b/hlfsd/nfs_prot_svc.c new file mode 100644 index 0000000..44506af --- /dev/null +++ b/hlfsd/nfs_prot_svc.c @@ -0,0 +1,250 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_svc.c,v 1.1 1998/11/05 02:04:55 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* EXTERNAL FUNCTIONS */ +extern voidp nfsproc_null_2_svc(voidp, struct svc_req *); +extern nfsattrstat * nfsproc_getattr_2_svc(am_nfs_fh *, struct svc_req *); +extern nfsattrstat * nfsproc_setattr_2_svc(nfssattrargs *, struct svc_req *); +extern voidp nfsproc_root_2_svc(voidp, struct svc_req *); +extern nfsdiropres * nfsproc_lookup_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreadlinkres * nfsproc_readlink_2_svc(am_nfs_fh *, struct svc_req *); +extern nfsreadres * nfsproc_read_2_svc(nfsreadargs *, struct svc_req *); +extern voidp nfsproc_writecache_2_svc(voidp, struct svc_req *); +extern nfsattrstat * nfsproc_write_2_svc(nfswriteargs *, struct svc_req *); +extern nfsdiropres * nfsproc_create_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_remove_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsstat * nfsproc_rename_2_svc(nfsrenameargs *, struct svc_req *); +extern nfsstat * nfsproc_link_2_svc(nfslinkargs *, struct svc_req *); +extern nfsstat * nfsproc_symlink_2_svc(nfssymlinkargs *, struct svc_req *); +extern nfsdiropres * nfsproc_mkdir_2_svc(nfscreateargs *, struct svc_req *); +extern nfsstat * nfsproc_rmdir_2_svc(nfsdiropargs *, struct svc_req *); +extern nfsreaddirres * nfsproc_readdir_2_svc(nfsreaddirargs *, struct svc_req *); +extern nfsstatfsres * nfsproc_statfs_2_svc(am_nfs_fh *, struct svc_req *); + +/* GLOBALS */ +SVCXPRT *nfs_program_2_transp; + +/* TYPEDEFS */ +typedef char *(*nfssvcproc_t)(voidp, struct svc_req *); + + +void +nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) +{ + union { + am_nfs_fh nfsproc_getattr_2_arg; + nfssattrargs nfsproc_setattr_2_arg; + nfsdiropargs nfsproc_lookup_2_arg; + am_nfs_fh nfsproc_readlink_2_arg; + nfsreadargs nfsproc_read_2_arg; + nfswriteargs nfsproc_write_2_arg; + nfscreateargs nfsproc_create_2_arg; + nfsdiropargs nfsproc_remove_2_arg; + nfsrenameargs nfsproc_rename_2_arg; + nfslinkargs nfsproc_link_2_arg; + nfssymlinkargs nfsproc_symlink_2_arg; + nfscreateargs nfsproc_mkdir_2_arg; + nfsdiropargs nfsproc_rmdir_2_arg; + nfsreaddirargs nfsproc_readdir_2_arg; + am_nfs_fh nfsproc_statfs_2_arg; + } argument; + char *result; + xdrproc_t xdr_argument, xdr_result; + nfssvcproc_t local; + + nfs_program_2_transp = NULL; + + switch (rqstp->rq_proc) { + + case NFSPROC_NULL: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (nfssvcproc_t) nfsproc_null_2_svc; + break; + + case NFSPROC_GETATTR: + xdr_argument = (xdrproc_t) xdr_nfs_fh; + xdr_result = (xdrproc_t) xdr_attrstat; + local = (nfssvcproc_t) nfsproc_getattr_2_svc; + break; + + case NFSPROC_SETATTR: + xdr_argument = (xdrproc_t) xdr_sattrargs; + xdr_result = (xdrproc_t) xdr_attrstat; + local = (nfssvcproc_t) nfsproc_setattr_2_svc; + break; + + case NFSPROC_ROOT: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (nfssvcproc_t) nfsproc_root_2_svc; + break; + + case NFSPROC_LOOKUP: + xdr_argument = (xdrproc_t) xdr_diropargs; + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_lookup_2_svc; + /* + * Cheap way to pass transp down to afs_lookuppn so it can + * be stored in the am_node structure and later used for + * quick_reply(). + */ + nfs_program_2_transp = transp; + break; + + case NFSPROC_READLINK: + xdr_argument = (xdrproc_t) xdr_nfs_fh; + xdr_result = (xdrproc_t) xdr_readlinkres; + local = (nfssvcproc_t) nfsproc_readlink_2_svc; + break; + + case NFSPROC_READ: + xdr_argument = (xdrproc_t) xdr_readargs; + xdr_result = (xdrproc_t) xdr_readres; + local = (nfssvcproc_t) nfsproc_read_2_svc; + break; + + case NFSPROC_WRITECACHE: + xdr_argument = (xdrproc_t) xdr_void; + xdr_result = (xdrproc_t) xdr_void; + local = (nfssvcproc_t) nfsproc_writecache_2_svc; + break; + + case NFSPROC_WRITE: + xdr_argument = (xdrproc_t) xdr_writeargs; + xdr_result = (xdrproc_t) xdr_attrstat; + local = (nfssvcproc_t) nfsproc_write_2_svc; + break; + + case NFSPROC_CREATE: + xdr_argument = (xdrproc_t) xdr_createargs; + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_create_2_svc; + break; + + case NFSPROC_REMOVE: + xdr_argument = (xdrproc_t) xdr_diropargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_remove_2_svc; + break; + + case NFSPROC_RENAME: + xdr_argument = (xdrproc_t) xdr_renameargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_rename_2_svc; + break; + + case NFSPROC_LINK: + xdr_argument = (xdrproc_t) xdr_linkargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_link_2_svc; + break; + + case NFSPROC_SYMLINK: + xdr_argument = (xdrproc_t) xdr_symlinkargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_symlink_2_svc; + break; + + case NFSPROC_MKDIR: + xdr_argument = (xdrproc_t) xdr_createargs; + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_mkdir_2_svc; + break; + + case NFSPROC_RMDIR: + xdr_argument = (xdrproc_t) xdr_diropargs; + xdr_result = (xdrproc_t) xdr_nfsstat; + local = (nfssvcproc_t) nfsproc_rmdir_2_svc; + break; + + case NFSPROC_READDIR: + xdr_argument = (xdrproc_t) xdr_readdirargs; + xdr_result = (xdrproc_t) xdr_readdirres; + local = (nfssvcproc_t) nfsproc_readdir_2_svc; + break; + + case NFSPROC_STATFS: + xdr_argument = (xdrproc_t) xdr_nfs_fh; + xdr_result = (xdrproc_t) xdr_statfsres; + local = (nfssvcproc_t) nfsproc_statfs_2_svc; + break; + + default: + svcerr_noproc(transp); + return; + } + + memset((char *) &argument, 0, sizeof(argument)); + if (!svc_getargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) &argument)) { + plog(XLOG_ERROR, + "NFS xdr decode failed for %d %d %d", + rqstp->rq_prog, rqstp->rq_vers, rqstp->rq_proc); + svcerr_decode(transp); + return; + } + result = (*local) (&argument, rqstp); + + nfs_program_2_transp = NULL; + + if (result != NULL && !svc_sendreply(transp, + (XDRPROC_T_TYPE) xdr_result, + result)) { + svcerr_systemerr(transp); + } + if (!svc_freeargs(transp, + (XDRPROC_T_TYPE) xdr_argument, + (SVC_IN_ARG_TYPE) & argument)) { + plog(XLOG_FATAL, "unable to free rpc arguments in nfs_program_2"); + going_down(1); + } +} diff --git a/hlfsd/stubs.c b/hlfsd/stubs.c new file mode 100644 index 0000000..fd1c578 --- /dev/null +++ b/hlfsd/stubs.c @@ -0,0 +1,530 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: stubs.c,v 1.1 1998/11/05 02:04:55 ezk Exp $ + * + * HLFSD was written at Columbia University Computer Science Department, by + * Erez Zadok and Alexander Dupuy + * It is being distributed under the same terms and conditions as amd does. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * STATIC VARIABLES: + */ +static nfsfattr rootfattr = {NFDIR, 0040555, 2, 0, 0, 512, 512, 0, + 1, 0, ROOTID}; +static nfsfattr slinkfattr = {NFLNK, 0120777, 1, 0, 0, NFS_MAXPATHLEN, 512, 0, + (NFS_MAXPATHLEN + 1) / 512, 0, SLINKID}; + /* user name file attributes */ +static nfsfattr un_fattr = {NFLNK, 0120777, 1, 0, 0, NFS_MAXPATHLEN, 512, 0, + (NFS_MAXPATHLEN + 1) / 512, 0, INVALIDID}; +static int getcreds(struct svc_req *, uid_t *, gid_t *); +static int started; +static am_nfs_fh slink; +static am_nfs_fh un_fhandle; + +/* + * GLOBALS: + */ +am_nfs_fh root; +am_nfs_fh *root_fhp = &root; + + +/* initialize NFS file handles for hlfsd */ +void +hlfsd_init_filehandles(void) +{ + u_int ui; + + ui = ROOTID; + memcpy(root.fh_data, &ui, sizeof(ui)); + + ui = SLINKID; + memcpy(slink.fh_data, &ui, sizeof(ui)); + + ui = INVALIDID; + memcpy(un_fhandle.fh_data, &ui, sizeof(ui)); +} + + +voidp +nfsproc_null_2_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +/* compare if two filehandles are equal */ +static int +eq_fh(const am_nfs_fh *fh1, const am_nfs_fh *fh2) +{ + return (!memcmp((char *) fh1, (char *) fh2, sizeof(am_nfs_fh))); +} + + +nfsattrstat * +nfsproc_getattr_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) +{ + static nfsattrstat res; + uid_t uid = (uid_t) INVALIDID; + gid_t gid = (gid_t) INVALIDID; + + if (!started) { + started++; + rootfattr.na_ctime = startup; + rootfattr.na_mtime = startup; + slinkfattr.na_ctime = startup; + slinkfattr.na_mtime = startup; + un_fattr.na_ctime = startup; + un_fattr.na_mtime = startup; + } + + if (eq_fh(argp, &root)) { + res.ns_status = NFS_OK; + res.ns_u.ns_attr_u = rootfattr; + } else if (eq_fh(argp, &slink)) { + +#ifndef MNT2_NFS_OPT_SYMTTL + /* + * This code is needed to defeat Solaris 2.4's (and newer) symlink + * values cache. It forces the last-modified time of the symlink to be + * current. It is not needed if the O/S has an nfs flag to turn off the + * symlink-cache at mount time (such as Irix 5.x and 6.x). -Erez. + */ + if (++slinkfattr.na_mtime.nt_useconds == 0) + ++slinkfattr.na_mtime.nt_seconds; +#endif /* not MNT2_NFS_OPT_SYMTTL */ + + res.ns_status = NFS_OK; + res.ns_u.ns_attr_u = slinkfattr; + } else { + + if (getcreds(rqstp, &uid, &gid) < 0) { + res.ns_status = NFSERR_STALE; + return &res; + } + if (gid != hlfs_gid) { + res.ns_status = NFSERR_STALE; + } else { + memset((char *) &uid, 0, sizeof(int)); + uid = *(u_int *) argp->fh_data; + if (plt_search(uid) != (uid2home_t *) NULL) { + res.ns_status = NFS_OK; + un_fattr.na_fileid = uid; + res.ns_u.ns_attr_u = un_fattr; +#ifdef DEBUG + dlog("nfs_getattr: successful search for uid=%d, gid=%d", uid, gid); +#endif /* DEBUG */ + } else { /* not found */ + res.ns_status = NFSERR_STALE; + } + } + } + return &res; +} + + +nfsattrstat * +nfsproc_setattr_2_svc(nfssattrargs *argp, struct svc_req *rqstp) +{ + static nfsattrstat res = {NFSERR_ROFS}; + + return &res; +} + + +voidp +nfsproc_root_2_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +nfsdiropres * +nfsproc_lookup_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) +{ + static nfsdiropres res; + int idx; + uid_t uid = (uid_t) INVALIDID; + gid_t gid = (gid_t) INVALIDID; + + if (!started) { + started++; + rootfattr.na_ctime = startup; + rootfattr.na_mtime = startup; + slinkfattr.na_ctime = startup; + slinkfattr.na_mtime = startup; + un_fattr.na_ctime = startup; + un_fattr.na_mtime = startup; + } + + if (eq_fh(&argp->da_fhandle, &slink)) { + res.dr_status = NFSERR_NOTDIR; + return &res; + } + + if (eq_fh(&argp->da_fhandle, &root)) { + if (argp->da_name[0] == '.' && + (argp->da_name[1] == '\0' || + (argp->da_name[1] == '.' && + argp->da_name[2] == '\0'))) { + res.dr_u.dr_drok_u.drok_fhandle = root; + res.dr_u.dr_drok_u.drok_attributes = rootfattr; + res.dr_status = NFS_OK; + return &res; + } + + if (STREQ(argp->da_name, slinkname)) { + res.dr_u.dr_drok_u.drok_fhandle = slink; + res.dr_u.dr_drok_u.drok_attributes = slinkfattr; + res.dr_status = NFS_OK; + return &res; + } + + if (getcreds(rqstp, &uid, &gid) < 0 || gid != hlfs_gid) { + res.dr_status = NFSERR_NOENT; + return &res; + } + + /* if gets here, gid == hlfs_gid */ + if ((idx = untab_index(argp->da_name)) < 0) { + res.dr_status = NFSERR_NOENT; + return &res; + } else { /* entry found and gid is permitted */ + un_fattr.na_fileid = untab[idx].uid; + res.dr_u.dr_drok_u.drok_attributes = un_fattr; + memset((char *) &un_fhandle, 0, sizeof(am_nfs_fh)); + *(u_int *) un_fhandle.fh_data = (u_int) untab[idx].uid; + strncpy((char *) &un_fhandle.fh_data[sizeof(int)], + untab[idx].username, + sizeof(am_nfs_fh) - sizeof(int)); + res.dr_u.dr_drok_u.drok_fhandle = un_fhandle; + res.dr_status = NFS_OK; +#ifdef DEBUG + dlog("nfs_lookup: successful lookup for uid=%d, gid=%d: username=%s", + uid, gid, untab[idx].username); +#endif /* DEBUG */ + return &res; + } + } /* end of "if (eq_fh(argp->dir.data, root.data)) {" */ + + res.dr_status = NFSERR_STALE; + return &res; +} + +static int +getcreds(struct svc_req *rp, uid_t *u, gid_t *g) +{ + struct authunix_parms *aup = (struct authunix_parms *) NULL; +#ifdef HAVE_RPC_AUTH_DES_H + struct authdes_cred *adp; +#endif /* HAVE_RPC_AUTH_DES_H */ + + switch (rp->rq_cred.oa_flavor) { + + case AUTH_UNIX: + aup = (struct authunix_parms *) rp->rq_clntcred; + *u = aup->aup_uid; + *g = aup->aup_gid; + break; + +#ifdef HAVE_RPC_AUTH_DES_H + case AUTH_DES: + adp = (struct authdes_cred *) rp->rq_clntcred; + *g = INVALIDID; /* some unknown group id */ + if (sscanf(adp->adc_fullname.name, "unix.%lu@", (u_long *) u) == 1) + break; + /* fall through */ +#endif /* HAVE_RPC_AUTH_DES_H */ + + default: + *u = *g = INVALIDID; /* just in case */ + svcerr_weakauth(nfsxprt); + return -1; + } + + return 0; /* everything is ok */ +} + + +nfsreadlinkres * +nfsproc_readlink_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) +{ + static nfsreadlinkres res; + uid_t userid = (uid_t) INVALIDID; + gid_t groupid = hlfs_gid + 1; /* anything not hlfs_gid */ + int retval = 0; + char *path_val = (char *) NULL; + char *username; + static uid_t last_uid = (uid_t) INVALIDID; + + if (eq_fh(argp, &root)) { + res.rlr_status = NFSERR_ISDIR; + } else if (eq_fh(argp, &slink)) { + if (getcreds(rqstp, &userid, &groupid) < 0) + return (nfsreadlinkres *) NULL; + + gettimeofday((struct timeval *) &slinkfattr.na_atime, (struct timezone *) 0); + + res.rlr_status = NFS_OK; + if (groupid == hlfs_gid) { + res.rlr_u.rlr_data_u = DOTSTRING; + } else if (!(res.rlr_u.rlr_data_u = path_val = homedir(userid))) { + /* + * parent process (fork in homedir()) continues + * processing, by getting a NULL returned as a + * "special". Child returns result. + */ + return (nfsreadlinkres *) NULL; + } + + } else { /* check if asked for user mailbox */ + + if (getcreds(rqstp, &userid, &groupid) < 0) { + return (nfsreadlinkres *) NULL; + } + + if (groupid == hlfs_gid) { + memset((char *) &userid, 0, sizeof(int)); + userid = *(u_int *) argp->fh_data; + username = (char *) &argp->fh_data[sizeof(int)]; + if (!(res.rlr_u.rlr_data_u = mailbox(userid, username))) + return (nfsreadlinkres *) NULL; + } else { + res.rlr_status = NFSERR_STALE; + } + } + + /* print info, but try to avoid repetitions */ + if (userid != last_uid) { + plog(XLOG_USER, "mailbox for uid=%d, gid=%d is %s", + userid, groupid, (char *) res.rlr_u.rlr_data_u); + last_uid = userid; + } + + /* I don't think will pass this if -D nofork */ + if (serverpid == getpid()) + return &res; + + if (!svc_sendreply(nfsxprt, (XDRPROC_T_TYPE) xdr_readlinkres, (SVC_IN_ARG_TYPE) &res)) + svcerr_systemerr(nfsxprt); + + /* + * Child exists here. We need to determine which + * exist status to return. The exit status + * is gathered using wait() and determines + * if we returned $HOME/.hlfsspool or $ALTDIR. The parent + * needs this info so it can update the lookup table. + */ + if (path_val && alt_spooldir && STREQ(path_val, alt_spooldir)) + retval = 1; /* could not get real home dir (or uid 0 user) */ + else + retval = 0; + +#ifdef DEBUG + /* + * If asked for -D nofork, then must return the value, + * NOT exit, or else the main hlfsd server exits. + * Bug where is that status information being collected? + */ + amuDebugNo(D_FORK) + return &res; +#endif /* DEBUG */ + + exit(retval); +} + + +nfsreadres * +nfsproc_read_2_svc(nfsreadargs *argp, struct svc_req *rqstp) +{ + static nfsreadres res = {NFSERR_ACCES}; + + return &res; +} + + +voidp +nfsproc_writecache_2_svc(voidp argp, struct svc_req *rqstp) +{ + static char res; + + return (voidp) &res; +} + + +nfsattrstat * +nfsproc_write_2_svc(nfswriteargs *argp, struct svc_req *rqstp) +{ + static nfsattrstat res = {NFSERR_ROFS}; + + return &res; +} + + +nfsdiropres * +nfsproc_create_2_svc(nfscreateargs *argp, struct svc_req *rqstp) +{ + static nfsdiropres res = {NFSERR_ROFS}; + + return &res; +} + + +nfsstat * +nfsproc_remove_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) +{ + static nfsstat res = {NFSERR_ROFS}; + + return &res; +} + + +nfsstat * +nfsproc_rename_2_svc(nfsrenameargs *argp, struct svc_req *rqstp) +{ + static nfsstat res = {NFSERR_ROFS}; + + return &res; +} + + +nfsstat * +nfsproc_link_2_svc(nfslinkargs *argp, struct svc_req *rqstp) +{ + static nfsstat res = {NFSERR_ROFS}; + + return &res; +} + + +nfsstat * +nfsproc_symlink_2_svc(nfssymlinkargs *argp, struct svc_req *rqstp) +{ + static nfsstat res = {NFSERR_ROFS}; + + return &res; +} + + +nfsdiropres * +nfsproc_mkdir_2_svc(nfscreateargs *argp, struct svc_req *rqstp) +{ + static nfsdiropres res = {NFSERR_ROFS}; + + return &res; +} + + +nfsstat * +nfsproc_rmdir_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) +{ + static nfsstat res = {NFSERR_ROFS}; + + return &res; +} + + +nfsreaddirres * +nfsproc_readdir_2_svc(nfsreaddirargs *argp, struct svc_req *rqstp) +{ + static nfsreaddirres res; + static nfsentry slinkent = {SLINKID, 0, {SLINKCOOKIE}}; + static nfsentry dotdotent = {ROOTID, "..", {DOTDOTCOOKIE}, &slinkent}; + static nfsentry dotent = {ROOTID, ".", {DOTCOOKIE}, &dotdotent}; + + slinkent.ne_name = slinkname; + + if (eq_fh(&argp->rda_fhandle, &slink)) { + res.rdr_status = NFSERR_NOTDIR; + } else if (eq_fh(&argp->rda_fhandle, &root)) { + gettimeofday((struct timeval *) &rootfattr.na_atime, (struct timezone *) 0); + + res.rdr_status = NFS_OK; + switch (argp->rda_cookie[0]) { + case 0: + res.rdr_u.rdr_reply_u.dl_entries = &dotent; + break; + case DOTCOOKIE: + res.rdr_u.rdr_reply_u.dl_entries = &dotdotent; + break; + case DOTDOTCOOKIE: + res.rdr_u.rdr_reply_u.dl_entries = &slinkent; + break; + case SLINKCOOKIE: + res.rdr_u.rdr_reply_u.dl_entries = (nfsentry *) 0; + break; + } + res.rdr_u.rdr_reply_u.dl_eof = TRUE; + } else { + res.rdr_status = NFSERR_STALE; + } + return &res; +} + + +nfsstatfsres * +nfsproc_statfs_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) +{ + static nfsstatfsres res = {NFS_OK}; + + res.sfr_u.sfr_reply_u.sfrok_tsize = 1024; + res.sfr_u.sfr_reply_u.sfrok_bsize = 1024; + + /* + * Some "df" programs automatically assume that file systems + * with zero blocks are meta-filesystems served by automounters. + */ + res.sfr_u.sfr_reply_u.sfrok_blocks = 0; + res.sfr_u.sfr_reply_u.sfrok_bfree = 0; + res.sfr_u.sfr_reply_u.sfrok_bavail = 0; + + return &res; +} diff --git a/include/am_compat.h b/include/am_compat.h new file mode 100644 index 0000000..ccb3528 --- /dev/null +++ b/include/am_compat.h @@ -0,0 +1,260 @@ +/* + * am_compat.h: + * + * This file contains compatibility functions and macros, all of which + * should be auto-discovered, but for one reason or another (mostly + * brain-damage on the part of system designers and header files) they cannot. + * + * Each compatibility macro/function must include instructions on how/when + * it can be removed the am-utils code. + * + */ + +#ifndef _AM_COMPAT_H +# define _AM_COMPAT_H + +/* + * incomplete mount options definitions (sunos4, irix6, linux, etc.) + */ + + +/* + * Complete MNTTAB_OPT_* options based on MNT2_NFS_OPT_* mount options. + */ +#if defined(MNT2_NFS_OPT_ACDIRMAX) && !defined(MNTTAB_OPT_ACDIRMAX) +# define MNTTAB_OPT_ACDIRMAX "acdirmax" +#endif /* defined(MNT2_NFS_OPT_ACDIRMAX) && !defined(MNTTAB_OPT_ACDIRMAX) */ + +#if defined(MNT2_NFS_OPT_ACDIRMIN) && !defined(MNTTAB_OPT_ACDIRMIN) +# define MNTTAB_OPT_ACDIRMIN "acdirmin" +#endif /* defined(MNT2_NFS_OPT_ACDIRMIN) && !defined(MNTTAB_OPT_ACDIRMIN) */ + +#if defined(MNT2_NFS_OPT_ACREGMAX) && !defined(MNTTAB_OPT_ACREGMAX) +# define MNTTAB_OPT_ACREGMAX "acregmax" +#endif /* defined(MNT2_NFS_OPT_ACREGMAX) && !defined(MNTTAB_OPT_ACREGMAX) */ + +#if defined(MNT2_NFS_OPT_ACREGMIN) && !defined(MNTTAB_OPT_ACREGMIN) +# define MNTTAB_OPT_ACREGMIN "acregmin" +#endif /* defined(MNT2_NFS_OPT_ACREGMIN) && !defined(MNTTAB_OPT_ACREGMIN) */ + +#if !defined(MNTTAB_OPT_IGNORE) +/* SunOS 4.1.x and others define "noauto" option, but not "auto" */ +# if defined(MNTTAB_OPT_NOAUTO) && !defined(MNTTAB_OPT_AUTO) +# define MNTTAB_OPT_AUTO "auto" +# endif /* defined(MNTTAB_OPT_NOAUTO) && !defined(MNTTAB_OPT_AUTO) */ +#endif /* !defined(MNTTAB_OPT_IGNORE) */ + +#if defined(MNT2_NFS_OPT_NOAC) && !defined(MNTTAB_OPT_NOAC) +# define MNTTAB_OPT_NOAC "noac" +#endif /* defined(MNT2_NFS_OPT_NOAC) && !defined(MNTTAB_OPT_NOAC) */ + +#if defined(MNT2_NFS_OPT_NOCONN) && !defined(MNTTAB_OPT_NOCONN) +# define MNTTAB_OPT_NOCONN "noconn" +# ifndef MNTTAB_OPT_CONN +# define MNTTAB_OPT_CONN "conn" +# endif /* MNTTAB_OPT_CONN */ +#endif /* defined(MNT2_NFS_OPT_NOCONN) && !defined(MNTTAB_OPT_NOCONN) */ + +#if defined(MNT2_NFS_OPT_PGTHRESH) && !defined(MNTTAB_OPT_PGTHRESH) +# define MNTTAB_OPT_PGTHRESH "pgthresh" +#endif /* defined(MNT2_NFS_OPT_PGTHRESH) && !defined(MNTTAB_OPT_PGTHRESH) */ + +#if defined(MNT2_NFS_OPT_RETRANS) && !defined(MNTTAB_OPT_RETRANS) +# define MNTTAB_OPT_RETRANS "retrans" +#endif /* defined(MNT2_NFS_OPT_RETRANS) && !defined(MNTTAB_OPT_RETRANS) */ + +#if defined(MNT2_NFS_OPT_RSIZE) && !defined(MNTTAB_OPT_RSIZE) +# define MNTTAB_OPT_RSIZE "rsize" +#endif /* defined(MNT2_NFS_OPT_RSIZE) && !defined(MNTTAB_OPT_RSIZE) */ + +#if defined(MNT2_NFS_OPT_SOFT) && !defined(MNTTAB_OPT_SOFT) +# define MNTTAB_OPT_SOFT "soft" +# ifndef MNTTAB_OPT_HARD +# define MNTTAB_OPT_HARD "hard" +# endif /* not MNTTAB_OPT_HARD */ +#endif /* defined(MNT2_NFS_OPT_SOFT) && !defined(MNTTAB_OPT_SOFT) */ + +#if defined(MNT2_NFS_OPT_TIMEO) && !defined(MNTTAB_OPT_TIMEO) +# define MNTTAB_OPT_TIMEO "timeo" +#endif /* defined(MNT2_NFS_OPT_TIMEO) && !defined(MNTTAB_OPT_TIMEO) */ + +#if defined(MNT2_NFS_OPT_WSIZE) && !defined(MNTTAB_OPT_WSIZE) +# define MNTTAB_OPT_WSIZE "wsize" +#endif /* defined(MNT2_NFS_OPT_WSIZE) && !defined(MNTTAB_OPT_WSIZE) */ + +#if defined(MNT2_NFS_OPT_MAXGRPS) && !defined(MNTTAB_OPT_MAXGROUPS) +# define MNTTAB_OPT_MAXGROUPS "maxgroups" +#endif /* defined(MNT2_NFS_OPT_MAXGRPS) && !defined(MNTTAB_OPT_MAXGROUPS) */ + +/* + * Complete MNTTAB_OPT_* options based on MNT2_CDFS_OPT_* mount options. + */ +#if defined(MNT2_CDFS_OPT_DEFPERM) && !defined(MNTTAB_OPT_DEFPERM) +# define MNTTAB_OPT_DEFPERM "defperm" +#endif /* defined(MNT2_CDFS_OPT_DEFPERM) && !defined(MNTTAB_OPT_DEFPERM) */ + +#if defined(MNT2_CDFS_OPT_NODEFPERM) && !defined(MNTTAB_OPT_NODEFPERM) +# define MNTTAB_OPT_NODEFPERM "nodefperm" +/* + * DEC OSF/1 V3.x/Digital UNIX V4.0 have M_NODEFPERM only, but + * both mnttab ops. + */ +# ifndef MNTTAB_OPT_DEFPERM +# define MNTTAB_OPT_DEFPERM "defperm" +# endif /* not MNTTAB_OPT_DEFPERM */ +#endif /* defined(MNT2_CDFS_OPT_NODEFPERM) && !defined(MNTTAB_OPT_NODEFPERM) */ + +#if defined(MNT2_CDFS_OPT_NOVERSION) && !defined(MNTTAB_OPT_NOVERSION) +# define MNTTAB_OPT_NOVERSION "noversion" +#endif /* defined(MNT2_CDFS_OPT_NOVERSION) && !defined(MNTTAB_OPT_NOVERSION) */ + +#if defined(MNT2_CDFS_OPT_RRIP) && !defined(MNTTAB_OPT_RRIP) +# define MNTTAB_OPT_RRIP "rrip" +#endif /* defined(MNT2_CDFS_OPT_RRIP) && !defined(MNTTAB_OPT_RRIP) */ + +/* + * Complete MNTTAB_OPT_* options based on MNT2_GEN_OPT_* mount options. + */ +#if defined(MNT2_GEN_OPT_GRPID) && !defined(MNTTAB_OPT_GRPID) +# define MNTTAB_OPT_GRPID "grpid" +#endif /* defined(MNT2_GEN_OPT_GRPID) && !defined(MNTTAB_OPT_GRPID) */ + +#if defined(MNT2_GEN_OPT_NOCACHE) && !defined(MNTTAB_OPT_NOCACHE) +# define MNTTAB_OPT_NOCACHE "nocache" +#endif /* defined(MNT2_GEN_OPT_NOCACHE) && !defined(MNTTAB_OPT_NOCACHE) */ + +#if defined(MNT2_GEN_OPT_NOSUID) && !defined(MNTTAB_OPT_NOSUID) +# define MNTTAB_OPT_NOSUID "nosuid" +#endif /* defined(MNT2_GEN_OPT_NOSUID) && !defined(MNTTAB_OPT_NOSUID) */ + +#if defined(MNT2_GEN_OPT_OVERLAY) && !defined(MNTTAB_OPT_OVERLAY) +# define MNTTAB_OPT_OVERLAY "overlay" +#endif /* defined(MNT2_GEN_OPT_OVERLAY) && !defined(MNTTAB_OPT_OVERLAY) */ + +/* + * Complete MNTTAB_OPT_* options and their inverse based on MNT2_GEN_OPT_* + * options. + */ +#if defined(MNT2_GEN_OPT_NODEV) && !defined(MNTTAB_OPT_NODEV) +# define MNTTAB_OPT_NODEV "nodev" +/* this is missing under some versions of Linux */ +# ifndef MNTTAB_OPT_DEV +# define MNTTAB_OPT_DEV "dev" +# endif /* not MNTTAB_OPT_DEV */ +#endif /* defined(MNT2_GEN_OPT_NODEV) && !defined(MNTTAB_OPT_NODEV) */ + +#if defined(MNT2_GEN_OPT_NOEXEC) && !defined(MNTTAB_OPT_NOEXEC) +# define MNTTAB_OPT_NOEXEC "noexec" +/* this is missing under some versions of Linux */ +# ifndef MNTTAB_OPT_EXEC +# define MNTTAB_OPT_EXEC "exec" +# endif /* not MNTTAB_OPT_EXEC */ +#endif /* defined(MNT2_GEN_OPT_NOEXEC) && !defined(MNTTAB_OPT_NOEXEC) */ + +#if defined(MNT2_GEN_OPT_QUOTA) && !defined(MNTTAB_OPT_QUOTA) +# define MNTTAB_OPT_QUOTA "quota" +#endif /* defined(MNT2_GEN_OPT_QUOTA) && !defined(MNTTAB_OPT_QUOTA) */ + +#if defined(MNT2_GEN_OPT_SYNC) && !defined(MNTTAB_OPT_SYNC) +# define MNTTAB_OPT_SYNC "sync" +#endif /* defined(MNT2_GEN_OPT_SYNC) && !defined(MNTTAB_OPT_SYNC) */ + + +/* + * Add missing MNTTAB_OPT_* options. + */ +#ifndef MNTTAB_OPT_ACTIMEO +# define MNTTAB_OPT_ACTIMEO "actimeo" +#endif /* not MNTTAB_OPT_ACTIMEO */ + +#ifndef MNTTAB_OPT_INTR +# define MNTTAB_OPT_INTR "intr" +#endif /* not MNTTAB_OPT_INTR */ + +#ifndef MNTTAB_OPT_PORT +# define MNTTAB_OPT_PORT "port" +#endif /* not MNTTAB_OPT_PORT */ + +#ifndef MNTTAB_OPT_RETRANS +# define MNTTAB_OPT_RETRANS "retrans" +#endif /* not MNTTAB_OPT_RETRANS */ + +#ifndef MNTTAB_OPT_RETRY +# define MNTTAB_OPT_RETRY "retry" +#endif /* not MNTTAB_OPT_RETRY */ + +#ifndef MNTTAB_OPT_RO +# define MNTTAB_OPT_RO "ro" +#endif /* not MNTTAB_OPT_RO */ + +#ifndef MNTTAB_OPT_RSIZE +# define MNTTAB_OPT_RSIZE "rsize" +#endif /* not MNTTAB_OPT_RSIZE */ + +#ifndef MNTTAB_OPT_RW +# define MNTTAB_OPT_RW "rw" +#endif /* not MNTTAB_OPT_RW */ + +#ifndef MNTTAB_OPT_TIMEO +# define MNTTAB_OPT_TIMEO "timeo" +#endif /* not MNTTAB_OPT_TIMEO */ + +#ifndef MNTTAB_OPT_WSIZE +# define MNTTAB_OPT_WSIZE "wsize" +#endif /* not MNTTAB_OPT_WSIZE */ + + +/* + * Incomplete filesystem definitions (sunos4, irix6, solaris2) + */ +#if defined(HAVE_FS_CDFS) && defined(MOUNT_TYPE_CDFS) && !defined(MNTTYPE_CDFS) +# define MNTTYPE_CDFS "hsfs" +#endif /* defined(HAVE_FS_CDFS) && defined(MOUNT_TYPE_CDFS) && !defined(MNTTYPE_CDFS) */ + +#ifndef cdfs_args_t +/* + * Solaris has an HSFS filesystem, but does not define hsfs_args. + * XXX: the definition here for solaris is wrong, since under solaris, + * hsfs_args should be a single integer used as a bit-field for options. + * so this code has to be fixed later. -Erez. + */ +struct hsfs_args { + char *fspec; /* name of filesystem to mount */ + int norrip; +}; +# define cdfs_args_t struct hsfs_args +# define HAVE_FIELD_CDFS_ARGS_T_NORRIP +#endif /* not cdfs_args_t */ + +/* + * if does not define struct pc_args, assume integer bit-field (irix6) + */ +#if defined(HAVE_FS_PCFS) && !defined(pcfs_args_t) +# define pcfs_args_t u_int +#endif /* defined(HAVE_FS_PCFS) && !defined(pcfs_args_t) */ + +/* + * if does not define struct ufs_args, assume integer bit-field (linux) + */ +#if defined(HAVE_FS_UFS) && !defined(ufs_args_t) +# define ufs_args_t u_int +#endif /* defined(HAVE_FS_UFS) && !defined(ufs_args_t) */ + +#if defined(HAVE_FS_AUTOFS) && defined(MOUNT_TYPE_AUTOFS) && !defined(MNTTYPE_AUTOFS) +# define MNTTYPE_AUTOFS "autofs" +#endif /* defined(HAVE_FS_AUTOFS) && defined(MOUNT_TYPE_AUTOFS) && !defined(MNTTYPE_AUTOFS) */ + +/* + * If NFS3, then make sure that "proto" and "vers" mnttab options + * are available. + */ +#ifdef HAVE_FS_NFS3 +# ifndef MNTTAB_OPT_VERS +# define MNTTAB_OPT_VERS "vers" +# endif /* not MNTTAB_OPT_VERS */ +# ifndef MNTTAB_OPT_PROTO +# define MNTTAB_OPT_PROTO "proto" +# endif /* not MNTTAB_OPT_PROTO */ +#endif /* not HAVE_FS_NFS3 */ + +#endif /* not _AM_COMPAT_H */ diff --git a/include/am_defs.h b/include/am_defs.h new file mode 100644 index 0000000..38ab3a8 --- /dev/null +++ b/include/am_defs.h @@ -0,0 +1,1332 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: am_defs.h,v 1.1 1998/11/05 02:04:43 ezk Exp $ + * + */ + +/* + * Definitions that are not specific to the am-utils package, but + * are rather generic, and can be used elsewhere. + */ + +#ifndef _AM_DEFS_H +#define _AM_DEFS_H + +/* + * Actions to take if ANSI C. + */ +#if STDC_HEADERS +# include +/* for function prototypes */ +# define P(x) x +# define P_void void +#else /* not STDC_HEADERS */ +/* empty function prototypes */ +# define P(x) () +# define P_void +# ifndef HAVE_STRCHR +# define strchr index +# define strrchr rindex +# endif /* not HAVE_STRCHR */ +char *strchr(), *strrchr(), *strdup(); +#endif /* not STDC_HEADERS */ + +/* + * How to handle signals of any type + */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif /* not WEXITSTATUS */ +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif /* not WIFEXITED */ + +/* + * Actions to take regarding and . + */ +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_MACHINE_ENDIAN_H +# include +#endif /* HAVE_MACHINE_ENDIAN_H */ + +/* + * Big-endian or little-endian? + */ +#ifdef WORDS_BIGENDIAN +# define ARCH_ENDIAN "big" +#else /* not WORDS_BIGENDIAN */ +# define ARCH_ENDIAN "little" +#endif /* not WORDS_BIGENDIAN */ + +/* + * Actions to take if HAVE_SYS_TYPES_H is defined. + */ +#if HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ + +/* + * Actions to take if HAVE_UNISTD_H is defined. + */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ + +/* after , check if this is a POSIX.1 system */ +#ifdef _POSIX_VERSION +/* Code for POSIX.1 systems. */ +#endif /* _POSIX_VERSION */ + +/* + * Variable length argument lists. + * Must use only one of the two! + */ +#ifdef HAVE_STDARG_H +# include +/* + * On Solaris 2.6, is included in + * So this ensures that only one is included. + */ +# ifndef _SYS_VARARGS_H +# define _SYS_VARARGS_H +# endif /* not _SYS_VARARGS_H */ +#else /* not HAVE_STDARG_H */ +# ifdef HAVE_VARARGS_H +# include +# endif /* HAVE_VARARGS_H */ +#endif /* not HAVE_STDARG_H */ + +/* + * Pick the right header file and macros for directory processing functions. + */ +#if HAVE_DIRENT_H +# include +# define NAMLEN(dirent) strlen((dirent)->d_name) +#else /* not HAVE_DIRENT_H */ +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# if HAVE_SYS_NDIR_H +# include +# endif /* HAVE_SYS_NDIR_H */ +# if HAVE_SYS_DIR_H +# include +# endif /* HAVE_SYS_DIR_H */ +# if HAVE_NDIR_H +# include +# endif /* HAVE_NDIR_H */ +#endif /* not HAVE_DIRENT_H */ + +/* + * Actions to take if HAVE_FCNTL_H is defined. + */ +#if HAVE_FCNTL_H +# include +#endif /* HAVE_FCNTL_H */ + +/* + * Actions to take if HAVE_MEMORY_H is defined. + */ +#if HAVE_MEMORY_H +# include +#endif /* HAVE_MEMORY_H */ + +/* + * Actions to take if HAVE_SYS_FILE_H is defined. + */ +#if HAVE_SYS_FILE_H +# include +#endif /* HAVE_SYS_FILE_H */ + +/* + * Actions to take if HAVE_SYS_IOCTL_H is defined. + */ +#if HAVE_SYS_IOCTL_H +# include +#endif /* HAVE_SYS_IOCTL_H */ + +/* + * Actions to take if HAVE_SYSLOG_H or HAVE_SYS_SYSLOG_H is defined. + */ +#ifdef HAVE_SYSLOG_H +# include +#else /* not HAVE_SYSLOG_H */ +# if HAVE_SYS_SYSLOG_H +# include +# endif /* HAVE_SYS_SYSLOG_H */ +#endif /* HAVE_SYSLOG_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* + * Actions to take if exists. + */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_MALLOC_H +# include +#endif /* HAVE_MALLOC_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_MNTENT_H +/* some systems need before is included */ +# ifdef HAVE_STDIO_H +# include +# endif /* HAVE_STDIO_H */ +# include +#endif /* HAVE_MNTENT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_ERRNO_H +# include +extern int errno; +#endif /* HAVE_SYS_ERRNO_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FSID_H +# include +#endif /* HAVE_SYS_FSID_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_UTSNAME_H +# include +#endif /* HAVE_SYS_UTSNAME_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ + +/* + * Actions to take if exists. + * Should be included before because on some systems + * like Linux, it also defines "struct datum". + */ +#ifdef HAVE_NDBM_H +# include +# ifndef DATUM +/* ensure that struct datum is not included again from */ +# define DATUM +# endif /* not DATUM */ +#endif /* HAVE_NDBM_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NET_ERRNO_H +# include +#endif /* HAVE_NET_ERRNO_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NET_ROUTE_H +# include +#endif /* HAVE_NET_ROUTE_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_MBUF_H +# include +/* + * OSF4 (DU-4.0) defines m_next and m_data also in so I must + # undefine them here to avoid conflicts. + */ +# ifdef m_next +# undef m_next +# endif /* m_next */ +# ifdef m_data +# undef m_data +# endif /* m_data */ +/* + * AIX 3 defines MFREE and m_flags also in . + */ +# ifdef m_flags +# undef m_flags +# endif /* m_flags */ +# ifdef MFREE +# undef MFREE +# endif /* MFREE */ +#endif /* HAVE_SYS_MBUF_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NETDIR_H +# include +#endif /* HAVE_NETDIR_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NET_IF_VAR_H +# include +#endif /* HAVE_NET_IF_VAR_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NETINET_IF_ETHER_H +# include +#endif /* HAVE_NETINET_IF_ETHER_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPCSVC_YP_PROT_H +# include +#endif /* HAVE_RPCSVC_YP_PROT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPCSVC_YPCLNT_H +# include +#endif /* HAVE_RPCSVC_YPCLNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_MOUNT_H +/* + * Some operating systems must define these variables to get + * NFS and other definitions included. + */ +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + */ +# ifdef HAVE_SOCKETBITS_H +/* conflicts with */ +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +/* conflicts with */ +# undef WNOHANG +# undef WUNTRACED +/* conflicts with */ +# define _SYS_STATFS_H +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +/* conflicts with in 2.1 kernels */ +# ifdef _SYS_MOUNT_H +# ifdef BLOCK_SIZE +# undef BLOCK_SIZE +# endif /* BLOCK_SIZE */ +# endif /* _SYS_MOUNT_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ + +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_LINUX_AUTO_FS_H +# include +#endif /* HAVE_LINUX_AUTO_FS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +/* + * NFS PROTOCOL HEADER FILES: + */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NFS_EXPORT_H +# include +#endif /* HAVE_NFS_EXPORT_H */ + +/**************************************************************************** + ** IMPORTANT!!! ** + ** We always include am-util's amu_nfs_prot.h. ** + ** That is actually defined in "conf/nfs_prot/nfs_prot_${host_os_name}.h" ** + ****************************************************************************/ +#include + +/* + * DO NOT INCLUDE THESE FILES: + * They conflicts with other NFS headers and are generally not needed. + */ +#ifdef DO_NOT_INCLUDE +# ifdef HAVE_NFS_NFS_CLNT_H +# include +# endif /* HAVE_NFS_NFS_CLNT_H */ +# ifdef HAVE_LINUX_NFS_H +# include +# endif /* HAVE_LINUX_NFS_H */ +#endif /* DO NOT INCLUDE */ + +/* + * Actions to take if one of the nfs headers exists. + */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off +/* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ +#ifdef HAVE_NFS_PATHCONF_H +# include +#endif /* HAVE_NFS_PATHCONF_H */ +#ifdef HAVE_SYS_FS_NFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_NFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_NFS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_NFS_CLNT_H */ +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_PWD_H +# include +#endif /* HAVE_PWD_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_HESIOD_H +# include +#endif /* HAVE_HESIOD_H */ + +/* + * Actions to take if exists. + * This header file is required before can be included. + */ +#ifdef HAVE_LBER_H +# include +#endif /* HAVE_LBER_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_LDAP_H +# include +#endif /* HAVE_LDAP_H */ + +/* + * Actions to take if exists. + * Should be included before . + */ +#ifdef HAVE_ARPA_NAMESER_H +# ifdef NOERROR +# undef NOERROR +# endif /* NOERROR */ +/* + * Conflicts with which is included from + * on Solaris 2.6 systems. So undefine it first. + */ +# ifdef T_UNSPEC +# undef T_UNSPEC +# endif /* T_UNSPEC */ +# include +#endif /* HAVE_ARPA_NAMESER_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_ARPA_INET_H +# include +#endif /* HAVE_ARPA_INET_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RESOLV_H +# include +#endif /* HAVE_RESOLV_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_UIO_H +# include +#endif /* HAVE_SYS_UIO_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_ASSERT_H +# include +#endif /* HAVE_ASSERT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_CFS_H +# include +#endif /* HAVE_CFS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_CTYPE_H +# include +#endif /* HAVE_CTYPE_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_GRP_H +# include +#endif /* HAVE_GRP_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NSSWITCH_H +# include +#endif /* HAVE_NSSWITCH_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPC_AUTH_DES_H +# include +#endif /* HAVE_RPC_AUTH_DES_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPC_PMAP_CLNT_H +# include +#endif /* HAVE_RPC_PMAP_CLNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPC_PMAP_PROT_H +# include +#endif /* HAVE_RPC_PMAP_PROT_H */ + + +/* + * Actions to take if exists. + * AIX does not protect against this file doubly included, + * so I have to do my own protection here. + */ +#ifdef HAVE_RPCSVC_MOUNT_H +# ifndef _RPCSVC_MOUNT_H +# include +# endif /* not _RPCSVC_MOUNT_H */ +#endif /* HAVE_RPCSVC_MOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_RPCSVC_NIS_H +# include +#endif /* HAVE_RPCSVC_NIS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SETJMP_H +# include +#endif /* HAVE_SETJMP_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SIGNAL_H +# include +#endif /* HAVE_SIGNAL_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_CONFIG_H +# include +#endif /* HAVE_SYS_CONFIG_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_DG_MOUNT_H +# include +#endif /* HAVE_SYS_DG_MOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FS_TYPES_H +/* + * Define KERNEL here to avoid multiple definitions of gt_names[] on + * Ultrix 4.3. + */ +# define KERNEL +# include +# undef KERNEL +#endif /* HAVE_SYS_FS_TYPES_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_FSTYP_H +# include +#endif /* HAVE_SYS_FSTYP_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_LOCK_H +# include +#endif /* HAVE_SYS_LOCK_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_MACHINE_H +# include +#endif /* HAVE_SYS_MACHINE_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_MNTCTL_H +# include +#endif /* HAVE_SYS_MNTCTL_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ + +/* + * Actions to take if exists. + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_NETCONFIG_H +# include +/* Some systems (Solaris 2.5.1) don't declare this external */ +extern char *nc_sperror(void); +#endif /* HAVE_NETCONFIG_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_NETCONFIG_H +# include +#endif /* HAVE_SYS_NETCONFIG_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_PATHCONF_H +# include +#endif /* HAVE_SYS_PATHCONF_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif /* HAVE_SYS_RESOURCE_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_SEMA_H +# include +#endif /* HAVE_SYS_SEMA_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_SIGNAL_H +# include +#endif /* HAVE_SYS_SIGNAL_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_SOCKIO_H +# include +#endif /* HAVE_SYS_SOCKIO_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_SYSCALL_H +# include +#endif /* HAVE_SYS_SYSCALL_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_SYSLIMITS_H +# include +#endif /* HAVE_SYS_SYSLIMITS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_TIUSER_H +/* + * Some systems like AIX have multiple definitions for T_NULL and others + * that are defined first in . + */ +# ifdef HAVE_ARPA_NAMESER_H +# ifdef T_NULL +# undef T_NULL +# endif /* T_NULL */ +# ifdef T_UNSPEC +# undef T_UNSPEC +# endif /* T_UNSPEC */ +# ifdef T_IDLE +# undef T_IDLE +# endif /* T_IDLE */ +# endif /* HAVE_ARPA_NAMESER_H */ +# include +#endif /* HAVE_TIUSER_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_STATFS_H +# include +#endif /* HAVE_SYS_STATFS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_VFS_H +# include +#endif /* HAVE_SYS_VFS_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ + +/* + * Are S_ISDIR, S_ISREG, et al broken? If not, include . + * Turned off the not using sys/stat.h based on if the macros are + * "broken", because they incorrectly get reported as broken on + * ncr2. + */ +#ifndef STAT_MACROS_BROKEN_notused +/* + * RedHat Linux 4.2 (alpha) has a problem in the headers that causes + * duplicate definitions, and also some other nasty bugs. Upgrade to Redhat + * 5.0! + */ +# ifdef HAVE_SYS_STAT_H +/* avoid duplicates or conflicts with (RedHat alpha linux) */ +# if defined(S_IFREG) && defined(HAVE_STATBUF_H) +# include +# undef S_IFBLK +# undef S_IFCHR +# undef S_IFDIR +# undef S_IFIFO +# undef S_IFLNK +# undef S_IFMT +# undef S_IFREG +# undef S_IFSOCK +# undef S_IRGRP +# undef S_IROTH +# undef S_IRUSR +# undef S_IRWXG +# undef S_IRWXO +# undef S_IRWXU +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISGID +# undef S_ISLNK +# undef S_ISREG +# undef S_ISSOCK +# undef S_ISUID +# undef S_ISVTX +# undef S_IWGRP +# undef S_IWOTH +# undef S_IWUSR +# undef S_IXGRP +# undef S_IXOTH +# undef S_IXUSR +# endif /* defined(S_IFREG) && defined(HAVE_STATBUF_H) */ +# include +# endif /* HAVE_SYS_STAT_H */ +#endif /* not STAT_MACROS_BROKEN_notused */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ + +/* + * Actions to take if exists. + */ +#ifdef HAVE_REGEX_H +# include +#endif /* HAVE_REGEX_H */ + + +/****************************************************************************/ +/* + * Specific macros we're looking for. + */ +#ifndef HAVE_MEMSET +# ifdef HAVE_BZERO +# define memset(ptr, val, len) bzero((ptr), (len)) +# else /* not HAVE_BZERO */ +# error Cannot find either memset or bzero! +# endif /* not HAVE_BZERO */ +#endif /* not HAVE_MEMSET */ + +#ifndef HAVE_MEMMOVE +# ifdef HAVE_BCOPY +# define memmove(to, from, len) bcopy((from), (to), (len)) +# else /* not HAVE_BCOPY */ +# error Cannot find either memmove or bcopy! +# endif /* not HAVE_BCOPY */ +#endif /* not HAVE_MEMMOVE */ + +/* + * memcmp() is more problematic: + * Systems that don't have it, but have bcmp(), will use bcmp() instead. + * Those that have it, but it is bad (SunOS 4 doesn't handle + * 8 bit comparisons correctly), will get to use am_memcmp(). + * Otherwise if you have memcmp() and it is good, use it. + */ +#ifdef HAVE_MEMCMP +# ifdef HAVE_BAD_MEMCMP +# define memcmp am_memcmp +extern int am_memcmp(const voidp s1, const voidp s2, size_t len); +# endif /* HAVE_BAD_MEMCMP */ +#else /* not HAVE_MEMCMP */ +# ifdef HAVE_BCMP +# define memcmp(a, b, len) bcmp((a), (b), (len)) +# endif /* HAVE_BCMP */ +#endif /* not HAVE_MEMCMP */ + +#ifndef HAVE_SETEUID +# ifdef HAVE_SETRESUID +# define seteuid(x) setresuid(-1,(x),-1) +# else /* not HAVE_SETRESUID */ +# error Cannot find either seteuid or setresuid! +# endif /* not HAVE_SETRESUID */ +#endif /* not HAVE_SETEUID */ + +/* + * Define type of mntent_t. + * Defaults to struct mntent, else struct mnttab. If neither is found, and + * the operating system does keep not mount tables in the kernel, then flag + * it as an error. If neither is found and the OS keeps mount tables in the + * kernel, then define our own version of mntent; it will be needed for amd + * to keep its own internal version of the mount tables. + */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +/* map struct mnttab field names to struct mntent field names */ +# define mnt_fsname mnt_special +# define mnt_dir mnt_mountp +# define mnt_opts mnt_mntopts +# define mnt_type mnt_fstype +# else /* not HAVE_STRUCT_MNTTAB */ +# ifdef MOUNT_TABLE_ON_FILE +# error Could not find definition for struct mntent or struct mnttab! +# else /* not MOUNT_TABLE_ON_FILE */ +typedef struct _am_mntent { + char *mnt_fsname; /* name of mounted file system */ + char *mnt_dir; /* file system path prefix */ + char *mnt_type; /* MNTTAB_TYPE_* */ + char *mnt_opts; /* MNTTAB_OPT_* */ + int mnt_freq; /* dump frequency, in days */ + int mnt_passno; /* pass number on parallel fsck */ +} mntent_t; +# endif /* not MOUNT_TABLE_ON_FILE */ +# endif /* not HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + + +/* + * Complete external definitions missing from some systems. + */ + +#ifndef HAVE_EXTERN_SYS_ERRLIST +extern const char * const sys_errlist[]; +#endif /* not HAVE_EXTERN_SYS_ERRLIST */ + +#ifndef HAVE_EXTERN_OPTARG +extern char *optarg; +extern int optind; +#endif /* not HAVE_EXTERN_OPTARG */ + +#if defined(HAVE_CLNT_SPERRNO) && !defined(HAVE_EXTERN_CLNT_SPERRNO) +extern char *clnt_sperrno(const enum clnt_stat num); +#endif /* defined(HAVE_CLNT_SPERRNO) && !defined(HAVE_EXTERN_CLNT_SPERRNO) */ + +#ifndef HAVE_EXTERN_FREE +extern void free(voidp); +#endif /* not HAVE_EXTERN_FREE */ + +#if defined(HAVE_GET_MYADDRESS) && !defined(HAVE_EXTERN_GET_MYADDRESS) +extern void get_myaddress(struct sockaddr_in *addr); +#endif /* defined(HAVE_GET_MYADDRESS) && !defined(HAVE_EXTERN_GET_MYADDRESS) */ + +#if defined(HAVE_GETDOMAINNAME) && !defined(HAVE_EXTERN_GETDOMAINNAME) +# if defined(HAVE_MAP_NIS) || defined(HAVE_MAP_NISPLUS) +extern int getdomainname(char *name, int namelen); +# endif /* defined(HAVE_MAP_NIS) || defined(HAVE_MAP_NISPLUS) */ +#endif /* defined(HAVE_GETDOMAINNAME) && !defined(HAVE_EXTERN_GETDOMAINNAME) */ + +#if defined(HAVE_GETDTABLESIZE) && !defined(HAVE_EXTERN_GETDTABLESIZE) +extern int getdtablesize(void); +#endif /* defined(HAVE_GETDTABLESIZE) && !defined(HAVE_EXTERN_GETDTABLESIZE) */ + +#if defined(HAVE_GETHOSTNAME) && !defined(HAVE_EXTERN_GETHOSTNAME) +extern int gethostname(char *name, int namelen); +#endif /* defined(HAVE_GETHOSTNAME) && !defined(HAVE_EXTERN_GETHOSTNAME) */ + +#if defined(HAVE_GETPAGESIZE) && !defined(HAVE_EXTERN_GETPAGESIZE) +extern int getpagesize(void); +#endif /* defined(HAVE_GETPAGESIZE) && !defined(HAVE_EXTERN_GETPAGESIZE) */ + +#ifndef HAVE_EXTERN_GETWD +extern char *getwd(char *s); +#endif /* not HAVE_EXTERN_GETWD */ + +#ifndef HAVE_EXTERN_INNETGR +extern int innetgr(char *, char *, char *, char *); +#endif /* not HAVE_EXTERN_INNETGR */ + +#if defined(HAVE_MKSTEMP) && !defined(HAVE_EXTERN_MKSTEMP) +extern int mkstemp(char *); +#endif /* defined(HAVE_MKSTEMP) && !defined(HAVE_EXTERN_MKSTEMP) */ + +#ifndef HAVE_EXTERN_SBRK +extern caddr_t sbrk(int incr); +#endif /* not HAVE_EXTERN_SBRK */ + +#ifndef HAVE_EXTERN_STRCASECMP +/* + * define this extern even if function does not exist, for it will + * be filled in by libamu/strcasecmp.c + */ +extern int strcasecmp(const char *s1, const char *s2); +#endif /* not HAVE_EXTERN_STRCASECMP */ + +#ifndef HAVE_EXTERN_STRDUP +/* + * define this extern even if function does not exist, for it will + * be filled in by libamu/strdup.c + */ +extern char *strdup(const char *s); +#endif /* not HAVE_EXTERN_STRDUP */ + +#if defined(HAVE_STRSTR) && !defined(HAVE_EXTERN_STRSTR) +extern char *strstr(const char *s1, const char *s2); +#endif /* defined(HAVE_STRSTR) && !defined(HAVE_EXTERN_STRSTR) */ + +#if defined(HAVE_USLEEP) && !defined(HAVE_EXTERN_USLEEP) +extern int usleep(u_int useconds); +#endif /* defined(HAVE_USLEEP) && !defined(HAVE_EXTERN_USLEEP) */ + +#ifndef HAVE_EXTERN_UALARM +extern u_int ualarm(u_int usecs, u_int interval); +#endif /* not HAVE_EXTERN_UALARM */ + +#if defined(HAVE_WAIT3) && !defined(HAVE_EXTERN_WAIT3) +extern int wait3(int *statusp, int options, struct rusage *rusage); +#endif /* defined(HAVE_WAIT3) && !defined(HAVE_EXTERN_WAIT3) */ + +#ifndef HAVE_EXTERN_XDR_OPAQUE_AUTH +extern bool_t xdr_opaque_auth(XDR *, struct opaque_auth *); +#endif /* not HAVE_EXTERN_XDR_OPAQUE_AUTH */ + +#ifndef HAVE_EXTERN_GETLOGIN +extern char *getlogin(void); +#endif /* not HAVE_EXTERN_GETLOGIN */ + +/****************************************************************************/ +/* + * amd-specific header files. + */ +#ifdef THIS_HEADER_FILE_IS_INCLUDED_ABOVE +# include +#endif /* THIS_HEADER_FILE_IS_INCLUDED_ABOVE */ +#include +#include +#include +/* compatibility with old amd, while autoconfiscating it */ +#include + + +/****************************************************************************/ +/* + * External definitions that depend on other macros available (or not) + * and those are probably declared in any of the above headers. + */ + +#ifndef HAVE_HASMNTOPT +extern char *hasmntopt(mntent_t *mnt, char *opt); +#endif /* not HAVE_HASMNTOPT */ + +/* + * include definitions of all possible xdr functions that are otherwise + * not defined elsewhere. + */ +#include + +#endif /* not _AM_DEFS_H */ diff --git a/include/am_utils.h b/include/am_utils.h new file mode 100644 index 0000000..6cd7caf --- /dev/null +++ b/include/am_utils.h @@ -0,0 +1,957 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: am_utils.h,v 1.1 1998/11/05 02:04:43 ezk Exp $ + * + */ + +/* + * Definitions that are specific to the am-utils package. + */ + +#ifndef _AM_UTILS_H +#define _AM_UTILS_H + + +/**************************************************************************/ +/*** MACROS ***/ +/**************************************************************************/ + +/* + * General macros. + */ +#ifndef FALSE +# define FALSE 0 +#endif /* not FALSE */ +#ifndef TRUE +# define TRUE 1 +#endif /* not TRUE */ +#ifndef MAX +# define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif /* not MAX */ +#ifndef MIN +# define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif /* not MIN */ + +#define ONE_HOUR (60 * 60) /* One hour in seconds */ + +#ifndef MAXHOSTNAMELEN +# ifdef HOSTNAMESZ +# define MAXHOSTNAMELEN HOSTNAMESZ +# else /* not HOSTNAMESZ */ +# define MAXHOSTNAMELEN 64 +# endif /* not HOSTNAMESZ */ +#endif /* not MAXHOSTNAMELEN */ + +/* + * String comparison macros + */ +#define STREQ(s1, s2) (strcmp((s1), (s2)) == 0) +#define STRCEQ(s1, s2) (strcasecmp((s1), (s2)) == 0) +#define NSTREQ(s1, s2, n) (strncmp((s1), (s2), (n)) == 0) +#define FSTREQ(s1, s2) ((*(s1) == *(s2)) && STREQ((s1),(s2))) + +/* + * Logging options/flags + */ +#define XLOG_FATAL 0x0001 +#define XLOG_ERROR 0x0002 +#define XLOG_USER 0x0004 +#define XLOG_WARNING 0x0008 +#define XLOG_INFO 0x0010 +#define XLOG_DEBUG 0x0020 +#define XLOG_MAP 0x0040 +#define XLOG_STATS 0x0080 +#define XLOG_DEFSTR "all,nomap,nostats" /* Default log options */ +#define XLOG_ALL (XLOG_FATAL|XLOG_ERROR|XLOG_USER|XLOG_WARNING|XLOG_INFO|XLOG_MAP|XLOG_STATS) + +#define clocktime() (clock_valid ? clock_valid : time(&clock_valid)) + +#ifndef ROOT_MAP +# define ROOT_MAP "\"root\"" +#endif /* not ROOT_MAP */ + +#define NO_SUBNET "notknown" /* default subnet name for no subnet */ +#define NEXP_AP (1022) /* gdmr: was 254 */ +#define NEXP_AP_MARGIN (128) +#define MAX_READDIR_ENTRIES 16 + +/* + * Linked list macros + */ +#define AM_FIRST(ty, q) ((ty *) ((q)->q_forw)) +#define AM_LAST(ty, q) ((ty *) ((q)->q_back)) +#define NEXT(ty, q) ((ty *) (((qelem *) q)->q_forw)) +#define PREV(ty, q) ((ty *) (((qelem *) q)->q_back)) +#define HEAD(ty, q) ((ty *) q) +#define ITER(v, ty, q) \ + for ((v) = AM_FIRST(ty,(q)); (v) != HEAD(ty,(q)); (v) = NEXT(ty,(v))) + +/* allocate anything of type ty */ +#define ALLOC(ty) ((ty *) xmalloc(sizeof(ty))) +#define CALLOC(ty) ((ty *) xcalloc(1, sizeof(ty))) + +/* converting am-filehandles to mount-points */ +#define fh_to_mp2(fhp, rp) fh_to_mp3(fhp, rp, VLOOK_CREATE) + +/* + * Systems which have the mount table in a file need to read it before + * they can perform an unmount() system call. + */ +#define UMOUNT_FS(dir, mtb_name) umount_fs(dir, mtb_name) +/* imported via $srcdir/conf/umount/umount_*.c */ +extern int umount_fs(char *fs_name, const char *mnttabname); + +/* + * macros for automounter vfs/vnode operations. + */ +#define VLOOK_CREATE 0x1 +#define VLOOK_DELETE 0x2 +#define FS_DIRECTORY 0x0001 /* This looks like a dir, not a link */ +#define FS_MBACKGROUND 0x0002 /* Should background this mount */ +#define FS_NOTIMEOUT 0x0004 /* Don't bother with timeouts */ +#define FS_MKMNT 0x0008 /* Need to make the mount point */ +#define FS_UBACKGROUND 0x0010 /* Unmount in background */ +#define FS_BACKGROUND (FS_MBACKGROUND|FS_UBACKGROUND) +#define FS_DISCARD 0x0020 /* Discard immediately on last reference */ +#define FS_AMQINFO 0x0040 /* Amq is interested in this fs type */ + +/* + * macros for struct fserver. + */ +#define FSF_VALID 0x0001 /* Valid information available */ +#define FSF_DOWN 0x0002 /* This fileserver is thought to be down */ +#define FSF_ERROR 0x0004 /* Permanent error has occurred */ +#define FSF_WANT 0x0008 /* Want a wakeup call */ +#define FSF_PINGING 0x0010 /* Already doing pings */ +#define FSRV_ISDOWN(fs) (((fs)->fs_flags & (FSF_DOWN|FSF_VALID)) == (FSF_DOWN|FSF_VALID)) +#define FSRV_ISUP(fs) (((fs)->fs_flags & (FSF_DOWN|FSF_VALID)) == (FSF_VALID)) + +/* + * macros for struct mntfs (list of mounted filesystems) + */ +#define MFF_MOUNTED 0x0001 /* Node is mounted */ +#define MFF_MOUNTING 0x0002 /* Mount is in progress */ +#define MFF_UNMOUNTING 0x0004 /* Unmount is in progress */ +#define MFF_RESTART 0x0008 /* Restarted node */ +#define MFF_MKMNT 0x0010 /* Delete this node's am_mount */ +#define MFF_ERROR 0x0020 /* This node failed to mount */ +#define MFF_LOGDOWN 0x0040 /* Logged that this mount is down */ +#define MFF_RSTKEEP 0x0080 /* Don't timeout this filesystem - restarted */ +#define MFF_WANTTIMO 0x0100 /* Need a timeout call when not busy */ +#ifdef HAVE_AM_FS_NFSL +# define MFF_NFSLINK 0x0200 /* nfsl type, and deemed a link */ +#endif /* HAVE_AM_FS_NFSL */ + +/* + * macros for struct am_node (map of auto-mount points). + */ +#define AMF_NOTIMEOUT 0x0001 /* This node never times out */ +#define AMF_ROOT 0x0002 /* This is a root node */ +#ifdef HAVE_FS_AUTOFS +# define AMF_AUTOFS 0x0004 /* this node is of type autofs */ +#endif /* HAVE_FS_AUTOFS */ + +/* + * The following values can be tuned... + */ +#define ALLOWED_MOUNT_TIME 40 /* 40s for a mount */ +#define AM_TTL (5 * 60) /* Default cache period */ +#define AM_TTL_W (2 * 60) /* Default unmount interval */ +#define AM_PINGER 30 /* NFS ping interval for live systems */ +#define AMFS_AUTO_TIMEO 8 /* Default amfs_auto timeout - .8s */ + +/* + * default amfs_auto retrans - 1/10th seconds + */ +#define AMFS_AUTO_RETRANS ((ALLOWED_MOUNT_TIME*10+5*gopt.amfs_auto_timeo)/gopt.amfs_auto_timeo * 2) + +/* + * RPC-related macros. + */ +#define RPC_XID_PORTMAP 0 +#define RPC_XID_MOUNTD 1 +#define RPC_XID_NFSPING 2 +#define RPC_XID_MASK (0x0f) /* 16 id's for now */ +#define MK_RPC_XID(type_id, uniq) ((type_id) | ((uniq) << 4)) + +/* + * What level of AMD are we backward compatible with? + * This only applies to externally visible characteristics. + * Rev.Minor.Branch.Patch (2 digits each) + */ +#define AMD_COMPAT 5000000 /* 5.0 */ + +/* + * Error to return if remote host is not available. + * Try, in order, "host down", "host unreachable", "invalid argument". + */ +#ifdef EHOSTDOWN +# define AM_ERRNO_HOST_DOWN EHOSTDOWN +# else /* not EHOSTDOWN */ +# ifdef EHOSTUNREACH +# define AM_ERRNO_HOST_DOWN EHOSTUNREACH +# else /* not EHOSTUNREACH */ +# define AM_ERRNO_HOST_DOWN EINVAL +# endif /* not EHOSTUNREACH */ +#endif /* not EHOSTDOWN */ + + +/**************************************************************************/ +/*** STRUCTURES AND TYPEDEFS ***/ +/**************************************************************************/ + +/* some typedefs must come first */ +typedef char *amq_string; +typedef struct mntfs mntfs; +typedef struct am_opts am_opts; +typedef struct am_ops am_ops; +typedef struct am_node am_node; +typedef struct _qelem qelem; +typedef struct mntlist mntlist; +typedef struct fserver fserver; + +/* + * Linked list + * (the name 'struct qelem' conflicts with linux's unistd.h) + */ +struct _qelem { + qelem *q_forw; + qelem *q_back; +}; + +/* + * Option tables + */ +struct opt_tab { + char *opt; + int flag; +}; + +/* + * Server states + */ +typedef enum { + Start, + Run, + Finishing, + Quit, + Done +} serv_state; + +/* + * Options + */ +struct am_opts { + char *fs_glob; /* Smashed copy of global options */ + char *fs_local; /* Expanded copy of local options */ + char *fs_mtab; /* Mount table entry */ + /* Other options ... */ + char *opt_dev; + char *opt_delay; + char *opt_dir; + char *opt_fs; + char *opt_group; + char *opt_mount; + char *opt_opts; + char *opt_remopts; + char *opt_pref; + char *opt_autopref; + char *opt_cache; + char *opt_rfs; + char *opt_rhost; + char *opt_sublink; + char *opt_type; + char *opt_unmount; + char *opt_user; + char *opt_maptype; /* map type: file, nis, hesiod, etc. */ + char *opt_cachedir; /* cache directory */ + char *opt_addopts; /* options to add to opt_opts */ +}; + +/* + * List of mounted filesystems + */ +struct mntfs { + qelem mf_q; /* List of mounted filesystems */ + am_ops *mf_ops; /* Operations on this mountpoint */ + am_opts *mf_fo; /* File opts */ + char *mf_mount; /* "/a/kiska/home/kiska" */ + char *mf_info; /* Mount info */ + char *mf_auto; /* Automount opts */ + char *mf_mopts; /* FS mount opts */ + char *mf_remopts; /* Remote FS mount opts */ + fserver *mf_server; /* File server */ + int mf_flags; /* Flags MFF_* */ + int mf_error; /* Error code from background mount */ + int mf_refc; /* Number of references to this node */ + int mf_cid; /* Callout id */ + void (*mf_prfree) (voidp); /* Free private space */ + voidp mf_private; /* Private - per-fs data */ +}; + +/* + * File Handle + * + * This is interpreted by indexing the exported array + * by fhh_id. + * + * The whole structure is mapped onto a standard fhandle_t + * when transmitted. + */ +struct am_fh { + int fhh_pid; /* process id */ + int fhh_id; /* map id */ + int fhh_gen; /* generation number */ +}; + +/* + * Multi-protocol NFS file handle + */ +union am_nfs_handle { + /* placeholder for V4 file handle */ +#ifdef HAVE_FS_NFS3 + struct mountres3 v3; /* NFS version 3 handle */ +#endif /* HAVE_FS_NFS3 */ + struct fhstatus v2; /* NFS version 2 handle */ +}; +typedef union am_nfs_handle am_nfs_handle_t; + +/* + * automounter vfs/vnode operations. + */ +typedef char *(*vfs_match) (am_opts *); +typedef int (*vfs_init) (mntfs *); +typedef int (*vmount_fs) (am_node *); +typedef int (*vfmount_fs) (mntfs *); +typedef int (*vumount_fs) (am_node *); +typedef int (*vfumount_fs) (mntfs *); +typedef am_node *(*vlookuppn) (am_node *, char *, int *, int); +typedef int (*vreaddir) (am_node *, nfscookie, nfsdirlist *, nfsentry *, int); +typedef am_node *(*vreadlink) (am_node *, int *); +typedef void (*vmounted) (mntfs *); +typedef void (*vumounted) (am_node *); +typedef fserver *(*vffserver) (mntfs *); + +struct am_ops { + char *fs_type; /* type of filesystems "nfsx" */ + vfs_match fs_match; /* fxn: match */ + vfs_init fs_init; /* fxn: initialization */ + vmount_fs mount_fs; /* fxn: mount vnode */ + vfmount_fs fmount_fs; /* fxn: mount VFS */ + vumount_fs umount_fs; /* fxn: unmount vnode */ + vfumount_fs fumount_fs; /* fxn: unmount VFS */ + vlookuppn lookuppn; /* fxn: lookup path-name */ + vreaddir readdir; /* fxn: read directory */ + vreadlink readlink; /* fxn: read link */ + vmounted mounted; /* fxn: after-mount extra actions */ + vumounted umounted; /* fxn: after-umount extra actions */ + vffserver ffserver; /* fxn: find a file server */ + int fs_flags; /* filesystem flags FS_* */ +}; + +typedef int (*task_fun) (voidp); +typedef void (*cb_fun) (int, int, voidp); +typedef void (*fwd_fun) P((voidp, int, struct sockaddr_in *, + struct sockaddr_in *, voidp, int)); + +/* + * List of mount table entries + */ +struct mntlist { + struct mntlist *mnext; + mntent_t *mnt; +}; + +/* + * Mount map + */ +typedef struct mnt_map mnt_map; + +/* + * Per-mountpoint statistics + */ +struct am_stats { + time_t s_mtime; /* Mount time */ + u_short s_uid; /* Uid of mounter */ + int s_getattr; /* Count of getattrs */ + int s_lookup; /* Count of lookups */ + int s_readdir; /* Count of readdirs */ + int s_readlink; /* Count of readlinks */ + int s_statfs; /* Count of statfs */ +}; +typedef struct am_stats am_stats; + +/* + * System statistics + */ +struct amd_stats { + int d_drops; /* Dropped requests */ + int d_stale; /* Stale NFS handles */ + int d_mok; /* Successful mounts */ + int d_merr; /* Failed mounts */ + int d_uerr; /* Failed unmounts */ +}; +extern struct amd_stats amd_stats; + +/* + * List of fileservers + */ +struct fserver { + qelem fs_q; /* List of fileservers */ + int fs_refc; /* Number of references to this node */ + char *fs_host; /* Normalized hostname of server */ + struct sockaddr_in *fs_ip; /* Network address of server */ + int fs_cid; /* Callout id */ + int fs_pinger; /* Ping (keepalive) interval */ + int fs_flags; /* Flags */ + char *fs_type; /* File server type */ + u_long fs_version; /* NFS version of server (2, 3, etc.)*/ + char *fs_proto; /* NFS protocol of server (tcp, udp, etc.) */ + voidp fs_private; /* Private data */ + void (*fs_prfree) (voidp); /* Free private data */ +}; + +/* + * Map of auto-mount points. + */ +struct am_node { + int am_mapno; /* Map number */ + mntfs *am_mnt; /* Mounted filesystem */ + char *am_name; /* "kiska": name of this node */ + char *am_path; /* "/home/kiska": path of this node's mount point */ + char *am_link; /* "/a/kiska/home/kiska/this/that": link to sub-dir */ + am_node *am_parent; /* Parent of this node */ + am_node *am_ysib; /* Younger sibling of this node */ + am_node *am_osib; /* Older sibling of this node */ + am_node *am_child; /* First child of this node */ + nfsattrstat am_attr; /* File attributes */ +#define am_fattr am_attr.ns_u.ns_attr_u + int am_flags; /* Boolean flags AMF_* */ + int am_error; /* Specific mount error */ + time_t am_ttl; /* Time to live */ + int am_timeo_w; /* Wait interval */ + int am_timeo; /* Timeout interval */ + u_int am_gen; /* Generation number */ + char *am_pref; /* Mount info prefix */ + am_stats am_stats; /* Statistics gathering */ + SVCXPRT *am_transp; /* Info for quick reply */ +}; + + +/**************************************************************************/ +/*** EXTERNALS ***/ +/**************************************************************************/ + +/* + * Useful constants + */ +extern char *mnttab_file_name; /* Mount table */ +extern char *cpu; /* "CPU type" */ +extern char *endian; /* "big" */ +extern char *hostdomain; /* "southseas.nz" */ +extern char copyright[]; /* Copyright info */ +extern char hostd[]; /* "kiska.southseas.nz" */ +extern char pid_fsname[]; /* kiska.southseas.nz:(pid%d) */ +extern char version[]; /* Version info */ + +/* + * Global variables. + */ +extern AUTH *nfs_auth; /* Dummy authorization for remote servers */ +extern FILE *logfp; /* Log file */ +extern am_node **exported_ap; /* List of nodes */ +extern am_node *root_node; /* Node for "root" */ +extern char *PrimNetName; /* Name of primary connected network */ +extern char *PrimNetNum; /* Name of primary connected network */ +extern char *SubsNetName; /* Name of subsidiary connected network */ +extern char *SubsNetNum; /* Name of subsidiary connected network */ +extern char *progname; /* "amd"|"mmd" */ +extern char hostname[]; /* "kiska" */ +extern int first_free_map; /* First free node */ +extern int foreground; /* Foreground process */ +extern int immediate_abort; /* Should close-down unmounts be retried */ +extern int last_used_map; /* Last map being used for mounts */ +extern int orig_umask; /* umask() on startup */ +extern int task_notify_todo; /* Task notifier needs running */ +extern int xlog_level; /* Logging level */ +extern int xlog_level_init; +extern pid_t mypid; /* Current process id */ +extern serv_state amd_state; /* Should we go now */ +extern struct in_addr myipaddr; /* (An) IP address of this host */ +extern struct opt_tab xlog_opt[]; +extern time_t clock_valid; /* Clock needs recalculating */ +extern time_t do_mapc_reload; /* Flush & reload mount map cache */ +extern time_t next_softclock; /* Time to call softclock() */ +extern u_short nfs_port; /* Our NFS service port */ + +/* + * Global routines + */ +extern CLIENT *get_mount_client(char *unused_host, struct sockaddr_in *sin, struct timeval *tv, int *sock, u_long mnt_version); +extern RETSIGTYPE sigchld(int); +extern SVCXPRT *nfsxprt; +extern am_node *efs_lookuppn(am_node *, char *, int *, int); +extern am_node *exported_ap_alloc(void); +extern am_node *fh_to_mp(am_nfs_fh *); +extern am_node *fh_to_mp3(am_nfs_fh *, int *, int); +extern am_node *find_mf(mntfs *); +extern am_node *next_map(int *); +extern am_node *root_ap(char *, int); +extern am_ops *ops_match(am_opts *, char *, char *, char *, char *, char *); +extern bool_t xdr_amq_string(XDR *xdrs, amq_string *objp); +extern bool_t xdr_dirpath(XDR *xdrs, dirpath *objp); +extern char **strsplit(char *, int, int); +extern char *expand_key(char *); +extern char *get_version_string(void); +extern char *inet_dquad(char *, u_long); +extern char *print_wires(void); +extern char *str3cat(char *, char *, char *, char *); +extern char *strealloc(char *, char *); +extern char *strip_selectors(char *, char *); +extern char *strnsave(const char *, int); +extern fserver *dup_srvr(fserver *); +extern int amu_close(int fd); +extern int background(void); +extern int bind_resv_port(int, u_short *); +extern int cmdoption(char *, struct opt_tab *, int *); +extern int compute_mount_flags(mntent_t *); +extern int efs_readdir(am_node *, nfscookie, nfsdirlist *, nfsentry *, int); +extern int eval_fs_opts(am_opts *, char *, char *, char *, char *, char *); +extern int fwd_init(void); +extern int fwd_packet(int, voidp, int, struct sockaddr_in *, struct sockaddr_in *, voidp, fwd_fun); +extern int get_amd_program_number(void); +extern int hasmntval(mntent_t *, char *); +extern int is_network_member(const char *net); +extern int islocalnet(u_long); +extern int make_nfs_auth(void); +extern int make_rpc_packet(char *, int, u_long, struct rpc_msg *, voidp, XDRPROC_T_TYPE, AUTH *); +extern int mapc_keyiter(mnt_map *, void(*)(char *, voidp), voidp); +extern int mapc_search(mnt_map *, char *, char **); +extern int mapc_type_exists(const char *type); +extern int mkdirs(char *, int); +extern int mount_auto_node(char *, voidp); +extern int mount_automounter(int); +extern int mount_exported(void); +extern int mount_fs(mntent_t *, int, caddr_t, int, MTYPE_TYPE, u_long, const char *, const char *); +extern int mount_node(am_node *); +extern int nfs_srvr_port(fserver *, u_short *, voidp); +extern int pickup_rpc_reply(voidp, int, voidp, XDRPROC_T_TYPE); +extern int root_keyiter(void(*)(char *, voidp), voidp); +extern int softclock(void); +extern int switch_option(char *); +extern int switch_to_logfile(char *); +extern int timeout(u_int, void (*fn)(voidp), voidp); +extern int valid_key(char *); +extern mnt_map *mapc_find(char *, char *, const char *); +extern mntfs *dup_mntfs(mntfs *); +extern mntfs *find_mntfs(am_ops *, am_opts *, char *, char *, char *, char *, char *); +extern mntfs *new_mntfs(void); +extern mntfs *realloc_mntfs(mntfs *, am_ops *, am_opts *, char *, char *, char *, char *, char *); +extern mntlist *read_mtab(char *, const char *); +extern struct sockaddr_in *amu_svc_getcaller(SVCXPRT *xprt); +extern time_t time(time_t *); +extern void am_mounted(am_node *); +extern void am_unmounted(am_node *); +extern void amq_program_1(struct svc_req *rqstp, SVCXPRT * transp); +extern void amu_get_myaddress(struct in_addr *iap); +extern void amu_release_controlling_tty(void); +extern void compute_automounter_nfs_args(nfs_args_t *nap, mntent_t *mntp); +extern void deslashify(char *); +extern void discard_mntlist(mntlist *mp); +extern void do_task_notify(void); +extern void flush_mntfs(void); +extern void flush_nfs_fhandle_cache(fserver *); +extern void forcibly_timeout_mp(am_node *); +extern void free_map(am_node *); +extern void free_mntfs(voidp); +extern void free_mntlist(mntlist *); +extern void free_opts(am_opts *); +extern void free_srvr(fserver *); +extern void fwd_reply(void); +extern void get_args(int argc, char *argv[]); +extern void getwire(char **name1, char **number1); +extern void going_down(int); +extern void host_normalize(char **); +extern void init_map(am_node *, char *); +extern void ins_que(qelem *, qelem *); +extern void insert_am(am_node *, am_node *); +extern void make_root_node(void); +extern void map_flush_srvr(fserver *); +extern void mapc_add_kv(mnt_map *, char *, char *); +extern void mapc_free(voidp); +extern void mapc_reload(void); +extern void mapc_showtypes(char *buf); +extern void mk_fattr(am_node *, nfsftype); +extern void mnt_free(mntent_t *); +extern void mp_to_fh(am_node *, am_nfs_fh *); +extern void new_ttl(am_node *); +extern void nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp); +extern void normalize_slash(char *); +extern void ops_showamfstypes(char *buf); +extern void ops_showfstypes(char *outbuf); +extern void plog(int, char *,...); +extern void rem_que(qelem *); +extern void reschedule_timeout_mp(void); +extern void restart(void); +extern void rmdirs(char *); +extern void rpc_msg_init(struct rpc_msg *, u_long, u_long, u_long); +extern void run_task(task_fun, voidp, cb_fun, voidp); +extern void sched_task(cb_fun, voidp, voidp); +extern void set_amd_program_number(int program); +extern void show_opts(int ch, struct opt_tab *); +extern void show_rcs_info(const char *, char *); +extern void srvrlog(fserver *, char *); +extern void timeout_mp(voidp); +extern void umount_exported(void); +extern void unregister_amq(void); +extern void untimeout(int); +extern void wakeup(voidp); +extern void wakeup_srvr(fserver *); +extern void wakeup_task(int, int, voidp); +extern voidp xmalloc(int); +extern voidp xrealloc(voidp, int); +extern voidp xzalloc(int); +extern u_long get_nfs_version(char *host, struct sockaddr_in *sin, u_long nfs_version, const char *proto); + + +#ifdef MOUNT_TABLE_ON_FILE +extern void rewrite_mtab(mntlist *, const char *); +extern void unlock_mntlist(void); +extern void write_mntent(mntent_t *, const char *); +#endif /* MOUNT_TABLE_ON_FILE */ + +#if defined(HAVE_SYSLOG_H) || defined(HAVE_SYS_SYSLOG_H) +extern int syslogging; +#endif /* defined(HAVE_SYSLOG_H) || defined(HAVE_SYS_SYSLOG_H) */ + +#ifdef HAVE_TRANSPORT_TYPE_TLI + +extern void compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct netconfig *nfsncp, struct sockaddr_in *ip_addr, u_long nfs_version, char *nfs_proto, am_nfs_handle_t *fhp, char *host_name, char *fs_name); +extern int create_amq_service(int *udp_soAMQp, SVCXPRT **udp_amqpp, struct netconfig **udp_amqncpp, int *tcp_soAMQp, SVCXPRT **tcp_amqpp, struct netconfig **tcp_amqncpp); +extern int create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)); +extern int get_knetconfig(struct knetconfig **kncpp, struct netconfig *in_ncp, char *nc_protoname); +extern struct netconfig *nfsncp; +extern void free_knetconfig(struct knetconfig *kncp); + +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + +extern void compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_in *ip_addr, u_long nfs_version, char *nfs_proto, am_nfs_handle_t *fhp, char *host_name, char *fs_name); +extern enum clnt_stat pmap_ping(struct sockaddr_in *address); +extern int create_amq_service(int *udp_soAMQp, SVCXPRT **udp_amqpp, int *tcp_soAMQp, SVCXPRT **tcp_amqpp); +extern int create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp)); + +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + +#ifndef HAVE_FIELD_STRUCT_FHSTATUS_FHS_FH +# define fhs_fh fhstatus_u.fhs_fhandle +#endif /* not HAVE_FIELD_STRUCT_FHSTATUS_FHS_FH */ + + +/**************************************************************************/ +/*** Generic file-system types, implemented as part of the native O/S. ***/ +/**************************************************************************/ + +/* + * Loopback File System + * Many systems can't support this, and in any case most of the + * functionality is available with Symlink FS. + */ +#ifdef HAVE_FS_LOFS +extern am_ops lofs_ops; +#endif /* HAVE_FS_LOFS */ + +/* + * CD-ROM File System (CD-ROM) + * (HSFS: High Sierra F/S on some machines) + * Many systems can't support this, and in any case most of the + * functionality is available with program FS. + */ +#ifdef HAVE_FS_CDFS +extern am_ops cdfs_ops; +#endif /* HAVE_FS_CDFS */ + +/* + * PC File System (MS-DOS) + * Many systems can't support this, and in any case most of the + * functionality is available with program FS. + */ +#ifdef HAVE_FS_PCFS +extern am_ops pcfs_ops; +#endif /* HAVE_FS_PCFS */ + +/* + * Caching File System (Solaris) + */ +#ifdef HAVE_FS_CACHEFS +extern am_ops cachefs_ops; +#endif /* HAVE_FS_CACHEFS */ + +/* + * Network File System + * Good, slow, NFS V.2. + */ +#ifdef HAVE_FS_NFS +extern am_ops nfs_ops; /* NFS */ +extern fserver *find_nfs_srvr (mntfs *); +extern int nfs_fmount(mntfs *mf); +extern int nfs_fumount(mntfs *mf); +extern int nfs_init(mntfs *mf); +extern qelem nfs_srvr_list; +extern void nfs_umounted(am_node *mp); +#endif /* HAVE_FS_NFS */ + + +/* + * Network File System: the new generation + * NFS V.3 + */ +#ifdef HAVE_FS_NFS3 +# ifndef NFS_VERSION3 +# define NFS_VERSION3 ((u_int) 3) +# endif /* not NFS_VERSION3 */ +#endif /* HAVE_FS_NFS3 */ + +/* + * Un*x File System + * Normal local disk file system. + */ +#ifdef HAVE_FS_UFS +extern am_ops ufs_ops; /* Un*x file system */ +#endif /* HAVE_FS_UFS */ + + +/**************************************************************************/ +/*** Automounter file-system types, implemented by amd. ***/ +/**************************************************************************/ + +/* + * Automount File System + */ +#ifdef HAVE_AM_FS_AUTO +extern am_ops amfs_auto_ops; /* Automount file system (this!) */ +extern am_ops amfs_toplvl_ops; /* Top-level automount file system */ +extern am_ops amfs_root_ops; /* Root file system */ +extern qelem amfs_auto_srvr_list; +extern am_node *amfs_auto_lookuppn(am_node *mp, char *fname, int *error_return, int op); +extern am_node *next_nonerror_node(am_node *xp); +extern char *amfs_auto_match(am_opts *fo); +extern fserver *find_amfs_auto_srvr(mntfs *); +extern int amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count); +extern int amfs_auto_umount(am_node *mp); +extern int amfs_auto_fmount(am_node *mp); +extern int amfs_auto_fumount(am_node *mp); +#endif /* HAVE_AM_FS_AUTO */ + +/* + * Toplvl Automount File System + */ +#ifdef HAVE_AM_FS_TOPLVL +extern am_ops amfs_toplvl_ops; /* Toplvl Automount file system */ +extern int amfs_toplvl_mount(am_node *mp); +extern int amfs_toplvl_umount(am_node *mp); +extern void amfs_toplvl_mounted(mntfs *mf); +#endif /* HAVE_AM_FS_TOPLVL */ + +/* + * Direct Automount File System + */ +#ifdef HAVE_AM_FS_DIRECT +extern am_ops amfs_direct_ops; /* Direct Automount file system (this too) */ +#endif /* HAVE_AM_FS_DIRECT */ + +/* + * Error File System + */ +#ifdef HAVE_AM_FS_ERROR +extern am_ops amfs_error_ops; /* Error file system */ +extern am_node *amfs_error_lookuppn(am_node *mp, char *fname, int *error_return, int op); +extern int amfs_error_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count); +#endif /* HAVE_AM_FS_ERROR */ + +/* + * Inheritance File System + */ +#ifdef HAVE_AM_FS_INHERIT +extern am_ops amfs_inherit_ops; /* Inheritance file system */ +#endif /* HAVE_AM_FS_INHERIT */ + +/* + * NFS mounts with local existence check. + */ +#ifdef HAVE_AM_FS_NFSL +extern am_ops amfs_nfsl_ops; /* NFSL */ +#endif /* HAVE_AM_FS_NFSL */ + +/* + * Multi-nfs mounts. + */ +#ifdef HAVE_AM_FS_NFSX +extern am_ops amfs_nfsx_ops; /* NFSX */ +#endif /* HAVE_AM_FS_NFSX */ + +/* + * NFS host - a whole tree. + */ +#ifdef HAVE_AM_FS_HOST +extern am_ops amfs_host_ops; /* NFS host */ +#endif /* HAVE_AM_FS_HOST */ + +/* + * Program File System + * This is useful for things like RVD. + */ +#ifdef HAVE_AM_FS_PROGRAM +extern am_ops amfs_program_ops; /* Program File System */ +#endif /* HAVE_AM_FS_PROGRAM */ + +/* + * Symbolic-link file system. + * A "filesystem" which is just a symbol link. + */ +#ifdef HAVE_AM_FS_LINK +extern am_ops amfs_link_ops; /* Symlink FS */ +extern int amfs_link_fmount(mntfs *mf); +#endif /* HAVE_AM_FS_LINK */ + +/* + * Symbolic-link file system, which also checks that the target of + * the symlink exists. + * A "filesystem" which is just a symbol link. + */ +#ifdef HAVE_AM_FS_LINKX +extern am_ops amfs_linkx_ops; /* Symlink FS with existence check */ +#endif /* HAVE_AM_FS_LINKX */ + +/* + * Union file system + */ +#ifdef HAVE_AM_FS_UNION +extern am_ops amfs_union_ops; /* Union FS */ +#endif /* HAVE_AM_FS_UNION */ + +/* + * Autofs file system + */ +#ifdef HAVE_FS_AUTOFS +extern am_ops autofs_ops; /* (Sun) Autofs FS */ +#endif /* HAVE_FS_AUTOFS */ + + +/**************************************************************************/ +/*** DEBUGGING ***/ +/**************************************************************************/ + +/* + * DEBUGGING: + */ +#ifdef DEBUG + +# define D_ALL (~0) +# define D_DAEMON 0x0001 /* Enter daemon mode */ +# define D_TRACE 0x0002 /* Do protocol trace */ +# define D_FULL 0x0004 /* Do full trace */ +# define D_MTAB 0x0008 /* Use local mtab */ +# define D_AMQ 0x0010 /* Register amq program */ +# define D_STR 0x0020 /* Debug string munging */ +# ifdef DEBUG_MEM +# define D_MEM 0x0040 /* Trace memory allocations */ +# endif /* DEBUG_MEM */ +# define D_FORK 0x0080 /* Fork server */ + /* info service specific debugging (hesiod, nis, etc) */ +# define D_INFO 0x0100 + +/* + * Normally, don't enter daemon mode, and don't register amq + */ +# ifdef DEBUG_MEM +# define D_TEST (~(D_DAEMON|D_MEM|D_STR)) +# else /* not DEBUG_MEM */ +# define D_TEST (~(D_DAEMON|D_STR)) +# endif /* not DEBUG_MEM */ + +# define amuDebug(x) if (debug_flags & (x)) +# define dlog amuDebug(D_FULL) dplog +# define amuDebugNo(x) if (!(debug_flags & (x))) + +/* debugging mount-table file to use */ +# ifndef DEBUG_MNTTAB +# define DEBUG_MNTTAB "./mnttab" +# endif /* not DEBUG_MNTTAB */ + +# ifdef DEBUG_MEM +/* + * If debugging memory, then call a special freeing function that logs + * more info, and resets the pointer to NULL so it cannot be used again. + */ +# define XFREE(x) dxfree(__FILE__,__LINE__,x) +extern void dxfree(char *file, int line, voidp ptr); +extern void malloc_verify(void); +# else /* not DEBUG_MEM */ +/* + * If regular debugging, then free the pointer and reset to NULL. + * This should remain so for as long as am-utils is in alpha/beta testing. + */ +# define XFREE(x) do { free((voidp)x); x = NULL;} while (0) +# endif /* not DEBUG_MEM */ + +/* functions that depend solely on debugging */ +extern void print_nfs_args(const nfs_args_t *nap, u_long nfs_version); + +#else /* not DEBUG */ + +/* + * if not debugging, then simple perform free, and don't bother + * resetting the pointer. + */ +# define XFREE(x) free(x) + +#endif /* not DEBUG */ + +extern int debug_flags; /* Debug options */ +extern int debug_option (char *); +extern struct opt_tab dbg_opt[]; +extern void dplog(char *fmt, ...); + +/**************************************************************************/ +/*** MISC (stuff left to autoconfiscate) ***/ +/**************************************************************************/ + +#endif /* not _AM_UTILS_H */ diff --git a/include/am_xdr_func.h b/include/am_xdr_func.h new file mode 100644 index 0000000..971e998 --- /dev/null +++ b/include/am_xdr_func.h @@ -0,0 +1,203 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: am_xdr_func.h,v 1.1 1998/11/05 02:04:43 ezk Exp $ + * + */ + +/* + * Definitions of all possible xdr functions that are otherwise + * not defined elsewhere. + */ + +#ifndef _AM_XDR_FUNC_H +#define _AM_XDR_FUNC_H + +#ifndef HAVE_XDR_ATTRSTAT +bool_t xdr_attrstat(XDR *xdrs, nfsattrstat *objp); +#endif /* not HAVE_XDR_ATTRSTAT */ +#ifndef HAVE_XDR_CREATEARGS +bool_t xdr_createargs(XDR *xdrs, nfscreateargs *objp); +#endif /* not HAVE_XDR_CREATEARGS */ +#ifndef HAVE_XDR_DIRLIST +bool_t xdr_dirlist(XDR *xdrs, nfsdirlist *objp); +#endif /* not HAVE_XDR_DIRLIST */ +#ifndef HAVE_XDR_DIROPARGS +bool_t xdr_diropargs(XDR *xdrs, nfsdiropargs *objp); +#endif /* not HAVE_XDR_DIROPARGS */ +#ifndef HAVE_XDR_DIROPOKRES +bool_t xdr_diropokres(XDR *xdrs, nfsdiropokres *objp); +#endif /* not HAVE_XDR_DIROPOKRES */ +#ifndef HAVE_XDR_DIROPRES +bool_t xdr_diropres(XDR *xdrs, nfsdiropres *objp); +#endif /* not HAVE_XDR_DIROPRES */ +#ifndef HAVE_XDR_DIRPATH +bool_t xdr_dirpath(XDR *xdrs, dirpath *objp); +#endif /* not HAVE_XDR_DIRPATH */ +#ifndef HAVE_XDR_ENTRY +bool_t xdr_entry(XDR *xdrs, nfsentry *objp); +#endif /* not HAVE_XDR_ENTRY */ +#ifndef HAVE_XDR_EXPORTNODE +bool_t xdr_exportnode(XDR *xdrs, exportnode *objp); +#endif /* not HAVE_XDR_EXPORTNODE */ +#ifndef HAVE_XDR_EXPORTS +bool_t xdr_exports(XDR *xdrs, exports *objp); +#endif /* not HAVE_XDR_EXPORTS */ +#ifndef HAVE_XDR_FATTR +bool_t xdr_fattr(XDR *xdrs, nfsfattr *objp); +#endif /* not HAVE_XDR_FATTR */ +#ifndef HAVE_XDR_FHANDLE +bool_t xdr_fhandle(XDR *xdrs, fhandle objp); +#endif /* not HAVE_XDR_FHANDLE */ +#ifndef HAVE_XDR_FHSTATUS +bool_t xdr_fhstatus(XDR *xdrs, fhstatus *objp); +#endif /* not HAVE_XDR_FHSTATUS */ +#ifndef HAVE_XDR_FILENAME +bool_t xdr_filename(XDR *xdrs, filename *objp); +#endif /* not HAVE_XDR_FILENAME */ +#ifndef HAVE_XDR_FTYPE +bool_t xdr_ftype(XDR *xdrs, nfsftype *objp); +#endif /* not HAVE_XDR_FTYPE */ +#ifndef HAVE_XDR_GROUPNODE +bool_t xdr_groupnode(XDR *xdrs, groupnode *objp); +#endif /* not HAVE_XDR_GROUPNODE */ +#ifndef HAVE_XDR_GROUPS +bool_t xdr_groups(XDR *xdrs, groups objp); +#endif /* not HAVE_XDR_GROUPS */ +#ifndef HAVE_XDR_LINKARGS +bool_t xdr_linkargs(XDR *xdrs, nfslinkargs *objp); +#endif /* not HAVE_XDR_LINKARGS */ +#ifndef HAVE_XDR_MOUNTBODY +bool_t xdr_mountbody(XDR *xdrs, mountbody *objp); +#endif /* not HAVE_XDR_MOUNTBODY */ +#ifndef HAVE_XDR_MOUNTLIST +bool_t xdr_mountlist(XDR *xdrs, mountlist *objp); +#endif /* not HAVE_XDR_MOUNTLIST */ + +/* + * NFS3 XDR FUNCTIONS: + */ +#if defined(HAVE_FS_NFS3) && !defined(HAVE_XDR_MOUNTRES3) +bool_t xdr_fhandle3(XDR *xdrs, fhandle3 *objp); +bool_t xdr_mountstat3(XDR *xdrs, mountstat3 *objp); +bool_t xdr_mountres3_ok(XDR *xdrs, mountres3_ok *objp); +bool_t xdr_mountres3(XDR *xdrs, mountres3 *objp); +#endif /* defined(HAVE_FS_NFS3) && !defined(HAVE_XDR_MOUNTRES3) */ + +#ifndef HAVE_XDR_NAME +bool_t xdr_name(XDR *xdrs, name *objp); +#endif /* not HAVE_XDR_NAME */ +#ifndef HAVE_XDR_NFS_FH +bool_t xdr_nfs_fh(XDR *xdrs, am_nfs_fh *objp); +#endif /* not HAVE_XDR_NFS_FH */ +#ifndef HAVE_XDR_NFSCOOKIE +bool_t xdr_nfscookie(XDR *xdrs, nfscookie objp); +#endif /* not HAVE_XDR_NFSCOOKIE */ +#ifndef HAVE_XDR_NFSPATH +bool_t xdr_nfspath(XDR *xdrs, nfspath *objp); +#endif /* not HAVE_XDR_NFSPATH */ +#ifndef HAVE_XDR_NFSSTAT +bool_t xdr_nfsstat(XDR *xdrs, nfsstat *objp); +#endif /* not HAVE_XDR_NFSSTAT */ +#ifndef HAVE_XDR_NFSTIME +bool_t xdr_nfstime(XDR *xdrs, nfstime *objp); +#endif /* not HAVE_XDR_NFSTIME */ +#ifndef HAVE_XDR_POINTER +bool_t xdr_pointer(register XDR *xdrs, char **objpp, u_int obj_size, XDRPROC_T_TYPE xdr_obj); +#endif /* not HAVE_XDR_POINTER */ +#ifndef HAVE_XDR_READARGS +bool_t xdr_readargs(XDR *xdrs, nfsreadargs *objp); +#endif /* not HAVE_XDR_READARGS */ +#ifndef HAVE_XDR_READDIRARGS +bool_t xdr_readdirargs(XDR *xdrs, nfsreaddirargs *objp); +#endif /* not HAVE_XDR_READDIRARGS */ +#ifndef HAVE_XDR_READDIRRES +bool_t xdr_readdirres(XDR *xdrs, nfsreaddirres *objp); +#endif /* not HAVE_XDR_READDIRRES */ +#ifndef HAVE_XDR_READLINKRES +bool_t xdr_readlinkres(XDR *xdrs, nfsreadlinkres *objp); +#endif /* not HAVE_XDR_READLINKRES */ +#ifndef HAVE_XDR_READOKRES +bool_t xdr_readokres(XDR *xdrs, nfsreadokres *objp); +#endif /* not HAVE_XDR_READOKRES */ +#ifndef HAVE_XDR_READRES +bool_t xdr_readres(XDR *xdrs, nfsreadres *objp); +#endif /* not HAVE_XDR_READRES */ +#ifndef HAVE_XDR_RENAMEARGS +bool_t xdr_renameargs(XDR *xdrs, nfsrenameargs *objp); +#endif /* not HAVE_XDR_RENAMEARGS */ +#ifndef HAVE_XDR_SATTR +bool_t xdr_sattr(XDR *xdrs, nfssattr *objp); +#endif /* not HAVE_XDR_SATTR */ +#ifndef HAVE_XDR_SATTRARGS +bool_t xdr_sattrargs(XDR *xdrs, nfssattrargs *objp); +#endif /* not HAVE_XDR_SATTRARGS */ +#ifndef HAVE_XDR_STATFSOKRES +bool_t xdr_statfsokres(XDR *xdrs, nfsstatfsokres *objp); +#endif /* not HAVE_XDR_STATFSOKRES */ +#ifndef HAVE_XDR_STATFSRES +bool_t xdr_statfsres(XDR *xdrs, nfsstatfsres *objp); +#endif /* not HAVE_XDR_STATFSRES */ +#ifndef HAVE_XDR_SYMLINKARGS +bool_t xdr_symlinkargs(XDR *xdrs, nfssymlinkargs *objp); +#endif /* not HAVE_XDR_SYMLINKARGS */ +#ifndef HAVE_XDR_WRITEARGS +bool_t xdr_writeargs(XDR *xdrs, nfswriteargs *objp); +#endif /* not HAVE_XDR_WRITEARGS */ + +/* + * AUTOFS XDR FUNCTIONS: + */ +#ifdef HAVE_FS_AUTOFS +# ifndef HAVE_XDR_MNTREQUEST +bool_t xdr_mntrequest(XDR *xdrs, mntrequest *objp); +# endif /* not HAVE_XDR_MNTREQUEST */ +# ifndef HAVE_XDR_MNTRES +bool_t xdr_mntres(XDR *xdrs, mntres *objp); +# endif /* not HAVE_XDR_MNTRES */ +# ifndef HAVE_XDR_UMNTREQUEST +bool_t xdr_umntrequest(XDR *xdrs, umntrequest *objp); +# endif /* not HAVE_XDR_UMNTREQUEST */ +# ifndef HAVE_XDR_UMNTRES +bool_t xdr_umntres(XDR *xdrs, umntres *objp); +# endif /* not HAVE_XDR_UMNTRES */ +#endif /* HAVE_FS_AUTOFS */ + +#endif /* not _AM_XDR_FUNC_H */ diff --git a/include/amq_defs.h b/include/amq_defs.h new file mode 100644 index 0000000..43b9f7c --- /dev/null +++ b/include/amq_defs.h @@ -0,0 +1,157 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amq_defs.h,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +#ifndef _AMQ_DEFS_H +#define _AMQ_DEFS_H + +/* + * MACROS + */ +#ifndef AMQ_SIZE +# define AMQ_SIZE 16384 +#endif /* not AMQ_SIZE */ +#define AMQ_STRLEN 1024 +#define AMQ_PROGRAM ((u_long)300019) +#define AMQ_VERSION ((u_long)1) +#define AMQPROC_NULL ((u_long)0) +#define AMQPROC_MNTTREE ((u_long)1) +#define AMQPROC_UMNT ((u_long)2) +#define AMQPROC_STATS ((u_long)3) +#define AMQPROC_EXPORT ((u_long)4) +#define AMQPROC_SETOPT ((u_long)5) +#define AMQPROC_GETMNTFS ((u_long)6) +#define AMQPROC_MOUNT ((u_long)7) +#define AMQPROC_GETVERS ((u_long)8) +#define AMQPROC_GETPID ((u_long)9) + +/* + * TYPEDEFS + */ +typedef long *time_type; +typedef struct amq_mount_info amq_mount_info; +typedef struct amq_mount_stats amq_mount_stats; +typedef struct amq_mount_tree amq_mount_tree; +typedef struct amq_setopt amq_setopt; +typedef amq_mount_tree *amq_mount_tree_p; + +/* + * STRUCTURES: + */ +struct amq_mount_tree { + amq_string mt_mountinfo; + amq_string mt_directory; + amq_string mt_mountpoint; + amq_string mt_type; + time_type mt_mounttime; + u_short mt_mountuid; + int mt_getattr; + int mt_lookup; + int mt_readdir; + int mt_readlink; + int mt_statfs; + struct amq_mount_tree *mt_next; + struct amq_mount_tree *mt_child; +}; + +struct amq_mount_info { + amq_string mi_type; + amq_string mi_mountpt; + amq_string mi_mountinfo; + amq_string mi_fserver; + int mi_error; + int mi_refc; + int mi_up; +}; + +typedef struct { + u_int amq_mount_info_list_len; + amq_mount_info *amq_mount_info_list_val; +} amq_mount_info_list; + +typedef struct { + u_int amq_mount_tree_list_len; + amq_mount_tree_p *amq_mount_tree_list_val; +} amq_mount_tree_list; + +struct amq_mount_stats { + int as_drops; + int as_stale; + int as_mok; + int as_merr; + int as_uerr; +}; + +enum amq_opt { + AMOPT_DEBUG = 0, + AMOPT_LOGFILE = 1, + AMOPT_XLOG = 2, + AMOPT_FLUSHMAPC = 3 +}; +typedef enum amq_opt amq_opt; /* enum typedefs should be after enum */ + +struct amq_setopt { + amq_opt as_opt; + amq_string as_str; +}; + +/* + * EXTERNALS: + * + * external definitions for amqproc_*_1() have been moved off to private + * headers in lib/amu.h, amd/amd.h, etc. They have to be private since the + * same named functions appear in different places with different prototypes + * an functionality. + */ +extern bool_t xdr_amq_mount_info(XDR *xdrs, amq_mount_info *objp); +extern bool_t xdr_amq_mount_info_list(XDR *xdrs, amq_mount_info_list *objp); +extern bool_t xdr_amq_mount_stats(XDR *xdrs, amq_mount_stats *objp); +extern bool_t xdr_amq_mount_tree(XDR *xdrs, amq_mount_tree *objp); +extern bool_t xdr_amq_mount_tree_list(XDR *xdrs, amq_mount_tree_list *objp); +extern bool_t xdr_amq_mount_tree_p(XDR *xdrs, amq_mount_tree_p *objp); +extern bool_t xdr_amq_opt(XDR *xdrs, amq_opt *objp); +extern bool_t xdr_amq_setopt(XDR *xdrs, amq_setopt *objp); +extern bool_t xdr_pri_free(XDRPROC_T_TYPE xdr_args, caddr_t args_ptr); +extern bool_t xdr_time_type(XDR *xdrs, time_type *objp); + +#endif /* not _AMQ_DEFS_H */ diff --git a/libamu/Makefile.am b/libamu/Makefile.am new file mode 100644 index 0000000..bff6155 --- /dev/null +++ b/libamu/Makefile.am @@ -0,0 +1,66 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for libamu/ directory +# Author: Erez Zadok + +#noinst_LIBRARIES = libamu.a +lib_LTLIBRARIES = libamu.la + +# headers this depends on, not to be installed +noinst_HEADERS = \ + amu.h + +# these sources must be included: +libamu_la_SOURCES = \ + misc_rpc.c \ + mount_fs.c \ + mtab.c \ + nfs_prot_xdr.c \ + util.c \ + wire.c \ + xdr_func.c \ + xutil.c + +EXTRA_DIST = \ + memcmp.c + +# these may be added automatically by automake if needed: +# clnt_sperrno.c +# hasmntopt.c +# memcmp.c (via AC_FUNC_MEMCMP) +# strcasecmp.c +# strdup.c +# strstr.c +# ualarm.c +# +# files optionally linked in: +# mountutil.c: mount utilities +# umount_fs.c: un-mount utilities +# +# files that always get linked in, but to a different path: +# mtabutil.c +# transp_util.c + +libamu_la_LIBADD = @LTLIBOBJS@ + +# LDFLAGS should include standard ones plus LIBTOOL ones +LDFLAGS = @LDFLAGS@ @LIBTOOL_LDFLAGS@ + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# dependencies +$(OBJECTS) $(libamu_la_LIBADD): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) diff --git a/libamu/Makefile.in b/libamu/Makefile.in new file mode 100644 index 0000000..484ceb1 --- /dev/null +++ b/libamu/Makefile.in @@ -0,0 +1,352 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for libamu/ directory +# Author: Erez Zadok + +#noinst_LIBRARIES = libamu.a + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +lib_LTLIBRARIES = libamu.la + +# headers this depends on, not to be installed +noinst_HEADERS = \ + amu.h + +# these sources must be included: +libamu_la_SOURCES = \ + misc_rpc.c \ + mount_fs.c \ + mtab.c \ + nfs_prot_xdr.c \ + util.c \ + wire.c \ + xdr_func.c \ + xutil.c + +EXTRA_DIST = \ + memcmp.c + +# these may be added automatically by automake if needed: +# clnt_sperrno.c +# hasmntopt.c +# memcmp.c (via AC_FUNC_MEMCMP) +# strcasecmp.c +# strdup.c +# strstr.c +# ualarm.c +# +# files optionally linked in: +# mountutil.c: mount utilities +# umount_fs.c: un-mount utilities +# +# files that always get linked in, but to a different path: +# mtabutil.c +# transp_util.c + +libamu_la_LIBADD = @LTLIBOBJS@ + +# LDFLAGS should include standard ones plus LIBTOOL ones +LDFLAGS = @LDFLAGS@ @LIBTOOL_LDFLAGS@ + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(lib_LTLIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LIBS = @LIBS@ +libamu_la_LDFLAGS = +libamu_la_DEPENDENCIES = @LTLIBOBJS@ +libamu_la_OBJECTS = misc_rpc.lo mount_fs.lo mtab.lo nfs_prot_xdr.lo \ +util.lo wire.lo xdr_func.lo xutil.lo +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in clnt_sperrno.c hasmntopt.c \ +strcasecmp.c strdup.c strstr.c ualarm.c + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(libamu_la_SOURCES) +OBJECTS = $(libamu_la_OBJECTS) + +all: Makefile $(LTLIBRARIES) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps libamu/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-libLTLIBRARIES: + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + +distclean-libLTLIBRARIES: + +maintainer-clean-libLTLIBRARIES: + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo "$(LIBTOOL) --mode=install $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p"; \ + $(LIBTOOL) --mode=install $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libamu.la: $(libamu_la_OBJECTS) $(libamu_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libamu_la_LDFLAGS) $(libamu_la_OBJECTS) $(libamu_la_LIBADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = libamu + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-libLTLIBRARIES + @$(NORMAL_INSTALL) + +install-data: + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-libLTLIBRARIES + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(libdir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-libLTLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-libLTLIBRARIES distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-libLTLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ +clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ +uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ +distclean-compile clean-compile maintainer-clean-compile \ +mostlyclean-libtool distclean-libtool clean-libtool \ +maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir info dvi installcheck \ +install-exec install-data install uninstall all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(OBJECTS) $(libamu_la_LIBADD): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libamu/amu.h b/libamu/amu.h new file mode 100644 index 0000000..e745ad2 --- /dev/null +++ b/libamu/amu.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: amu.h,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +#ifndef _AMU_H +#define _AMU_H + +/* + * Decide what maximum level of NFS server to try and mount with. + */ +#ifdef HAVE_FS_NFS3 +# define NFS_VERS_MAX NFS_VERSION3 +#else /* not HAVE_FS_NFS3 */ +# define NFS_VERS_MAX NFS_VERSION +#endif /* not HAVE_FS_NFS3 */ + +/* some systems like ncr2 do not define this in */ +#ifndef MNTPATHLEN +# define MNTPATHLEN 1024 +#endif /* not MNTPATHLEN */ +#ifndef MNTNAMLEN +# define MNTNAMLEN 255 +#endif /* not MNTNAMLEN */ + +/* + * external definitions for building libamu.a + */ +extern voidp amqproc_null_1(voidp argp, CLIENT *rqstp); +extern amq_mount_tree_p *amqproc_mnttree_1(amq_string *argp, CLIENT *rqstp); +extern voidp amqproc_umnt_1(amq_string *argp, CLIENT *rqstp); +extern amq_mount_stats *amqproc_stats_1(voidp argp, CLIENT *rqstp); +extern amq_mount_tree_list *amqproc_export_1(voidp argp, CLIENT *rqstp); +extern int *amqproc_setopt_1(amq_setopt *argp, CLIENT *rqstp); +extern amq_mount_info_list *amqproc_getmntfs_1(voidp argp, CLIENT *rqstp); +extern int *amqproc_mount_1(voidp argp, CLIENT *rqstp); +extern amq_string *amqproc_getvers_1(voidp argp, CLIENT *rqstp); + +#endif /* not _AMU_H */ diff --git a/libamu/clnt_sperrno.c b/libamu/clnt_sperrno.c new file mode 100644 index 0000000..15df6a6 --- /dev/null +++ b/libamu/clnt_sperrno.c @@ -0,0 +1,147 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: clnt_sperrno.c,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +/* + * Early RPC seems to be missing these.. + * Extracted from the RPC 3.9 sources as indicated + */ + +/* @(#)clnt_perror.c 1.1 87/11/04 3.9 RPCSRC */ +/* + * Sun RPC is a product of Sun Microsystems, Inc. and is provided for + * unrestricted use provided that this legend is included on all tape + * media and as a part of the software program in whole or part. Users + * may copy or modify Sun RPC without charge, but are not authorized + * to license or distribute it to anyone else except as part of a product or + * program developed by the user. + * + * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE + * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. + * + * Sun RPC is provided with no support and without any obligation on the + * part of Sun Microsystems, Inc. to assist in its use, correction, + * modification or enhancement. + * + * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE + * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC + * OR ANY PART THEREOF. + * + * In no event will Sun Microsystems, Inc. be liable for any lost revenue + * or profits or other special, indirect and consequential damages, even if + * Sun has been advised of the possibility of such damages. + * + * Sun Microsystems, Inc. + * 2550 Garcia Avenue + * Mountain View, California 94043 + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +struct rpc_errtab { + enum clnt_stat status; + char *message; +}; + +static struct rpc_errtab rpc_errlist[] = +{ + {RPC_SUCCESS, + "RPC: Success"}, + {RPC_CANTENCODEARGS, + "RPC: Can't encode arguments"}, + {RPC_CANTDECODERES, + "RPC: Can't decode result"}, + {RPC_CANTSEND, + "RPC: Unable to send"}, + {RPC_CANTRECV, + "RPC: Unable to receive"}, + {RPC_TIMEDOUT, + "RPC: Timed out"}, + {RPC_VERSMISMATCH, + "RPC: Incompatible versions of RPC"}, + {RPC_AUTHERROR, + "RPC: Authentication error"}, + {RPC_PROGUNAVAIL, + "RPC: Program unavailable"}, + {RPC_PROGVERSMISMATCH, + "RPC: Program/version mismatch"}, + {RPC_PROCUNAVAIL, + "RPC: Procedure unavailable"}, + {RPC_CANTDECODEARGS, + "RPC: Server can't decode arguments"}, + {RPC_SYSTEMERROR, + "RPC: Remote system error"}, + {RPC_UNKNOWNHOST, + "RPC: Unknown host"}, +/* { RPC_UNKNOWNPROTO, + * "RPC: Unknown protocol" }, */ + {RPC_PMAPFAILURE, + "RPC: Port mapper failure"}, + {RPC_PROGNOTREGISTERED, + "RPC: Program not registered"}, + {RPC_FAILED, + "RPC: Failed (unspecified error)"} +}; + + +/* + * This interface for use by clntrpc + */ +char * +clnt_sperrno(enum clnt_stat stat) +{ + int i; + + for (i = 0; i < sizeof(rpc_errlist) / sizeof(struct rpc_errtab); i++) { + if (rpc_errlist[i].status == stat) { + return (rpc_errlist[i].message); + } + } + return ("RPC: (unknown error code)"); +} diff --git a/libamu/hasmntopt.c b/libamu/hasmntopt.c new file mode 100644 index 0000000..6abe111 --- /dev/null +++ b/libamu/hasmntopt.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without +n * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: hasmntopt.c,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#ifndef MNTMAXSTR +# define MNTMAXSTR 128 +#endif /* not MNTMAXSTR */ + + +/* + * Some systems don't provide these to the user, + * but amd needs them, so... + * + * From: Piete Brooks + */ + +static char * +nextmntopt(char **p) +{ + char *cp = *p; + char *rp; + + /* + * Skip past white space + */ + while (*cp && isspace(*cp)) + cp++; + + /* + * Word starts here + */ + rp = cp; + + /* + * Scan to send of string or separator + */ + while (*cp && *cp != ',') + cp++; + + /* + * If separator found the overwrite with null char. + */ + if (*cp) { + *cp = '\0'; + cp++; + } + + /* + * Return value for next call + */ + *p = cp; + return rp; +} + +/* + * replacement for hasmntopt if the system does not have it. + */ +char * +hasmntopt(mntent_t *mnt, char *opt) +{ + char t[MNTMAXSTR]; + char *f; + char *o = t; + int l = strlen(opt); + + strcpy(t, mnt->mnt_opts); + + while (*(f = nextmntopt(&o))) + if (NSTREQ(opt, f, l)) + return f - t + mnt->mnt_opts; + + return 0; +} diff --git a/libamu/memcmp.c b/libamu/memcmp.c new file mode 100644 index 0000000..443454a --- /dev/null +++ b/libamu/memcmp.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: memcmp.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * compare two strings for up to length "len". + * this will normally be included on systems that either have no memcmp() + * and no bcmp(), or on systems that have both but the memcmp() is not 8-bit + * clean (such as SunOS 4.1.3). + * + * SunOS 4.x with gcc requires prototype of (const voidp, const voidp, size_t) + */ +int +am_memcmp(const voidp s1, const voidp s2, size_t len) +{ + unsigned char *ucp1 = (unsigned char *) s1; + unsigned char *ucp2 = (unsigned char *) s2; + int i = len; + + while (i-- > 0) + if (*ucp1++ != *ucp2++) + return (ucp1[-1] >= ucp2[-1] ? 1 : -1); + + return 0; +} diff --git a/libamu/misc_rpc.c b/libamu/misc_rpc.c new file mode 100644 index 0000000..d5c4da8 --- /dev/null +++ b/libamu/misc_rpc.c @@ -0,0 +1,168 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: misc_rpc.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +/* + * Additions to Sun RPC. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Some systems renamed _seterr_reply to __seterr_reply (with two + * leading underscores) + */ +#if !defined(HAVE__SETERR_REPLY) && defined(HAVE___SETERR_REPLY) +# define _seterr_reply __seterr_reply +#endif /* !defined(HAVE__SETERR_REPLY) && defined(HAVE___SETERR_REPLY) */ + + +void +rpc_msg_init(struct rpc_msg *mp, u_long prog, u_long vers, u_long proc) +{ + /* + * Initialize the message + */ + memset((voidp) mp, 0, sizeof(*mp)); + mp->rm_xid = 0; + mp->rm_direction = CALL; + mp->rm_call.cb_rpcvers = RPC_MSG_VERSION; + mp->rm_call.cb_prog = prog; + mp->rm_call.cb_vers = vers; + mp->rm_call.cb_proc = proc; +} + + +/* + * Field reply to call to mountd + */ +int +pickup_rpc_reply(voidp pkt, int len, voidp where, XDRPROC_T_TYPE where_xdr) +{ + XDR reply_xdr; + int ok; + struct rpc_err err; + struct rpc_msg reply_msg; + int error = 0; + + /* memset((voidp) &err, 0, sizeof(err)); */ + memset((voidp) &reply_msg, 0, sizeof(reply_msg)); + memset((voidp) &reply_xdr, 0, sizeof(reply_xdr)); + + reply_msg.acpted_rply.ar_results.where = (caddr_t) where; + reply_msg.acpted_rply.ar_results.proc = where_xdr; + + xdrmem_create(&reply_xdr, pkt, len, XDR_DECODE); + + ok = xdr_replymsg(&reply_xdr, &reply_msg); + if (!ok) { + error = EIO; + goto drop; + } + _seterr_reply(&reply_msg, &err); + if (err.re_status != RPC_SUCCESS) { + error = EIO; + goto drop; + } + +drop: + if (reply_msg.rm_reply.rp_stat == MSG_ACCEPTED && + reply_msg.acpted_rply.ar_verf.oa_base) { + reply_xdr.x_op = XDR_FREE; + (void) xdr_opaque_auth(&reply_xdr, + &reply_msg.acpted_rply.ar_verf); + } + xdr_destroy(&reply_xdr); + + return error; +} + + +int +make_rpc_packet(char *buf, int buflen, u_long proc, struct rpc_msg *mp, voidp arg, XDRPROC_T_TYPE arg_xdr, AUTH *auth) +{ + XDR msg_xdr; + int len; + + xdrmem_create(&msg_xdr, buf, buflen, XDR_ENCODE); + + /* + * Basic protocol header + */ + if (!xdr_callhdr(&msg_xdr, mp)) + return -EIO; + + /* + * Called procedure number + */ + if (!xdr_enum(&msg_xdr, (enum_t *) & proc)) + return -EIO; + + /* + * Authorization + */ + if (!AUTH_MARSHALL(auth, &msg_xdr)) + return -EIO; + + /* + * Arguments + */ + if (!(*arg_xdr) (&msg_xdr, arg)) + return -EIO; + + /* + * Determine length + */ + len = xdr_getpos(&msg_xdr); + + /* + * Throw away xdr + */ + xdr_destroy(&msg_xdr); + + return len; +} diff --git a/libamu/mount_fs.c b/libamu/mount_fs.c new file mode 100644 index 0000000..b1e7234 --- /dev/null +++ b/libamu/mount_fs.c @@ -0,0 +1,892 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mount_fs.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* ensure that mount table options are delimited by a comma */ +#define append_opts(old, new) { \ + if (*(old) != '\0') strcat(old, ","); \ + strcat(old, new); } + +/* + * Standard mount flags + */ +struct opt_tab mnt_flags[] = +{ +#if defined(MNT2_GEN_OPT_RDONLY) && defined(MNTTAB_OPT_RO) + {MNTTAB_OPT_RO, MNT2_GEN_OPT_RDONLY}, +#endif /* defined(MNT2_GEN_OPT_RDONLY) && defined(MNTTAB_OPT_RO) */ + +#if defined(MNT2_GEN_OPT_NOCACHE) && defined(MNTTAB_OPT_NOCACHE) + {MNTTAB_OPT_NOCACHE, MNT2_GEN_OPT_NOCACHE}, +#endif /* defined(MNT2_GEN_OPT_NOCACHE) && defined(MNTTAB_OPT_NOCACHE) */ + + /* the "grpid" mount option can be offered as generic of NFS */ +#ifdef MNTTAB_OPT_GRPID +# ifdef MNT2_GEN_OPT_GRPID + {MNTTAB_OPT_GRPID, MNT2_GEN_OPT_GRPID}, +# endif /* MNT2_GEN_OPT_GRPID */ +# ifdef MNT2_NFS_OPT_GRPID + {MNTTAB_OPT_GRPID, MNT2_NFS_OPT_GRPID}, +# endif /* MNT2_NFS_OPT_GRPID */ +#endif /* MNTTAB_OPT_GRPID */ + +#if defined(MNT2_GEN_OPT_MULTI) && defined(MNTTAB_OPT_MULTI) + {MNTTAB_OPT_MULTI, MNT2_GEN_OPT_MULTI}, +#endif /* defined(MNT2_GEN_OPT_MULTI) && defined(MNTTAB_OPT_MULTI) */ + +#if defined(MNT2_GEN_OPT_NODEV) && defined(MNTTAB_OPT_NODEV) + {MNTTAB_OPT_NODEV, MNT2_GEN_OPT_NODEV}, +#endif /* defined(MNT2_GEN_OPT_NODEV) && defined(MNTTAB_OPT_NODEV) */ + +#if defined(MNT2_GEN_OPT_NOEXEC) && defined(MNTTAB_OPT_NOEXEC) + {MNTTAB_OPT_NOEXEC, MNT2_GEN_OPT_NOEXEC}, +#endif /* defined(MNT2_GEN_OPT_NOEXEC) && defined(MNTTAB_OPT_NOEXEC) */ + +#if defined(MNT2_GEN_OPT_NOSUB) && defined(MNTTAB_OPT_NOSUB) + {MNTTAB_OPT_NOSUB, MNT2_GEN_OPT_NOSUB}, +#endif /* defined(MNT2_GEN_OPT_NOSUB) && defined(MNTTAB_OPT_NOSUB) */ + +#if defined(MNT2_GEN_OPT_NOSUID) && defined(MNTTAB_OPT_NOSUID) + {MNTTAB_OPT_NOSUID, MNT2_GEN_OPT_NOSUID}, +#endif /* defined(MNT2_GEN_OPT_NOSUID) && defined(MNTTAB_OPT_NOSUID) */ + +#if defined(MNT2_GEN_OPT_SYNC) && defined(MNTTAB_OPT_SYNC) + {MNTTAB_OPT_SYNC, MNT2_GEN_OPT_SYNC}, +#endif /* defined(MNT2_GEN_OPT_SYNC) && defined(MNTTAB_OPT_SYNC) */ + +#if defined(MNT2_GEN_OPT_OVERLAY) && defined(MNTTAB_OPT_OVERLAY) + {MNTTAB_OPT_OVERLAY, MNT2_GEN_OPT_OVERLAY}, +#endif /* defined(MNT2_GEN_OPT_OVERLAY) && defined(MNTTAB_OPT_OVERLAY) */ + + {0, 0} +}; + + +int +compute_mount_flags(mntent_t *mntp) +{ + struct opt_tab *opt; + int flags; + + /* start: this must come first */ +#ifdef MNT2_GEN_OPT_NEWTYPE + flags = MNT2_GEN_OPT_NEWTYPE; +#else /* not MNT2_GEN_OPT_NEWTYPE */ + /* Not all machines have MNT2_GEN_OPT_NEWTYPE (HP-UX 9.01) */ + flags = 0; +#endif /* not MNT2_GEN_OPT_NEWTYPE */ + +#if defined(MNT2_GEN_OPT_OVERLAY) && defined(MNTTAB_OPT_OVERLAY) + /* + * Overlay this amd mount (presumably on another amd which died + * before and left the machine hung). This will allow a new amd or + * hlfsd to be remounted on top of another one. + */ + if (hasmntopt(mntp, MNTTAB_OPT_OVERLAY)) { + flags |= MNT2_GEN_OPT_OVERLAY; + plog(XLOG_INFO, "using an overlay mount"); + } +#endif /* defined(MNT2_GEN_OVERLAY) && defined(MNTOPT_OVERLAY) */ + + /* + * Crack basic mount options + */ + for (opt = mnt_flags; opt->opt; opt++) { + flags |= hasmntopt(mntp, opt->opt) ? opt->flag : 0; + } + + return flags; +} + + +int +mount_fs(mntent_t *mnt, int flags, caddr_t mnt_data, int retry, MTYPE_TYPE type, u_long nfs_version, const char *nfs_proto, const char *mnttabname) +{ + int error = 0; +#ifdef MOUNT_TABLE_ON_FILE +# ifdef MNTTAB_OPT_DEV + struct stat stb; +# endif /* MNTTAB_OPT_DEV */ + char *zopts = NULL, *xopts = NULL; +# if defined(MNTTAB_OPT_DEV) || (defined(HAVE_FS_NFS3) && defined(MNTTAB_OPT_VERS)) || defined(MNTTAB_OPT_PROTO) + char optsbuf[48]; +# endif /* defined(MNTTAB_OPT_DEV) || (defined(HAVE_FS_NFS3) && defined(MNTTAB_OPT_VERS)) || defined(MNTTAB_OPT_PROTO) */ +#endif /* MOUNT_TABLE_ON_FILE */ +#ifdef DEBUG + char buf[80]; /* buffer for sprintf */ +#endif /* DEBUG */ + +#ifdef DEBUG + sprintf(buf, "%s%s%s", + "%s fstype ", MTYPE_PRINTF_TYPE, " (%s) flags %#x (%s)"); + dlog(buf, mnt->mnt_dir, type, mnt->mnt_type, flags, mnt->mnt_opts); +#endif /* DEBUG */ + +again: + clock_valid = 0; + + error = MOUNT_TRAP(type, mnt, flags, mnt_data); + + if (error < 0) { + plog(XLOG_ERROR, "%s: mount: %m", mnt->mnt_dir); + /* + * The following code handles conditions which shouldn't + * occur. They are possible either because amd screws up + * in preparing for the mount, or because some human + * messed with the mount point. Both have been known to + * happen. -- stolcke 2/22/95 + */ + if (errno == ENOENT) { + /* + * Occasionally the mount point vanishes, probably + * due to some race condition. Just recreate it + * as necessary. + */ + errno = mkdirs(mnt->mnt_dir, 0555); + if (errno != 0 && errno != EEXIST) + plog(XLOG_ERROR, "%s: mkdirs: %m", mnt->mnt_dir); + else { + plog(XLOG_WARNING, "extra mkdirs required for %s", + mnt->mnt_dir); + error = MOUNT_TRAP(type, mnt, flags, mnt_data); + } + } else if (errno == EBUSY) { + /* + * Also, sometimes unmount isn't called, e.g., because + * our mountlist is garbled. This leaves old mount + * points around which need to be removed before we + * can mount something new in their place. + */ + errno = umount_fs(mnt->mnt_dir, mnttabname); + if (errno != 0) + plog(XLOG_ERROR, "%s: umount: %m", mnt->mnt_dir); + else { + plog(XLOG_WARNING, "extra umount required for %s", + mnt->mnt_dir); + error = MOUNT_TRAP(type, mnt, flags, mnt_data); + } + } + } + + if (error < 0 && --retry > 0) { + sleep(1); + goto again; + } + if (error < 0) { + return errno; + } + +#ifdef MOUNT_TABLE_ON_FILE + /* + * Allocate memory for options: + * dev=..., vers={2,3}, proto={tcp,udp} + */ + zopts = (char *) xmalloc(strlen(mnt->mnt_opts) + 48); + + /* copy standard options */ + xopts = mnt->mnt_opts; + + strcpy(zopts, xopts); + +# ifdef MNTTAB_OPT_DEV + /* add the extra dev= field to the mount table */ + if (lstat(mnt->mnt_dir, &stb) == 0) { + if (sizeof(stb.st_dev) == 2) /* e.g. SunOS 4.1 */ + sprintf(optsbuf, "%s=%04lx", + MNTTAB_OPT_DEV, (u_long) stb.st_dev & 0xffff); + else /* e.g. System Vr4 */ + sprintf(optsbuf, "%s=%08lx", + MNTTAB_OPT_DEV, (u_long) stb.st_dev); + append_opts(zopts, optsbuf); + } +# endif /* MNTTAB_OPT_DEV */ + +# if defined(HAVE_FS_NFS3) && defined(MNTTAB_OPT_VERS) + /* + * add the extra vers={2,3} field to the mount table, + * unless already specified by user + */ + if (nfs_version == NFS_VERSION3 && + hasmntval(mnt, MNTTAB_OPT_VERS) != NFS_VERSION3) { + sprintf(optsbuf, "%s=%d", MNTTAB_OPT_VERS, NFS_VERSION3); + append_opts(zopts, optsbuf); + } +# endif /* defined(HAVE_FS_NFS3) && defined(MNTTAB_OPT_VERS) */ + +# ifdef MNTTAB_OPT_PROTO + /* + * add the extra proto={tcp,udp} field to the mount table, + * unless already specified by user. + */ + if (nfs_proto && !hasmntopt(mnt, MNTTAB_OPT_PROTO)) { + sprintf(optsbuf, "%s=%s", MNTTAB_OPT_PROTO, nfs_proto); + append_opts(zopts, optsbuf); + } +# endif /* MNTTAB_OPT_PROTO */ + + /* finally, store the options into the mount table structure */ + mnt->mnt_opts = zopts; + + /* + * Additional fields in mntent_t + * are fixed up here + */ +# ifdef HAVE_FIELD_MNTENT_T_MNT_CNODE + mnt->mnt_cnode = 0; +# endif /* HAVE_FIELD_MNTENT_T_MNT_CNODE */ + +# ifdef HAVE_FIELD_MNTENT_T_MNT_RO + mnt->mnt_ro = (hasmntopt(mnt, MNTTAB_OPT_RO) != NULL); +# endif /* HAVE_FIELD_MNTENT_T_MNT_RO */ + +# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME +# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING + { /* allocate enough space for a long */ + char *str = (char *) xmalloc(13 * sizeof(char)); + sprintf(str, "%ld", time((time_t *) NULL)); + mnt->mnt_time = str; + } +# else /* not HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */ + mnt->mnt_time = time((time_t *) NULL); +# endif /* not HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */ +# endif /* HAVE_FIELD_MNTENT_T_MNT_TIME */ + + write_mntent(mnt, mnttabname); + +# ifdef MNTTAB_OPT_DEV + if (xopts) { + XFREE(mnt->mnt_opts); + mnt->mnt_opts = xopts; + } +# endif /* MNTTAB_OPT_DEV */ +#endif /* MOUNT_TABLE_ON_FILE */ + + return 0; +} + + +/* + * Fill in the many possible fields and flags of struct nfs_args. + * + * nap: pre-allocated structure to fill in. + * mntp: mount entry structure (includes options) + * genflags: generic mount flags already determined + * nfsncp: (TLI only) netconfig entry for this NFS mount + * ip_addr: IP address of file server + * nfs_version: 2, 3, (4 in the future), or 0 if unknown + * nfs_proto: "udp", "tcp", or NULL. + * fhp: file handle structure pointer + * host_name: name of remote NFS host + * fs_name: remote file system name to mount + */ +void +#ifdef HAVE_TRANSPORT_TYPE_TLI +compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct netconfig *nfsncp, struct sockaddr_in *ip_addr, u_long nfs_version, char *nfs_proto, am_nfs_handle_t *fhp, char *host_name, char *fs_name) +#else /* not HAVE_TRANSPORT_TYPE_TLI */ +compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_in *ip_addr, u_long nfs_version, char *nfs_proto, am_nfs_handle_t *fhp, char *host_name, char *fs_name) +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ +{ + int acval = 0; +#ifdef HAVE_FS_NFS3 + static am_nfs_fh3 fh3; /* static, b/c gcc on aix corrupts stack */ +#endif /* HAVE_FS_NFS3 */ + + /* initialize just in case */ + memset((voidp) nap, 0, sizeof(nfs_args_t)); + + /************************************************************************/ + /*** FILEHANDLE DATA AND LENGTH ***/ + /************************************************************************/ +#ifdef HAVE_FS_NFS3 + if (nfs_version == NFS_VERSION3) { + memset((voidp) &fh3, 0, sizeof(am_nfs_fh3)); + fh3.fh3_length = fhp->v3.mountres3_u.mountinfo.fhandle.fhandle3_len; + memmove(fh3.fh3_u.data, + fhp->v3.mountres3_u.mountinfo.fhandle.fhandle3_val, + fh3.fh3_length); + +# if defined(HAVE_FIELD_NFS_ARGS_T_FHSIZE) || defined(HAVE_FIELD_NFS_ARGS_T_FH_LEN) + /* + * Some systems (Irix/bsdi3) have a separate field in nfs_args for + * the length of the file handle for NFS V3. They insist that + * the file handle set in nfs_args be plain bytes, and not + * include the length field. + */ + NFS_FH_DREF(nap->NFS_FH_FIELD, &(fh3.fh3_u.data)); +# else /* not defined(HAVE_FIELD_NFS_ARGS_T_FHSIZE) || defined(HAVE_FIELD_NFS_ARGS_T_FH_LEN) */ + NFS_FH_DREF(nap->NFS_FH_FIELD, &fh3); +# endif /* not defined(HAVE_FIELD_NFS_ARGS_T_FHSIZE) || defined(HAVE_FIELD_NFS_ARGS_T_FH_LEN) */ +# ifdef MNT2_NFS_OPT_NFSV3 + nap->flags |= MNT2_NFS_OPT_NFSV3; +# endif /* MNT2_NFS_OPT_NFSV3 */ + } else +#endif /* HAVE_FS_NFS3 */ + NFS_FH_DREF(nap->NFS_FH_FIELD, &(fhp->v2.fhs_fh)); + +#ifdef HAVE_FIELD_NFS_ARGS_T_FHSIZE +# ifdef HAVE_FS_NFS3 + if (nfs_version == NFS_VERSION3) + nap->fhsize = fh3.fh3_length; + else +# endif /* HAVE_FS_NFS3 */ + nap->fhsize = FHSIZE; +#endif /* HAVE_FIELD_NFS_ARGS_T_FHSIZE */ + + /* this is the version of the nfs_args structure, not of NFS! */ +#ifdef HAVE_FIELD_NFS_ARGS_T_FH_LEN +# ifdef HAVE_FS_NFS3 + if (nfs_version == NFS_VERSION3) + nap->fh_len = fh3.fh3_length; + else +# endif /* HAVE_FS_NFS3 */ + nap->fh_len = FHSIZE; +#endif /* HAVE_FIELD_NFS_ARGS_T_FH_LEN */ + + /************************************************************************/ + /*** HOST NAME ***/ + /************************************************************************/ + NFS_HN_DREF(nap->hostname, host_name); +#ifdef MNT2_NFS_OPT_HOSTNAME + nap->flags |= MNT2_NFS_OPT_HOSTNAME; +#endif /* MNT2_NFS_OPT_HOSTNAME */ + + /************************************************************************/ + /*** ATTRIBUTE CACHES ***/ + /************************************************************************/ + /* + * acval is set to 0 at the top of the function. If actimeo mount option + * exists and defined in mntopts, then it acval is set to it. + * If the value is non-zero, then we set all attribute cache fields to it. + * If acval is zero, it means it was never defined in mntopts or the + * actimeo mount option does not exist, in which case we check for + * individual mount options per attribute cache. + * Regardless of the value of acval, mount flags are set based directly + * on the values of the attribute caches. + */ +#ifdef MNTTAB_OPT_ACTIMEO + acval = hasmntval(mntp, MNTTAB_OPT_ACTIMEO); /* attr cache timeout (sec) */ +#endif /* MNTTAB_OPT_ACTIMEO */ + + if (acval) { +#ifdef HAVE_FIELD_NFS_ARGS_T_ACREGMIN + nap->acregmin = acval; /* min ac timeout for reg files (sec) */ + nap->acregmax = acval; /* max ac timeout for reg files (sec) */ +#endif /* HAVE_FIELD_NFS_ARGS_T_ACREGMIN */ +#ifdef HAVE_FIELD_NFS_ARGS_T_ACDIRMIN + nap->acdirmin = acval; /* min ac timeout for dirs (sec) */ + nap->acdirmax = acval; /* max ac timeout for dirs (sec) */ +#endif /* HAVE_FIELD_NFS_ARGS_T_ACDIRMIN */ + } else { +#ifdef MNTTAB_OPT_ACREGMIN + nap->acregmin = hasmntval(mntp, MNTTAB_OPT_ACREGMIN); +#endif /* MNTTAB_OPT_ACREGMIN */ +#ifdef MNTTAB_OPT_ACREGMAX + nap->acregmax = hasmntval(mntp, MNTTAB_OPT_ACREGMAX); +#endif /* MNTTAB_OPT_ACREGMAX */ +#ifdef MNTTAB_OPT_ACDIRMIN + nap->acdirmin = hasmntval(mntp, MNTTAB_OPT_ACDIRMIN); +#endif /* MNTTAB_OPT_ACDIRMIN */ +#ifdef MNTTAB_OPT_ACDIRMAX + nap->acdirmax = hasmntval(mntp, MNTTAB_OPT_ACDIRMAX); +#endif /* MNTTAB_OPT_ACDIRMAX */ + } /* end of "if (acval)" statement */ + +#ifdef MNT2_NFS_OPT_ACREGMIN + if (nap->acregmin) + nap->flags |= MNT2_NFS_OPT_ACREGMIN; +#endif /* MNT2_NFS_OPT_ACREGMIN */ +#ifdef MNT2_NFS_OPT_ACREGMAX + if (nap->acregmax) + nap->flags |= MNT2_NFS_OPT_ACREGMAX; +#endif /* MNT2_NFS_OPT_ACREGMAX */ +#ifdef MNT2_NFS_OPT_ACDIRMIN + if (nap->acdirmin) + nap->flags |= MNT2_NFS_OPT_ACDIRMIN; +#endif /* MNT2_NFS_OPT_ACDIRMIN */ +#ifdef MNT2_NFS_OPT_ACDIRMAX + if (nap->acdirmax) + nap->flags |= MNT2_NFS_OPT_ACDIRMAX; +#endif /* MNT2_NFS_OPT_ACDIRMAX */ + +#ifdef MNTTAB_OPT_NOAC /* don't cache attributes */ + if (hasmntopt(mntp, MNTTAB_OPT_NOAC) != NULL) + nap->flags |= MNT2_NFS_OPT_NOAC; +#endif /* MNTTAB_OPT_NOAC */ + + /************************************************************************/ + /*** IP ADDRESS OF REMOTE HOST ***/ + /************************************************************************/ + if (ip_addr) { +#ifdef HAVE_TRANSPORT_TYPE_TLI + nap->addr = ALLOC(struct netbuf); /* free()'ed at end of mount_nfs_fh() */ +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + NFS_SA_DREF(nap, ip_addr); + } + + /************************************************************************/ + /*** NFS PROTOCOL (UDP, TCP) AND VERSION ***/ + /************************************************************************/ +#ifdef MNT2_NFS_OPT_TCP + if (nfs_proto && STREQ(nfs_proto, "tcp")) + nap->flags |= MNT2_NFS_OPT_TCP; +#endif /* MNT2_NFS_OPT_TCP */ + +#ifdef HAVE_FIELD_NFS_ARGS_T_SOTYPE + /* bsdi3 uses this */ + if (nfs_proto) { + if (STREQ(nfs_proto, "tcp")) + nap->sotype = SOCK_STREAM; + else if (STREQ(nfs_proto, "udp")) + nap->sotype = SOCK_DGRAM; + } +#endif /* HAVE_FIELD_NFS_ARGS_T_SOTYPE */ + +#ifdef HAVE_FIELD_NFS_ARGS_T_PROTO + nap->proto = 0; /* bsdi3 sets this field to zero */ +# ifdef IPPROTO_TCP + if (nfs_proto) { + if (STREQ(nfs_proto, "tcp")) /* AIX 4.2.x needs this */ + nap->proto = IPPROTO_TCP; + else if (STREQ(nfs_proto, "udp")) + nap->proto = IPPROTO_UDP; + } +# endif /* IPPROTO_TCP */ +#endif /* HAVE_FIELD_NFS_ARGS_T_SOTYPE */ + +#ifdef HAVE_FIELD_NFS_ARGS_T_VERSION +# ifdef NFS_ARGSVERSION + nap->version = NFS_ARGSVERSION; /* BSDI 3.0 and OpenBSD 2.2 */ +# endif /* NFS_ARGSVERSION */ +# ifdef DG_MOUNT_NFS_VERSION + nap->version = DG_MOUNT_NFS_VERSION; /* dg-ux */ +# endif /* DG_MOUNT_NFS_VERSION */ +#endif /* HAVE_FIELD_NFS_ARGS_VERSION */ + + /************************************************************************/ + /*** OTHER NFS SOCKET RELATED OPTIONS AND FLAGS ***/ + /************************************************************************/ +#ifdef MNT2_NFS_OPT_NOCONN + /* check if user specified to use unconnected or connected sockets */ + if (hasmntopt(mntp, MNTTAB_OPT_NOCONN) != NULL) + nap->flags |= MNT2_NFS_OPT_NOCONN; + else if (hasmntopt(mntp, MNTTAB_OPT_CONN) != NULL) + nap->flags &= ~MNT2_NFS_OPT_NOCONN; + else { + /* + * Some OSs want you to set noconn always. Some want you to always turn + * it off. Others want you to turn it on/off only if NFS V.3 is used. + * And all of that changes from revision to another. This is + * particularly true of OpenBSD, NetBSD, and FreeBSD. So, rather than + * attempt to auto-detect this, I'm forced to "fix" it in the individual + * conf/nfs_prot/nfs_prot_*.h files. + */ +# ifdef USE_UNCONNECTED_NFS_SOCKETS + nap->flags |= MNT2_NFS_OPT_NOCONN; + plog(XLOG_WARNING, "noconn option exists, and was turned ON! (May cause NFS hangs on some systems...)"); +# endif /* USE_UNCONNECTED_NFS_SOCKETS */ +# ifdef USE_CONNECTED_NFS_SOCKETS + nap->flags &= ~MNT2_NFS_OPT_NOCONN; + plog(XLOG_WARNING, "noconn option exists, and was turned OFF! (May cause NFS hangs on some systems...)"); +# endif /* USE_CONNECTED_NFS_SOCKETS */ + } +#endif /* MNT2_NFS_OPT_NOCONN */ + +#ifdef MNT2_NFS_OPT_RESVPORT +# ifdef MNTTAB_OPT_RESVPORT + if (hasmntopt(mntp, MNTTAB_OPT_RESVPORT) != NULL) + nap->flags |= MNT2_NFS_OPT_RESVPORT; +# else /* not MNTTAB_OPT_RESVPORT */ + nap->flags |= MNT2_NFS_OPT_RESVPORT; +# endif /* not MNTTAB_OPT_RESVPORT */ +#endif /* MNT2_NFS_OPT_RESVPORT */ + + /************************************************************************/ + /*** OTHER FLAGS AND OPTIONS ***/ + /************************************************************************/ + +#ifdef HAVE_TRANSPORT_TYPE_TLI + /* set up syncaddr field */ + nap->syncaddr = (struct netbuf *) NULL; + + /* set up knconf field */ + if (get_knetconfig(&nap->knconf, nfsncp, nfs_proto) < 0) { + plog(XLOG_FATAL, "cannot fill knetconfig structure for nfs_args"); + going_down(1); + } + /* update the flags field for knconf */ + nap->flags |= MNT2_NFS_OPT_KNCONF; +#endif /* HAVE_TRANSPORT_TYPE_TLI */ + +#ifdef MNT2_NFS_OPT_FSNAME + nap->fsname = fs_name; + nap->flags |= MNT2_NFS_OPT_FSNAME; +#endif /* MNT2_NFS_OPT_FSNAME */ + + nap->rsize = hasmntval(mntp, MNTTAB_OPT_RSIZE); +#ifdef MNT2_NFS_OPT_RSIZE + if (nap->rsize) + nap->flags |= MNT2_NFS_OPT_RSIZE; +#endif /* MNT2_NFS_OPT_RSIZE */ + + nap->wsize = hasmntval(mntp, MNTTAB_OPT_WSIZE); +#ifdef MNT2_NFS_OPT_WSIZE + if (nap->wsize) + nap->flags |= MNT2_NFS_OPT_WSIZE; +#endif /* MNT2_NFS_OPT_WSIZE */ + + nap->timeo = hasmntval(mntp, MNTTAB_OPT_TIMEO); +#ifdef MNT2_NFS_OPT_TIMEO + if (nap->timeo) + nap->flags |= MNT2_NFS_OPT_TIMEO; +#endif /* MNT2_NFS_OPT_TIMEO */ + + nap->retrans = hasmntval(mntp, MNTTAB_OPT_RETRANS); +#ifdef MNT2_NFS_OPT_RETRANS + if (nap->retrans) + nap->flags |= MNT2_NFS_OPT_RETRANS; +#endif /* MNT2_NFS_OPT_RETRANS */ + +#ifdef MNT2_NFS_OPT_BIODS + if ((nap->biods = hasmntval(mntp, MNTTAB_OPT_BIODS))) + nap->flags |= MNT2_NFS_OPT_BIODS; +#endif /* MNT2_NFS_OPT_BIODS */ + + if (hasmntopt(mntp, MNTTAB_OPT_SOFT) != NULL) + nap->flags |= MNT2_NFS_OPT_SOFT; + +#ifdef MNT2_NFS_OPT_SPONGY + if (hasmntopt(mntp, MNTTAB_OPT_SPONGY) != NULL) { + nap->flags |= MNT2_NFS_OPT_SPONGY; + if (nap->flags & MNT2_NFS_OPT_SOFT) { + plog(XLOG_USER, "Mount opts soft and spongy are incompatible - soft ignored"); + nap->flags &= ~MNT2_NFS_OPT_SOFT; + } + } +#endif /* MNT2_NFS_OPT_SPONGY */ + +#if defined(MNT2_GEN_OPT_RONLY) && defined(MNT2_NFS_OPT_RONLY) + /* Ultrix has separate generic and NFS ro flags */ + if (genflags & MNT2_GEN_OPT_RONLY) + nap->flags |= MNT2_NFS_OPT_RONLY; +#endif /* defined(MNT2_GEN_OPT_RONLY) && defined(MNT2_NFS_OPT_RONLY) */ + +#ifdef MNTTAB_OPT_INTR + if (hasmntopt(mntp, MNTTAB_OPT_INTR) != NULL) + /* + * Either turn on the "allow interrupts" option, or + * turn off the "disallow interrupts" option" + */ +# ifdef MNT2_NFS_OPT_INT + nap->flags |= MNT2_NFS_OPT_INT; +# endif /* MNT2_NFS_OPT_INT */ +# ifdef MNT2_NFS_OPT_NOINT + nap->flags &= ~MNT2_NFS_OPT_NOINT; +# endif /* MNT2_NFS_OPT_NOINT */ +#endif /* MNTTAB_OPT_INTR */ + +#ifdef MNTTAB_OPT_NODEVS + if (hasmntopt(mntp, MNTTAB_OPT_NODEVS) != NULL) + nap->flags |= MNT2_NFS_OPT_NODEVS; +#endif /* MNTTAB_OPT_NODEVS */ + +#ifdef MNTTAB_OPT_COMPRESS + if (hasmntopt(mntp, MNTTAB_OPT_COMPRESS) != NULL) + nap->flags |= MNT2_NFS_OPT_COMPRESS; +#endif /* MNTTAB_OPT_COMPRESS */ + +#ifdef MNTTAB_OPT_PRIVATE /* mount private, single-client tree */ + if (hasmntopt(mntp, MNTTAB_OPT_PRIVATE) != NULL) + nap->flags |= MNT2_NFS_OPT_PRIVATE; +#endif /* MNTTAB_OPT_PRIVATE */ + +#ifdef MNTTAB_OPT_SYMTTL /* symlink cache time-to-live */ + if ((nap->symttl = hasmntval(mntp, MNTTAB_OPT_SYMTTL))) + nap->flags |= MNT2_NFS_OPT_SYMTTL; +#endif /* MNTTAB_OPT_SYMTTL */ + +#ifdef MNT2_NFS_OPT_PGTHRESH /* paging threshold */ + if ((nap->pg_thresh = hasmntval(mntp, MNTTAB_OPT_PGTHRESH))) + nap->flags |= MNT2_NFS_OPT_PGTHRESH; +#endif /* MNT2_NFS_OPT_PGTHRESH */ + +#if defined(MNT2_NFS_OPT_NOCTO) && defined(MNTTAB_OPT_NOCTO) + if (hasmntopt(mntp, MNTTAB_OPT_NOCTO) != NULL) + nap->flags |= MNT2_NFS_OPT_NOCTO; +#endif /* defined(MNT2_NFS_OPT_NOCTO) && defined(MNTTAB_OPT_NOCTO) */ + +#if defined(MNT2_NFS_OPT_POSIX) && defined(MNTTAB_OPT_POSIX) + if (hasmntopt(mntp, MNTTAB_OPT_POSIX) != NULL) { + nap->flags |= MNT2_NFS_OPT_POSIX; + nap->pathconf = NULL; + } +#endif /* MNT2_NFS_OPT_POSIX && MNTTAB_OPT_POSIX */ + +#if defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) + nap->maxgrouplist = hasmntval(mntp, MNTTAB_OPT_MAXGROUPS); + if (nap->maxgrouplist != NULL) + nap->flags |= MNT2_NFS_OPT_MAXGRPS; +#endif /* defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) */ + +#ifdef HAVE_FIELD_NFS_ARGS_T_OPTSTR + nap->optstr = mntp->mnt_opts; +#endif /* HAVE_FIELD_NFS_ARGS_T_OPTSTR */ + + /************************************************************************/ + /*** FINAL ACTIONS ***/ + /************************************************************************/ + +#ifdef HAVE_FIELD_NFS_ARGS_T_GFS_FLAGS + /* Ultrix stores generic flags in nfs_args.gfs_flags. */ + nap->gfs_flags = genflags; +#endif /* HAVE_FIELD_NFS_ARGS_T_FLAGS */ + + return; /* end of compute_nfs_args() function */ +} + + +/* + * Fill in special values for flags and fields of nfs_args, for an + * automounter NFS mount. + */ +void +compute_automounter_nfs_args(nfs_args_t *nap, mntent_t *mntp) +{ +#ifdef MNT2_NFS_OPT_SYMTTL + /* + * Don't let the kernel cache symbolic links we generate, or else lookups + * will bypass amd and fail to remount stuff as needed. + */ + plog(XLOG_INFO, "turning on NFS option symttl and setting value to %d", 0); + nap->flags |= MNT2_NFS_OPT_SYMTTL; + nap->symttl = 0; +#endif /* MNT2_NFS_OPT_SYMTTL */ + + /* + * This completes the flags for the HIDE_MOUNT_TYPE code above. + * Some systems don't have a mount type, but a mount flag. + */ +#ifdef MNT2_NFS_OPT_AUTO + nap->flags |= MNT2_NFS_OPT_AUTO; +#endif /* MNT2_NFS_OPT_AUTO */ +#ifdef MNT2_NFS_OPT_IGNORE + nap->flags |= MNT2_NFS_OPT_IGNORE; +#endif /* MNT2_NFS_OPT_IGNORE */ + +#ifdef MNT2_NFS_OPT_DUMBTIMR + /* + * Don't let the kernel start computing throughput of Amd The numbers will + * be meaningless because of the way Amd does mount retries. + */ + plog(XLOG_INFO, "%s: disabling nfs congestion window", mntp->mnt_dir); + nap->flags |= MNT2_NFS_OPT_DUMBTIMR; +#endif /* MNT2_NFS_OPT_DUMBTIMR */ + +#ifdef MNT2_NFS_OPT_NOAC + /* + * Don't cache attributes - they are changing under the kernel's feet. + * For example, IRIX5.2 will dispense with nfs lookup calls and hand stale + * filehandles to getattr unless we disable attribute caching on the + * automount points. + */ + nap->flags |= MNT2_NFS_OPT_NOAC; +#else /* not MNT2_NFS_OPT_NOAC */ + /* + * Setting these to 0 results in an error on some systems, which is why + * it's better to use "noac" if possible. + */ +# if defined(MNT2_NFS_OPT_ACREGMIN) && defined(MNT2_NFS_OPT_ACREGMAX) + nap->acregmin = nap->acregmax = 0; /* XXX: was 1, but why? */ + nap->flags |= MNT2_NFS_OPT_ACREGMIN | MNT2_NFS_OPT_ACREGMAX; +# endif /* defined(MNT2_NFS_OPT_ACREGMIN) && defined(MNT2_NFS_OPT_ACREGMAX) */ +# if defined(MNT2_NFS_OPT_ACDIRMIN) && defined(MNT2_NFS_OPT_ACDIRMAX) + nap->acdirmin = nap->acdirmax = 0; /* XXX: was 1, but why? */ + nap->flags |= MNT2_NFS_OPT_ACDIRMIN | MNT2_NFS_OPT_ACDIRMAX; +# endif /* defined(MNT2_NFS_OPT_ACDIRMIN) && defined(MNT2_NFS_OPT_ACDIRMAX) */ +#endif /* not MNT2_NFS_OPT_NOAC */ +} + + +#ifdef DEBUG +/* get string version (in hex) of identifier */ +static char * +get_hex_string(u_int len, const char *fhdata) +{ + int i; + static char buf[128]; /* better not go over it! */ + char str[16]; + short int arr[64]; + + if (!fhdata) + return NULL; + buf[0] = '\0'; + memset(&arr[0], 0, (64 * sizeof(short int))); + memcpy(&arr[0], &fhdata[0], len); + for (i=0; iaddr; + plog(XLOG_DEBUG, "NA->addr {netbuf} (maxlen=%d, len=%d) = \"%s\"", + nbp->maxlen, nbp->len, + get_hex_string(nbp->len, nbp->buf)); + nbp = nap->syncaddr; + plog(XLOG_DEBUG, "NA->syncaddr {netbuf} 0x%x", (int) nbp); + kncp = nap->knconf; + plog(XLOG_DEBUG, "NA->knconf->semantics %lu", kncp->knc_semantics); + plog(XLOG_DEBUG, "NA->knconf->protofmly \"%s\"", kncp->knc_protofmly); + plog(XLOG_DEBUG, "NA->knconf->proto \"%s\"", kncp->knc_proto); + plog(XLOG_DEBUG, "NA->knconf->rdev %lu", kncp->knc_rdev); + /* don't print knconf->unused field */ +#else /* not HAVE_TRANSPORT_TYPE_TLI */ + sap = (struct sockaddr_in *) &nap->addr; + plog(XLOG_DEBUG, "NA->addr {sockaddr_in} (len=%d) = \"%s\"", + sizeof(struct sockaddr_in), + get_hex_string(sizeof(struct sockaddr_in), (const char *)sap)); +#ifdef HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN_off + plog(XLOG_DEBUG, "NA->addr.sin_len = \"%d\"", sap->sin_len); +#endif /* HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN */ + plog(XLOG_DEBUG, "NA->addr.sin_family = \"%d\"", sap->sin_family); + plog(XLOG_DEBUG, "NA->addr.sin_port = \"%d\"", sap->sin_port); + plog(XLOG_DEBUG, "NA->addr.sin_addr = \"%s\"", + get_hex_string(sizeof(struct in_addr), (const char *) &sap->sin_addr)); +#endif /* not HAVE_TRANSPORT_TYPE_TLI */ + + plog(XLOG_DEBUG, "NA->hostname = \"%s\"", nap->hostname ? nap->hostname : "null"); +#ifdef MNT2_NFS_OPT_FSNAME + plog(XLOG_DEBUG, "NA->fsname = \"%s\"", nap->fsname ? nap->fsname : "null"); +#endif /* MNT2_NFS_OPT_FSNAME */ + +#ifdef HAVE_FIELD_NFS_ARGS_T_FHSIZE + plog(XLOG_DEBUG, "NA->fhsize = %d", nap->fhsize); + fhlen = nap->fhsize; +#endif /* HAVE_FIELD_NFS_ARGS_T_FHSIZE */ +#ifdef HAVE_FIELD_NFS_ARGS_T_FH_LEN + plog(XLOG_DEBUG, "NA->fh_len = %d", nap->fh_len); + fhlen = nap->fh_len; +#endif /* HAVE_FIELD_NFS_ARGS_T_FH_LEN */ + + /* + * XXX: need to figure out how to correctly print file handles, + * since some times they are pointers, and sometimes the real structure + * is stored in nfs_args. Even if it is a pointer, it can be the actual + * char[] array, or a structure containing multiple fields. + */ + plog(XLOG_DEBUG, "NA->filehandle = \"%s\"", + get_hex_string(fhlen, (const char *) &nap->NFS_FH_FIELD)); + +#ifdef HAVE_FIELD_NFS_ARGS_T_SOTYPE + plog(XLOG_DEBUG, "NA->sotype = %d", nap->sotype); +#endif /* HAVE_FIELD_NFS_ARGS_T_SOTYPE */ +#ifdef HAVE_FIELD_NFS_ARGS_T_PROTO + plog(XLOG_DEBUG, "NA->proto = %d", nap->proto); +#endif /* HAVE_FIELD_NFS_ARGS_T_PROTO */ +#ifdef HAVE_FIELD_NFS_ARGS_T_VERSION + plog(XLOG_DEBUG, "NA->version = %d", nap->version); +#endif /* HAVE_FIELD_NFS_ARGS_T_VERSION */ + + plog(XLOG_DEBUG, "NA->flags = 0x%x", nap->flags); + + plog(XLOG_DEBUG, "NA->rsize = %d", nap->rsize); + plog(XLOG_DEBUG, "NA->wsize = %d", nap->wsize); + plog(XLOG_DEBUG, "NA->timeo = %d", nap->timeo); + plog(XLOG_DEBUG, "NA->retrans = %d", nap->retrans); + +#ifdef HAVE_FIELD_NFS_ARGS_T_ACREGMIN + plog(XLOG_DEBUG, "NA->acregmin = %d", nap->acregmin); + plog(XLOG_DEBUG, "NA->acregmax = %d", nap->acregmax); + plog(XLOG_DEBUG, "NA->acdirmin = %d", nap->acdirmin); + plog(XLOG_DEBUG, "NA->acdirmax = %d", nap->acdirmax); +#endif /* HAVE_FIELD_NFS_ARGS_T_ACREGMIN */ +#ifdef MNTTAB_OPT_SYMTTL + plog(XLOG_DEBUG, "NA->symttl = %d", nap->symttl); +#endif /* MNTTAB_OPT_SYMTTL */ +#ifdef MNTTAB_OPT_PG_THRESH + plog(XLOG_DEBUG, "NA->pg_thresh = %d", nap->pg_thresh); +#endif /* MNTTAB_OPT_PG_THRESH */ + +#ifdef MNT2_NFS_OPT_BIODS + plog(XLOG_DEBUG, "NA->biods = %d", nap->biods); +#endif /* MNT2_NFS_OPT_BIODS */ + +} +#endif /* DEBUG */ diff --git a/libamu/mtab.c b/libamu/mtab.c new file mode 100644 index 0000000..a186d61 --- /dev/null +++ b/libamu/mtab.c @@ -0,0 +1,121 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mtab.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Firewall /etc/mtab entries + */ +void +mnt_free(mntent_t *mp) +{ + XFREE(mp->mnt_fsname); + XFREE(mp->mnt_dir); + XFREE(mp->mnt_type); + XFREE(mp->mnt_opts); + +#ifdef HAVE_FIELD_MNTENT_T_MNT_TIME +# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING + XFREE(mp->mnt_time); +# endif /* HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */ +#endif /* HAVE_FIELD_MNTENT_T_MNT_TIME */ + + XFREE(mp); +} + + +/* + * Discard memory allocated for mount list + */ +void +discard_mntlist(mntlist *mp) +{ + mntlist *mp2; + + while ((mp2 = mp)) { + mp = mp->mnext; + if (mp2->mnt) + mnt_free(mp2->mnt); + XFREE(mp2); + } +} + + +/* + * Throw away a mount list + */ +void +free_mntlist(mntlist *mp) +{ + discard_mntlist(mp); +#ifdef MOUNT_TABLE_ON_FILE + unlock_mntlist(); +#endif /* MOUNT_TABLE_ON_FILE */ +} + + +/* + * Utility routine which determines the value of a + * numeric option in the mount options (such as port=%d). + * Returns 0 if the option is not specified. + */ +int +hasmntval(mntent_t *mnt, char *opt) +{ + char *str = hasmntopt(mnt, opt); + + if (str) { + char *eq = strchr(str, '='); + if (eq) + return atoi(eq + 1); + else + plog(XLOG_USER, "bad numeric option \"%s\" in \"%s\"", opt, str); + } + return 0; +} diff --git a/libamu/nfs_prot_xdr.c b/libamu/nfs_prot_xdr.c new file mode 100644 index 0000000..786916e --- /dev/null +++ b/libamu/nfs_prot_xdr.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1989 Jan-Simon Pendry + * Copyright (c) 1989 Imperial College of Science, Technology & Medicine + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: nfs_prot_xdr.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +bool_t +xdr_amq_string(XDR *xdrs, amq_string *objp) +{ + if (!xdr_string(xdrs, objp, AMQ_STRLEN)) { + return (FALSE); + } + return (TRUE); +} diff --git a/libamu/strcasecmp.c b/libamu/strcasecmp.c new file mode 100644 index 0000000..16927e2 --- /dev/null +++ b/libamu/strcasecmp.c @@ -0,0 +1,64 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: strcasecmp.c,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * Compare two strings case insensitive. + */ +int +strcasecmp(const char *s1, const char *s2) +{ + const char *cp1 = s1; + const char *cp2 = s2; + + while (tolower(*cp1) == tolower(*cp2++)) + if (*cp1++ == '\0') + return (0); + return (tolower(*cp1) - tolower(*--cp2)); +} diff --git a/libamu/strdup.c b/libamu/strdup.c new file mode 100644 index 0000000..5de0af7 --- /dev/null +++ b/libamu/strdup.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: strdup.c,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * Dup a string + */ +char * +strdup(const char *s) +{ + int len = strlen(s); + char *sp = (char *) xmalloc(len + 1); + + memmove(sp, s, len); + sp[len] = 0; + + return sp; +} diff --git a/libamu/strstr.c b/libamu/strstr.c new file mode 100644 index 0000000..a166cb1 --- /dev/null +++ b/libamu/strstr.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from the Free Software Foundation, Inc. GNU utilities. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: strstr.c,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* strstr.c -- return the offset of one string within another + Copyright (C) 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* Author: + Mike Rendell Department of Computer Science + michael@garfield.mun.edu Memorial University of Newfoundland + ..!uunet!garfield!michael St. John's, Nfld., Canada + (709) 737-4550 A1C 5S7 +*/ + + +/* + * Return the starting address of string S2 in S1; + * return 0 if it is not found. + */ +char * +strstr(char *s1, char *s2) +{ + int i; + char *p1; + char *p2; + char *s = s1; + + for (p2 = s2, i = 0; *s; p2 = s2, i++, s++) { + for (p1 = s; *p1 && *p2 && *p1 == *p2; p1++, p2++) + ; + if (!*p2) + break; + } + if (!*p2) + return s1 + i; + + return 0; +} diff --git a/libamu/strutil.c b/libamu/strutil.c new file mode 100644 index 0000000..737a0f4 --- /dev/null +++ b/libamu/strutil.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: strutil.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +/* + * General Utilities. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +char * +strnsave(const char *str, int len) +{ + char *sp = (char *) xmalloc(len + 1); + memmove(sp, str, len); + sp[len] = 0; + + return sp; +} + + +/* + * Concatenate three strings and store in buffer pointed to + * by p, making p large enough to hold the strings + */ +char * +str3cat(char *p, char *s1, char *s2, char *s3) +{ + int l1 = strlen(s1); + int l2 = strlen(s2); + int l3 = strlen(s3); + + p = (char *) xrealloc(p, l1 + l2 + l3 + 1); + memmove(p, s1, l1); + memmove(p + l1, s2, l2); + memmove(p + l1 + l2, s3, l3 + 1); + return p; +} + + +/* + * Make all the directories in the path. + */ +int +mkdirs(char *path, int mode) +{ + /* + * take a copy in case path is in readonly store + */ + char *p2 = strdup(path); + char *sp = p2; + struct stat stb; + int error_so_far = 0; + + /* + * Skip through the string make the directories. + * Mostly ignore errors - the result is tested at the end. + * + * This assumes we are root so that we can do mkdir in a + * mode 555 directory... + */ + while ((sp = strchr(sp + 1, '/'))) { + *sp = '\0'; + if (mkdir(p2, mode) < 0) { + error_so_far = errno; + } else { +#ifdef DEBUG + dlog("mkdir(%s)", p2); +#endif /* DEBUG */ + } + *sp = '/'; + } + + if (mkdir(p2, mode) < 0) { + error_so_far = errno; + } else { +#ifdef DEBUG + dlog("mkdir(%s)", p2); +#endif /* DEBUG */ + } + + XFREE(p2); + + return stat(path, &stb) == 0 && + (stb.st_mode & S_IFMT) == S_IFDIR ? 0 : error_so_far; +} + + +/* + * Remove as many directories in the path as possible. + * Give up if the directory doesn't appear to have + * been created by Amd (not mode dr-x) or an rmdir + * fails for any reason. + */ +void +rmdirs(char *dir) +{ + char *xdp = strdup(dir); + char *dp; + + do { + struct stat stb; + /* + * Try to find out whether this was + * created by amd. Do this by checking + * for owner write permission. + */ + if (stat(xdp, &stb) == 0 && (stb.st_mode & 0200) == 0) { + if (rmdir(xdp) < 0) { + if (errno != ENOTEMPTY && + errno != EBUSY && + errno != EEXIST && + errno != EINVAL) + plog(XLOG_ERROR, "rmdir(%s): %m", xdp); + break; + } else { +#ifdef DEBUG + dlog("rmdir(%s)", xdp); +#endif /* DEBUG */ + } + } else { + break; + } + + dp = strrchr(xdp, '/'); + if (dp) + *dp = '\0'; + } while (dp && dp > xdp); + + XFREE(xdp); +} diff --git a/libamu/ualarm.c b/libamu/ualarm.c new file mode 100644 index 0000000..4e67b77 --- /dev/null +++ b/libamu/ualarm.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: ualarm.c,v 1.1 1998/11/05 02:04:44 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +#define USPS 1000000 /* # of microseconds in a second */ + + +/* + * Generate a SIGALRM signal in ``usecs'' microseconds. + * If ``reload'' is non-zero, keep generating SIGALRM + * every ``reload'' microseconds after the first signal. + */ +u_int +ualarm(u_int usecs, u_int interval) +{ + struct itimerval new, old; + + new.it_interval.tv_usec = interval % USPS; + new.it_interval.tv_sec = interval / USPS; + new.it_value.tv_usec = usecs % USPS; + new.it_value.tv_sec = usecs / USPS; + + if (setitimer(ITIMER_REAL, &new, &old) == 0) + return (old.it_value.tv_sec * USPS + old.it_value.tv_usec); + + return -1; +} diff --git a/libamu/wire.c b/libamu/wire.c new file mode 100644 index 0000000..d7298ef --- /dev/null +++ b/libamu/wire.c @@ -0,0 +1,404 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wire.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +/* + * This function returns the subnet (address&netmask) for the primary network + * interface. If the resulting address has an entry in the hosts file, the + * corresponding name is returned, otherwise the address is returned in + * standard internet format. + * As a side-effect, a list of local IP/net address is recorded for use + * by the islocalnet() function. + * + * Derived from original by Paul Anderson (23/4/90) + * Updates from Dirk Grunwald (11/11/91) + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + + +/* + * List of locally connected networks + */ +typedef struct addrlist addrlist; +struct addrlist { + addrlist *ip_next; + u_long ip_addr; /* address of network */ + u_long ip_mask; + char *ip_net_num; /* number of network */ + char *ip_net_name; /* name of network */ +}; +static addrlist *localnets = NULL; + +#if defined(IFF_LOCAL_LOOPBACK) && !defined(IFF_LOOPBACK) +# define IFF_LOOPBACK IFF_LOCAL_LOOPBACK +#endif /* defined(IFF_LOCAL_LOOPBACK) && !defined(IFF_LOOPBACK) */ + +#if defined(HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN) +# define SIZE(ifr) (MAX((ifr)->ifr_addr.sa_len, sizeof((ifr)->ifr_addr)) + sizeof(ifr->ifr_name)) +#else /* not defined(HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN) */ +# define SIZE(ifr) sizeof(struct ifreq) +#endif /* not defined(HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN) */ + +#define C(x) ((x) & 0xff) +#define GFBUFLEN 1024 +#define clist (ifc.ifc_ifcu.ifcu_req) +#define count (ifc.ifc_len/sizeof(struct ifreq)) + + +/* return malloc'ed buffer. caller must free it */ +char * +print_wires(void) +{ + addrlist *al; + char s[256]; + int i; + char *buf; + int bufcount = 0; + int buf_size = 1024; + + buf = malloc(1024); + if (!buf) + return NULL; + + if (!localnets) { + sprintf(buf, "No networks.\n"); + return buf; + } + /* check if there's more than one network */ + if (!localnets->ip_next) { + sprintf(buf, + "Network: wire=\"%s\" (netnumber=%s).\n", + localnets->ip_net_name, localnets->ip_net_num); + return buf; + } + buf[0] = '\0'; /* null out buffer before appending */ + for (i = 1, al = localnets; al; al = al->ip_next, i++) { + sprintf(s, "Network %d: wire=\"%s\" (netnumber=%s).\n", + i, al->ip_net_name, al->ip_net_num); + bufcount += strlen(s); + if (bufcount > buf_size) { + buf_size *= 2; + buf = xrealloc(buf, buf_size); + } + strcat(buf, s); + } + return buf; +} + + +void +getwire(char **name1, char **number1) +{ + struct hostent *hp; + struct netent *np; + struct ifconf ifc; + struct ifreq *ifr; + caddr_t cp, cplim; + u_long address, netmask, subnet; + char buf[GFBUFLEN], *s; + int fd = -1; + u_long net; + u_long mask; + u_long subnetshift; + char netNumberBuf[64]; + addrlist *al = NULL, *tail = NULL; + +#ifndef SIOCGIFFLAGS + /* if cannot get interface flags, return nothing */ + plog(XLOG_ERROR, "getwire unable to get interface flags"); + localnets = NULL; + return; +#endif /* not SIOCGIFFLAGS */ + + /* + * Get suitable socket + */ + if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) + goto out; + + /* + * Fill in ifconf details + */ + memset(&buf[0], 0, GFBUFLEN); + ifc.ifc_len = sizeof(buf); + ifc.ifc_buf = buf; + + /* + * Get network interface configurations + */ + if (ioctl(fd, SIOCGIFCONF, (caddr_t) & ifc) < 0) + goto out; + + /* + * Upper bound on array + */ + cplim = buf + ifc.ifc_len; + + /* + * This is some magic to cope with both "traditional" and the + * new 4.4BSD-style struct sockaddrs. The new structure has + * variable length and a size field to support longer addresses. + * AF_LINK is a new definition for 4.4BSD. + */ + + /* + * Scan the list looking for a suitable interface + */ + for (cp = buf; cp < cplim; cp += SIZE(ifr)) { + ifr = (struct ifreq *) cp; + + if (ifr->ifr_addr.sa_family != AF_INET) + continue; + else + address = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr; + + /* + * Get interface flags + */ + if (ioctl(fd, SIOCGIFFLAGS, (caddr_t) ifr) < 0) + continue; + + /* + * If the interface is a loopback, or its not running + * then ignore it. + */ +#ifdef IFF_LOOPBACK + if ((ifr->ifr_flags & IFF_LOOPBACK) != 0) + continue; +#endif /* IFF_LOOPBACK */ + /* + * Fix for 0.0.0.0 loopback on SunOS 3.X which defines IFF_ROUTE + * instead of IFF_LOOPBACK. + */ +#ifdef IFF_ROUTE + if (ifr->ifr_flags == (IFF_UP|IFF_RUNNING)) + continue; +#endif /* IFF_ROUTE */ + + /* if the interface is not UP or not RUNNING, skip it */ + if ((ifr->ifr_flags & IFF_RUNNING) == 0 || + (ifr->ifr_flags & IFF_UP) == 0) + continue; + + /* + * Get the netmask of this interface + */ + if (ioctl(fd, SIOCGIFNETMASK, (caddr_t) ifr) < 0) + continue; + + netmask = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr; + + /* + * Add interface to local network singly linked list + */ + al = ALLOC(struct addrlist); + al->ip_addr = address; + al->ip_mask = netmask; + al->ip_net_name = NO_SUBNET; /* fill in a bit later */ + al->ip_net_num = "0.0.0.0"; /* fill in a bit later */ + al->ip_next = NULL; + /* append to the end of the list */ + if (!localnets) { + localnets = tail = al; + tail->ip_next = NULL; + } else { + tail->ip_next = al; + tail = al; + } + + /* + * Figure out the subnet's network address + */ + subnet = address & netmask; + +#ifdef IN_CLASSA + subnet = htonl(subnet); + + if (IN_CLASSA(subnet)) { + mask = IN_CLASSA_NET; + subnetshift = 8; + } else if (IN_CLASSB(subnet)) { + mask = IN_CLASSB_NET; + subnetshift = 8; + } else { + mask = IN_CLASSC_NET; + subnetshift = 4; + } + + /* + * If there are more bits than the standard mask + * would suggest, subnets must be in use. + * Guess at the subnet mask, assuming reasonable + * width subnet fields. + * XXX: Or-in at least 1 byte's worth of 1s to make + * sure the top bits remain set. + */ + while (subnet & ~mask) + mask = (mask >> subnetshift) | 0xff000000; + + net = subnet & mask; + while ((mask & 1) == 0) + mask >>= 1, net >>= 1; + + /* + * Now get a usable name. + * First use the network database, + * then the host database, + * and finally just make a dotted quad. + */ + np = getnetbyaddr(net, AF_INET); + + /* the network address has been masked off */ + if ((subnet & 0xffffff) == 0) { + sprintf(netNumberBuf, "%lu", C(subnet >> 24)); + } else if ((subnet & 0xffff) == 0) { + sprintf(netNumberBuf, "%lu.%lu", + C(subnet >> 24), C(subnet >> 16)); + } else if ((subnet & 0xff) == 0) { + sprintf(netNumberBuf, "%lu.%lu.%lu", + C(subnet >> 24), C(subnet >> 16), + C(subnet >> 8)); + } else { + sprintf(netNumberBuf, "%lu.%lu.%lu.%lu", + C(subnet >> 24), C(subnet >> 16), + C(subnet >> 8), C(subnet)); + } + + /* fill in network number (string) */ + al->ip_net_num = strdup(netNumberBuf); + +#else /* not IN_CLASSA */ + /* This is probably very wrong. */ + np = getnetbyaddr(subnet, AF_INET); +#endif /* not IN_CLASSA */ + + if (np) + s = np->n_name; + else { + subnet = address & netmask; + hp = gethostbyaddr((char *) &subnet, 4, AF_INET); + if (hp) + s = (char *) hp->h_name; + else + s = inet_dquad(buf, subnet); + } + + /* fill in network name (string) */ + al->ip_net_name = strdup(s); + } + +out: + if (fd >= 0) + close(fd); + if (localnets) { + *name1 = localnets->ip_net_name; + *number1 = localnets->ip_net_num; + } else { + *name1 = NO_SUBNET; + *number1 = "0.0.0.0"; + } +} + + +/* + * Make a dotted quad from a 32bit IP address + * addr is in network byte order. + * sizeof(buf) needs to be at least 16. + */ +char * +inet_dquad(char *buf, u_long addr) +{ + addr = ntohl(addr); + sprintf(buf, "%ld.%ld.%ld.%ld", + ((addr >> 24) & 0xff), + ((addr >> 16) & 0xff), + ((addr >> 8) & 0xff), + ((addr >> 0) & 0xff)); + return buf; +} + + +/* + * Determine whether a network is on a local network + * (addr) is in network byte order. + */ +int +islocalnet(u_long addr) +{ + addrlist *al; +#ifdef DEBUG + char buf[16]; +#endif /* DEBUG */ + + for (al = localnets; al; al = al->ip_next) + if (((addr ^ al->ip_addr) & al->ip_mask) == 0) + return TRUE; + +#ifdef DEBUG + plog(XLOG_INFO, "%s is on a remote network", inet_dquad(buf, addr)); +#endif /* DEBUG */ + + return FALSE; +} + + +/* + * Determine whether a network name is one of the local networks + * of a host. + */ +int +is_network_member(const char *net) +{ + addrlist *al; + + for (al = localnets; al; al = al->ip_next) + if (STREQ(net, al->ip_net_name) || STREQ(net, al->ip_net_num)) + return TRUE; + + return FALSE; +} diff --git a/libamu/xdr_func.c b/libamu/xdr_func.c new file mode 100644 index 0000000..80ad49d --- /dev/null +++ b/libamu/xdr_func.c @@ -0,0 +1,1155 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: xdr_func.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +/* + * Complete list of all possible xdr functions which may be needed. + */ +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +/* + * MACROS: + */ +#ifdef HAVE_FS_AUTOFS +# ifndef A_MAXNAME +# define A_MAXNAME 255 +# endif /* not A_MAXNAME */ +# ifndef A_MAXOPTS +# define A_MAXOPTS 255 +# endif /* not A_MAXOPTS */ +# ifndef A_MAXPATH +# define A_MAXPATH 1024 +# endif /* not A_MAXPATH */ +#endif /* HAVE_FS_AUTOFS */ + +/* forward definitions, are they needed? */ +extern bool_t xdr_exportnode(XDR *xdrs, exportnode *objp); +extern bool_t xdr_groupnode(XDR *xdrs, groupnode *objp); +extern bool_t xdr_name(XDR *xdrs, name *objp); + + +#ifndef HAVE_XDR_ATTRSTAT +bool_t +xdr_attrstat(XDR *xdrs, nfsattrstat *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_attrstat:"); +#endif /* DEBUG */ + + if (!xdr_nfsstat(xdrs, &objp->ns_status)) { + return (FALSE); + } + switch (objp->ns_status) { + case NFS_OK: + if (!xdr_fattr(xdrs, &objp->ns_u.ns_attr_u)) { + return (FALSE); + } + break; + default: + break; + } + return (TRUE); +} +#endif /* not HAVE_XDR_ATTRSTAT */ + + +#ifndef HAVE_XDR_CREATEARGS +bool_t +xdr_createargs(XDR *xdrs, nfscreateargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_createargs:"); +#endif /* DEBUG */ + + if (!xdr_diropargs(xdrs, &objp->ca_where)) { + return (FALSE); + } + if (!xdr_sattr(xdrs, &objp->ca_attributes)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_CREATEARGS */ + + +#ifndef HAVE_XDR_DIRLIST +bool_t +xdr_dirlist(XDR *xdrs, nfsdirlist *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_dirlist:"); +#endif /* DEBUG */ + + if (!xdr_pointer(xdrs, (char **) &objp->dl_entries, sizeof(nfsentry), (XDRPROC_T_TYPE) xdr_entry)) { + return (FALSE); + } + if (!xdr_bool(xdrs, &objp->dl_eof)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_DIRLIST */ + + +#ifndef HAVE_XDR_DIROPARGS +bool_t +xdr_diropargs(XDR *xdrs, nfsdiropargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_diropargs:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->da_fhandle)) { + return (FALSE); + } + if (!xdr_filename(xdrs, &objp->da_name)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_DIROPARGS */ + + +#ifndef HAVE_XDR_DIROPOKRES +bool_t +xdr_diropokres(XDR *xdrs, nfsdiropokres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_diropokres:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->drok_fhandle)) { + return (FALSE); + } + if (!xdr_fattr(xdrs, &objp->drok_attributes)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_DIROPOKRES */ + + +#ifndef HAVE_XDR_DIROPRES +bool_t +xdr_diropres(XDR *xdrs, nfsdiropres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_diropres:"); +#endif /* DEBUG */ + + if (!xdr_nfsstat(xdrs, &objp->dr_status)) { + return (FALSE); + } + switch (objp->dr_status) { + case NFS_OK: + if (!xdr_diropokres(xdrs, &objp->dr_u.dr_drok_u)) { + return (FALSE); + } + break; + default: + break; + } + return (TRUE); +} +#endif /* not HAVE_XDR_DIROPRES */ + + +#ifndef HAVE_XDR_DIRPATH +bool_t +xdr_dirpath(XDR *xdrs, dirpath *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_dirpath:"); +#endif /* DEBUG */ + + if (!xdr_string(xdrs, objp, MNTPATHLEN)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_DIRPATH */ + + +#ifndef HAVE_XDR_ENTRY +bool_t +xdr_entry(XDR *xdrs, nfsentry *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_entry:"); +#endif /* DEBUG */ + + if (!xdr_u_int(xdrs, &objp->ne_fileid)) { + return (FALSE); + } + if (!xdr_filename(xdrs, &objp->ne_name)) { + return (FALSE); + } + if (!xdr_nfscookie(xdrs, objp->ne_cookie)) { + return (FALSE); + } + if (!xdr_pointer(xdrs, (char **) &objp->ne_nextentry, sizeof(nfsentry), (XDRPROC_T_TYPE) xdr_entry)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_ENTRY */ + + +#ifndef HAVE_XDR_EXPORTNODE +bool_t +xdr_exportnode(XDR *xdrs, exportnode *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_exportnode:"); +#endif /* DEBUG */ + + if (!xdr_dirpath(xdrs, &objp->ex_dir)) { + return (FALSE); + } + /* + * This cast to (groups) is needed for Irix6. If you change it, it + * may produce a warning/error on other systems. + */ + if (!xdr_groups(xdrs, (groups) &objp->ex_groups)) { + return (FALSE); + } + if (!xdr_exports(xdrs, &objp->ex_next)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_EXPORTNODE */ + + +#ifndef HAVE_XDR_EXPORTS +bool_t +xdr_exports(XDR *xdrs, exports *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_exports:"); +#endif /* DEBUG */ + + if (!xdr_pointer(xdrs, (char **) objp, sizeof(exportnode), (XDRPROC_T_TYPE) xdr_exportnode)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_EXPORTS */ + + +#ifndef HAVE_XDR_FATTR +bool_t +xdr_fattr(XDR *xdrs, nfsfattr *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_fattr:"); +#endif /* DEBUG */ + + if (!xdr_ftype(xdrs, &objp->na_type)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_mode)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_nlink)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_uid)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_gid)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_size)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_blocksize)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_rdev)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_blocks)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_fsid)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->na_fileid)) { + return (FALSE); + } + if (!xdr_nfstime(xdrs, &objp->na_atime)) { + return (FALSE); + } + if (!xdr_nfstime(xdrs, &objp->na_mtime)) { + return (FALSE); + } + if (!xdr_nfstime(xdrs, &objp->na_ctime)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_FATTR */ + + +#ifndef HAVE_XDR_FHANDLE +bool_t +xdr_fhandle(XDR *xdrs, fhandle objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_fhandle:"); +#endif /* DEBUG */ + + if (!xdr_opaque(xdrs, objp, NFS_FHSIZE)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_FHANDLE */ + + +#ifndef HAVE_XDR_FHSTATUS +bool_t +xdr_fhstatus(XDR *xdrs, fhstatus *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_fhstatus:"); +#endif /* DEBUG */ + + if (!xdr_u_int(xdrs, &objp->fhs_status)) { + return (FALSE); + } + if (objp->fhs_status == 0 && !xdr_fhandle(xdrs, objp->fhs_fh)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_FHSTATUS */ + + +#ifndef HAVE_XDR_FILENAME +bool_t +xdr_filename(XDR *xdrs, filename *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_filename:"); +#endif /* DEBUG */ + + if (!xdr_string(xdrs, objp, NFS_MAXNAMLEN)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_FILENAME */ + + +#ifndef HAVE_XDR_FTYPE +bool_t +xdr_ftype(XDR *xdrs, nfsftype *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_ftype:"); +#endif /* DEBUG */ + + if (!xdr_enum(xdrs, (enum_t *) objp)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_FTYPE */ + + +#ifndef HAVE_XDR_GROUPNODE +bool_t +xdr_groupnode(XDR *xdrs, groupnode *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_groupnode:"); +#endif /* DEBUG */ + + if (!xdr_name(xdrs, &objp->gr_name)) { + return (FALSE); + } + /* + * This cast to (groups) is needed for Irix6. If you change it, it + * may produce a warning/error on other systems. + */ + if (!xdr_groups(xdrs, (groups) &objp->gr_next)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_GROUPNODE */ + + +#ifndef HAVE_XDR_GROUPS +bool_t +xdr_groups(XDR *xdrs, groups objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_groups:"); +#endif /* DEBUG */ + + if (!xdr_pointer(xdrs, (char **) objp, sizeof(groupnode), (XDRPROC_T_TYPE) xdr_groupnode)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_GROUPS */ + + +#ifndef HAVE_XDR_LINKARGS +bool_t +xdr_linkargs(XDR *xdrs, nfslinkargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_linkargs:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->la_fhandle)) { + return (FALSE); + } + if (!xdr_diropargs(xdrs, &objp->la_to)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_LINKARGS */ + + +#ifndef HAVE_XDR_MOUNTBODY +bool_t +xdr_mountbody(XDR *xdrs, mountbody *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mountbody:"); +#endif /* DEBUG */ + + if (!xdr_name(xdrs, &objp->ml_hostname)) { + return (FALSE); + } + if (!xdr_dirpath(xdrs, &objp->ml_directory)) { + return (FALSE); + } + if (!xdr_mountlist(xdrs, &objp->ml_next)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_MOUNTBODY */ + + +#ifndef HAVE_XDR_MOUNTLIST +bool_t +xdr_mountlist(XDR *xdrs, mountlist *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mountlist:"); +#endif /* DEBUG */ + + if (!xdr_pointer(xdrs, (char **) objp, sizeof(mountbody), (XDRPROC_T_TYPE) xdr_mountbody)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_MOUNTLIST */ + + +#if defined(HAVE_FS_NFS3) && !defined(HAVE_XDR_MOUNTRES3) +/* + * This ifdef is a hack: this whole file needs to be compiled + * only if the system has NFS V3 and does not have the xdr_mountres3 + * function. Autoconf should pick this source file to compile only + * if these two conditions apply. + */ + +bool_t +xdr_fhandle3(XDR *xdrs, fhandle3 *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_fhandle3:"); +#endif /* DEBUG */ + + if (!xdr_bytes(xdrs, + (char **) &objp->fhandle3_val, + (u_int *) &objp->fhandle3_len, + FHSIZE3)) + return (FALSE); + return (TRUE); +} + + +bool_t +xdr_mountstat3(XDR *xdrs, mountstat3 *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mountstat3:"); +#endif /* DEBUG */ + + if (!xdr_enum(xdrs, (enum_t *)objp)) + return (FALSE); + return (TRUE); +} + + +bool_t +xdr_mountres3_ok(XDR *xdrs, mountres3_ok *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mountres3_ok:"); +#endif /* DEBUG */ + + if (!xdr_fhandle3(xdrs, &objp->fhandle)) + return (FALSE); + if (!xdr_array(xdrs, + (char **)&objp->auth_flavors.auth_flavors_val, + (u_int *) &objp->auth_flavors.auth_flavors_len, + ~0, + sizeof (int), + (xdrproc_t) xdr_int)) + return (FALSE); + return (TRUE); +} + + +bool_t +xdr_mountres3(XDR *xdrs, mountres3 *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mountres3:"); +#endif /* DEBUG */ + + if (!xdr_mountstat3(xdrs, &objp->fhs_status)) + return (FALSE); + + if (objp->fhs_status == 0) { /* 0 == MNT_OK or MNT3_OK */ + if (!xdr_mountres3_ok(xdrs, &objp->mountres3_u.mountinfo)) + return (FALSE); + } + return (TRUE); +} +#endif /* defined(HAVE_FS_NFS3) && !defined(HAVE_XDR_MOUNTRES3) */ + + +#ifndef HAVE_XDR_NAME +bool_t +xdr_name(XDR *xdrs, name *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_name:"); +#endif /* DEBUG */ + + if (!xdr_string(xdrs, objp, MNTNAMLEN)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_NAME */ + + +#ifndef HAVE_XDR_NFS_FH +bool_t +xdr_nfs_fh(XDR *xdrs, am_nfs_fh *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_nfs_fh:"); +#endif /* DEBUG */ + + if (!xdr_opaque(xdrs, (caddr_t) objp->fh_data, NFS_FHSIZE)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_NFS_FH */ + + +#ifndef HAVE_XDR_NFSCOOKIE +bool_t +xdr_nfscookie(XDR *xdrs, nfscookie objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_nfscookie:"); +#endif /* DEBUG */ + + if (!xdr_opaque(xdrs, objp, NFS_COOKIESIZE)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_NFSCOOKIE */ + + +#ifndef HAVE_XDR_NFSPATH +bool_t +xdr_nfspath(XDR *xdrs, nfspath *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_nfspath:"); +#endif /* DEBUG */ + + if (!xdr_string(xdrs, objp, NFS_MAXPATHLEN)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_NFSPATH */ + + +#ifndef HAVE_XDR_NFSSTAT +bool_t +xdr_nfsstat(XDR *xdrs, nfsstat *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_nfsstat:"); +#endif /* DEBUG */ + + if (!xdr_enum(xdrs, (enum_t *) objp)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_NFSSTAT */ + + +#ifndef HAVE_XDR_NFSTIME +bool_t +xdr_nfstime(XDR *xdrs, nfstime *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_nfstime:"); +#endif /* DEBUG */ + + if (!xdr_u_int(xdrs, (u_int *) &objp->nt_seconds)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, (u_int *) &objp->nt_useconds)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_NFSTIME */ + + +#ifndef HAVE_XDR_POINTER +bool_t +xdr_pointer(register XDR *xdrs, char **objpp, u_int obj_size, XDRPROC_T_TYPE xdr_obj) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_pointer:"); +#endif /* DEBUG */ + + + bool_t more_data; + + more_data = (*objpp != NULL); + if (!xdr_bool(xdrs, &more_data)) { + return (FALSE); + } + if (!more_data) { + *objpp = NULL; + return (TRUE); + } + + return (xdr_reference(xdrs, objpp, obj_size, xdr_obj)); +} +#endif /* not HAVE_XDR_POINTER */ + + +#ifndef HAVE_XDR_READARGS +bool_t +xdr_readargs(XDR *xdrs, nfsreadargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_readargs:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->ra_fhandle)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->ra_offset)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->ra_count)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->ra_totalcount)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_READARGS */ + + +#ifndef HAVE_XDR_READDIRARGS +bool_t +xdr_readdirargs(XDR *xdrs, nfsreaddirargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_readdirargs:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->rda_fhandle)) { + return (FALSE); + } + if (!xdr_nfscookie(xdrs, objp->rda_cookie)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->rda_count)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_READDIRARGS */ + + +#ifndef HAVE_XDR_READDIRRES +bool_t +xdr_readdirres(XDR *xdrs, nfsreaddirres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_readdirres:"); +#endif /* DEBUG */ + + if (!xdr_nfsstat(xdrs, &objp->rdr_status)) { + return (FALSE); + } + switch (objp->rdr_status) { + case NFS_OK: + if (!xdr_dirlist(xdrs, &objp->rdr_u.rdr_reply_u)) { + return (FALSE); + } + break; + default: + break; + } + return (TRUE); +} +#endif /* not HAVE_XDR_READDIRRES */ + + +#ifndef HAVE_XDR_READLINKRES +bool_t +xdr_readlinkres(XDR *xdrs, nfsreadlinkres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_readlinkres:"); +#endif /* DEBUG */ + + if (!xdr_nfsstat(xdrs, &objp->rlr_status)) { + return (FALSE); + } + switch (objp->rlr_status) { + case NFS_OK: + if (!xdr_nfspath(xdrs, &objp->rlr_u.rlr_data_u)) { + return (FALSE); + } + break; + default: + break; + } + return (TRUE); +} +#endif /* not HAVE_XDR_READLINKRES */ + + +#ifndef HAVE_XDR_READOKRES +bool_t +xdr_readokres(XDR *xdrs, nfsreadokres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_readokres:"); +#endif /* DEBUG */ + + if (!xdr_fattr(xdrs, &objp->raok_attributes)) { + return (FALSE); + } + if (!xdr_bytes(xdrs, + (char **) & objp->raok_u.raok_val_u, + (u_int *) & objp->raok_u.raok_len_u, + NFS_MAXDATA)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_READOKRES */ + + +#ifndef HAVE_XDR_READRES +bool_t +xdr_readres(XDR *xdrs, nfsreadres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_readres:"); +#endif /* DEBUG */ + + if (!xdr_nfsstat(xdrs, &objp->rr_status)) { + return (FALSE); + } + switch (objp->rr_status) { + case NFS_OK: + if (!xdr_readokres(xdrs, &objp->rr_u.rr_reply_u)) { + return (FALSE); + } + break; + default: + break; + } + return (TRUE); +} +#endif /* not HAVE_XDR_READRES */ + + +#ifndef HAVE_XDR_RENAMEARGS +bool_t +xdr_renameargs(XDR *xdrs, nfsrenameargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_renameargs:"); +#endif /* DEBUG */ + + if (!xdr_diropargs(xdrs, &objp->rna_from)) { + return (FALSE); + } + if (!xdr_diropargs(xdrs, &objp->rna_to)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_RENAMEARGS */ + + +#ifndef HAVE_XDR_SATTR +bool_t +xdr_sattr(XDR *xdrs, nfssattr *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_sattr:"); +#endif /* DEBUG */ + + if (!xdr_u_int(xdrs, &objp->sa_mode)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sa_uid)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sa_gid)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sa_size)) { + return (FALSE); + } + if (!xdr_nfstime(xdrs, &objp->sa_atime)) { + return (FALSE); + } + if (!xdr_nfstime(xdrs, &objp->sa_mtime)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_SATTR */ + + +#ifndef HAVE_XDR_SATTRARGS +bool_t +xdr_sattrargs(XDR *xdrs, nfssattrargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_sattrargs:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->sag_fhandle)) { + return (FALSE); + } + if (!xdr_sattr(xdrs, &objp->sag_attributes)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_SATTRARGS */ + + +#ifndef HAVE_XDR_STATFSOKRES +bool_t +xdr_statfsokres(XDR *xdrs, nfsstatfsokres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_statfsokres:"); +#endif /* DEBUG */ + + if (!xdr_u_int(xdrs, &objp->sfrok_tsize)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sfrok_bsize)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sfrok_blocks)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sfrok_bfree)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->sfrok_bavail)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_STATFSOKRES */ + + +#ifndef HAVE_XDR_STATFSRES +bool_t +xdr_statfsres(XDR *xdrs, nfsstatfsres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_statfsres:"); +#endif /* DEBUG */ + + if (!xdr_nfsstat(xdrs, &objp->sfr_status)) { + return (FALSE); + } + switch (objp->sfr_status) { + case NFS_OK: + if (!xdr_statfsokres(xdrs, &objp->sfr_u.sfr_reply_u)) { + return (FALSE); + } + break; + default: + break; + } + return (TRUE); +} +#endif /* not HAVE_XDR_STATFSRES */ + + +#ifndef HAVE_XDR_SYMLINKARGS +bool_t +xdr_symlinkargs(XDR *xdrs, nfssymlinkargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_symlinkargs:"); +#endif /* DEBUG */ + + if (!xdr_diropargs(xdrs, &objp->sla_from)) { + return (FALSE); + } + if (!xdr_nfspath(xdrs, &objp->sla_to)) { + return (FALSE); + } + if (!xdr_sattr(xdrs, &objp->sla_attributes)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_SYMLINKARGS */ + + +#ifndef HAVE_XDR_WRITEARGS +bool_t +xdr_writeargs(XDR *xdrs, nfswriteargs *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_writeargs:"); +#endif /* DEBUG */ + + if (!xdr_nfs_fh(xdrs, &objp->wra_fhandle)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->wra_beginoffset)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->wra_offset)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->wra_totalcount)) { + return (FALSE); + } + if (!xdr_bytes(xdrs, + (char **) & objp->wra_u.wra_val_u, + (u_int *) & objp->wra_u.wra_len_u, + NFS_MAXDATA)) { + return (FALSE); + } + return (TRUE); +} +#endif /* not HAVE_XDR_WRITEARGS */ + + +/* + * AUTOFS XDR FUNCTIONS: + */ +#ifdef HAVE_FS_AUTOFS +# ifndef HAVE_XDR_MNTREQUEST +bool_t +xdr_mntrequest(XDR *xdrs, mntrequest *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mntrequest:"); +#endif /* DEBUG */ + + if (!xdr_string(xdrs, &objp->name, A_MAXNAME)) + return (FALSE); + + if (!xdr_string(xdrs, &objp->map, A_MAXNAME)) + return (FALSE); + + if (!xdr_string(xdrs, &objp->opts, A_MAXOPTS)) + return (FALSE); + + if (!xdr_string(xdrs, &objp->path, A_MAXPATH)) + return (FALSE); + + return (TRUE); +} +# endif /* not HAVE_XDR_MNTREQUEST */ + + +# ifndef HAVE_XDR_MNTRES +bool_t +xdr_mntres(XDR *xdrs, mntres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mntres:"); +#endif /* DEBUG */ + + if (!xdr_int(xdrs, &objp->status)) + return (FALSE); + + return (TRUE); +} +# endif /* not HAVE_XDR_MNTRES */ + + +# ifndef HAVE_XDR_UMNTREQUEST +bool_t +xdr_umntrequest(XDR *xdrs, umntrequest *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_umntrequest:"); +#endif /* DEBUG */ + + if (!xdr_int(xdrs, &objp->isdirect)) + return (FALSE); + + if (!xdr_u_int(xdrs, (u_int *) &objp->devid)) + return (FALSE); + +#ifdef HAVE_FIELD_UMNTREQUEST_RDEVID + if (!xdr_u_long(xdrs, &objp->rdevid)) + return (FALSE); +#endif /* HAVE_FIELD_UMNTREQUEST_RDEVID */ + + if (!xdr_pointer(xdrs, (char **) &objp->next, sizeof(umntrequest), (XDRPROC_T_TYPE) xdr_umntrequest)) + return (FALSE); + + return (TRUE); +} +# endif /* not HAVE_XDR_UMNTREQUEST */ + + +# ifndef HAVE_XDR_UMNTRES +bool_t +xdr_umntres(XDR *xdrs, umntres *objp) +{ +#ifdef DEBUG + amuDebug(D_TRACE) + plog(XLOG_DEBUG, "xdr_mntres:"); +#endif /* DEBUG */ + + if (!xdr_int(xdrs, &objp->status)) + return (FALSE); + + return (TRUE); +} +# endif /* not HAVE_XDR_UMNTRES */ +#endif /* HAVE_FS_AUTOFS */ diff --git a/libamu/xutil.c b/libamu/xutil.c new file mode 100644 index 0000000..b43ac83 --- /dev/null +++ b/libamu/xutil.c @@ -0,0 +1,826 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: xutil.c,v 1.1 1998/11/05 02:04:45 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include +#include + +FILE *logfp = stderr; /* Log errors to stderr initially */ + +#ifdef HAVE_SYSLOG +int syslogging; +#endif /* HAVE_SYSLOG */ +int xlog_level = XLOG_ALL & ~XLOG_MAP & ~XLOG_STATS; +int xlog_level_init = ~0; +static int amd_program_number = AMQ_PROGRAM; + +time_t clock_valid = 0; +time_t xclock_valid = 0; + +#ifdef DEBUG_MEM +static int mem_bytes; +static int orig_mem_bytes; +#endif /* DEBUG_MEM */ + +/* forward definitions */ +static void real_plog(int lvl, char *fmt, va_list vargs); + +#ifdef DEBUG +/* + * List of debug options. + */ +struct opt_tab dbg_opt[] = +{ + {"all", D_ALL}, /* All */ + {"amq", D_AMQ}, /* Register for AMQ program */ + {"daemon", D_DAEMON}, /* Enter daemon mode */ + {"fork", D_FORK}, /* Fork server (nofork = don't fork) */ + {"full", D_FULL}, /* Program trace */ + /* info service specific debugging (hesiod, nis, etc) */ + {"info", D_INFO}, +# ifdef DEBUG_MEM + {"mem", D_MEM}, /* Trace memory allocations */ +# endif /* DEBUG_MEM */ + {"mtab", D_MTAB}, /* Use local mtab file */ + {"str", D_STR}, /* Debug string munging */ + {"test", D_TEST}, /* Full debug - but no daemon */ + {"trace", D_TRACE}, /* Protocol trace */ + {0, 0} +}; +#endif /* DEBUG */ + +/* + * List of log options + */ +struct opt_tab xlog_opt[] = +{ + {"all", XLOG_ALL}, /* All messages */ +#ifdef DEBUG + {"debug", XLOG_DEBUG}, /* Debug messages */ +#endif /* DEBUG */ /* DEBUG */ + {"error", XLOG_ERROR}, /* Non-fatal system errors */ + {"fatal", XLOG_FATAL}, /* Fatal errors */ + {"info", XLOG_INFO}, /* Information */ + {"map", XLOG_MAP}, /* Map errors */ + {"stats", XLOG_STATS}, /* Additional statistical information */ + {"user", XLOG_USER}, /* Non-fatal user errors */ + {"warn", XLOG_WARNING}, /* Warnings */ + {"warning", XLOG_WARNING}, /* Warnings */ + {0, 0} +}; + + +voidp +xmalloc(int len) +{ + voidp p; + int retries = 600; + + /* + * Avoid malloc's which return NULL for malloc(0) + */ + if (len == 0) + len = 1; + + do { + p = (voidp) malloc((unsigned) len); + if (p) { +#if defined(DEBUG) && defined(DEBUG_MEM) + amuDebug(D_MEM) + plog(XLOG_DEBUG, "Allocated size %d; block %#x", len, p); +#endif /* defined(DEBUG) && defined(DEBUG_MEM) */ + return p; + } + if (retries > 0) { + plog(XLOG_ERROR, "Retrying memory allocation"); + sleep(1); + } + } while (--retries); + + plog(XLOG_FATAL, "Out of memory"); + going_down(1); + + abort(); + + return 0; +} + + +/* like xmalloc, but zeros out the bytes */ +voidp +xzalloc(int len) +{ + voidp p = xmalloc(len); + + if (p) + memset(p, 0, len); + return p; +} + + +voidp +xrealloc(voidp ptr, int len) +{ +#if defined(DEBUG) && defined(DEBUG_MEM) + amuDebug(D_MEM) plog(XLOG_DEBUG, "Reallocated size %d; block %#x", len, ptr); +#endif /* defined(DEBUG) && defined(DEBUG_MEM) */ + + if (len == 0) + len = 1; + + if (ptr) + ptr = (voidp) realloc(ptr, (unsigned) len); + else + ptr = (voidp) xmalloc((unsigned) len); + + if (!ptr) { + plog(XLOG_FATAL, "Out of memory in realloc"); + going_down(1); + abort(); + } + return ptr; +} + + +#if defined(DEBUG) && defined(DEBUG_MEM) +void +dxfree(char *file, int line, voidp ptr) +{ + amuDebug(D_MEM) + plog(XLOG_DEBUG, "Free in %s:%d: block %#x", file, line, ptr); + /* this is the only place that must NOT use XFREE()!!! */ + free(ptr); + ptr = NULL; /* paranoid */ +} +#endif /* defined(DEBUG) && defined(DEBUG_MEM) */ + + +#ifdef DEBUG_MEM +static void +checkup_mem(void) +{ + struct mallinfo mi = mallinfo(); + u_long uordbytes = mi.uordblks * 4096; + + if (mem_bytes != uordbytes) { + if (orig_mem_bytes == 0) + mem_bytes = orig_mem_bytes = uordbytes; + else { + fprintf(logfp, "%s[%ld]: ", progname, (long) mypid); + if (mem_bytes < uordbytes) { + fprintf(logfp, "ALLOC: %ld bytes", uordbytes - mem_bytes); + } else { + fprintf(logfp, "FREE: %ld bytes", mem_bytes - uordbytes); + } + mem_bytes = uordbytes; + fprintf(logfp, ", making %d missing\n", mem_bytes - orig_mem_bytes); + } + } + malloc_verify(); +} +#endif /* DEBUG_MEM */ + + +/* + * Take a log format string and expand occurrences of %m + * with the current error code taken from errno. + */ +static void +expand_error(char *f, char *e) +{ + extern int sys_nerr; + char *p; + int error = errno; + + for (p = f; (*e = *p); e++, p++) { + if (p[0] == '%' && p[1] == 'm') { + const char *errstr; + if (error < 0 || error >= sys_nerr) + errstr = NULL; + else + errstr = sys_errlist[error]; + if (errstr) + strcpy(e, errstr); + else + sprintf(e, "Error %d", error); + e += strlen(e) - 1; + p++; + } + } +} + + +/* + * Output the time of day and hostname to the logfile + */ +static void +show_time_host_and_name(int lvl) +{ + static time_t last_t = 0; + static char *last_ctime = 0; + time_t t = clocktime(); + char *sev; + + if (t != last_t) { + last_ctime = ctime(&t); + last_t = t; + } + switch (lvl) { + case XLOG_FATAL: + sev = "fatal:"; + break; + case XLOG_ERROR: + sev = "error:"; + break; + case XLOG_USER: + sev = "user: "; + break; + case XLOG_WARNING: + sev = "warn: "; + break; + case XLOG_INFO: + sev = "info: "; + break; + case XLOG_DEBUG: + sev = "debug:"; + break; + case XLOG_MAP: + sev = "map: "; + break; + case XLOG_STATS: + sev = "stats:"; + break; + default: + sev = "hmm: "; + break; + } + fprintf(logfp, "%15.15s %s %s[%ld]/%s ", + last_ctime + 4, hostname, + progname, + (long) mypid, + sev); +} + + +#ifdef DEBUG +/* + * Switch on/off debug options + */ +int +debug_option(char *opt) +{ + return cmdoption(opt, dbg_opt, &debug_flags); +} + + +void +dplog(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + real_plog(XLOG_DEBUG, fmt, ap); + va_end(ap); +} +#endif /* DEBUG */ + + +void +plog(int lvl, char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + real_plog(lvl, fmt, ap); + va_end(ap); +} + + +static void +real_plog(int lvl, char *fmt, va_list vargs) +{ + char msg[1024]; + char efmt[1024]; + char *ptr = msg; + static char last_msg[1024]; + static int last_count = 0, last_lvl = 0; + + if (!(xlog_level & lvl)) + return; + +#ifdef DEBUG_MEM + checkup_mem(); +#endif /* DEBUG_MEM */ + + expand_error(fmt, efmt); + + vsprintf(ptr, efmt, vargs); + + ptr += strlen(ptr); + if (ptr[-1] == '\n') + *--ptr = '\0'; + +#ifdef HAVE_SYSLOG + if (syslogging) { + switch (lvl) { /* from mike */ + case XLOG_FATAL: + lvl = LOG_CRIT; + break; + case XLOG_ERROR: + lvl = LOG_ERR; + break; + case XLOG_USER: + lvl = LOG_WARNING; + break; + case XLOG_WARNING: + lvl = LOG_WARNING; + break; + case XLOG_INFO: + lvl = LOG_INFO; + break; + case XLOG_DEBUG: + lvl = LOG_DEBUG; + break; + case XLOG_MAP: + lvl = LOG_DEBUG; + break; + case XLOG_STATS: + lvl = LOG_INFO; + break; + default: + lvl = LOG_ERR; + break; + } + syslog(lvl, "%s", msg); + return; + } +#endif /* HAVE_SYSLOG */ + + *ptr++ = '\n'; + *ptr = '\0'; + + /* + * mimic syslog behavior: only write repeated strings if they differ + */ + switch (last_count) { + case 0: /* never printed at all */ + last_count = 1; + strncpy(last_msg, msg, 1024); + last_lvl = lvl; + show_time_host_and_name(lvl); /* mimic syslog header */ + fwrite(msg, ptr - msg, 1, logfp); + fflush(logfp); + break; + + case 1: /* item printed once, if same, don't repeat */ + if (STREQ(last_msg, msg)) { + last_count++; + } else { /* last msg printed once, new one differs */ + /* last_count remains at 1 */ + strncpy(last_msg, msg, 1024); + last_lvl = lvl; + show_time_host_and_name(lvl); /* mimic syslog header */ + fwrite(msg, ptr - msg, 1, logfp); + fflush(logfp); + } + break; + + case 100: + /* + * Don't allow repetitions longer than 100, so you can see when something + * cycles like crazy. + */ + show_time_host_and_name(last_lvl); + sprintf(last_msg, "last message repeated %d times\n", last_count); + fwrite(last_msg, strlen(last_msg), 1, logfp); + fflush(logfp); + last_count = 0; /* start from scratch */ + break; + + default: /* item repeated multiple times */ + if (STREQ(last_msg, msg)) { + last_count++; + } else { /* last msg repeated+skipped, new one differs */ + show_time_host_and_name(last_lvl); + sprintf(last_msg, "last message repeated %d times\n", last_count); + fwrite(last_msg, strlen(last_msg), 1, logfp); + strncpy(last_msg, msg, 1024); + last_count = 1; + last_lvl = lvl; + show_time_host_and_name(lvl); /* mimic syslog header */ + fwrite(msg, ptr - msg, 1, logfp); + fflush(logfp); + } + break; + } + +} + + +/* + * Display current debug options + */ +void +show_opts(int ch, struct opt_tab *opts) +{ + int i; + int s = '{'; + + fprintf(stderr, "\t[-%c {no}", ch); + for (i = 0; opts[i].opt; i++) { + fprintf(stderr, "%c%s", s, opts[i].opt); + s = ','; + } + fputs("}]\n", stderr); +} + + +int +cmdoption(char *s, struct opt_tab *optb, int *flags) +{ + char *p = s; + int errs = 0; + + while (p && *p) { + int neg; + char *opt; + struct opt_tab *dp, *dpn = 0; + + s = p; + p = strchr(p, ','); + if (p) + *p = '\0'; + + /* check for "no" prefix to options */ + if (s[0] == 'n' && s[1] == 'o') { + opt = s + 2; + neg = 1; + } else { + opt = s; + neg = 0; + } + + /* + * Scan the array of debug options to find the + * corresponding flag value. If it is found + * then set (or clear) the flag (depending on + * whether the option was prefixed with "no"). + */ + for (dp = optb; dp->opt; dp++) { + if (STREQ(opt, dp->opt)) + break; + if (opt != s && !dpn && STREQ(s, dp->opt)) + dpn = dp; + } + + if (dp->opt || dpn) { + if (!dp->opt) { + dp = dpn; + neg = !neg; + } + if (neg) + *flags &= ~dp->flag; + else + *flags |= dp->flag; + } else { + /* + * This will log to stderr when parsing the command line + * since any -l option will not yet have taken effect. + */ + plog(XLOG_USER, "option \"%s\" not recognized", s); + errs++; + } + + /* + * Put the comma back + */ + if (p) + *p++ = ','; + } + + return errs; +} + + +/* + * Switch on/off logging options + */ +int +switch_option(char *opt) +{ + int xl = xlog_level; + int rc = cmdoption(opt, xlog_opt, &xl); + + if (rc) { + rc = EINVAL; + } else { + /* + * Keep track of initial log level, and + * don't allow options to be turned off. + */ + if (xlog_level_init == ~0) + xlog_level_init = xl; + else + xl |= xlog_level_init; + xlog_level = xl; + } + return rc; +} + +/* + * get syslog facility to use. + * logfile can be "syslog", "syslog:daemon", "syslog:local7", etc. + */ +static int +get_syslog_facility(const char *logfile) +{ + char *facstr; + + /* parse facility string */ + facstr = strchr(logfile, ':'); + if (!facstr) /* log file was "syslog" */ + return LOG_DAEMON; + facstr++; + if (!facstr || facstr[0] == '\0') { /* log file was "syslog:" */ + plog(XLOG_WARNING, "null syslog facility, using LOG_DAEMON"); + return LOG_DAEMON; + } + +#ifdef LOG_KERN + if (STREQ(facstr, "kern")) + return LOG_KERN; +#endif /* not LOG_KERN */ +#ifdef LOG_USER + if (STREQ(facstr, "user")) + return LOG_USER; +#endif /* not LOG_USER */ +#ifdef LOG_MAIL + if (STREQ(facstr, "mail")) + return LOG_MAIL; +#endif /* not LOG_MAIL */ +#ifdef LOG_DAEMON + if (STREQ(facstr, "daemon")) + return LOG_DAEMON; +#endif /* not LOG_DAEMON */ +#ifdef LOG_AUTH + if (STREQ(facstr, "auth")) + return LOG_AUTH; +#endif /* not LOG_AUTH */ +#ifdef LOG_SYSLOG + if (STREQ(facstr, "syslog")) + return LOG_SYSLOG; +#endif /* not LOG_SYSLOG */ +#ifdef LOG_LPR + if (STREQ(facstr, "lpr")) + return LOG_LPR; +#endif /* not LOG_LPR */ +#ifdef LOG_NEWS + if (STREQ(facstr, "news")) + return LOG_NEWS; +#endif /* not LOG_NEWS */ +#ifdef LOG_UUCP + if (STREQ(facstr, "uucp")) + return LOG_UUCP; +#endif /* not LOG_UUCP */ +#ifdef LOG_CRON + if (STREQ(facstr, "cron")) + return LOG_CRON; +#endif /* not LOG_CRON */ +#ifdef LOG_LOCAL0 + if (STREQ(facstr, "local0")) + return LOG_LOCAL0; +#endif /* not LOG_LOCAL0 */ +#ifdef LOG_LOCAL1 + if (STREQ(facstr, "local1")) + return LOG_LOCAL1; +#endif /* not LOG_LOCAL1 */ +#ifdef LOG_LOCAL2 + if (STREQ(facstr, "local2")) + return LOG_LOCAL2; +#endif /* not LOG_LOCAL2 */ +#ifdef LOG_LOCAL3 + if (STREQ(facstr, "local3")) + return LOG_LOCAL3; +#endif /* not LOG_LOCAL3 */ +#ifdef LOG_LOCAL4 + if (STREQ(facstr, "local4")) + return LOG_LOCAL4; +#endif /* not LOG_LOCAL4 */ +#ifdef LOG_LOCAL5 + if (STREQ(facstr, "local5")) + return LOG_LOCAL5; +#endif /* not LOG_LOCAL5 */ +#ifdef LOG_LOCAL6 + if (STREQ(facstr, "local6")) + return LOG_LOCAL6; +#endif /* not LOG_LOCAL6 */ +#ifdef LOG_LOCAL7 + if (STREQ(facstr, "local7")) + return LOG_LOCAL7; +#endif /* not LOG_LOCAL7 */ + + /* didn't match anything else */ + plog(XLOG_WARNING, "unknown syslog facility \"%s\", using LOG_DAEMON", facstr); + return LOG_DAEMON; +} + + +/* + * Change current logfile + */ +int +switch_to_logfile(char *logfile) +{ + FILE *new_logfp = stderr; + + if (logfile) { +#ifdef HAVE_SYSLOG + syslogging = 0; +#endif /* HAVE_SYSLOG */ + + if (STREQ(logfile, "/dev/stderr")) + new_logfp = stderr; + else if (NSTREQ(logfile, "syslog", strlen("syslog"))) { + +#ifdef HAVE_SYSLOG + syslogging = 1; + new_logfp = stderr; + openlog(progname, + LOG_PID +# ifdef LOG_CONS + | LOG_CONS +# endif /* LOG_CONS */ +# ifdef LOG_NOWAIT + | LOG_NOWAIT +# endif /* LOG_NOWAIT */ +# ifdef LOG_DAEMON + , get_syslog_facility(logfile) +# endif /* LOG_DAEMON */ + ); +#else /* not HAVE_SYSLOG */ + plog(XLOG_WARNING, "syslog option not supported, logging unchanged"); +#endif /* not HAVE_SYSLOG */ + + } else { + (void) umask(orig_umask); + new_logfp = fopen(logfile, "a"); + umask(0); + } + } + + /* + * If we couldn't open a new file, then continue using the old. + */ + if (!new_logfp && logfile) { + plog(XLOG_USER, "%s: Can't open logfile: %m", logfile); + return 1; + } + + /* + * Close the previous file + */ + if (logfp && logfp != stderr) + (void) fclose(logfp); + logfp = new_logfp; + + return 0; +} + + +void +unregister_amq(void) +{ +#ifdef DEBUG + amuDebug(D_AMQ) +#endif /* DEBUG */ + /* find which instance of amd to unregister */ + pmap_unset(get_amd_program_number(), AMQ_VERSION); +} + + +void +going_down(int rc) +{ + if (foreground) { + if (amd_state != Start) { + if (amd_state != Done) + return; + unregister_amq(); + } + } + if (foreground) { + plog(XLOG_INFO, "Finishing with status %d", rc); + } else { +#ifdef DEBUG + dlog("background process exiting with status %d", rc); +#endif /* DEBUG */ + } + + exit(rc); +} + + +/* return the rpc program number under which amd was used */ +int +get_amd_program_number(void) +{ + return amd_program_number; +} + + +/* set the rpc program number used for amd */ +void +set_amd_program_number(int program) +{ + amd_program_number = program; +} + + +/* + * Release the controlling tty of the process pid. + * + * Algorithm: try these in order, if available, until one of them + * succeeds: setsid(), ioctl(fd, TIOCNOTTY, 0). + * Do not use setpgid(): on some OSs it may release the controlling tty, + * even if the man page does not mention it, but on other OSs it does not. + * Also avoid setpgrp(): it works on some systems, and on others it is + * identical to setpgid(). + */ +void +amu_release_controlling_tty(void) +{ +#ifdef TIOCNOTTY + int fd; +#endif /* TIOCNOTTY */ + +#ifdef HAVE_SETSID + /* XXX: one day maybe use vhangup(2) */ + if (setsid() < 0) { + plog(XLOG_WARNING, "Could not release controlling tty using setsid(): %m"); + } else { + plog(XLOG_INFO, "released controlling tty using setsid()"); + return; + } +#endif /* HAVE_SETSID */ + +#ifdef TIOCNOTTY + fd = open("/dev/tty", O_RDWR); + if (fd < 0) { + /* not an error if already no controlling tty */ + if (errno != ENXIO) + plog(XLOG_WARNING, "Could not open controlling tty: %m"); + } else { + if (ioctl(fd, TIOCNOTTY, 0) < 0 && errno != ENOTTY) + plog(XLOG_WARNING, "Could not disassociate tty (TIOCNOTTY): %m"); + else + plog(XLOG_INFO, "released controlling tty using ioctl(TIOCNOTTY)"); + close(fd); + } + return; +#endif /* not TIOCNOTTY */ + + plog(XLOG_ERROR, "unable to release controlling tty"); +} diff --git a/m4/GNUmakefile b/m4/GNUmakefile new file mode 100644 index 0000000..8e55cbf --- /dev/null +++ b/m4/GNUmakefile @@ -0,0 +1,72 @@ +# +# GNUmakefile for remaking configuration files. +# Used by am-utils maintainers only! +# +# Erez Zadok +# + +AUTOCONF=autoconf --localdir=./aux ./aux/configure.in +AUTOHEADER=autoheader --localdir=./aux ./aux/configure.in +#AUTOMAKE=./aux/automake --include-deps --amdir=./aux/amdir +#AUTOMAKE=automake --include-deps --no-intermediates --localdir=./aux +AUTOMAKE=automake --include-deps --localdir=./aux +MK_ACLOCAL=./mk-aclocal + +CUTWARNMSG="warning: AC_TRY_RUN called without default to allow cross compilin" +AMFILES=../Makefile.am $(wildcard ../*/Makefile.am) +INAMFILES=$(AMFILES:.am=.in) +ACFILES=$(wildcard macros/*.m4 macros/HEADER macros/TRAILER aux/aclocal.m4) + +LOG=/tmp/amu.log + +TOPDIR=.. +VPATH= + +all: testdir ${TOPDIR}/configure config.h.in ${TOPDIR}/Makefile.in stamp-h.in GNUmakefile + +config: all $(TOPDIR)/buildall aux_conf.h.in + (cd ${TOPDIR} && ./buildall -c) + +dconfig: all $(TOPDIR)/buildall aux_conf.h.in + (cd ${TOPDIR} && ./buildall -C) + +qconfig: all $(TOPDIR)/buildall aux_conf.h.in + (cd ${TOPDIR} && ./buildall -q) + +build: all $(TOPDIR)/buildall aux_conf.h.in + (cd ${TOPDIR} && ./buildall -b) + +world: all $(TOPDIR)/buildall aux_conf.h.in + (cd ${TOPDIR} && ./buildall) + +testdir: ${TOPDIR}/amd/amd.c + +${TOPDIR}/configure: configure.in aclocal.m4 + -(cd ${TOPDIR} && ${AUTOCONF} > configure.new 2> ${LOG}) + -@egrep -v ${CUTWARNMSG} ${LOG} > ${LOG}.new ; mv ${LOG}.new ${LOG} + @if test -s ${LOG}; then cat ${LOG}; exit 2; fi + -mv ../configure ../configure.old + mv ../configure.new ../configure + rm -f ../configure.old + chmod a+rx $@ + +config.h.in: configure.in acconfig.h + -(cd ${TOPDIR} && ${AUTOHEADER} > ./aux/config.h.in 2> ${LOG}) + -@egrep -v ${CUTWARNMSG} ${LOG} > ${LOG}.new ; mv ${LOG}.new ${LOG} + @if test -s ${LOG}; then cat ${LOG}; exit 2; fi + +${TOPDIR}/Makefile.in: ${AMFILES} configure.in aclocal.m4 + (cd ${TOPDIR} && ${AUTOMAKE}) + @rm -f ${LOG} + +aclocal.m4: ${ACFILES} configure.in + rm -f $@ + ${MK_ACLOCAL} > acinclude.m4 + aclocal + +stamp-h.in: ${AMFILES} config.h.in aclocal.m4 aux_conf.h.in + echo timestamp > $@ + +clean: + rm -f ${TOPDIR}/configure config.h.in $(INAMFILES) aclocal.m4 stamp.h.in + diff --git a/m4/acconfig.h b/m4/acconfig.h new file mode 100644 index 0000000..fd0a5fa --- /dev/null +++ b/m4/acconfig.h @@ -0,0 +1,1083 @@ +/* + * Start of am-utils-6.x config.h file. + * Erez Zadok + * + * DO NOT EDIT BY HAND. + * Note: acconfig.h generates config.h.in, which generates config.h. + */ + +#ifndef _CONFIG_H +#define _CONFIG_H + + +/* + * Check for types of amd filesystems available. + */ + +/* Define if have automount filesystem */ +#undef HAVE_AM_FS_AUTO + +/* Define if have direct automount filesystem */ +#undef HAVE_AM_FS_DIRECT + +/* Define if have "top-level" filesystem */ +#undef HAVE_AM_FS_TOPLVL + +/* Define if have error filesystem */ +#undef HAVE_AM_FS_ERROR + +/* Define if have inheritance filesystem */ +#undef HAVE_AM_FS_INHERIT + +/* Define if have program filesystem */ +#undef HAVE_AM_FS_PROGRAM + +/* Define if have symbolic-link filesystem */ +#undef HAVE_AM_FS_LINK + +/* Define if have symlink with existence check filesystem */ +#undef HAVE_AM_FS_LINKX + +/* Define if have NFS host-tree filesystem */ +#undef HAVE_AM_FS_HOST + +/* Define if have nfsl (NFS with local link check) filesystem */ +#undef HAVE_AM_FS_NFSL + +/* Define if have multi-NFS filesystem */ +#undef HAVE_AM_FS_NFSX + +/* Define if have union filesystem */ +#undef HAVE_AM_FS_UNION + +/* Define if have Sun's autofs filesystem (NO LONGER NEEDED?) */ +/* #undef HAVE_AM_FS_AUTOFS */ + + +/* + * Check for types of maps available. + */ + +/* Define if have file maps (everyone should have it!) */ +#undef HAVE_MAP_FILE + +/* Define if have NIS maps */ +#undef HAVE_MAP_NIS + +/* Define if have NIS+ maps */ +#undef HAVE_MAP_NISPLUS + +/* Define if have DBM maps */ +#undef HAVE_MAP_DBM + +/* Define if have NDBM maps */ +#undef HAVE_MAP_NDBM + +/* Define if have HESIOD maps */ +#undef HAVE_MAP_HESIOD + +/* Define if have LDAP maps */ +#undef HAVE_MAP_LDAP + +/* Define if have PASSWD maps */ +#undef HAVE_MAP_PASSWD + +/* Define if have UNION maps */ +#undef HAVE_MAP_UNION + +/* + * Check for filesystem types available. + */ + +/* Define if have UFS filesystem */ +#undef HAVE_FS_UFS + +/* Define if have XFS filesystem (irix) */ +#undef HAVE_FS_XFS + +/* Define if have EFS filesystem (irix) */ +#undef HAVE_FS_EFS + +/* Define if have NFS filesystem */ +#undef HAVE_FS_NFS + +/* Define if have NFS3 filesystem */ +#undef HAVE_FS_NFS3 + +/* Define if have PCFS filesystem */ +#undef HAVE_FS_PCFS + +/* Define if have LOFS filesystem */ +#undef HAVE_FS_LOFS + +/* Define if have HSFS filesystem */ +#undef HAVE_FS_HSFS + +/* Define if have CDFS filesystem */ +#undef HAVE_FS_CDFS + +/* Define if have TFS filesystem */ +#undef HAVE_FS_TFS + +/* Define if have TMPFS filesystem */ +#undef HAVE_FS_TMPFS + +/* Define if have MFS filesystem */ +#undef HAVE_FS_MFS + +/* Define if have CFS (crypto) filesystem */ +#undef HAVE_FS_CFS + +/* Define if have AUTOFS filesystem */ +#undef HAVE_FS_AUTOFS + +/* Define if have CACHEFS filesystem */ +#undef HAVE_FS_CACHEFS + +/* Define if have NULLFS (loopback on bsd44) filesystem */ +#undef HAVE_FS_NULLFS + +/* Define if have UNIONFS filesystem */ +#undef HAVE_FS_UNIONFS + +/* Define if have UMAPFS (uid/gid mapping) filesystem */ +#undef HAVE_FS_UMAPFS + + +/* + * Check for the type of the mount(2) system name for a filesystem. + * Normally this is "nfs" (e.g. Solaris) or an integer (older systems) + */ + +/* Mount(2) type/name for UFS filesystem */ +#undef MOUNT_TYPE_UFS + +/* Mount(2) type/name for XFS filesystem (irix) */ +#undef MOUNT_TYPE_XFS + +/* Mount(2) type/name for EFS filesystem (irix) */ +#undef MOUNT_TYPE_EFS + +/* Mount(2) type/name for NFS filesystem */ +#undef MOUNT_TYPE_NFS + +/* Mount(2) type/name for NFS3 filesystem */ +#undef MOUNT_TYPE_NFS3 + +/* Mount(2) type/name for PCFS filesystem */ +/* XXX: conf/trap/trap_hpux.h may override this definition for HPUX 9.0 */ +#undef MOUNT_TYPE_PCFS + +/* Mount(2) type/name for LOFS filesystem */ +#undef MOUNT_TYPE_LOFS + +/* Mount(2) type/name for CDFS filesystem */ +#undef MOUNT_TYPE_CDFS + +/* Mount(2) type/name for TFS filesystem */ +#undef MOUNT_TYPE_TFS + +/* Mount(2) type/name for TMPFS filesystem */ +#undef MOUNT_TYPE_TMPFS + +/* Mount(2) type/name for MFS filesystem */ +#undef MOUNT_TYPE_MFS + +/* Mount(2) type/name for CFS (crypto) filesystem */ +#undef MOUNT_TYPE_CFS + +/* Mount(2) type/name for AUTOFS filesystem */ +#undef MOUNT_TYPE_AUTOFS + +/* Mount(2) type/name for CACHEFS filesystem */ +#undef MOUNT_TYPE_CACHEFS + +/* Mount(2) type/name for IGNORE filesystem (not real just ignore for df) */ +#undef MOUNT_TYPE_IGNORE + +/* Mount(2) type/name for NULLFS (loopback on bsd44) filesystem */ +#undef MOUNT_TYPE_NULLFS + +/* Mount(2) type/name for UNIONFS filesystem */ +#undef MOUNT_TYPE_UNIONFS + +/* Mount(2) type/name for UMAPFS (uid/gid mapping) filesystem */ +#undef MOUNT_TYPE_UMAPFS + + +/* + * Check for the string name for the mount-table of a filesystem. + */ + +/* Mount-table entry name for UFS filesystem */ +#undef MNTTAB_TYPE_UFS + +/* Mount-table entry name for XFS filesystem (irix) */ +#undef MNTTAB_TYPE_XFS + +/* Mount-table entry name for EFS filesystem (irix) */ +#undef MNTTAB_TYPE_EFS + +/* Mount-table entry name for NFS filesystem */ +#undef MNTTAB_TYPE_NFS + +/* Mount-table entry name for NFS3 filesystem */ +#undef MNTTAB_TYPE_NFS3 + +/* Mount-table entry name for PCFS filesystem */ +#undef MNTTAB_TYPE_PCFS + +/* Mount-table entry name for LOFS filesystem */ +#undef MNTTAB_TYPE_LOFS + +/* Mount-table entry name for CDFS filesystem */ +#undef MNTTAB_TYPE_CDFS + +/* Mount-table entry name for TFS filesystem */ +#undef MNTTAB_TYPE_TFS + +/* Mount-table entry name for TMPFS filesystem */ +#undef MNTTAB_TYPE_TMPFS + +/* Mount-table entry name for MFS filesystem */ +#undef MNTTAB_TYPE_MFS + +/* Mount-table entry name for CFS (crypto) filesystem */ +#undef MNTTAB_TYPE_CFS + +/* Mount-table entry name for AUTOFS filesystem */ +#undef MNTTAB_TYPE_AUTOFS + +/* Mount-table entry name for CACHEFS filesystem */ +#undef MNTTAB_TYPE_CACHEFS + +/* Mount-table entry name for NULLFS (loopback on bsd44) filesystem */ +#undef MNTTAB_TYPE_NULLFS + +/* Mount-table entry name for UNIONFS filesystem */ +#undef MNTTAB_TYPE_UNIONFS + +/* Mount-table entry name for UMAPFS (uid/gid mapping) filesystem */ +#undef MNTTAB_TYPE_UMAPFS + +/* + * Name of mount table file name. + */ +#undef MNTTAB_FILE_NAME + +/* Name of mount type to hide amd mount from df(1) */ +#undef HIDE_MOUNT_TYPE + +/* + * Names of various mount table option strings. + */ + +/* Mount Table option string: Read only */ +#undef MNTTAB_OPT_RO + +/* Mount Table option string: Read/write */ +#undef MNTTAB_OPT_RW + +/* Mount Table option string: Read/write with quotas */ +#undef MNTTAB_OPT_RQ + +/* Mount Table option string: Check quotas */ +#undef MNTTAB_OPT_QUOTA + +/* Mount Table option string: Don't check quotas */ +#undef MNTTAB_OPT_NOQUOTA + +/* Mount Table option string: action to taken on error */ +#undef MNTTAB_OPT_ONERROR + +/* Mount Table option string: min. time between inconsistencies */ +#undef MNTTAB_OPT_TOOSOON + +/* Mount Table option string: Soft mount */ +#undef MNTTAB_OPT_SOFT + +/* Mount Table option string: spongy mount */ +#undef MNTTAB_OPT_SPONGY + +/* Mount Table option string: Hard mount */ +#undef MNTTAB_OPT_HARD + +/* Mount Table option string: Set uid allowed */ +#undef MNTTAB_OPT_SUID + +/* Mount Table option string: Set uid not allowed */ +#undef MNTTAB_OPT_NOSUID + +/* Mount Table option string: SysV-compatible gid on create */ +#undef MNTTAB_OPT_GRPID + +/* Mount Table option string: Change mount options */ +#undef MNTTAB_OPT_REMOUNT + +/* Mount Table option string: Disallow mounts on subdirs */ +#undef MNTTAB_OPT_NOSUB + +/* Mount Table option string: Do multi-component lookup */ +#undef MNTTAB_OPT_MULTI + +/* Mount Table option string: Allow NFS ops to be interrupted */ +#undef MNTTAB_OPT_INTR + +/* Mount Table option string: Don't allow interrupted ops */ +#undef MNTTAB_OPT_NOINTR + +/* Mount Table option string: NFS server IP port number */ +#undef MNTTAB_OPT_PORT + +/* Mount Table option string: Secure (AUTH_DES) mounting */ +#undef MNTTAB_OPT_SECURE + +/* Mount Table option string: Secure (AUTH_Kerb) mounting */ +#undef MNTTAB_OPT_KERB + +/* Mount Table option string: Max NFS read size (bytes) */ +#undef MNTTAB_OPT_RSIZE + +/* Mount Table option string: Max NFS write size (bytes) */ +#undef MNTTAB_OPT_WSIZE + +/* Mount Table option string: NFS timeout (1/10 sec) */ +#undef MNTTAB_OPT_TIMEO + +/* Mount Table option string: Max retransmissions (soft mnts) */ +#undef MNTTAB_OPT_RETRANS + +/* Mount Table option string: Attr cache timeout (sec) */ +#undef MNTTAB_OPT_ACTIMEO + +/* Mount Table option string: Min attr cache timeout (files) */ +#undef MNTTAB_OPT_ACREGMIN + +/* Mount Table option string: Max attr cache timeout (files) */ +#undef MNTTAB_OPT_ACREGMAX + +/* Mount Table option string: Min attr cache timeout (dirs) */ +#undef MNTTAB_OPT_ACDIRMIN + +/* Mount Table option string: Max attr cache timeout (dirs) */ +#undef MNTTAB_OPT_ACDIRMAX + +/* Mount Table option string: Don't cache attributes at all */ +#undef MNTTAB_OPT_NOAC + +/* Mount Table option string: No close-to-open consistency */ +#undef MNTTAB_OPT_NOCTO + +/* Mount Table option string: Do mount retries in background */ +#undef MNTTAB_OPT_BG + +/* Mount Table option string: Do mount retries in foreground */ +#undef MNTTAB_OPT_FG + +/* Mount Table option string: Number of mount retries */ +#undef MNTTAB_OPT_RETRY + +/* Mount Table option string: Device id of mounted fs */ +#undef MNTTAB_OPT_DEV + +/* Mount Table option string: Filesystem id of mounted fs */ +#undef MNTTAB_OPT_FSID + +/* Mount Table option string: Get static pathconf for mount */ +#undef MNTTAB_OPT_POSIX + +/* Mount Table option string: Automount map */ +#undef MNTTAB_OPT_MAP + +/* Mount Table option string: Automount direct map mount */ +#undef MNTTAB_OPT_DIRECT + +/* Mount Table option string: Automount indirect map mount */ +#undef MNTTAB_OPT_INDIRECT + +/* Mount Table option string: Local locking (no lock manager) */ +#undef MNTTAB_OPT_LLOCK + +/* Mount Table option string: Ignore this entry */ +#undef MNTTAB_OPT_IGNORE + +/* Mount Table option string: No auto (what?) */ +#undef MNTTAB_OPT_NOAUTO + +/* Mount Table option string: No connection */ +#undef MNTTAB_OPT_NOCONN + +/* Mount Table option string: protocol version number indicator */ +#undef MNTTAB_OPT_VERS + +/* Mount Table option string: protocol network_id indicator */ +#undef MNTTAB_OPT_PROTO + +/* Mount Table option string: Synchronous local directory ops */ +#undef MNTTAB_OPT_SYNCDIR + +/* Mount Table option string: Do no allow setting sec attrs */ +#undef MNTTAB_OPT_NOSETSEC + +/* Mount Table option string: set symlink cache time-to-live */ +#undef MNTTAB_OPT_SYMTTL + +/* Mount Table option string: compress */ +#undef MNTTAB_OPT_COMPRESS + +/* Mount Table option string: paging threshold */ +#undef MNTTAB_OPT_PGTHRESH + +/* Mount Table option string: max groups */ +#undef MNTTAB_OPT_MAXGROUPS + +/* + * Generic mount(2) options (hex numbers) + */ + +/* asynchronous filesystem access */ +#undef MNT2_GEN_OPT_ASYNC + +/* cache (what?) */ +#undef MNT2_GEN_OPT_CACHE + +/* 6-argument mount */ +#undef MNT2_GEN_OPT_DATA + +/* old (4-argument) mount (compatibility) */ +#undef MNT2_GEN_OPT_FSS + +/* journaling filesystem (AIX's UFS/FFS) */ +#undef MNT2_GEN_OPT_JFS + +/* old BSD group-id on create */ +#undef MNT2_GEN_OPT_GRPID + +/* do multi-component lookup on files */ +#undef MNT2_GEN_OPT_MULTI + +/* use type string instead of int */ +#undef MNT2_GEN_OPT_NEWTYPE + +/* NFS mount */ +#undef MNT2_GEN_OPT_NFS + +/* nocache (what?) */ +#undef MNT2_GEN_OPT_NOCACHE + +/* not a device */ +#undef MNT2_GEN_OPT_NODEV + +/* no exec calls allowed */ +#undef MNT2_GEN_OPT_NOEXEC + +/* not a device */ +#undef MNT2_GEN_OPT_NONDEV + +/* Disallow mounts beneath this mount */ +#undef MNT2_GEN_OPT_NOSUB + +/* Setuid programs disallowed */ +#undef MNT2_GEN_OPT_NOSUID + +/* Return ENAMETOOLONG for long filenames */ +#undef MNT2_GEN_OPT_NOTRUNC + +/* allow overlay mounts */ +#undef MNT2_GEN_OPT_OVERLAY + +/* check quotas */ +#undef MNT2_GEN_OPT_QUOTA + +/* Read-only */ +#undef MNT2_GEN_OPT_RDONLY + +/* change options on an existing mount */ +#undef MNT2_GEN_OPT_REMOUNT + +/* read only */ +#undef MNT2_GEN_OPT_RONLY + +/* synchronize data immediately to filesystem */ +#undef MNT2_GEN_OPT_SYNC + +/* synchronous filesystem access (same as SYNC) */ +#undef MNT2_GEN_OPT_SYNCHRONOUS + +/* Mount with Sys 5-specific semantics */ +#undef MNT2_GEN_OPT_SYS5 + +/* Union mount */ +#undef MNT2_GEN_OPT_UNION + +/* + * NFS-specific mount(2) options (hex numbers) + */ + +/* hide mount type from df(1) */ +#undef MNT2_NFS_OPT_AUTO + +/* set max secs for dir attr cache */ +#undef MNT2_NFS_OPT_ACDIRMAX + +/* set min secs for dir attr cache */ +#undef MNT2_NFS_OPT_ACDIRMIN + +/* set max secs for file attr cache */ +#undef MNT2_NFS_OPT_ACREGMAX + +/* set min secs for file attr cache */ +#undef MNT2_NFS_OPT_ACREGMIN + +/* Authentication error */ +#undef MNT2_NFS_OPT_AUTHERR + +/* set dead server retry thresh */ +#undef MNT2_NFS_OPT_DEADTHRESH + +/* Dismount in progress */ +#undef MNT2_NFS_OPT_DISMINPROG + +/* Dismounted */ +#undef MNT2_NFS_OPT_DISMNT + +/* Don't estimate rtt dynamically */ +#undef MNT2_NFS_OPT_DUMBTIMR + +/* System V-style gid inheritance */ +#undef MNT2_NFS_OPT_GRPID + +/* Has authenticator */ +#undef MNT2_NFS_OPT_HASAUTH + +/* provide name of server's fs to system */ +#undef MNT2_NFS_OPT_FSNAME + +/* set hostname for error printf */ +#undef MNT2_NFS_OPT_HOSTNAME + +/* ignore mount point */ +#undef MNT2_NFS_OPT_IGNORE + +/* allow interrupts on hard mount */ +#undef MNT2_NFS_OPT_INT + +/* Bits set internally */ +#undef MNT2_NFS_OPT_INTERNAL + +/* Use Kerberos authentication */ +#undef MNT2_NFS_OPT_KERB + +/* use kerberos credentials */ +#undef MNT2_NFS_OPT_KERBEROS + +/* transport's knetconfig structure */ +#undef MNT2_NFS_OPT_KNCONF + +/* set lease term (nqnfs) */ +#undef MNT2_NFS_OPT_LEASETERM + +/* Local locking (no lock manager) */ +#undef MNT2_NFS_OPT_LLOCK + +/* set maximum grouplist size */ +#undef MNT2_NFS_OPT_MAXGRPS + +/* Mnt server for mnt point */ +#undef MNT2_NFS_OPT_MNTD + +/* Assume writes were mine */ +#undef MNT2_NFS_OPT_MYWRITE + +/* mount NFS Version 3 */ +#undef MNT2_NFS_OPT_NFSV3 + +/* don't cache attributes */ +#undef MNT2_NFS_OPT_NOAC + +/* Don't Connect the socket */ +#undef MNT2_NFS_OPT_NOCONN + +/* no close-to-open consistency */ +#undef MNT2_NFS_OPT_NOCTO + +/* disallow interrupts on hard mounts */ +#undef MNT2_NFS_OPT_NOINT + +/* Get lease for lookup */ +#undef MNT2_NFS_OPT_NQLOOKLEASE + +/* Use Nqnfs protocol */ +#undef MNT2_NFS_OPT_NQNFS + +/* static pathconf kludge info */ +#undef MNT2_NFS_OPT_POSIX + +/* Rcv socket lock */ +#undef MNT2_NFS_OPT_RCVLOCK + +/* Do lookup with readdir (nqnfs) */ +#undef MNT2_NFS_OPT_RDIRALOOK + +/* set read ahead */ +#undef MNT2_NFS_OPT_READAHEAD + +/* Allocate a reserved port */ +#undef MNT2_NFS_OPT_RESVPORT + +/* set number of request retries */ +#undef MNT2_NFS_OPT_RETRANS + +/* read only */ +#undef MNT2_NFS_OPT_RONLY + +/* use RPC to do secure NFS time sync */ +#undef MNT2_NFS_OPT_RPCTIMESYNC + +/* set read size */ +#undef MNT2_NFS_OPT_RSIZE + +/* secure mount */ +#undef MNT2_NFS_OPT_SECURE + +/* Send socket lock */ +#undef MNT2_NFS_OPT_SNDLOCK + +/* soft mount (hard is default) */ +#undef MNT2_NFS_OPT_SOFT + +/* spongy mount */ +#undef MNT2_NFS_OPT_SPONGY + +/* set initial timeout */ +#undef MNT2_NFS_OPT_TIMEO + +/* use TCP for mounts */ +#undef MNT2_NFS_OPT_TCP + +/* Wait for authentication */ +#undef MNT2_NFS_OPT_WAITAUTH + +/* Wants an authenticator */ +#undef MNT2_NFS_OPT_WANTAUTH + +/* Want receive socket lock */ +#undef MNT2_NFS_OPT_WANTRCV + +/* Want send socket lock */ +#undef MNT2_NFS_OPT_WANTSND + +/* set write size */ +#undef MNT2_NFS_OPT_WSIZE + +/* set symlink cache time-to-live */ +#undef MNT2_NFS_OPT_SYMTTL + +/* paging threshold */ +#undef MNT2_NFS_OPT_PGTHRESH + +/* + * CDFS-specific mount(2) options (hex numbers) + */ + +/* Ignore permission bits */ +#undef MNT2_CDFS_OPT_DEFPERM + +/* Use on-disk permission bits */ +#undef MNT2_CDFS_OPT_NODEFPERM + +/* Strip off extension from version string */ +#undef MNT2_CDFS_OPT_NOVERSION + +/* Use Rock Ridge Interchange Protocol (RRIP) extensions */ +#undef MNT2_CDFS_OPT_RRIP + +/* + * Existence of fields in structures. + */ + +/* does mntent_t have mnt_cnode field? */ +#undef HAVE_FIELD_MNTENT_T_MNT_CNODE + +/* does mntent_t have mnt_time field? */ +#undef HAVE_FIELD_MNTENT_T_MNT_TIME + +/* does mntent_t have mnt_time field and is of type "char *" ? */ +#undef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING + +/* does mntent_t have mnt_ro field? */ +#undef HAVE_FIELD_MNTENT_T_MNT_RO + +/* does cdfs_args_t have flags field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_FLAGS + +/* does cdfs_args_t have fspec field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_FSPEC + +/* does cdfs_args_t have iso_flags field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_ISO_FLAGS + +/* does cdfs_args_t have iso_pgthresh field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_ISO_PGTHRESH + +/* does cdfs_args_t have norrip field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_NORRIP + +/* does cdfs_args_t have ssector field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_SSECTOR + +/* does pcfs_args_t have dsttime field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_DSTTIME + +/* does pcfs_args_t have fspec field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_FSPEC + +/* does pcfs_args_t have gid field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_GID + +/* does pcfs_args_t have mask field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_MASK + +/* does pcfs_args_t have secondswest field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_SECONDSWEST + +/* does pcfs_args_t have uid field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_UID + +/* does ufs_args_t have flags field? */ +#undef HAVE_FIELD_UFS_ARGS_T_FLAGS + +/* does ufs_args_t have fspec field? */ +#undef HAVE_FIELD_UFS_ARGS_T_FSPEC + +/* does efs_args_t have flags field? */ +#undef HAVE_FIELD_EFS_ARGS_T_FLAGS + +/* does efs_args_t have fspec field? */ +#undef HAVE_FIELD_EFS_ARGS_T_FSPEC + +/* does xfs_args_t have flags field? */ +#undef HAVE_FIELD_XFS_ARGS_T_FLAGS + +/* does xfs_args_t have fspec field? */ +#undef HAVE_FIELD_XFS_ARGS_T_FSPEC + +/* does ufs_ars_t have ufs_flags field? */ +#undef HAVE_FIELD_UFS_ARGS_T_UFS_FLAGS + +/* does ufs_ars_t have ufs_pgthresh field? */ +#undef HAVE_FIELD_UFS_ARGS_T_UFS_PGTHRESH + +/* does struct fhstatus have an fhs_fh field? */ +#undef HAVE_FIELD_STRUCT_FHSTATUS_FHS_FH + +/* does struct statfs have an f_fstypename field? */ +#undef HAVE_FIELD_STRUCT_STATFS_F_FSTYPENAME + +/* does struct nfs_args have an acdirmin field? */ +#undef HAVE_FIELD_NFS_ARGS_T_ACDIRMIN + +/* does struct nfs_args have an acregmin field? */ +#undef HAVE_FIELD_NFS_ARGS_T_ACREGMIN + +/* does struct nfs_args have an fh_len field? */ +#undef HAVE_FIELD_NFS_ARGS_T_FH_LEN + +/* does struct nfs_args have an fhsize field? */ +#undef HAVE_FIELD_NFS_ARGS_T_FHSIZE + +/* does struct nfs_args have an gfs_flags field? */ +#undef HAVE_FIELD_NFS_ARGS_T_GFS_FLAGS + +/* does struct nfs_args have an optstr field? */ +#undef HAVE_FIELD_NFS_ARGS_T_OPTSTR + +/* does struct nfs_args have a proto field? */ +#undef HAVE_FIELD_NFS_ARGS_T_PROTO + +/* does struct nfs_args have a socket type field? */ +#undef HAVE_FIELD_NFS_ARGS_T_SOTYPE + +/* does struct nfs_args have a version field? */ +#undef HAVE_FIELD_NFS_ARGS_T_VERSION + +/* does struct ifreq have field ifr_addr? */ +#undef HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR + +/* does struct sockaddr have field sa_len? */ +#undef HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN + +/* does struct autofs_args have an addr field? */ +#undef HAVE_FIELD_AUTOFS_ARGS_T_ADDR + +/* does umntrequest have an rdevid field? */ +#undef HAVE_FIELD_UMNTREQUEST_RDEVID + + +/* should signal handlers be reinstalled? */ +#undef REINSTALL_SIGNAL_HANDLER + + +/**************************************************************************/ +/*** Everything above this line is part of the "TOP" of acconfig.h. ***/ +/**************************************************************************/ + +@TOP@ + +/**************************************************************************/ +/*** Everything below this line is above "BOTTOM" and right below "TOP" ***/ +/**************************************************************************/ + +/* + * Definitions that depend on configure options. + */ + +/* Turn off general debugging by default */ +#undef DEBUG + +/* Turn off memory debugging by default */ +#undef DEBUG_MEM + +/* Enable "amq -M" remote mount code (insecure due to IP spoofing) */ +#undef ENABLE_AMQ_MOUNT + +/* Define package name (must be defined by configure.in) */ +#undef PACKAGE + +/* Define version of package (must be defined by configure.in) */ +#undef VERSION + +/* Define name of host machine's cpu (eg. sparc) */ +#undef HOST_CPU + +/* Define name of host machine's architecture (eg. sun4) */ +#undef HOST_ARCH + +/* Define name of host machine's vendor (eg. sun) */ +#undef HOST_VENDOR + +/* Define name and version of host machine (eg. solaris2.5.1) */ +#undef HOST_OS + +/* Define only name of host machine OS (eg. solaris2) */ +#undef HOST_OS_NAME + +/* Define only version of host machine (eg. 2.5.1) */ +#undef HOST_OS_VERSION + +/* Define name of host */ +#undef HOST_NAME + +/* Define user name */ +#undef USER_NAME + +/* Define configuration date */ +#undef CONFIG_DATE + + +/* what type of network transport type is in use? TLI or sockets? */ +#undef HAVE_TRANSPORT_TYPE_TLI + +/* Define to `long' if doesn't define time_t */ +#undef time_t + +/* Define to "void *" if compiler can handle, otherwise "char *" */ +#undef voidp + +/* Define a type/structure for an NFS V2 filehandle */ +#undef am_nfs_fh + +/* Define a type/structure for an NFS V3 filehandle */ +#undef am_nfs_fh3 + +/* define if the host has NFS protocol headers in system headers */ +#undef HAVE_NFS_PROT_HEADERS + +/* define name of am-utils' NFS protocol header */ +#undef AMU_NFS_PROTOCOL_HEADER + +/* Define a type for the nfs_args structure */ +#undef nfs_args_t + +/* Define the field name for the filehandle within nfs_args_t */ +#undef NFS_FH_FIELD + +/* Define if plain fhandle type exists */ +#undef HAVE_FHANDLE + +/* Define the type of the 3rd argument ('in') to svc_getargs() */ +#undef SVC_IN_ARG_TYPE + +/* Define to the type of xdr procedure type */ +#undef XDRPROC_T_TYPE + +/* Define if mount table is on file, undefine if in kernel */ +#undef MOUNT_TABLE_ON_FILE + +/* Define if have struct mntent in one of the standard headers */ +#undef HAVE_STRUCT_MNTENT + +/* Define if have struct mnttab in one of the standard headers */ +#undef HAVE_STRUCT_MNTTAB + +/* Define if have struct nfs_args in one of the standard nfs headers */ +#undef HAVE_STRUCT_NFS_ARGS + +/* Define if have struct nfs_mount_data in one of the standard nfs headers */ +#undef HAVE_STRUCT_NFS_MOUNT_DATA + +/* Define if have struct nfs_gfs_mount in one of the standard nfs headers */ +#undef HAVE_STRUCT_NFS_GFS_MOUNT + +/* Type of the 3rd argument to yp_order() */ +#undef YP_ORDER_OUTORDER_TYPE + +/* Type of the 6th argument to recvfrom() */ +#undef RECVFROM_FROMLEN_TYPE + +/* Type of the 5rd argument to authunix_create() */ +#undef AUTH_CREATE_GIDLIST_TYPE + +/* The string used in printf to print the mount-type field of mount(2) */ +#undef MTYPE_PRINTF_TYPE + +/* Type of the mount-type field in the mount() system call */ +#undef MTYPE_TYPE + +/* Define a type for the pcfs_args structure */ +#undef pcfs_args_t + +/* Define a type for the autofs_args structure */ +#undef autofs_args_t + +/* Define a type for the cachefs_args structure */ +#undef cachefs_args_t + +/* Define a type for the tmpfs_args structure */ +#undef tmpfs_args_t + +/* Define a type for the ufs_args structure */ +#undef ufs_args_t + +/* Define a type for the efs_args structure */ +#undef efs_args_t + +/* Define a type for the xfs_args structure */ +#undef xfs_args_t + +/* Define a type for the lofs_args structure */ +#undef lofs_args_t + +/* Define a type for the cdfs_args structure */ +#undef cdfs_args_t + +/* Define a type for the mfs_args structure */ +#undef mfs_args_t + +/* Define a type for the rfs_args structure */ +#undef rfs_args_t + +/* define if have a bad version of memcmp() */ +#undef HAVE_BAD_MEMCMP + +/* define if have a bad version of yp_all() */ +#undef HAVE_BAD_YP_ALL + +/* define if must use NFS "noconn" option */ +#undef USE_UNCONNECTED_NFS_SOCKETS +/* define if must NOT use NFS "noconn" option */ +#undef USE_CONNECTED_NFS_SOCKETS + +/**************************************************************************/ +/*** Everything below this line is right above "BOTTOM" but below "TOP" ***/ +/**************************************************************************/ + +@BOTTOM@ + +/**************************************************************************/ +/*** Everything below this line is part of the "BOTTOM" of acconfig.h. ***/ +/**************************************************************************/ + +/* + * Existence of external definitions. + */ + +/* does sys_errlist[] exist? */ +#undef HAVE_EXTERN_SYS_ERRLIST + +/* does optarg exist? */ +#undef HAVE_EXTERN_OPTARG + +/* does clnt_sperrno() exist? */ +#undef HAVE_EXTERN_CLNT_SPERRNO + +/* does free() exist? */ +#undef HAVE_EXTERN_FREE + +/* does get_myaddress() exist? */ +#undef HAVE_EXTERN_GET_MYADDRESS + +/* does getccent() (hpux) exist? */ +#undef HAVE_EXTERN_GETCCENT + +/* does getdomainname() exist? */ +#undef HAVE_EXTERN_GETDOMAINNAME + +/* does gethostname() exist? */ +#undef HAVE_EXTERN_GETHOSTNAME + +/* does getlogin() exist? */ +#undef HAVE_EXTERN_GETLOGIN + +/* does gettablesize() exist? */ +#undef HAVE_EXTERN_GETTABLESIZE + +/* does getpagesize() exist? */ +#undef HAVE_EXTERN_GETPAGESIZE + +/* does innetgr() exist? */ +#undef HAVE_EXTERN_INNETGR + +/* does mkstemp() exist? */ +#undef HAVE_EXTERN_MKSTEMP + +/* does sbrk() exist? */ +#undef HAVE_EXTERN_SBRK + +/* does strcasecmp() exist? */ +#undef HAVE_EXTERN_STRCASECMP + +/* does strdup() exist? */ +#undef HAVE_EXTERN_STRDUP + +/* does strstr() exist? */ +#undef HAVE_EXTERN_STRSTR + +/* does usleep() exist? */ +#undef HAVE_EXTERN_USLEEP + +/* does wait3() exist? */ +#undef HAVE_EXTERN_WAIT3 + +/* does xdr_opaque_auth() exist? */ +#undef HAVE_EXTERN_XDR_OPAQUE_AUTH + +/****************************************************************************/ +/*** INCLUDE localconfig.h if it exists, to allow users to make some ***/ +/*** compile time configuration changes. ***/ +/****************************************************************************/ +/* does a local configuration file exist? */ +#undef HAVE_LOCALCONFIG_H +#ifdef HAVE_LOCALCONFIG_H +# include +#endif /* HAVE_LOCALCONFIG_H */ + +#endif /* not _CONFIG_H */ + +/* + * Local Variables: + * mode: c + * End: + */ + +/* End of am-utils-6.x config.h file */ diff --git a/m4/acinclude.m4 b/m4/acinclude.m4 new file mode 100644 index 0000000..69a524b --- /dev/null +++ b/m4/acinclude.m4 @@ -0,0 +1,3902 @@ +dnl aclocal.m4 file for am-utils-6.x +dnl Contains definitions for specialized GNU-autoconf macros. +dnl Author: Erez Zadok +dnl +dnl DO NOT EDIT DIRECTLY! Generated automtically by maintainers from +dnl aux/Makefile! +dnl +dnl ###################################################################### +dnl UNCOMMENT THE NEXT FEW LINES FOR DEBUGGING CONFIGURE +dnl define([AC_CACHE_LOAD], )dnl +dnl define([AC_CACHE_SAVE], )dnl +dnl ====================================================================== + + + +dnl ###################################################################### +dnl check if compiler can handle "void *" +AC_DEFUN(AC_C_VOID_P, +[ +AC_CACHE_CHECK(if compiler can handle void *, +ac_cv_c_void_p, +[ +# try to compile a program which uses void * +AC_TRY_COMPILE( +[ ], +[ +void *vp; +], ac_cv_c_void_p=yes, ac_cv_c_void_p=no) +]) +if test "$ac_cv_c_void_p" = yes +then + AC_DEFINE(voidp, void *) +else + AC_DEFINE(voidp, char *) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl New versions of the cache functions which also dynamically evaluate the +dnl cache-id field, so that it may contain shell variables to expand +dnl dynamically for the creation of $ac_cv_* variables on the fly. +dnl In addition, this function allows you to call COMMANDS which generate +dnl output on the command line, because it prints its own AC_MSG_CHECKING +dnl after COMMANDS are run. +dnl +dnl ====================================================================== +dnl AC_CACHE_CHECK_DYNAMIC(MESSAGE, CACHE-ID, COMMANDS) +define(AC_CACHE_CHECK_DYNAMIC, +[ +ac_tmp=`echo $2` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + AC_MSG_CHECKING([$1]) + echo $ac_n "(cached) $ac_c" 1>&AC_FD_MSG +else + $3 + AC_MSG_CHECKING([$1]) +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +AC_MSG_RESULT($ac_tmp_val) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if an automounter filesystem exists (it almost always does). +dnl Usage: AC_CHECK_AM_FS(, , []) +dnl Print the message in , and declare HAVE_AM_FS_ true. +dnl If is defined, then define this filesystem as tru only of the +dnl filesystem for is true. +AC_DEFUN(AC_CHECK_AM_FS, +[ +# store variable name of fs +ac_upcase_am_fs_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_AM_FS_$ac_upcase_am_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $2 filesystem ($1), +ac_cv_am_fs_$1, +[ +# true by default +eval "ac_cv_am_fs_$1=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "$3" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_$1=no" + if test "`eval echo '$''{ac_cv_fs_'$3'}'`" = yes + then + eval "ac_cv_am_fs_$1=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_'$3'}'`" = yes + then + eval "ac_cv_am_fs_$1=yes" + fi +fi +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'$1'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of fixmount check_mount() function +AC_DEFUN(AC_CHECK_CHECKMOUNT_STYLE, +[ +AC_CACHE_CHECK(style of fixmount check_mount(), +ac_cv_style_checkmount, +[ +# select the correct style for unmounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* ) + ac_cv_style_checkmount=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_checkmount=bsd44 ;; + aix* ) + ac_cv_style_checkmount=aix ;; + osf* ) + ac_cv_style_checkmount=osf ;; + ultrix* ) + ac_cv_style_checkmount=ultrix ;; + * ) + ac_cv_style_checkmount=default ;; +esac +]) +am_utils_checkmount_style_file="check_mount.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/checkmount/checkmount_${ac_cv_style_checkmount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}fixmount/${am_utils_checkmount_style_file}" " +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for external definition for a function (not external variables) +dnl Usage AC_CHECK_EXTERN(extern) +dnl Checks for external definition for "extern" that is delimited on the +dnl left and the right by a character that is not a valid symbol character. +dnl +dnl Note that $pattern below is very carefully crafted to match any system +dnl external defintion, with __P posix prototypes, with or without an extern +dnl word, etc. Think twice before changing this. +AC_DEFUN(AC_CHECK_EXTERN, +[ +# store variable name for external definition +ac_upcase_extern_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_EXTERN_$ac_upcase_extern_name +# check for cached value and set it if needed +AC_CACHE_CHECK_DYNAMIC(external function definition for $1, +ac_cv_extern_$1, +[ +changequote(<<, >>)dnl +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(" +changequote([, ])dnl +AC_EGREP_CPP(${pattern}, +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + +], eval "ac_cv_extern_$1=yes", eval "ac_cv_extern_$1=no") +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'$1'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if type 'fhandle' exists +AC_DEFUN(AC_CHECK_FHANDLE, +[ +AC_CACHE_CHECK(if plain fhandle type exists, +ac_cv_have_fhandle, +[ +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_have_fhandle=no +# look for "struct nfs_fh" +if test "$ac_cv_have_fhandle" = no +then +AC_TRY_COMPILE_NFS( +[ fhandle a; +], ac_cv_have_fhandle=yes, ac_cv_have_fhandle=no) +fi + +]) +if test "$ac_cv_have_fhandle" != no +then + AC_DEFINE(HAVE_FHANDLE) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl find if structure $1 has field field $2 +AC_DEFUN(AC_CHECK_FIELD, +[ +# make variable name a concatenation of the structure name and the field +ac_safe=`echo ac_cv_field_$1_$2 | tr '. ' '__'` +ac_upcase_var_name=`echo HAVE_FIELD_$1_$2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr '. ' '__'` +AC_CACHE_CHECK_DYNAMIC(if $1 field $2 exist, +$ac_safe, +[ +# try to compile a program +AC_TRY_COMPILE( +AC_MOUNT_HEADERS( +[ +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +]), +[ +$1 a; +char *cp = (char *) &(a.$2); +], eval "$ac_safe=yes", eval "$ac_safe=no") +]) +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_upcase_var_name) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a filesystem exists (if any of its header files exist). +dnl Usage: AC_CHECK_FS_HEADERS(..., , []) +dnl Check if if any of the headers exist. If any exist, then +dnl define HAVE_FS_. If exits, then define +dnl HAVE_FS_ instead... +AC_DEFUN(AC_CHECK_FS_HEADERS, +[ +# find what name to give to the fs +if test -n "$3" +then + ac_fs_name=$3 +else + ac_fs_name=$2 +fi +# store variable name of fs +ac_upcase_fs_name=`echo $2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_fs_name filesystem in <$1>, +ac_cv_fs_header_$ac_fs_name, +[ +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +AC_CHECK_HEADERS($1, +[ eval "ac_cv_fs_header_$ac_fs_name=yes" + break +])]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_fs_headers_safe) +# append ops_.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + AC_SUBST(AMD_FS_OBJS) + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a filesystem type exists (if its header files exist) +dnl Usage: AC_CHECK_FS_MNTENT(, []) +dnl check in some headers for MNTTYPE_ macro. If that exist, +dnl then define HAVE_FS_. If exits, then defined +dnl HAVE_FS_ instead... +AC_DEFUN(AC_CHECK_FS_MNTENT, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 + ac_fs_as_name=" (from: $1)" +else + ac_fs_name=$1 + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_fs_name$ac_fs_as_name mntent definition, +ac_cv_fs_$ac_fs_name, +[ +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in $1 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_fs_$ac_fs_name=yes" + break + ] + ) + +done +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +# append ops_.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + AC_SUBST(AMD_FS_OBJS) + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Define mount type to hide amd mounts from df(1) +dnl +dnl This has to be determined individually per OS. Depending on whatever +dnl mount options are defined in the system header files such as +dnl MNTTYPE_IGNORE or MNTTYPE_AUTO, or others does not work: some OSs define +dnl some of these then use other stuff; some do not define them at all in +dnl the headers, but still use it; and more. After a long attempt to get +dnl this automatically configured, I came to the conclusion that the semi- +dnl automatic per-host-os determination here is the best. +dnl +AC_DEFUN(AC_CHECK_HIDE_MOUNT_TYPE, +[ +AC_CACHE_CHECK(for mount type to hide from df, +ac_cv_hide_mount_type, +[ +case "${host_os}" in + irix* | hpux* ) + ac_cv_hide_mount_type="ignore" + ;; + sunos4* ) + ac_cv_hide_mount_type="auto" + ;; + * ) + ac_cv_hide_mount_type="nfs" + ;; +esac +]) +AC_DEFINE_UNQUOTED(HIDE_MOUNT_TYPE, "$ac_cv_hide_mount_type") +]) +dnl ====================================================================== + + +dnl a bug-fixed version of autoconf 2.12. +dnl first try to link library without $5, and only of that failed, +dnl try with $5 if specified. +dnl it addes $5 to $LIBS if it was needed -Erez. +dnl AC_CHECK_LIB2(LIBRARY, FUNCTION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND +dnl [, OTHER-LIBRARIES]]]) +AC_DEFUN(AC_CHECK_LIB2, +[AC_MSG_CHECKING([for $2 in -l$1]) +dnl Use a cache variable name containing both the library and function name, +dnl because the test really is for library $1 defining function $2, not +dnl just for library $1. Separate tests with the same $1 and different $2s +dnl may have different results. +ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` +AC_CACHE_VAL(ac_cv_lib_$ac_lib_var, +[ac_save_LIBS="$LIBS" + +# first try with base library, without auxiliary library +LIBS="-l$1 $LIBS" +AC_TRY_LINK(dnl +ifelse([$2], [main], , dnl Avoid conflicting decl of main. +[/* Override any gcc2 internal prototype to avoid an error. */ +]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus +extern "C" +#endif +])dnl +[/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $2(); +]), + [$2()], + eval "ac_cv_lib_$ac_lib_var=\"$1\"", + eval "ac_cv_lib_$ac_lib_var=no") + +# if OK, set to no auxiliary library, else try auxiliary library +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = no"; then + LIBS="-l$1 $5 $LIBS" + AC_TRY_LINK(dnl + ifelse([$2], [main], , dnl Avoid conflicting decl of main. + [/* Override any gcc2 internal prototype to avoid an error. */ + ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus + extern "C" + #endif + ])dnl + [/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $2(); + ]), + [$2()], + eval "ac_cv_lib_$ac_lib_var=\"$1 $5\"", + eval "ac_cv_lib_$ac_lib_var=no") +fi + +LIBS="$ac_save_LIBS" +])dnl +ac_tmp="`eval echo '$''{ac_cv_lib_'$ac_lib_var'}'`" +if test "${ac_tmp}" != no; then + AC_MSG_RESULT(-l$ac_tmp) + ifelse([$3], , +[changequote(, )dnl + ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` +changequote([, ])dnl + AC_DEFINE_UNQUOTED($ac_tr_lib) + LIBS="-l$ac_tmp $LIBS" +], [$3]) +else + AC_MSG_RESULT(no) +ifelse([$4], , , [$4 +])dnl +fi + +]) + + +dnl ###################################################################### +dnl usage AC_CHECK_LIB_FUNCS(lib, func1 func2 ...) +dnl check if any of funcN exist in lib, and define/use that library +AC_DEFUN(AC_CHECK_LIB_FUNCS, +[ +# make variable out of library name and functions +ac_safe=`echo ac_cv_have_lib_$1_$2 | tr ' ' '_'` +AC_CACHE_CHECK_DYNAMIC(libray $1 for functions: $2, +$ac_safe, +[ +eval "$ac_safe=notfound" +# iterate over all functions +for ac_libfunc_tmp in $2 +do + AC_CHECK_LIB($1, $ac_libfunc_tmp, eval "$ac_safe=found", eval "$ac_safe=notfound") + if test "`eval echo '$''{'$ac_safe'}'`" != notfound + then + break + fi +done +]) +# if cache value found, define HAVE_LIBlib and add it to $LIBS +if test "`eval echo '$''{'$ac_safe'}'`" != notfound +then + changequote(<<, >>)dnl + ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + changequote([, ])dnl + AC_DEFINE_UNQUOTED($ac_tr_lib) + LIBS="-l$1 $LIBS" +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a map exists (if some library function exists). +dnl Usage: AC_CHECK_MAP_FUNCS(..., , []) +dnl Check if any of the functions exist. If any exist, then +dnl define HAVE_MAP_. If exits, then defined +dnl HAVE_MAP_ instead... +AC_DEFUN(AC_CHECK_MAP_FUNCS, +[ +# find what name to give to the map +if test -n "$3" +then + ac_map_name=$3 +else + ac_map_name=$2 +fi +# store variable name of map +ac_upcase_map_name=`echo $2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_map_name maps, +ac_cv_map_$ac_map_name, +[ +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +AC_CHECK_FUNCS($1, +[ + eval "ac_cv_map_$ac_map_name=yes" + break +])]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +# append info_.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + AC_SUBST(AMD_INFO_OBJS) + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find CDFS-specific mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_CDFS_OPT() +dnl Check if there is an entry for MS_ or M_ in sys/mntent.h or +dnl mntent.h, then define MNT2_CDFS_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_CDFS_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_CDFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for CDFS-specific mount(2) option $ac_fs_name, +ac_cv_mnt2_cdfs_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MNT_$ac_upcase_fs_name) +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_INT( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +#ifndef _sys_stream_h +# define _sys_stream_h +#endif /* not _sys_stream_h */ +#ifndef _SYS_STREAM_H +# define _SYS_STREAM_H +#endif /* not _SYS_STREAM_H */ +AC_MOUNT_HEADERS +, M_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + + + +dnl ###################################################################### +dnl Find generic mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_GEN_OPT() +dnl Check if there is an entry for MS_ or M_ in sys/mntent.h or +dnl mntent.h, then define MNT2_GEN_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_GEN_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_GEN_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for generic mount(2) option $ac_fs_name, +ac_cv_mnt2_gen_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MNT_$ac_upcase_fs_name) +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_INT( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +#ifndef _sys_stream_h +# define _sys_stream_h +#endif /* not _sys_stream_h */ +#ifndef _SYS_STREAM_H +# define _SYS_STREAM_H +#endif /* not _SYS_STREAM_H */ +AC_MOUNT_HEADERS +, M_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find NFS-specific mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_NFS_OPT() +dnl Check if there is an entry for NFSMNT_ in sys/mntent.h or +dnl mntent.h, then define MNT2_NFS_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_NFS_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_NFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for NFS-specific mount(2) option $ac_fs_name, +ac_cv_mnt2_nfs_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, NFSMNT_$ac_upcase_fs_name) +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, NFS_MOUNT_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find name of mount table file, and define it as MNTTAB_FILE_NAME +dnl +dnl Solaris defines MNTTAB as /etc/mnttab, the file where /sbin/mount +dnl stores its cache of mounted filesystems. But under SunOS, the same +dnl macro MNTTAB, is defined as the _source_ of filesystems to mount, and +dnl is set to /etc/fstab. That is why I have to first check out +dnl if MOUNTED exists, and if not, check for the MNTTAB macro. +dnl +AC_DEFUN(AC_CHECK_MNTTAB_FILE_NAME, +[ +AC_CACHE_CHECK(for name of mount table file name, +ac_cv_mnttab_file_name, +[ +# expand cpp value for MNTTAB +AC_EXPAND_CPP_STRING( +AC_MOUNT_HEADERS( +[ +/* see M4 comment at the top of the definition of this macro */ +#ifdef MOUNTED +# define _MNTTAB_FILE_NAME MOUNTED +# else /* not MOUNTED */ +# ifdef MNTTAB +# define _MNTTAB_FILE_NAME MNTTAB +# endif /* MNTTAB */ +#endif /* not MOUNTED */ +]), +_MNTTAB_FILE_NAME, +[ ac_cv_mnttab_file_name=$value +], +[ +ac_cv_mnttab_file_name=notfound +# check explicitly for /etc/mnttab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mnttab + then + ac_cv_mnttab_file_name="/etc/mnttab" + fi +fi +# check explicitly for /etc/mtab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mtab + then + ac_cv_mnttab_file_name="/etc/mtab" + fi +fi +]) +]) +# test value and create macro as needed +if test "$ac_cv_mnttab_file_name" != notfound +then + AC_DEFINE_UNQUOTED(MNTTAB_FILE_NAME, "$ac_cv_mnttab_file_name") +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if the mount table is kept in a file or in the kernel. +AC_DEFUN(AC_CHECK_MNTTAB_LOCATION, +[ +AC_CACHE_CHECK_DYNAMIC(where mount table is kept, +ac_cv_mnttab_location, +[ +# assume location is on file +ac_cv_mnttab_location=file +AC_CHECK_FUNCS(mntctl getmntinfo getmountent, +ac_cv_mnttab_location=kernel) +]) +if test "$ac_cv_mnttab_location" = file +then + AC_DEFINE(MOUNT_TABLE_ON_FILE) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry +dnl option. +dnl Usage: AC_CHECK_MNTTAB_OPT() +dnl Check if there is an entry for MNTOPT_ in sys/mntent.h or mntent.h +dnl define MNTTAB_OPT_ to the string name (e.g., "ro"). +AC_DEFUN(AC_CHECK_MNTTAB_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mount table option $ac_fs_name, +ac_cv_mnttab_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found +AC_EXPAND_CPP_STRING( +AC_MOUNT_HEADERS +, MNTOPT_$ac_upcase_fs_name) +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of accessing the mount table file +AC_DEFUN(AC_CHECK_MNTTAB_STYLE, +[ +AC_CACHE_CHECK(mount table style, +ac_cv_style_mnttab, +[ +# select the correct style for mount table manipulation functions +case "${host_os_name}" in + aix* ) + ac_cv_style_mnttab=aix ;; + bsd* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_mnttab=bsd ;; + isc3* ) + ac_cv_style_mnttab=isc3 ;; + mach3* ) + ac_cv_style_mnttab=mach3 ;; + osf* ) + ac_cv_style_mnttab=osf ;; + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_style_mnttab=svr4 ;; + ultrix* ) + ac_cv_style_mnttab=ultrix ;; + * ) + ac_cv_style_mnttab=file ;; +esac +]) +am_utils_link_files_src=${am_utils_link_files_src}conf/mtab/mtab_${ac_cv_style_mnttab}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/mtabutil.c" " +# append mtab utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS mtabutil.o" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry. +dnl Usage: AC_CHECK_MNTTAB_TYPE(, [fssymbol]) +dnl Check if there is an entry for MNTTYPE_ in sys/mntent.h and mntent.h +dnl define MNTTAB_TYPE_ to the string name (e.g., "nfs"). If +dnl exist, then define MNTTAB_TYPE_ instead. If is +dnl defined, then can be a list of fs strings to look for. +dnl If no symbols have been defined, but the filesystem has been found +dnl earlier, then set the mount-table type to "" anyway... +AC_DEFUN(AC_CHECK_MNTTAB_TYPE, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 +else + ac_fs_name=$1 +fi +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_TYPE_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mnttab name for $ac_fs_name filesystem, +ac_cv_mnttab_type_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in $1 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), + [ eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + ]) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + AC_EXPAND_RUN_STRING( + AC_MOUNT_HEADERS( + [ +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + ]), + [ + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + ], [ eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + ]) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi +]) +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of mounting filesystems +AC_DEFUN(AC_CHECK_MOUNT_STYLE, +[ +AC_CACHE_CHECK(style of mounting filesystems, +ac_cv_style_mount, +[ +# select the correct style for mounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_style_mount=svr4 ;; + bsdi3* | bsdi4* ) + ac_cv_style_mount=bsdi3 ;; + freebsd3* ) + ac_cv_style_mount=freebsd3 ;; + aix* ) + ac_cv_style_mount=aix ;; + hpux* ) + ac_cv_style_mount=hpux ;; + irix6* ) + ac_cv_style_mount=irix6 ;; + irix5* ) + ac_cv_style_mount=irix5 ;; + isc3* ) + ac_cv_style_mount=isc3 ;; + linux* ) + ac_cv_style_mount=linux ;; + mach3* ) + ac_cv_style_mount=mach3 ;; + stellix* ) + ac_cv_style_mount=stellix ;; + * ) # no style needed. Use default filesystem calls ala BSD + ac_cv_style_mount=default ;; +esac +]) +# only make a link and include the file name if needed. +if test "$ac_cv_style_mount" = default +then + am_utils_mount_style_file="" +else + am_utils_mount_style_file="mountutil.c" + am_utils_link_files_src=${am_utils_link_files_src}conf/mount/mount_${ac_cv_style_mount}.c" " + am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_mount_style_file}" " +# append mount utilities object to LIBOBJS for automatic compilation + LIBOBJS="$LIBOBJS mountutil.o" +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the mount system call trap needed to mount(2) a filesystem +AC_DEFUN(AC_CHECK_MOUNT_TRAP, +[ +AC_CACHE_CHECK(mount trap system-call style, +ac_cv_mount_trap, +[ +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_mount_trap=svr4 ;; + news4* | riscix* ) + ac_cv_mount_trap=news4 ;; + freebsd3* ) + ac_cv_mount_trap=freebsd3 ;; + linux* ) + ac_cv_mount_trap=linux ;; + irix* ) + ac_cv_mount_trap=irix ;; + aux* ) + ac_cv_mount_trap=aux ;; + hcx* ) + ac_cv_mount_trap=hcx ;; + hpux11* ) + ac_cv_mount_trap=hpux11 ;; + hpux* ) + ac_cv_mount_trap=hpux ;; + rtu6* ) + ac_cv_mount_trap=rtu6 ;; + dgux* ) + ac_cv_mount_trap=dgux ;; + aix* ) + ac_cv_mount_trap=aix3 ;; + mach2* | mach3* ) + ac_cv_mount_trap=mach3 ;; + ultrix* ) + ac_cv_mount_trap=ultrix ;; + isc3* ) + ac_cv_mount_trap=isc3 ;; + stellix* ) + ac_cv_mount_trap=stellix ;; + * ) + ac_cv_mount_trap=default ;; +esac +]) +am_utils_mount_trap=$srcdir"/conf/trap/trap_"$ac_cv_mount_trap".h" +AC_SUBST_FILE(am_utils_mount_trap) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry. +dnl Usage: AC_CHECK_MOUNT_TYPE(, [fssymbol]) +dnl Check if there is an entry for MNTTYPE_ in sys/mntent.h and mntent.h +dnl define MOUNT_TYPE_ to the string name (e.g., "nfs"). If +dnl exist, then define MOUNT_TYPE_ instead. If is +dnl defined, then can be a list of fs strings to look for. +dnl If no symbols have been defined, but the filesystem has been found +dnl earlier, then set the mount-table type to "" anyway... +AC_DEFUN(AC_CHECK_MOUNT_TYPE, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 +else + ac_fs_name=$1 +fi +# prepare upper-case name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +############################################################################## +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mount(2) type/name for $ac_fs_name filesystem, +ac_cv_mount_type_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in $1 +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi +]) +# end of cache check for ac_cv_mount_type_$ac_fs_name +############################################################################## +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct printf-style type for the mount type in the mount() +dnl system call. +dnl If you change this one, you must also fix the check_mtype_type.m4. +AC_DEFUN(AC_CHECK_MTYPE_PRINTF_TYPE, +[ +AC_CACHE_CHECK(printf string to print type field of mount() call, +ac_cv_mtype_printf_type, +[ +# select the correct printf type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_printf_type="%d" ;; + irix3 | isc3 ) + ac_cv_mtype_printf_type="0x%x" ;; + * ) + ac_cv_mtype_printf_type="%s" ;; +esac +]) +AC_DEFINE_UNQUOTED(MTYPE_PRINTF_TYPE, "$ac_cv_mtype_printf_type") +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the mount type in the mount() system call +dnl If you change this one, you must also fix the check_mtype_printf_type.m4. +AC_DEFUN(AC_CHECK_MTYPE_TYPE, +[ +AC_CACHE_CHECK(type of mount type field in mount() call, +ac_cv_mtype_type, +[ +# select the correct type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_type=int ;; + * ) + ac_cv_mtype_type="char *" ;; +esac +]) +AC_DEFINE_UNQUOTED(MTYPE_TYPE, $ac_cv_mtype_type) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct network transport type to use +AC_DEFUN(AC_CHECK_NETWORK_TRANSPORT_TYPE, +[ +AC_CACHE_CHECK(network transport type, +ac_cv_transport_type, +[ +# select the correct type +case "${host_os_name}" in + solaris2* | sunos5* | hpux11* ) + ac_cv_transport_type=tli ;; + * ) + ac_cv_transport_type=sockets ;; +esac +]) +am_utils_link_files_src=${am_utils_link_files_src}conf/transp/transp_${ac_cv_transport_type}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/transputil.c" " +# append transport utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS transputil.o" +if test $ac_cv_transport_type = tli +then + AC_DEFINE(HAVE_TRANSPORT_TYPE_TLI) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct way to dereference the address part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_FH_DREF, +[ +AC_CACHE_CHECK(nfs file-handle address dereferencing style, +ac_cv_nfs_fh_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* |solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_fh_dref_style=svr4 ;; + sunos4* ) + ac_cv_nfs_fh_dref_style=sunos4 ;; + sunos3* ) + ac_cv_nfs_fh_dref_style=sunos3 ;; +changequote(<<, >>)dnl + freebsd2.[2-9]* | freebsd3* | bsdi[3-4]* | netbsd* | openbsd* ) +changequote([, ])dnl + # bsdi3, freebsd-2.2, netbsd, etc. + # changed the type of the + # filehandle in nfs_args from nfsv2fh_t to u_char. + ac_cv_nfs_fh_dref_style=freebsd22 ;; + bsd44* | bsdi2* | freebsd* ) + ac_cv_nfs_fh_dref_style=bsd44 ;; + hpux* ) + ac_cv_nfs_fh_dref_style=hpux ;; + irix* ) + ac_cv_nfs_fh_dref_style=irix ;; + linux* ) + ac_cv_nfs_fh_dref_style=linux ;; + aix4.2* ) + ac_cv_nfs_fh_dref_style=aix42 ;; + aix* ) + ac_cv_nfs_fh_dref_style=aix3 ;; + isc3 ) + ac_cv_nfs_fh_dref_style=isc3 ;; + osf4* ) + ac_cv_nfs_fh_dref_style=osf4 ;; + osf* ) + ac_cv_nfs_fh_dref_style=osf2 ;; + nextstep* ) + ac_cv_nfs_fh_dref_style=nextstep ;; + * ) + ac_cv_nfs_fh_dref_style=default ;; +esac +]) +am_utils_nfs_fh_dref=$srcdir"/conf/fh_dref/fh_dref_"$ac_cv_nfs_fh_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_fh_dref) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct way to dereference the hostname part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_HN_DREF, +[ +AC_CACHE_CHECK(nfs hostname dereferencing style, +ac_cv_nfs_hn_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os_name}" in + linux* ) + ac_cv_nfs_hn_dref_style=linux ;; + isc3 ) + ac_cv_nfs_hn_dref_style=isc3 ;; + * ) + ac_cv_nfs_hn_dref_style=default ;; +esac +]) +am_utils_nfs_hn_dref=$srcdir"/conf/hn_dref/hn_dref_"$ac_cv_nfs_hn_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_hn_dref) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if system has NFS protocol headers +AC_DEFUN(AC_CHECK_NFS_PROT_HEADERS, +[ +AC_CACHE_CHECK(location of NFS protocol header files, +ac_cv_nfs_prot_headers, +[ +# select the correct style for mounting filesystems +case "${host_os}" in + irix5* ) + ac_cv_nfs_prot_headers=irix5 ;; + irix6* ) + ac_cv_nfs_prot_headers=irix6 ;; + sunos3* ) + ac_cv_nfs_prot_headers=sunos3 ;; + sunos4* ) + ac_cv_nfs_prot_headers=sunos4 ;; + sunos5.3* | solaris2.3* ) + ac_cv_nfs_prot_headers=sunos5_3 ;; + sunos5.4* | solaris2.4* ) + ac_cv_nfs_prot_headers=sunos5_4 ;; + sunos5.5* | solaris2.5* ) + ac_cv_nfs_prot_headers=sunos5_5 ;; + sunos5.6 | solaris* ) + ac_cv_nfs_prot_headers=sunos5_6 ;; + bsdi2* ) + ac_cv_nfs_prot_headers=bsdi2 ;; + bsdi3* | bsdi4* ) + ac_cv_nfs_prot_headers=bsdi3 ;; + freebsd2* ) + ac_cv_nfs_prot_headers=freebsd2 ;; + freebsd3* ) + ac_cv_nfs_prot_headers=freebsd3 ;; + netbsd1.3* ) + ac_cv_nfs_prot_headers=netbsd1_3 ;; + netbsd* ) + ac_cv_nfs_prot_headers=netbsd ;; + openbsd* ) + ac_cv_nfs_prot_headers=openbsd ;; + hpux11* ) + ac_cv_nfs_prot_headers=hpux11 ;; + hpux* ) + ac_cv_nfs_prot_headers=hpux ;; + aix4.2* ) + ac_cv_nfs_prot_headers=aix4_2 ;; + aix4* ) + ac_cv_nfs_prot_headers=aix4 ;; + aix* ) + ac_cv_nfs_prot_headers=aix3 ;; + osf4* ) + ac_cv_nfs_prot_headers=osf4 ;; + osf* ) + ac_cv_nfs_prot_headers=osf2 ;; + svr4* ) + ac_cv_nfs_prot_headers=svr4 ;; + sysv4* ) # this is for NCR2 machines + ac_cv_nfs_prot_headers=ncr2 ;; + linux* ) + ac_cv_nfs_prot_headers=linux ;; + nextstep* ) + ac_cv_nfs_prot_headers=nextstep ;; + ultrix* ) + ac_cv_nfs_prot_headers=ultrix ;; + * ) + ac_cv_nfs_prot_headers=default ;; +esac +]) + +# make sure correct header is linked in top build directory +am_utils_nfs_prot_file="amu_nfs_prot.h" +am_utils_link_files_src=${am_utils_link_files_src}conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h" " +am_utils_link_files_dst=${am_utils_link_files_dst}${am_utils_nfs_prot_file}" " + +# define the name of the header to be included for other M4 macros +AC_DEFINE_UNQUOTED(AMU_NFS_PROTOCOL_HEADER, "${srcdir}/conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h") + +# set headers in a macro for Makefile.am files to use (for dependencies) +AMU_NFS_PROT_HEADERS="../"$am_utils_nfs_prot_file +AC_SUBST(AMU_NFS_PROT_HEADERS) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct way to dereference the address part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_SA_DREF, +[ +AC_CACHE_CHECK(nfs address dereferencing style, +ac_cv_nfs_sa_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* | solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_sa_dref_style=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_nfs_sa_dref_style=bsd44 ;; + 386bsd* | bsdi1* ) + ac_cv_nfs_sa_dref_style=386bsd ;; + linux* ) + ac_cv_nfs_sa_dref_style=linux ;; + aix* ) + ac_cv_nfs_sa_dref_style=aix3 ;; + aoi* ) + ac_cv_nfs_sa_dref_style=aoi ;; + isc3 ) + ac_cv_nfs_sa_dref_style=isc3 ;; + * ) + ac_cv_nfs_sa_dref_style=default ;; +esac +]) +am_utils_nfs_sa_dref=$srcdir"/conf/sa_dref/sa_dref_"$ac_cv_nfs_sa_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_sa_dref) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if need to turn on, off, or leave alone the NFS "noconn" option +AC_DEFUN(AC_CHECK_NFS_SOCKET_CONNECTION, +[ +AC_CACHE_CHECK(if to turn on/off noconn option, +ac_cv_nfs_socket_connection, +[ +# set default to no-change +ac_cv_nfs_socket_connection=none +# select the correct style +case "${host_os}" in +changequote(<<, >>)dnl + openbsd2.[2-9]* ) +changequote([, ])dnl + ac_cv_nfs_socket_connection=conn ;; + openbsd* ) + ac_cv_nfs_socket_connection=noconn ;; + freebsd3* ) + ac_cv_nfs_socket_connection=conn ;; +esac +]) +# set correct value +case "$ac_cv_nfs_socket_connection" in + noconn ) AC_DEFINE(USE_UNCONNECTED_NFS_SOCKETS) ;; + conn ) AC_DEFINE(USE_CONNECTED_NFS_SOCKETS) ;; +esac +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl set OS libraries specific to an OS: +dnl libnsl/libsocket are needed only on solaris and some svr4 systems. +dnl Using a typical macro has proven unsuccesful, because on some other +dnl systems such as irix, including libnsl and or libsocket actually breaks +dnl lots of code. So I am forced to use a special purpose macro that sets +dnl the libraries based on the OS. Sigh. -Erez. +AC_DEFUN(AC_CHECK_OS_LIBS, +[ +AC_CACHE_CHECK(for additional OS libraries, +ac_cv_os_libs, +[ +# select the correct set of libraries to link with +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_os_libs="-lsocket -lnsl" ;; + * ) + ac_cv_os_libs=none ;; +esac +]) +# set list of libraries to link with +if test "$ac_cv_os_libs" != none +then + LIBS="$ac_cv_os_libs $LIBS" +fi + +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a system needs to restart its signal handlers +AC_DEFUN(AC_CHECK_RESTARTABLE_SIGNAL_HANDLER, +[ +AC_CACHE_CHECK(if system needs to restart signal handlers, +ac_cv_restartable_signal_handler, +[ +# select the correct systems to restart signal handlers +case "${host_os_name}" in + svr3* | svr4* | sysv4* | solaris2* | sunos5* | aoi* | irix* ) + ac_cv_restartable_signal_handler=yes ;; + * ) + ac_cv_restartable_signal_handler=no ;; +esac +]) +# define REINSTALL_SIGNAL_HANDLER if need to +if test "$ac_cv_restartable_signal_handler" = yes +then + AC_DEFINE(REINSTALL_SIGNAL_HANDLER) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of unmounting filesystems +AC_DEFUN(AC_CHECK_UMOUNT_STYLE, +[ +AC_CACHE_CHECK(style of unmounting filesystems, +ac_cv_style_umount, +[ +# select the correct style for unmounting filesystems +case "${host_os_name}" in + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_umount=bsd44 ;; + osf* ) + ac_cv_style_umount=osf ;; + * ) + ac_cv_style_umount=default ;; +esac +]) +am_utils_umount_style_file="umount_fs.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/umount/umount_${ac_cv_style_umount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_umount_style_file}" " +# append un-mount utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS umount_fs.o" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the unmount system call arguments needed for +AC_DEFUN(AC_CHECK_UNMOUNT_ARGS, +[ +AC_CACHE_CHECK(unmount system-call arguments, +ac_cv_unmount_args, +[ +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + aix* ) + ac_cv_unmount_args="mnt->mnt_passno, 0" ;; + ultrix* ) + ac_cv_unmount_args="mnt->mnt_passno" ;; + * ) + ac_cv_unmount_args="mnt->mnt_dir" ;; +esac +]) +am_utils_unmount_args=$ac_cv_unmount_args +AC_SUBST(am_utils_unmount_args) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for the correct system call to unmount a filesystem. +AC_DEFUN(AC_CHECK_UNMOUNT_CALL, +[ +dnl make sure this one is called before [AC_CHECK_UNMOUNT_ARGS] +AC_BEFORE([$0], [AC_CHECK_UNMOUNT_ARGS]) +AC_CACHE_CHECK(the system call to unmount a filesystem, +ac_cv_unmount_call, +[ +# check for various unmount a filesystem calls +if test "$ac_cv_func_uvmount" = yes ; then + ac_cv_unmount_call=uvmount +elif test "$ac_cv_func_unmount" = yes ; then + ac_cv_unmount_call=unmount +elif test "$ac_cv_func_umount" = yes ; then + ac_cv_unmount_call=umount +else + ac_cv_unmount_call=no +fi +]) +if test "$ac_cv_unmount_call" != no +then + am_utils_unmount_call=$ac_cv_unmount_call + AC_SUBST(am_utils_unmount_call) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable hex number. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_HEX, +[ +# we are looking for a regexp of a string +AC_EGREP_CPP(0x, +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("0x%x", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable integer number. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_INT, +[ +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +AC_EGREP_CPP( +changequote(<<, >>)dnl +[1-9][0-9]*, +changequote([, ])dnl +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("%d", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable string. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_STRING, +[ +# we are looking for a regexp of a string +AC_EGREP_CPP(\".*\", +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("%s", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Run a program and print its output as a string +dnl Takes: (header, code-to-run, [action-if-found, [action-if-not-found]]) +AC_DEFUN(AC_EXPAND_RUN_STRING, +[ +value="notfound" +AC_TRY_RUN( +[ +$1 +main(argc) +int argc; +{ +$2 +exit(0); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl find if "extern char *optarg" exists in headers +AC_DEFUN(AC_EXTERN_OPTARG, +[ +AC_CACHE_CHECK(if external definition for optarg[] exists, +ac_cv_extern_optarg, +[ +# try to compile program that uses the variable +AC_TRY_COMPILE( +[ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ +], +[ +char *cp = optarg; +], ac_cv_extern_optarg=yes, ac_cv_extern_optarg=no) +]) +if test "$ac_cv_extern_optarg" = yes +then + AC_DEFINE(HAVE_EXTERN_OPTARG) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl find if "extern char *sys_errlist[]" exist in headers +AC_DEFUN(AC_EXTERN_SYS_ERRLIST, +[ +AC_CACHE_CHECK(if external definition for sys_errlist[] exists, +ac_cv_extern_sys_errlist, +[ +# try to locate pattern in header files +changequote(<<, >>)dnl +pattern="(extern)?.*char.*sys_errlist.*\[\]" +changequote([, ])dnl +AC_EGREP_CPP(${pattern}, +[ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ +], ac_cv_extern_sys_errlist=yes, ac_cv_extern_sys_errlist=no) +]) +# check if need to define variable +if test "$ac_cv_extern_sys_errlist" = yes +then + AC_DEFINE(HAVE_EXTERN_SYS_ERRLIST) +fi +]) +dnl ====================================================================== + + +fdnl ###################################################################### +dnl find if mntent_t field mnt_time exists and is of type "char *" +AC_DEFUN(AC_FIELD_MNTENT_T_MNT_TIME_STRING, +[ +AC_CACHE_CHECK(if mntent_t field mnt_time exist as type string, +ac_cv_field_mntent_t_mnt_time_string, +[ +# try to compile a program +AC_TRY_COMPILE( +AC_MOUNT_HEADERS( +[ +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# else /* not HAVE_STRUCT_MNTTAB */ +# error XXX: could not find definition for struct mntent or struct mnttab! +# endif /* not HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ +]), +[ +mntent_t mtt; +char *cp = "test"; +int i; +mtt.mnt_time = cp; +i = mtt.mnt_time[0]; +], ac_cv_field_mntent_t_mnt_time_string=yes, ac_cv_field_mntent_t_mnt_time_string=no) +]) +if test "$ac_cv_field_mntent_t_mnt_time_string" = yes +then + AC_DEFINE(HAVE_FIELD_MNTENT_T_MNT_TIME_STRING) +fi +]) +dnl ====================================================================== + + +dnl my version is similar to the one from Autoconf 2.12, but I also +dnl define HAVE_BAD_MEMCMP so that I can smarter things to avoid +dnl linkage conflicts with bad memcmp versions that are in libc. +AC_DEFUN(AC_FUNC_BAD_MEMCMP, +[AC_CACHE_CHECK(for 8-bit clean memcmp, ac_cv_func_memcmp_clean, +[AC_TRY_RUN([ +main() +{ + char c0 = 0x40, c1 = 0x80, c2 = 0x81; + exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1); +} +], ac_cv_func_memcmp_clean=yes, ac_cv_func_memcmp_clean=no, +ac_cv_func_memcmp_clean=no)]) +if test $ac_cv_func_memcmp_clean = no +then + LIBOBJS="$LIBOBJS memcmp.o" + AC_DEFINE(HAVE_BAD_MEMCMP) +fi +dnl AC_SUBST(LIBOBJS)dnl +]) + + +dnl Check for a yp_all() function that does not leak a file descriptor +dnl to the ypserv process. +AC_DEFUN(AC_FUNC_BAD_YP_ALL, +[ +AC_CACHE_CHECK(for a file-descriptor leakage clean yp_all, +ac_cv_func_yp_all_clean, +[ +# clean by default +ac_cv_func_yp_all_clean=yes +# select the correct type +case "${host_os_name}" in + irix* ) + ac_cv_func_yp_all_clean=no ;; + linux* ) + # RedHat 5.1 systems with glibc glibc-2.0.7-19 or below + # leak a UDP socket from yp_all() + case "`cat /etc/redhat-release /dev/null 2>/dev/null`" in + *5.1* ) + ac_cv_func_yp_all_clean=no ;; + esac +esac +]) +if test $ac_cv_func_yp_all_clean = no +then + AC_DEFINE(HAVE_BAD_YP_ALL) +fi +]) + + +dnl ###################################################################### +dnl AC_HOST_MACROS: define HOST_CPU, HOST_VENDOR, and HOST_OS +AC_DEFUN(AC_HOST_MACROS, +[ +# these are defined already by the macro 'CANONICAL_HOST' + AC_MSG_CHECKING("host cpu") + AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu") + AC_MSG_RESULT($host_cpu) + + AC_MSG_CHECKING("vendor") + AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor") + AC_MSG_RESULT($host_vendor) + + AC_MSG_CHECKING("host full OS name and version") + # normalize some host OS names + case ${host_os} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os=linux ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS, "$host_os") + AC_MSG_RESULT($host_os) + +# break host_os into host_os_name and host_os_version + AC_MSG_CHECKING("host OS name") + host_os_name=`echo $host_os | sed 's/\..*//g'` + # normalize some OS names + case ${host_os_name} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os_name=linux ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS_NAME, "$host_os_name") + AC_MSG_RESULT($host_os_name) + +# parse out the OS version of the host + AC_MSG_CHECKING("host OS version") +changequote(<<, >>)dnl + host_os_version=`echo $host_os | sed 's/^[^0-9]*//g'` +changequote([, ])dnl + if test -z "$host_os_version" + then + host_os_version=`(uname -r) 2>/dev/null` || host_os_version=unknown + fi + case ${host_os_version} in + # fixes for some OS versions (solaris used to be here) + * ) # do nothing for now + ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS_VERSION, "$host_os_version") + AC_MSG_RESULT($host_os_version) + +# figure out host architecture (different than CPU) + AC_MSG_CHECKING("host OS architecture") + host_arch=`(uname -m) 2>/dev/null` || host_arch=unknown + # normalize some names + case ${host_arch} in + sun4* ) host_arch=sun4 ;; + sun3x ) host_arch=sun3 ;; + sun ) host_arch=`(arch) 2>/dev/null` || host_arch=unknown ;; + i?86 ) host_arch=i386 ;; # all x86 should show up as i386 + esac + AC_DEFINE_UNQUOTED(HOST_ARCH, "$host_arch") + AC_MSG_RESULT($host_arch) + +# figure out host name + AC_MSG_CHECKING("host name") + host_name=`(hostname || uname -n) 2>/dev/null` || host_name=unknown + AC_DEFINE_UNQUOTED(HOST_NAME, "$host_name") + AC_MSG_RESULT($host_name) + +# figure out user name + AC_MSG_CHECKING("user name") + if test -n "$USER" + then + user_name="$USER" + else + if test -n "$LOGNAME" + then + user_name="$LOGNAME" + else + user_name=`(whoami) 2>/dev/null` || user_name=unknown + fi + fi + AC_DEFINE_UNQUOTED(USER_NAME, "$user_name") + AC_MSG_RESULT($user_name) + +# figure out configuration date + AC_MSG_CHECKING("configuration date") + config_date=`(date) 2>/dev/null` || config_date=unknown_date + AC_DEFINE_UNQUOTED(CONFIG_DATE, "$config_date") + AC_MSG_RESULT($config_date) + +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a local configuration file exists +AC_DEFUN(AC_LOCALCONFIG, +[AC_MSG_CHECKING(a local configuration file) +if test -f localconfig.h +then + AC_DEFINE(HAVE_LOCALCONFIG_H) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl an M4 macro to include a list of common headers being used everywhere +define(AC_MOUNT_HEADERS, +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + +$1 +] +) +dnl ====================================================================== + + +dnl ###################################################################### +dnl AC_MSG: a simple printout message +define(AC_MSG, +[echo "*** $1:" 1>&AC_FD_MSG]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Package name +AC_DEFUN(AC_NAME_PACKAGE, +[AC_MSG_CHECKING(package name) +AC_DEFINE_UNQUOTED(PACKAGE, "$1") +AC_MSG_RESULT(\"$1\") +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Version of package +AC_DEFUN(AC_NAME_VERSION, +[AC_MSG_CHECKING(version of package) +AC_DEFINE_UNQUOTED(VERSION, "$1") +AC_MSG_RESULT(\"$1\") +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Do you want to turn on "amq -M" code (security hole for IP sproofing!) +AC_DEFUN(AC_OPT_AMQ_MOUNT, +[AC_MSG_CHECKING(for amq -M remote mount code) +AC_ARG_ENABLE(amq-mount, +[ --enable-amq-mount enable amq -M remote mount code], +[if test "$enableval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_AMQ_MOUNT) +else + AC_MSG_RESULT(no) +fi], [ + # default is to not include this code because it is insecure + AC_MSG_RESULT(no) +])]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Which options to add to CFLAGS for compilation? +dnl NOTE: this is only for final compiltions, not for configure tests) +AC_DEFUN(AC_OPT_AMU_CFLAGS, +[AC_MSG_CHECKING(for additional C option compilation flags) +AC_ARG_ENABLE(am-cflags, +[ --enable-am-cflags[=ARG] + compile package with ARG additional C flags], +[if test "$enableval" = ""; then + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) +else + # check if user supplied configure option without argument + if test "$enableval" = "yes"; then + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) + else + # user supplied a cflags option to configure + AMU_CFLAGS="$enableval" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT($enableval) + fi +fi], [ + # default is to have no additional C flags + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Initial settings for CPPFLAGS (-I options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_CPPFLAGS, +[AC_MSG_CHECKING(for configuration/compilation (-I) preprocessor flags) +AC_ARG_ENABLE(cppflags, +[ --enable-cppflags[=ARG] configure/compile with ARG (-I) preprocessor flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + CPPFLAGS="$CPPFLAGS $enableval" + export CPPFLAGS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Debugging: "yes" means general, "mem" means general and memory debugging, +dnl and "no" means none. +AC_DEFUN(AC_OPT_DEBUG, +[AC_MSG_CHECKING(for debugging options) +AC_ARG_ENABLE(debug, +[ --enable-debug[=ARG] enable debugging (yes/mem/no)], +[ +if test "$enableval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(DEBUG) +elif test "$enableval" = mem; then + AC_MSG_RESULT(mem) + AC_DEFINE(DEBUG) + AC_DEFINE(DEBUG_MEM) + AC_CHECK_LIB(mapmalloc, malloc_verify) + AC_CHECK_LIB(malloc, mallinfo) +else + AC_MSG_RESULT(no) +fi +], +[ + # default is no debugging + AC_MSG_RESULT(no) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Initial settings for LDFLAGS (-L options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_LDFLAGS, +[AC_MSG_CHECKING(for configuration/compilation (-L) library flags) +AC_ARG_ENABLE(ldflags, +[ --enable-ldflags[=ARG] configure/compile with ARG (-L) library flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + LDFLAGS="$LDFLAGS $enableval" + export LDFLAGS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Initial settings for LIBS (-l options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_LIBS, +[AC_MSG_CHECKING(for configuration/compilation (-l) library flags) +AC_ARG_ENABLE(libs, +[ --enable-libs[=ARG] configure/compile with ARG (-l) library flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + LIBS="$LIBS $enableval" + export LIBS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Specify additional compile options based on the OS and the compiler +AC_DEFUN(AC_OS_CFLAGS, +[ +AC_CACHE_CHECK(additional compiler flags, +ac_cv_os_cflags, +[ +case "${host_os}" in + irix6* ) + case "${CC}" in + cc ) + # do not use 64-bit compiler + ac_cv_os_cflags="-32 -Wl,-woff,84" + ;; + esac + ;; + osf4* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN" + ;; + esac + ;; + osf* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN -D_NO_PROTO" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN -D_NO_PROTO" + ;; + esac + ;; + solaris2.6* | sunos5.6* | solaris2.7* | sunos5.7* ) + # turn on 64-bit file offset interface + case "${CC}" in + * ) + ac_cv_os_cflags="-D_LARGEFILE64_SOURCE" + ;; + esac + ;; + OFF-sunos4* ) + # make sure passing whole structures is handled in gcc + case "${CC}" in + gcc ) + ac_cv_os_cflags="-fpcc-struct-return" + ;; + esac + ;; + * ) ac_cv_os_cflags="" ;; +esac +]) +CFLAGS="$CFLAGS $ac_cv_os_cflags" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Specify additional cpp options based on the OS and the compiler +AC_DEFUN(AC_OS_CPPFLAGS, +[ +AC_CACHE_CHECK(additional preprocessor flags, +ac_cv_os_cppflags, +[ +case "${host_os}" in +# off for now, posix may be a broken thing for nextstep3... +# nextstep* ) +# ac_cv_os_cppflags="-D_POSIX_SOURCE" +# ;; + * ) ac_cv_os_cppflags="" ;; +esac +]) +CPPFLAGS="$CPPFLAGS $ac_cv_os_cppflags" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Specify additional linker options based on the OS and the compiler +AC_DEFUN(AC_OS_LDFLAGS, +[ +AC_CACHE_CHECK(additional linker flags, +ac_cv_os_ldflags, +[ +case "${host_os}" in + solaris2.7* | sunos5.7* ) + # find LDAP: off until Sun includes ldap headers. + case "${CC}" in + * ) + #ac_cv_os_ldflags="-L/usr/lib/fn" + ;; + esac + ;; + * ) ac_cv_os_ldflags="" ;; +esac +]) +LDFLAGS="$LDFLAGS $ac_cv_os_ldflags" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl AC_SAVE_STATE: save confdefs.h onto dbgcf.h and write $ac_cv_* cache +dnl variables that are known so far. +define(AC_SAVE_STATE, +AC_MSG(SAVING CONFIGURE STATE) +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +[AC_CACHE_SAVE] +) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the name of the nfs filehandle field in nfs_args_t. +AC_DEFUN(AC_STRUCT_FIELD_NFS_FH, +[ +dnl make sure this is called before macros which depend on it +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_CACHE_CHECK(for the name of the nfs filehandle field in nfs_args_t, +ac_cv_struct_field_nfs_fh, +[ +# set to a default value +ac_cv_struct_field_nfs_fh=notfound +# look for name "fh" (most systems) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_args_t nat; + char *cp = (char *) &(nat.fh); +], ac_cv_struct_field_nfs_fh=fh, ac_cv_struct_field_nfs_fh=notfound) +fi +# look for name "root" (for example Linux) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_args_t nat; + char *cp = (char *) &(nat.root); +], ac_cv_struct_field_nfs_fh=root, ac_cv_struct_field_nfs_fh=notfound) +fi +]) +if test "$ac_cv_struct_field_nfs_fh" != notfound +then + AC_DEFINE_UNQUOTED(NFS_FH_FIELD, $ac_cv_struct_field_nfs_fh) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct mntent exists anywhere in mount.h or mntent.h headers +AC_DEFUN(AC_STRUCT_MNTENT, +[ +AC_CACHE_CHECK(for struct mntent, +ac_cv_have_struct_mntent, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE( +AC_MOUNT_HEADERS +, +[ +struct mntent mt; +], ac_cv_have_struct_mntent=yes, ac_cv_have_struct_mntent=no) +]) +if test "$ac_cv_have_struct_mntent" = yes +then + AC_DEFINE(HAVE_STRUCT_MNTENT) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct mnttab exists anywhere in mount.h or mnttab.h headers +AC_DEFUN(AC_STRUCT_MNTTAB, +[ +AC_CACHE_CHECK(for struct mnttab, +ac_cv_have_struct_mnttab, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE( +AC_MOUNT_HEADERS +, +[ +struct mnttab mt; +], ac_cv_have_struct_mnttab=yes, ac_cv_have_struct_mnttab=no) +]) +if test "$ac_cv_have_struct_mnttab" = yes +then + AC_DEFINE(HAVE_STRUCT_MNTTAB) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct nfs_args exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_ARGS, +[ +dnl make sure this is called before [AC_TYPE_NFS_FH] +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_args, +ac_cv_have_struct_nfs_args, +[ +# try to compile a program which may have a definition for the structure +# assume not found +ac_cv_have_struct_nfs_args=notfound + +# look for "struct irix5_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct irix5_nfs_args na; +], ac_cv_have_struct_nfs_args="struct irix5_nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +# look for "struct aix42_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct aix42_nfs_args na; +], ac_cv_have_struct_nfs_args="struct aix42_nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +# look for "struct nfs_args" +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_args na; +], ac_cv_have_struct_nfs_args="struct nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +]) + +if test "$ac_cv_have_struct_nfs_args" != notfound +then + AC_DEFINE(HAVE_STRUCT_NFS_ARGS) + AC_DEFINE_UNQUOTED(nfs_args_t, $ac_cv_have_struct_nfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the structure of an nfs filehandle. +dnl if found, defined am_nfs_fh to it, else leave it undefined. +dnl THE ORDER OF LOOKUPS IN THIS FILE IS VERY IMPORTANT!!! +AC_DEFUN(AC_STRUCT_NFS_FH, +[ +AC_CACHE_CHECK(for type/structure of NFS V2 filehandle, +ac_cv_struct_nfs_fh, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as struct nfs_fh, fhandle_t, nfsv2fh_t, etc. +# set to a default value +ac_cv_struct_nfs_fh=notfound + +# look for "nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_fh nh; +], ac_cv_struct_nfs_fh="nfs_fh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "struct nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_fh nh; +], ac_cv_struct_nfs_fh="struct nfs_fh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "struct nfssvcfh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfssvcfh nh; +], ac_cv_struct_nfs_fh="struct nfssvcfh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "nfsv2fh_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfsv2fh_t nh; +], ac_cv_struct_nfs_fh="nfsv2fh_t", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "fhandle_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ fhandle_t nh; +], ac_cv_struct_nfs_fh="fhandle_t", ac_cv_struct_nfs_fh=notfound) +fi + +]) + +if test "$ac_cv_struct_nfs_fh" != notfound +then + AC_DEFINE_UNQUOTED(am_nfs_fh, $ac_cv_struct_nfs_fh) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the structure of an NFS V3 filehandle. +dnl if found, defined am_nfs_fh3 to it, else leave it undefined. +AC_DEFUN(AC_STRUCT_NFS_FH3, +[ +AC_CACHE_CHECK(for type/structure of NFS V3 filehandle, +ac_cv_struct_nfs_fh3, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as struct nfs_fh3, fhandle3_t, nfsv3fh_t, etc. +# set to a default value +ac_cv_struct_nfs_fh3=notfound + +# look for "nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_fh3 nh; +], ac_cv_struct_nfs_fh3="nfs_fh3", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "struct nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_fh3 nh; +], ac_cv_struct_nfs_fh3="struct nfs_fh3", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "nfsv3fh_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfsv3fh_t nh; +], ac_cv_struct_nfs_fh3="nfsv3fh_t", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "fhandle3_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ fhandle3_t nh; +], ac_cv_struct_nfs_fh3="fhandle3_t", ac_cv_struct_nfs_fh3=notfound) +fi + +]) + +if test "$ac_cv_struct_nfs_fh3" != notfound +then + AC_DEFINE_UNQUOTED(am_nfs_fh3, $ac_cv_struct_nfs_fh3) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct nfs_gfs_mount exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_GFS_MOUNT, +[ +dnl make sure this is called before [AC_TYPE_NFS_FH] +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_gfs_mount, +ac_cv_have_struct_nfs_gfs_mount, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE_NFS( +[ struct nfs_gfs_mount ngm; +], ac_cv_have_struct_nfs_gfs_mount=yes, ac_cv_have_struct_nfs_gfs_mount=no) +]) +if test "$ac_cv_have_struct_nfs_gfs_mount" = yes +then + AC_DEFINE(HAVE_STRUCT_NFS_GFS_MOUNT) + AC_DEFINE(nfs_args_t, struct nfs_gfs_mount) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct nfs_mount_data exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_MOUNT_DATA, +[ +dnl make sure this is called before macros which depend on it +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_mount_data, +ac_cv_have_struct_nfs_mount_data, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE_NFS( +[ struct nfs_mount_data nmd; +], ac_cv_have_struct_nfs_mount_data=yes, ac_cv_have_struct_nfs_mount_data=no) +]) +if test "$ac_cv_have_struct_nfs_mount_data" = yes +then + AC_DEFINE(HAVE_STRUCT_NFS_MOUNT_DATA) + AC_DEFINE(nfs_args_t, struct nfs_mount_data) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Compile a program with FS headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_ANYFS, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +], [$1], [$2], [$3]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Compile a program with NFS headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_NFS, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ +], [$1], [$2], [$3]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Compile a program with RPC headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_RPC, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ +], [$1], [$2], [$3]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the 5th argument to authunix_create() +AC_DEFUN(AC_TYPE_AUTH_CREATE_GIDLIST, +[ +AC_CACHE_CHECK(argument type of 5rd argument to authunix_create(), +ac_cv_auth_create_gidlist, +[ +# select the correct type +case "${host_os_name}" in + sunos4* | bsdi2* | sysv4* | hpux10.10 | ultrix* ) + ac_cv_auth_create_gidlist="int" ;; + * ) + ac_cv_auth_create_gidlist="gid_t" ;; +esac +]) +AC_DEFINE_UNQUOTED(AUTH_CREATE_GIDLIST_TYPE, $ac_cv_auth_create_gidlist) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for AUTOFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_AUTOFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of autofs mount(2) arguments, +ac_cv_type_autofs_args, +[ +# set to a default value +ac_cv_type_autofs_args=notfound + +# look for "struct auto_args" +if test "$ac_cv_type_autofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct auto_args a; +], ac_cv_type_autofs_args="struct auto_args", ac_cv_type_autofs_args=notfound) +fi + +# look for "struct autofs_args" +if test "$ac_cv_type_autofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct autofs_args a; +], ac_cv_type_autofs_args="struct autofs_args", ac_cv_type_autofs_args=notfound) +fi + +]) +if test "$ac_cv_type_autofs_args" != notfound +then + AC_DEFINE_UNQUOTED(autofs_args_t, $ac_cv_type_autofs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for CACHEFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_CACHEFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of cachefs mount(2) arguments, +ac_cv_type_cachefs_args, +[ +# set to a default value +ac_cv_type_cachefs_args=notfound +# look for "struct cachefs_mountargs" +if test "$ac_cv_type_cachefs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct cachefs_mountargs a; +], ac_cv_type_cachefs_args="struct cachefs_mountargs", ac_cv_type_cachefs_args=notfound) +fi +]) +if test "$ac_cv_type_cachefs_args" != notfound +then + AC_DEFINE_UNQUOTED(cachefs_args_t, $ac_cv_type_cachefs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for CDFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_CDFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of cdfs mount(2) arguments, +ac_cv_type_cdfs_args, +[ +# set to a default value +ac_cv_type_cdfs_args=notfound + +# look for "struct iso_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso_args a; +], ac_cv_type_cdfs_args="struct iso_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct iso9660_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso9660_args a; +], ac_cv_type_cdfs_args="struct iso9660_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct cdfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct cdfs_args a; +], ac_cv_type_cdfs_args="struct cdfs_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct hsfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct hsfs_args a; +], ac_cv_type_cdfs_args="struct hsfs_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct iso_specific" (ultrix) +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso_specific a; +], ac_cv_type_cdfs_args="struct iso_specific", ac_cv_type_cdfs_args=notfound) +fi + +]) +if test "$ac_cv_type_cdfs_args" != notfound +then + AC_DEFINE_UNQUOTED(cdfs_args_t, $ac_cv_type_cdfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for EFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_EFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of efs mount(2) arguments, +ac_cv_type_efs_args, +[ +# set to a default value +ac_cv_type_efs_args=notfound + +# look for "struct efs_args" +if test "$ac_cv_type_efs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct efs_args a; +], ac_cv_type_efs_args="struct efs_args", ac_cv_type_efs_args=notfound) +fi + +]) +if test "$ac_cv_type_efs_args" != notfound +then + AC_DEFINE_UNQUOTED(efs_args_t, $ac_cv_type_efs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for LOFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_LOFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of lofs mount(2) arguments, +ac_cv_type_lofs_args, +[ +# set to a default value +ac_cv_type_lofs_args=notfound +# look for "struct lofs_args" +if test "$ac_cv_type_lofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct lofs_args a; +], ac_cv_type_lofs_args="struct lofs_args", ac_cv_type_lofs_args=notfound) +fi +# look for "struct lo_args" +if test "$ac_cv_type_lofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct lo_args a; +], ac_cv_type_lofs_args="struct lo_args", ac_cv_type_lofs_args=notfound) +fi +]) +if test "$ac_cv_type_lofs_args" != notfound +then + AC_DEFINE_UNQUOTED(lofs_args_t, $ac_cv_type_lofs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for MFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_MFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of mfs mount(2) arguments, +ac_cv_type_mfs_args, +[ +# set to a default value +ac_cv_type_mfs_args=notfound +# look for "struct mfs_args" +if test "$ac_cv_type_mfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct mfs_args a; +], ac_cv_type_mfs_args="struct mfs_args", ac_cv_type_mfs_args=notfound) +fi +]) +if test "$ac_cv_type_mfs_args" != notfound +then + AC_DEFINE_UNQUOTED(mfs_args_t, $ac_cv_type_mfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for PC/FS mount(2) arguments structure +AC_DEFUN(AC_TYPE_PCFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of pcfs mount(2) arguments, +ac_cv_type_pcfs_args, +[ +# set to a default value +ac_cv_type_pcfs_args=notfound + +# look for "struct msdos_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct msdos_args a; +], ac_cv_type_pcfs_args="struct msdos_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct pc_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct pc_args a; +], ac_cv_type_pcfs_args="struct pc_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct pcfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct pcfs_args a; +], ac_cv_type_pcfs_args="struct pcfs_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct msdosfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct msdosfs_args a; +], ac_cv_type_pcfs_args="struct msdosfs_args", ac_cv_type_pcfs_args=notfound) +fi + +]) + +if test "$ac_cv_type_pcfs_args" != notfound +then + AC_DEFINE_UNQUOTED(pcfs_args_t, $ac_cv_type_pcfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the 6th argument to recvfrom() +AC_DEFUN(AC_TYPE_RECVFROM_FROMLEN, +[ +AC_CACHE_CHECK(non-pointer type of 6th (fromlen) argument to recvfrom(), +ac_cv_recvfrom_fromlen, +[ +# select the correct type +case "${host}" in + *-aix4.2* ) + ac_cv_recvfrom_fromlen="size_t" ;; + * ) + ac_cv_recvfrom_fromlen="int" ;; +esac +]) +AC_DEFINE_UNQUOTED(RECVFROM_FROMLEN_TYPE, $ac_cv_recvfrom_fromlen) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for RFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_RFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of rfs mount(2) arguments, +ac_cv_type_rfs_args, +[ +# set to a default value +ac_cv_type_rfs_args=notfound +# look for "struct rfs_args" +if test "$ac_cv_type_rfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct rfs_args a; +], ac_cv_type_rfs_args="struct rfs_args", ac_cv_type_rfs_args=notfound) +fi +]) +if test "$ac_cv_type_rfs_args" != notfound +then + AC_DEFINE_UNQUOTED(rfs_args_t, $ac_cv_type_rfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the type of the 3rd argument (in) to svc_sendreply() call +AC_DEFUN(AC_TYPE_SVC_IN_ARG, +[ +AC_CACHE_CHECK(for type of 3rd arg ('in') arg to svc_sendreply(), +ac_cv_type_svc_in_arg, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as caddr_t, char *, etc. +# set to a default value +ac_cv_type_svc_in_arg=notfound +# look for "caddr_t" +if test "$ac_cv_type_svc_in_arg" = notfound +then +AC_TRY_COMPILE_RPC( +[ SVCXPRT *SX; + xdrproc_t xp; + caddr_t p; + svc_sendreply(SX, xp, p); +], ac_cv_type_svc_in_arg="caddr_t", ac_cv_type_svc_in_arg=notfound) +fi +# look for "char *" +if test "$ac_cv_type_svc_in_arg" = notfound +then +AC_TRY_COMPILE_RPC( +[ SVCXPRT *SX; + xdrproc_t xp; + char *p; + svc_sendreply(SX, xp, p); +], ac_cv_type_svc_in_arg="char *", ac_cv_type_svc_in_arg=notfound) +fi +]) +if test "$ac_cv_type_svc_in_arg" != notfound +then + AC_DEFINE_UNQUOTED(SVC_IN_ARG_TYPE, $ac_cv_type_svc_in_arg) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for type of time_t (usually in ) +AC_DEFUN(AC_TYPE_TIME_T, +[AC_CHECK_TYPE(time_t, long)]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for TMPFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_TMPFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of tmpfs mount(2) arguments, +ac_cv_type_tmpfs_args, +[ +# set to a default value +ac_cv_type_tmpfs_args=notfound +# look for "struct tmpfs_args" +if test "$ac_cv_type_tmpfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct tmpfs_args a; +], ac_cv_type_tmpfs_args="struct tmpfs_args", ac_cv_type_tmpfs_args=notfound) +fi +]) +if test "$ac_cv_type_tmpfs_args" != notfound +then + AC_DEFINE_UNQUOTED(tmpfs_args_t, $ac_cv_type_tmpfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for UFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_UFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of ufs mount(2) arguments, +ac_cv_type_ufs_args, +[ +# set to a default value +ac_cv_type_ufs_args=notfound + +# look for "struct ufs_args" +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct ufs_args a; +], ac_cv_type_ufs_args="struct ufs_args", ac_cv_type_ufs_args=notfound) +fi + +# look for "struct efs_args" (irix) +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct efs_args a; +], ac_cv_type_ufs_args="struct efs_args", ac_cv_type_ufs_args=notfound) +fi + +# look for "struct ufs_specific" (ultrix) +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct ufs_specific a; +], ac_cv_type_ufs_args="struct ufs_specific", ac_cv_type_ufs_args=notfound) +fi + +]) +if test "$ac_cv_type_ufs_args" != notfound +then + AC_DEFINE_UNQUOTED(ufs_args_t, $ac_cv_type_ufs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for type of xdrproc_t (usually in ) +AC_DEFUN(AC_TYPE_XDRPROC_T, +[ +AC_CACHE_CHECK(for xdrproc_t, +ac_cv_type_xdrproc_t, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +# look for "xdrproc_t" +AC_TRY_COMPILE_RPC( +[ xdrproc_t xdr_int; +], ac_cv_type_xdrproc_t=yes, ac_cv_type_xdrproc_t=no) +]) +if test "$ac_cv_type_xdrproc_t" = yes +then + AC_DEFINE_UNQUOTED(XDRPROC_T_TYPE, xdrproc_t) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for XFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_XFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of xfs mount(2) arguments, +ac_cv_type_xfs_args, +[ +# set to a default value +ac_cv_type_xfs_args=notfound + +# look for "struct xfs_args" +if test "$ac_cv_type_xfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct xfs_args a; +], ac_cv_type_xfs_args="struct xfs_args", ac_cv_type_xfs_args=notfound) +fi + +]) +if test "$ac_cv_type_xfs_args" != notfound +then + AC_DEFINE_UNQUOTED(xfs_args_t, $ac_cv_type_xfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the 3rd argument to yp_order() +AC_DEFUN(AC_TYPE_YP_ORDER_OUTORDER, +[ +AC_CACHE_CHECK(pointer type of 3rd argument to yp_order(), +ac_cv_yp_order_outorder, +[ +# select the correct type +case "${host_os_name}" in + solaris2* | svr4* | sysv4* | sunos5* | hpux* ) + ac_cv_yp_order_outorder="unsigned long" ;; + osf* ) + # DU4 man page is wrong, headers are right + ac_cv_yp_order_outorder="unsigned int" ;; + * ) + ac_cv_yp_order_outorder=int ;; +esac +]) +AC_DEFINE_UNQUOTED(YP_ORDER_OUTORDER_TYPE, $ac_cv_yp_order_outorder) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl end of aclocal.m4 for am-utils-6.x diff --git a/m4/aclocal.m4 b/m4/aclocal.m4 new file mode 100644 index 0000000..da7ee9d --- /dev/null +++ b/m4/aclocal.m4 @@ -0,0 +1,4297 @@ +dnl aclocal.m4 generated automatically by aclocal 1.3.2 + +dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +dnl This Makefile.in is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +dnl aclocal.m4 file for am-utils-6.x +dnl Contains definitions for specialized GNU-autoconf macros. +dnl Author: Erez Zadok +dnl +dnl DO NOT EDIT DIRECTLY! Generated automtically by maintainers from +dnl aux/Makefile! +dnl +dnl ###################################################################### +dnl UNCOMMENT THE NEXT FEW LINES FOR DEBUGGING CONFIGURE +dnl define([AC_CACHE_LOAD], )dnl +dnl define([AC_CACHE_SAVE], )dnl +dnl ====================================================================== + + + +dnl ###################################################################### +dnl check if compiler can handle "void *" +AC_DEFUN(AC_C_VOID_P, +[ +AC_CACHE_CHECK(if compiler can handle void *, +ac_cv_c_void_p, +[ +# try to compile a program which uses void * +AC_TRY_COMPILE( +[ ], +[ +void *vp; +], ac_cv_c_void_p=yes, ac_cv_c_void_p=no) +]) +if test "$ac_cv_c_void_p" = yes +then + AC_DEFINE(voidp, void *) +else + AC_DEFINE(voidp, char *) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl New versions of the cache functions which also dynamically evaluate the +dnl cache-id field, so that it may contain shell variables to expand +dnl dynamically for the creation of $ac_cv_* variables on the fly. +dnl In addition, this function allows you to call COMMANDS which generate +dnl output on the command line, because it prints its own AC_MSG_CHECKING +dnl after COMMANDS are run. +dnl +dnl ====================================================================== +dnl AC_CACHE_CHECK_DYNAMIC(MESSAGE, CACHE-ID, COMMANDS) +define(AC_CACHE_CHECK_DYNAMIC, +[ +ac_tmp=`echo $2` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + AC_MSG_CHECKING([$1]) + echo $ac_n "(cached) $ac_c" 1>&AC_FD_MSG +else + $3 + AC_MSG_CHECKING([$1]) +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +AC_MSG_RESULT($ac_tmp_val) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if an automounter filesystem exists (it almost always does). +dnl Usage: AC_CHECK_AM_FS(, , []) +dnl Print the message in , and declare HAVE_AM_FS_ true. +dnl If is defined, then define this filesystem as tru only of the +dnl filesystem for is true. +AC_DEFUN(AC_CHECK_AM_FS, +[ +# store variable name of fs +ac_upcase_am_fs_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_AM_FS_$ac_upcase_am_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $2 filesystem ($1), +ac_cv_am_fs_$1, +[ +# true by default +eval "ac_cv_am_fs_$1=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "$3" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_$1=no" + if test "`eval echo '$''{ac_cv_fs_'$3'}'`" = yes + then + eval "ac_cv_am_fs_$1=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_'$3'}'`" = yes + then + eval "ac_cv_am_fs_$1=yes" + fi +fi +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'$1'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of fixmount check_mount() function +AC_DEFUN(AC_CHECK_CHECKMOUNT_STYLE, +[ +AC_CACHE_CHECK(style of fixmount check_mount(), +ac_cv_style_checkmount, +[ +# select the correct style for unmounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* ) + ac_cv_style_checkmount=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_checkmount=bsd44 ;; + aix* ) + ac_cv_style_checkmount=aix ;; + osf* ) + ac_cv_style_checkmount=osf ;; + ultrix* ) + ac_cv_style_checkmount=ultrix ;; + * ) + ac_cv_style_checkmount=default ;; +esac +]) +am_utils_checkmount_style_file="check_mount.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/checkmount/checkmount_${ac_cv_style_checkmount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}fixmount/${am_utils_checkmount_style_file}" " +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for external definition for a function (not external variables) +dnl Usage AC_CHECK_EXTERN(extern) +dnl Checks for external definition for "extern" that is delimited on the +dnl left and the right by a character that is not a valid symbol character. +dnl +dnl Note that $pattern below is very carefully crafted to match any system +dnl external defintion, with __P posix prototypes, with or without an extern +dnl word, etc. Think twice before changing this. +AC_DEFUN(AC_CHECK_EXTERN, +[ +# store variable name for external definition +ac_upcase_extern_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_EXTERN_$ac_upcase_extern_name +# check for cached value and set it if needed +AC_CACHE_CHECK_DYNAMIC(external function definition for $1, +ac_cv_extern_$1, +[ +changequote(<<, >>)dnl +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(" +changequote([, ])dnl +AC_EGREP_CPP(${pattern}, +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + +], eval "ac_cv_extern_$1=yes", eval "ac_cv_extern_$1=no") +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'$1'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if type 'fhandle' exists +AC_DEFUN(AC_CHECK_FHANDLE, +[ +AC_CACHE_CHECK(if plain fhandle type exists, +ac_cv_have_fhandle, +[ +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_have_fhandle=no +# look for "struct nfs_fh" +if test "$ac_cv_have_fhandle" = no +then +AC_TRY_COMPILE_NFS( +[ fhandle a; +], ac_cv_have_fhandle=yes, ac_cv_have_fhandle=no) +fi + +]) +if test "$ac_cv_have_fhandle" != no +then + AC_DEFINE(HAVE_FHANDLE) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl find if structure $1 has field field $2 +AC_DEFUN(AC_CHECK_FIELD, +[ +# make variable name a concatenation of the structure name and the field +ac_safe=`echo ac_cv_field_$1_$2 | tr '. ' '__'` +ac_upcase_var_name=`echo HAVE_FIELD_$1_$2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr '. ' '__'` +AC_CACHE_CHECK_DYNAMIC(if $1 field $2 exist, +$ac_safe, +[ +# try to compile a program +AC_TRY_COMPILE( +AC_MOUNT_HEADERS( +[ +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +]), +[ +$1 a; +char *cp = (char *) &(a.$2); +], eval "$ac_safe=yes", eval "$ac_safe=no") +]) +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_upcase_var_name) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a filesystem exists (if any of its header files exist). +dnl Usage: AC_CHECK_FS_HEADERS(..., , []) +dnl Check if if any of the headers exist. If any exist, then +dnl define HAVE_FS_. If exits, then define +dnl HAVE_FS_ instead... +AC_DEFUN(AC_CHECK_FS_HEADERS, +[ +# find what name to give to the fs +if test -n "$3" +then + ac_fs_name=$3 +else + ac_fs_name=$2 +fi +# store variable name of fs +ac_upcase_fs_name=`echo $2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_fs_name filesystem in <$1>, +ac_cv_fs_header_$ac_fs_name, +[ +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +AC_CHECK_HEADERS($1, +[ eval "ac_cv_fs_header_$ac_fs_name=yes" + break +])]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_fs_headers_safe) +# append ops_.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + AC_SUBST(AMD_FS_OBJS) + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a filesystem type exists (if its header files exist) +dnl Usage: AC_CHECK_FS_MNTENT(, []) +dnl check in some headers for MNTTYPE_ macro. If that exist, +dnl then define HAVE_FS_. If exits, then defined +dnl HAVE_FS_ instead... +AC_DEFUN(AC_CHECK_FS_MNTENT, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 + ac_fs_as_name=" (from: $1)" +else + ac_fs_name=$1 + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_fs_name$ac_fs_as_name mntent definition, +ac_cv_fs_$ac_fs_name, +[ +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in $1 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_fs_$ac_fs_name=yes" + break + ] + ) + +done +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +# append ops_.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + AC_SUBST(AMD_FS_OBJS) + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Define mount type to hide amd mounts from df(1) +dnl +dnl This has to be determined individually per OS. Depending on whatever +dnl mount options are defined in the system header files such as +dnl MNTTYPE_IGNORE or MNTTYPE_AUTO, or others does not work: some OSs define +dnl some of these then use other stuff; some do not define them at all in +dnl the headers, but still use it; and more. After a long attempt to get +dnl this automatically configured, I came to the conclusion that the semi- +dnl automatic per-host-os determination here is the best. +dnl +AC_DEFUN(AC_CHECK_HIDE_MOUNT_TYPE, +[ +AC_CACHE_CHECK(for mount type to hide from df, +ac_cv_hide_mount_type, +[ +case "${host_os}" in + irix* | hpux* ) + ac_cv_hide_mount_type="ignore" + ;; + sunos4* ) + ac_cv_hide_mount_type="auto" + ;; + * ) + ac_cv_hide_mount_type="nfs" + ;; +esac +]) +AC_DEFINE_UNQUOTED(HIDE_MOUNT_TYPE, "$ac_cv_hide_mount_type") +]) +dnl ====================================================================== + + +dnl a bug-fixed version of autoconf 2.12. +dnl first try to link library without $5, and only of that failed, +dnl try with $5 if specified. +dnl it addes $5 to $LIBS if it was needed -Erez. +dnl AC_CHECK_LIB2(LIBRARY, FUNCTION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND +dnl [, OTHER-LIBRARIES]]]) +AC_DEFUN(AC_CHECK_LIB2, +[AC_MSG_CHECKING([for $2 in -l$1]) +dnl Use a cache variable name containing both the library and function name, +dnl because the test really is for library $1 defining function $2, not +dnl just for library $1. Separate tests with the same $1 and different $2s +dnl may have different results. +ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` +AC_CACHE_VAL(ac_cv_lib_$ac_lib_var, +[ac_save_LIBS="$LIBS" + +# first try with base library, without auxiliary library +LIBS="-l$1 $LIBS" +AC_TRY_LINK(dnl +ifelse([$2], [main], , dnl Avoid conflicting decl of main. +[/* Override any gcc2 internal prototype to avoid an error. */ +]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus +extern "C" +#endif +])dnl +[/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $2(); +]), + [$2()], + eval "ac_cv_lib_$ac_lib_var=\"$1\"", + eval "ac_cv_lib_$ac_lib_var=no") + +# if OK, set to no auxiliary library, else try auxiliary library +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = no"; then + LIBS="-l$1 $5 $LIBS" + AC_TRY_LINK(dnl + ifelse([$2], [main], , dnl Avoid conflicting decl of main. + [/* Override any gcc2 internal prototype to avoid an error. */ + ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus + extern "C" + #endif + ])dnl + [/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $2(); + ]), + [$2()], + eval "ac_cv_lib_$ac_lib_var=\"$1 $5\"", + eval "ac_cv_lib_$ac_lib_var=no") +fi + +LIBS="$ac_save_LIBS" +])dnl +ac_tmp="`eval echo '$''{ac_cv_lib_'$ac_lib_var'}'`" +if test "${ac_tmp}" != no; then + AC_MSG_RESULT(-l$ac_tmp) + ifelse([$3], , +[changequote(, )dnl + ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` +changequote([, ])dnl + AC_DEFINE_UNQUOTED($ac_tr_lib) + LIBS="-l$ac_tmp $LIBS" +], [$3]) +else + AC_MSG_RESULT(no) +ifelse([$4], , , [$4 +])dnl +fi + +]) + + +dnl ###################################################################### +dnl usage AC_CHECK_LIB_FUNCS(lib, func1 func2 ...) +dnl check if any of funcN exist in lib, and define/use that library +AC_DEFUN(AC_CHECK_LIB_FUNCS, +[ +# make variable out of library name and functions +ac_safe=`echo ac_cv_have_lib_$1_$2 | tr ' ' '_'` +AC_CACHE_CHECK_DYNAMIC(libray $1 for functions: $2, +$ac_safe, +[ +eval "$ac_safe=notfound" +# iterate over all functions +for ac_libfunc_tmp in $2 +do + AC_CHECK_LIB($1, $ac_libfunc_tmp, eval "$ac_safe=found", eval "$ac_safe=notfound") + if test "`eval echo '$''{'$ac_safe'}'`" != notfound + then + break + fi +done +]) +# if cache value found, define HAVE_LIBlib and add it to $LIBS +if test "`eval echo '$''{'$ac_safe'}'`" != notfound +then + changequote(<<, >>)dnl + ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + changequote([, ])dnl + AC_DEFINE_UNQUOTED($ac_tr_lib) + LIBS="-l$1 $LIBS" +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a map exists (if some library function exists). +dnl Usage: AC_CHECK_MAP_FUNCS(..., , []) +dnl Check if any of the functions exist. If any exist, then +dnl define HAVE_MAP_. If exits, then defined +dnl HAVE_MAP_ instead... +AC_DEFUN(AC_CHECK_MAP_FUNCS, +[ +# find what name to give to the map +if test -n "$3" +then + ac_map_name=$3 +else + ac_map_name=$2 +fi +# store variable name of map +ac_upcase_map_name=`echo $2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_map_name maps, +ac_cv_map_$ac_map_name, +[ +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +AC_CHECK_FUNCS($1, +[ + eval "ac_cv_map_$ac_map_name=yes" + break +])]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +# append info_.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + AC_SUBST(AMD_INFO_OBJS) + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find CDFS-specific mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_CDFS_OPT() +dnl Check if there is an entry for MS_ or M_ in sys/mntent.h or +dnl mntent.h, then define MNT2_CDFS_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_CDFS_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_CDFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for CDFS-specific mount(2) option $ac_fs_name, +ac_cv_mnt2_cdfs_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MNT_$ac_upcase_fs_name) +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_INT( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +#ifndef _sys_stream_h +# define _sys_stream_h +#endif /* not _sys_stream_h */ +#ifndef _SYS_STREAM_H +# define _SYS_STREAM_H +#endif /* not _SYS_STREAM_H */ +AC_MOUNT_HEADERS +, M_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + + + +dnl ###################################################################### +dnl Find generic mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_GEN_OPT() +dnl Check if there is an entry for MS_ or M_ in sys/mntent.h or +dnl mntent.h, then define MNT2_GEN_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_GEN_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_GEN_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for generic mount(2) option $ac_fs_name, +ac_cv_mnt2_gen_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MNT_$ac_upcase_fs_name) +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_INT( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +#ifndef _sys_stream_h +# define _sys_stream_h +#endif /* not _sys_stream_h */ +#ifndef _SYS_STREAM_H +# define _SYS_STREAM_H +#endif /* not _SYS_STREAM_H */ +AC_MOUNT_HEADERS +, M_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find NFS-specific mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_NFS_OPT() +dnl Check if there is an entry for NFSMNT_ in sys/mntent.h or +dnl mntent.h, then define MNT2_NFS_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_NFS_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_NFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for NFS-specific mount(2) option $ac_fs_name, +ac_cv_mnt2_nfs_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, NFSMNT_$ac_upcase_fs_name) +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, NFS_MOUNT_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find name of mount table file, and define it as MNTTAB_FILE_NAME +dnl +dnl Solaris defines MNTTAB as /etc/mnttab, the file where /sbin/mount +dnl stores its cache of mounted filesystems. But under SunOS, the same +dnl macro MNTTAB, is defined as the _source_ of filesystems to mount, and +dnl is set to /etc/fstab. That is why I have to first check out +dnl if MOUNTED exists, and if not, check for the MNTTAB macro. +dnl +AC_DEFUN(AC_CHECK_MNTTAB_FILE_NAME, +[ +AC_CACHE_CHECK(for name of mount table file name, +ac_cv_mnttab_file_name, +[ +# expand cpp value for MNTTAB +AC_EXPAND_CPP_STRING( +AC_MOUNT_HEADERS( +[ +/* see M4 comment at the top of the definition of this macro */ +#ifdef MOUNTED +# define _MNTTAB_FILE_NAME MOUNTED +# else /* not MOUNTED */ +# ifdef MNTTAB +# define _MNTTAB_FILE_NAME MNTTAB +# endif /* MNTTAB */ +#endif /* not MOUNTED */ +]), +_MNTTAB_FILE_NAME, +[ ac_cv_mnttab_file_name=$value +], +[ +ac_cv_mnttab_file_name=notfound +# check explicitly for /etc/mnttab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mnttab + then + ac_cv_mnttab_file_name="/etc/mnttab" + fi +fi +# check explicitly for /etc/mtab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mtab + then + ac_cv_mnttab_file_name="/etc/mtab" + fi +fi +]) +]) +# test value and create macro as needed +if test "$ac_cv_mnttab_file_name" != notfound +then + AC_DEFINE_UNQUOTED(MNTTAB_FILE_NAME, "$ac_cv_mnttab_file_name") +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if the mount table is kept in a file or in the kernel. +AC_DEFUN(AC_CHECK_MNTTAB_LOCATION, +[ +AC_CACHE_CHECK_DYNAMIC(where mount table is kept, +ac_cv_mnttab_location, +[ +# assume location is on file +ac_cv_mnttab_location=file +AC_CHECK_FUNCS(mntctl getmntinfo getmountent, +ac_cv_mnttab_location=kernel) +]) +if test "$ac_cv_mnttab_location" = file +then + AC_DEFINE(MOUNT_TABLE_ON_FILE) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry +dnl option. +dnl Usage: AC_CHECK_MNTTAB_OPT() +dnl Check if there is an entry for MNTOPT_ in sys/mntent.h or mntent.h +dnl define MNTTAB_OPT_ to the string name (e.g., "ro"). +AC_DEFUN(AC_CHECK_MNTTAB_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mount table option $ac_fs_name, +ac_cv_mnttab_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found +AC_EXPAND_CPP_STRING( +AC_MOUNT_HEADERS +, MNTOPT_$ac_upcase_fs_name) +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of accessing the mount table file +AC_DEFUN(AC_CHECK_MNTTAB_STYLE, +[ +AC_CACHE_CHECK(mount table style, +ac_cv_style_mnttab, +[ +# select the correct style for mount table manipulation functions +case "${host_os_name}" in + aix* ) + ac_cv_style_mnttab=aix ;; + bsd* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_mnttab=bsd ;; + isc3* ) + ac_cv_style_mnttab=isc3 ;; + mach3* ) + ac_cv_style_mnttab=mach3 ;; + osf* ) + ac_cv_style_mnttab=osf ;; + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_style_mnttab=svr4 ;; + ultrix* ) + ac_cv_style_mnttab=ultrix ;; + * ) + ac_cv_style_mnttab=file ;; +esac +]) +am_utils_link_files_src=${am_utils_link_files_src}conf/mtab/mtab_${ac_cv_style_mnttab}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/mtabutil.c" " +# append mtab utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS mtabutil.o" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry. +dnl Usage: AC_CHECK_MNTTAB_TYPE(, [fssymbol]) +dnl Check if there is an entry for MNTTYPE_ in sys/mntent.h and mntent.h +dnl define MNTTAB_TYPE_ to the string name (e.g., "nfs"). If +dnl exist, then define MNTTAB_TYPE_ instead. If is +dnl defined, then can be a list of fs strings to look for. +dnl If no symbols have been defined, but the filesystem has been found +dnl earlier, then set the mount-table type to "" anyway... +AC_DEFUN(AC_CHECK_MNTTAB_TYPE, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 +else + ac_fs_name=$1 +fi +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_TYPE_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mnttab name for $ac_fs_name filesystem, +ac_cv_mnttab_type_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in $1 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), + [ eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + ]) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + AC_EXPAND_RUN_STRING( + AC_MOUNT_HEADERS( + [ +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + ]), + [ + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + ], [ eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + ]) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi +]) +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of mounting filesystems +AC_DEFUN(AC_CHECK_MOUNT_STYLE, +[ +AC_CACHE_CHECK(style of mounting filesystems, +ac_cv_style_mount, +[ +# select the correct style for mounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_style_mount=svr4 ;; + bsdi3* | bsdi4* ) + ac_cv_style_mount=bsdi3 ;; + freebsd3* ) + ac_cv_style_mount=freebsd3 ;; + aix* ) + ac_cv_style_mount=aix ;; + hpux* ) + ac_cv_style_mount=hpux ;; + irix6* ) + ac_cv_style_mount=irix6 ;; + irix5* ) + ac_cv_style_mount=irix5 ;; + isc3* ) + ac_cv_style_mount=isc3 ;; + linux* ) + ac_cv_style_mount=linux ;; + mach3* ) + ac_cv_style_mount=mach3 ;; + stellix* ) + ac_cv_style_mount=stellix ;; + * ) # no style needed. Use default filesystem calls ala BSD + ac_cv_style_mount=default ;; +esac +]) +# only make a link and include the file name if needed. +if test "$ac_cv_style_mount" = default +then + am_utils_mount_style_file="" +else + am_utils_mount_style_file="mountutil.c" + am_utils_link_files_src=${am_utils_link_files_src}conf/mount/mount_${ac_cv_style_mount}.c" " + am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_mount_style_file}" " +# append mount utilities object to LIBOBJS for automatic compilation + LIBOBJS="$LIBOBJS mountutil.o" +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the mount system call trap needed to mount(2) a filesystem +AC_DEFUN(AC_CHECK_MOUNT_TRAP, +[ +AC_CACHE_CHECK(mount trap system-call style, +ac_cv_mount_trap, +[ +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_mount_trap=svr4 ;; + news4* | riscix* ) + ac_cv_mount_trap=news4 ;; + freebsd3* ) + ac_cv_mount_trap=freebsd3 ;; + linux* ) + ac_cv_mount_trap=linux ;; + irix* ) + ac_cv_mount_trap=irix ;; + aux* ) + ac_cv_mount_trap=aux ;; + hcx* ) + ac_cv_mount_trap=hcx ;; + hpux11* ) + ac_cv_mount_trap=hpux11 ;; + hpux* ) + ac_cv_mount_trap=hpux ;; + rtu6* ) + ac_cv_mount_trap=rtu6 ;; + dgux* ) + ac_cv_mount_trap=dgux ;; + aix* ) + ac_cv_mount_trap=aix3 ;; + mach2* | mach3* ) + ac_cv_mount_trap=mach3 ;; + ultrix* ) + ac_cv_mount_trap=ultrix ;; + isc3* ) + ac_cv_mount_trap=isc3 ;; + stellix* ) + ac_cv_mount_trap=stellix ;; + * ) + ac_cv_mount_trap=default ;; +esac +]) +am_utils_mount_trap=$srcdir"/conf/trap/trap_"$ac_cv_mount_trap".h" +AC_SUBST_FILE(am_utils_mount_trap) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry. +dnl Usage: AC_CHECK_MOUNT_TYPE(, [fssymbol]) +dnl Check if there is an entry for MNTTYPE_ in sys/mntent.h and mntent.h +dnl define MOUNT_TYPE_ to the string name (e.g., "nfs"). If +dnl exist, then define MOUNT_TYPE_ instead. If is +dnl defined, then can be a list of fs strings to look for. +dnl If no symbols have been defined, but the filesystem has been found +dnl earlier, then set the mount-table type to "" anyway... +AC_DEFUN(AC_CHECK_MOUNT_TYPE, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 +else + ac_fs_name=$1 +fi +# prepare upper-case name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mount(2) type/name for $ac_fs_name filesystem, +ac_cv_mount_type_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in $1 +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi +]) +# end of cache check for ac_cv_mount_type_$ac_fs_name +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct printf-style type for the mount type in the mount() +dnl system call. +dnl If you change this one, you must also fix the check_mtype_type.m4. +AC_DEFUN(AC_CHECK_MTYPE_PRINTF_TYPE, +[ +AC_CACHE_CHECK(printf string to print type field of mount() call, +ac_cv_mtype_printf_type, +[ +# select the correct printf type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_printf_type="%d" ;; + irix3 | isc3 ) + ac_cv_mtype_printf_type="0x%x" ;; + * ) + ac_cv_mtype_printf_type="%s" ;; +esac +]) +AC_DEFINE_UNQUOTED(MTYPE_PRINTF_TYPE, "$ac_cv_mtype_printf_type") +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the mount type in the mount() system call +dnl If you change this one, you must also fix the check_mtype_printf_type.m4. +AC_DEFUN(AC_CHECK_MTYPE_TYPE, +[ +AC_CACHE_CHECK(type of mount type field in mount() call, +ac_cv_mtype_type, +[ +# select the correct type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_type=int ;; + * ) + ac_cv_mtype_type="char *" ;; +esac +]) +AC_DEFINE_UNQUOTED(MTYPE_TYPE, $ac_cv_mtype_type) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct network transport type to use +AC_DEFUN(AC_CHECK_NETWORK_TRANSPORT_TYPE, +[ +AC_CACHE_CHECK(network transport type, +ac_cv_transport_type, +[ +# select the correct type +case "${host_os_name}" in + solaris2* | sunos5* | hpux11* ) + ac_cv_transport_type=tli ;; + * ) + ac_cv_transport_type=sockets ;; +esac +]) +am_utils_link_files_src=${am_utils_link_files_src}conf/transp/transp_${ac_cv_transport_type}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/transputil.c" " +# append transport utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS transputil.o" +if test $ac_cv_transport_type = tli +then + AC_DEFINE(HAVE_TRANSPORT_TYPE_TLI) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct way to dereference the address part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_FH_DREF, +[ +AC_CACHE_CHECK(nfs file-handle address dereferencing style, +ac_cv_nfs_fh_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* |solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_fh_dref_style=svr4 ;; + sunos4* ) + ac_cv_nfs_fh_dref_style=sunos4 ;; + sunos3* ) + ac_cv_nfs_fh_dref_style=sunos3 ;; +changequote(<<, >>)dnl + freebsd2.[2-9]* | freebsd3* | bsdi[3-4]* | netbsd* | openbsd* ) +changequote([, ])dnl + # bsdi3, freebsd-2.2, netbsd, etc. + # changed the type of the + # filehandle in nfs_args from nfsv2fh_t to u_char. + ac_cv_nfs_fh_dref_style=freebsd22 ;; + bsd44* | bsdi2* | freebsd* ) + ac_cv_nfs_fh_dref_style=bsd44 ;; + hpux* ) + ac_cv_nfs_fh_dref_style=hpux ;; + irix* ) + ac_cv_nfs_fh_dref_style=irix ;; + linux* ) + ac_cv_nfs_fh_dref_style=linux ;; + aix4.2* ) + ac_cv_nfs_fh_dref_style=aix42 ;; + aix* ) + ac_cv_nfs_fh_dref_style=aix3 ;; + isc3 ) + ac_cv_nfs_fh_dref_style=isc3 ;; + osf4* ) + ac_cv_nfs_fh_dref_style=osf4 ;; + osf* ) + ac_cv_nfs_fh_dref_style=osf2 ;; + nextstep* ) + ac_cv_nfs_fh_dref_style=nextstep ;; + * ) + ac_cv_nfs_fh_dref_style=default ;; +esac +]) +am_utils_nfs_fh_dref=$srcdir"/conf/fh_dref/fh_dref_"$ac_cv_nfs_fh_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_fh_dref) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct way to dereference the hostname part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_HN_DREF, +[ +AC_CACHE_CHECK(nfs hostname dereferencing style, +ac_cv_nfs_hn_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os_name}" in + linux* ) + ac_cv_nfs_hn_dref_style=linux ;; + isc3 ) + ac_cv_nfs_hn_dref_style=isc3 ;; + * ) + ac_cv_nfs_hn_dref_style=default ;; +esac +]) +am_utils_nfs_hn_dref=$srcdir"/conf/hn_dref/hn_dref_"$ac_cv_nfs_hn_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_hn_dref) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if system has NFS protocol headers +AC_DEFUN(AC_CHECK_NFS_PROT_HEADERS, +[ +AC_CACHE_CHECK(location of NFS protocol header files, +ac_cv_nfs_prot_headers, +[ +# select the correct style for mounting filesystems +case "${host_os}" in + irix5* ) + ac_cv_nfs_prot_headers=irix5 ;; + irix6* ) + ac_cv_nfs_prot_headers=irix6 ;; + sunos3* ) + ac_cv_nfs_prot_headers=sunos3 ;; + sunos4* ) + ac_cv_nfs_prot_headers=sunos4 ;; + sunos5.3* | solaris2.3* ) + ac_cv_nfs_prot_headers=sunos5_3 ;; + sunos5.4* | solaris2.4* ) + ac_cv_nfs_prot_headers=sunos5_4 ;; + sunos5.5* | solaris2.5* ) + ac_cv_nfs_prot_headers=sunos5_5 ;; + sunos5.6 | solaris* ) + ac_cv_nfs_prot_headers=sunos5_6 ;; + bsdi2* ) + ac_cv_nfs_prot_headers=bsdi2 ;; + bsdi3* | bsdi4* ) + ac_cv_nfs_prot_headers=bsdi3 ;; + freebsd2* ) + ac_cv_nfs_prot_headers=freebsd2 ;; + freebsd3* ) + ac_cv_nfs_prot_headers=freebsd3 ;; + netbsd1.3* ) + ac_cv_nfs_prot_headers=netbsd1_3 ;; + netbsd* ) + ac_cv_nfs_prot_headers=netbsd ;; + openbsd* ) + ac_cv_nfs_prot_headers=openbsd ;; + hpux11* ) + ac_cv_nfs_prot_headers=hpux11 ;; + hpux* ) + ac_cv_nfs_prot_headers=hpux ;; + aix4.2* ) + ac_cv_nfs_prot_headers=aix4_2 ;; + aix4* ) + ac_cv_nfs_prot_headers=aix4 ;; + aix* ) + ac_cv_nfs_prot_headers=aix3 ;; + osf4* ) + ac_cv_nfs_prot_headers=osf4 ;; + osf* ) + ac_cv_nfs_prot_headers=osf2 ;; + svr4* ) + ac_cv_nfs_prot_headers=svr4 ;; + sysv4* ) # this is for NCR2 machines + ac_cv_nfs_prot_headers=ncr2 ;; + linux* ) + ac_cv_nfs_prot_headers=linux ;; + nextstep* ) + ac_cv_nfs_prot_headers=nextstep ;; + ultrix* ) + ac_cv_nfs_prot_headers=ultrix ;; + * ) + ac_cv_nfs_prot_headers=default ;; +esac +]) + +# make sure correct header is linked in top build directory +am_utils_nfs_prot_file="amu_nfs_prot.h" +am_utils_link_files_src=${am_utils_link_files_src}conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h" " +am_utils_link_files_dst=${am_utils_link_files_dst}${am_utils_nfs_prot_file}" " + +# define the name of the header to be included for other M4 macros +AC_DEFINE_UNQUOTED(AMU_NFS_PROTOCOL_HEADER, "${srcdir}/conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h") + +# set headers in a macro for Makefile.am files to use (for dependencies) +AMU_NFS_PROT_HEADERS="../"$am_utils_nfs_prot_file +AC_SUBST(AMU_NFS_PROT_HEADERS) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct way to dereference the address part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_SA_DREF, +[ +AC_CACHE_CHECK(nfs address dereferencing style, +ac_cv_nfs_sa_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* | solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_sa_dref_style=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_nfs_sa_dref_style=bsd44 ;; + 386bsd* | bsdi1* ) + ac_cv_nfs_sa_dref_style=386bsd ;; + linux* ) + ac_cv_nfs_sa_dref_style=linux ;; + aix* ) + ac_cv_nfs_sa_dref_style=aix3 ;; + aoi* ) + ac_cv_nfs_sa_dref_style=aoi ;; + isc3 ) + ac_cv_nfs_sa_dref_style=isc3 ;; + * ) + ac_cv_nfs_sa_dref_style=default ;; +esac +]) +am_utils_nfs_sa_dref=$srcdir"/conf/sa_dref/sa_dref_"$ac_cv_nfs_sa_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_sa_dref) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if need to turn on, off, or leave alone the NFS "noconn" option +AC_DEFUN(AC_CHECK_NFS_SOCKET_CONNECTION, +[ +AC_CACHE_CHECK(if to turn on/off noconn option, +ac_cv_nfs_socket_connection, +[ +# set default to no-change +ac_cv_nfs_socket_connection=none +# select the correct style +case "${host_os}" in +changequote(<<, >>)dnl + openbsd2.[2-9]* ) +changequote([, ])dnl + ac_cv_nfs_socket_connection=conn ;; + openbsd* ) + ac_cv_nfs_socket_connection=noconn ;; + freebsd3* ) + ac_cv_nfs_socket_connection=conn ;; +esac +]) +# set correct value +case "$ac_cv_nfs_socket_connection" in + noconn ) AC_DEFINE(USE_UNCONNECTED_NFS_SOCKETS) ;; + conn ) AC_DEFINE(USE_CONNECTED_NFS_SOCKETS) ;; +esac +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl set OS libraries specific to an OS: +dnl libnsl/libsocket are needed only on solaris and some svr4 systems. +dnl Using a typical macro has proven unsuccesful, because on some other +dnl systems such as irix, including libnsl and or libsocket actually breaks +dnl lots of code. So I am forced to use a special purpose macro that sets +dnl the libraries based on the OS. Sigh. -Erez. +AC_DEFUN(AC_CHECK_OS_LIBS, +[ +AC_CACHE_CHECK(for additional OS libraries, +ac_cv_os_libs, +[ +# select the correct set of libraries to link with +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_os_libs="-lsocket -lnsl" ;; + * ) + ac_cv_os_libs=none ;; +esac +]) +# set list of libraries to link with +if test "$ac_cv_os_libs" != none +then + LIBS="$ac_cv_os_libs $LIBS" +fi + +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a system needs to restart its signal handlers +AC_DEFUN(AC_CHECK_RESTARTABLE_SIGNAL_HANDLER, +[ +AC_CACHE_CHECK(if system needs to restart signal handlers, +ac_cv_restartable_signal_handler, +[ +# select the correct systems to restart signal handlers +case "${host_os_name}" in + svr3* | svr4* | sysv4* | solaris2* | sunos5* | aoi* | irix* ) + ac_cv_restartable_signal_handler=yes ;; + * ) + ac_cv_restartable_signal_handler=no ;; +esac +]) +# define REINSTALL_SIGNAL_HANDLER if need to +if test "$ac_cv_restartable_signal_handler" = yes +then + AC_DEFINE(REINSTALL_SIGNAL_HANDLER) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check style of unmounting filesystems +AC_DEFUN(AC_CHECK_UMOUNT_STYLE, +[ +AC_CACHE_CHECK(style of unmounting filesystems, +ac_cv_style_umount, +[ +# select the correct style for unmounting filesystems +case "${host_os_name}" in + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_umount=bsd44 ;; + osf* ) + ac_cv_style_umount=osf ;; + * ) + ac_cv_style_umount=default ;; +esac +]) +am_utils_umount_style_file="umount_fs.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/umount/umount_${ac_cv_style_umount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_umount_style_file}" " +# append un-mount utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS umount_fs.o" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the unmount system call arguments needed for +AC_DEFUN(AC_CHECK_UNMOUNT_ARGS, +[ +AC_CACHE_CHECK(unmount system-call arguments, +ac_cv_unmount_args, +[ +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + aix* ) + ac_cv_unmount_args="mnt->mnt_passno, 0" ;; + ultrix* ) + ac_cv_unmount_args="mnt->mnt_passno" ;; + * ) + ac_cv_unmount_args="mnt->mnt_dir" ;; +esac +]) +am_utils_unmount_args=$ac_cv_unmount_args +AC_SUBST(am_utils_unmount_args) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for the correct system call to unmount a filesystem. +AC_DEFUN(AC_CHECK_UNMOUNT_CALL, +[ +dnl make sure this one is called before [AC_CHECK_UNMOUNT_ARGS] +AC_BEFORE([$0], [AC_CHECK_UNMOUNT_ARGS]) +AC_CACHE_CHECK(the system call to unmount a filesystem, +ac_cv_unmount_call, +[ +# check for various unmount a filesystem calls +if test "$ac_cv_func_uvmount" = yes ; then + ac_cv_unmount_call=uvmount +elif test "$ac_cv_func_unmount" = yes ; then + ac_cv_unmount_call=unmount +elif test "$ac_cv_func_umount" = yes ; then + ac_cv_unmount_call=umount +else + ac_cv_unmount_call=no +fi +]) +if test "$ac_cv_unmount_call" != no +then + am_utils_unmount_call=$ac_cv_unmount_call + AC_SUBST(am_utils_unmount_call) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable hex number. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_HEX, +[ +# we are looking for a regexp of a string +AC_EGREP_CPP(0x, +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("0x%x", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable integer number. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_INT, +[ +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +AC_EGREP_CPP( +changequote(<<, >>)dnl +[1-9][0-9]*, +changequote([, ])dnl +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("%d", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable string. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_STRING, +[ +# we are looking for a regexp of a string +AC_EGREP_CPP(\".*\", +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("%s", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Run a program and print its output as a string +dnl Takes: (header, code-to-run, [action-if-found, [action-if-not-found]]) +AC_DEFUN(AC_EXPAND_RUN_STRING, +[ +value="notfound" +AC_TRY_RUN( +[ +$1 +main(argc) +int argc; +{ +$2 +exit(0); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl find if "extern char *optarg" exists in headers +AC_DEFUN(AC_EXTERN_OPTARG, +[ +AC_CACHE_CHECK(if external definition for optarg[] exists, +ac_cv_extern_optarg, +[ +# try to compile program that uses the variable +AC_TRY_COMPILE( +[ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ +], +[ +char *cp = optarg; +], ac_cv_extern_optarg=yes, ac_cv_extern_optarg=no) +]) +if test "$ac_cv_extern_optarg" = yes +then + AC_DEFINE(HAVE_EXTERN_OPTARG) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl find if "extern char *sys_errlist[]" exist in headers +AC_DEFUN(AC_EXTERN_SYS_ERRLIST, +[ +AC_CACHE_CHECK(if external definition for sys_errlist[] exists, +ac_cv_extern_sys_errlist, +[ +# try to locate pattern in header files +changequote(<<, >>)dnl +pattern="(extern)?.*char.*sys_errlist.*\[\]" +changequote([, ])dnl +AC_EGREP_CPP(${pattern}, +[ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ +], ac_cv_extern_sys_errlist=yes, ac_cv_extern_sys_errlist=no) +]) +# check if need to define variable +if test "$ac_cv_extern_sys_errlist" = yes +then + AC_DEFINE(HAVE_EXTERN_SYS_ERRLIST) +fi +]) +dnl ====================================================================== + + +fdnl ###################################################################### +dnl find if mntent_t field mnt_time exists and is of type "char *" +AC_DEFUN(AC_FIELD_MNTENT_T_MNT_TIME_STRING, +[ +AC_CACHE_CHECK(if mntent_t field mnt_time exist as type string, +ac_cv_field_mntent_t_mnt_time_string, +[ +# try to compile a program +AC_TRY_COMPILE( +AC_MOUNT_HEADERS( +[ +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# else /* not HAVE_STRUCT_MNTTAB */ +# error XXX: could not find definition for struct mntent or struct mnttab! +# endif /* not HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ +]), +[ +mntent_t mtt; +char *cp = "test"; +int i; +mtt.mnt_time = cp; +i = mtt.mnt_time[0]; +], ac_cv_field_mntent_t_mnt_time_string=yes, ac_cv_field_mntent_t_mnt_time_string=no) +]) +if test "$ac_cv_field_mntent_t_mnt_time_string" = yes +then + AC_DEFINE(HAVE_FIELD_MNTENT_T_MNT_TIME_STRING) +fi +]) +dnl ====================================================================== + + +dnl my version is similar to the one from Autoconf 2.12, but I also +dnl define HAVE_BAD_MEMCMP so that I can smarter things to avoid +dnl linkage conflicts with bad memcmp versions that are in libc. +AC_DEFUN(AC_FUNC_BAD_MEMCMP, +[AC_CACHE_CHECK(for 8-bit clean memcmp, ac_cv_func_memcmp_clean, +[AC_TRY_RUN([ +main() +{ + char c0 = 0x40, c1 = 0x80, c2 = 0x81; + exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1); +} +], ac_cv_func_memcmp_clean=yes, ac_cv_func_memcmp_clean=no, +ac_cv_func_memcmp_clean=no)]) +if test $ac_cv_func_memcmp_clean = no +then + LIBOBJS="$LIBOBJS memcmp.o" + AC_DEFINE(HAVE_BAD_MEMCMP) +fi +dnl AC_SUBST(LIBOBJS)dnl +]) + + +dnl Check for a yp_all() function that does not leak a file descriptor +dnl to the ypserv process. +AC_DEFUN(AC_FUNC_BAD_YP_ALL, +[ +AC_CACHE_CHECK(for a file-descriptor leakage clean yp_all, +ac_cv_func_yp_all_clean, +[ +# clean by default +ac_cv_func_yp_all_clean=yes +# select the correct type +case "${host_os_name}" in + irix* ) + ac_cv_func_yp_all_clean=no ;; + linux* ) + # RedHat 5.1 systems with glibc glibc-2.0.7-19 or below + # leak a UDP socket from yp_all() + case "`cat /etc/redhat-release /dev/null 2>/dev/null`" in + *5.1* ) + ac_cv_func_yp_all_clean=no ;; + esac +esac +]) +if test $ac_cv_func_yp_all_clean = no +then + AC_DEFINE(HAVE_BAD_YP_ALL) +fi +]) + + +dnl ###################################################################### +dnl AC_HOST_MACROS: define HOST_CPU, HOST_VENDOR, and HOST_OS +AC_DEFUN(AC_HOST_MACROS, +[ +# these are defined already by the macro 'CANONICAL_HOST' + AC_MSG_CHECKING("host cpu") + AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu") + AC_MSG_RESULT($host_cpu) + + AC_MSG_CHECKING("vendor") + AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor") + AC_MSG_RESULT($host_vendor) + + AC_MSG_CHECKING("host full OS name and version") + # normalize some host OS names + case ${host_os} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os=linux ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS, "$host_os") + AC_MSG_RESULT($host_os) + +# break host_os into host_os_name and host_os_version + AC_MSG_CHECKING("host OS name") + host_os_name=`echo $host_os | sed 's/\..*//g'` + # normalize some OS names + case ${host_os_name} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os_name=linux ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS_NAME, "$host_os_name") + AC_MSG_RESULT($host_os_name) + +# parse out the OS version of the host + AC_MSG_CHECKING("host OS version") +changequote(<<, >>)dnl + host_os_version=`echo $host_os | sed 's/^[^0-9]*//g'` +changequote([, ])dnl + if test -z "$host_os_version" + then + host_os_version=`(uname -r) 2>/dev/null` || host_os_version=unknown + fi + case ${host_os_version} in + # fixes for some OS versions (solaris used to be here) + * ) # do nothing for now + ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS_VERSION, "$host_os_version") + AC_MSG_RESULT($host_os_version) + +# figure out host architecture (different than CPU) + AC_MSG_CHECKING("host OS architecture") + host_arch=`(uname -m) 2>/dev/null` || host_arch=unknown + # normalize some names + case ${host_arch} in + sun4* ) host_arch=sun4 ;; + sun3x ) host_arch=sun3 ;; + sun ) host_arch=`(arch) 2>/dev/null` || host_arch=unknown ;; + i?86 ) host_arch=i386 ;; # all x86 should show up as i386 + esac + AC_DEFINE_UNQUOTED(HOST_ARCH, "$host_arch") + AC_MSG_RESULT($host_arch) + +# figure out host name + AC_MSG_CHECKING("host name") + host_name=`(hostname || uname -n) 2>/dev/null` || host_name=unknown + AC_DEFINE_UNQUOTED(HOST_NAME, "$host_name") + AC_MSG_RESULT($host_name) + +# figure out user name + AC_MSG_CHECKING("user name") + if test -n "$USER" + then + user_name="$USER" + else + if test -n "$LOGNAME" + then + user_name="$LOGNAME" + else + user_name=`(whoami) 2>/dev/null` || user_name=unknown + fi + fi + AC_DEFINE_UNQUOTED(USER_NAME, "$user_name") + AC_MSG_RESULT($user_name) + +# figure out configuration date + AC_MSG_CHECKING("configuration date") + config_date=`(date) 2>/dev/null` || config_date=unknown_date + AC_DEFINE_UNQUOTED(CONFIG_DATE, "$config_date") + AC_MSG_RESULT($config_date) + +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check if a local configuration file exists +AC_DEFUN(AC_LOCALCONFIG, +[AC_MSG_CHECKING(a local configuration file) +if test -f localconfig.h +then + AC_DEFINE(HAVE_LOCALCONFIG_H) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl an M4 macro to include a list of common headers being used everywhere +define(AC_MOUNT_HEADERS, +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + +$1 +] +) +dnl ====================================================================== + + +dnl ###################################################################### +dnl AC_MSG: a simple printout message +define(AC_MSG, +[echo "*** $1:" 1>&AC_FD_MSG]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Package name +AC_DEFUN(AC_NAME_PACKAGE, +[AC_MSG_CHECKING(package name) +AC_DEFINE_UNQUOTED(PACKAGE, "$1") +AC_MSG_RESULT(\"$1\") +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Version of package +AC_DEFUN(AC_NAME_VERSION, +[AC_MSG_CHECKING(version of package) +AC_DEFINE_UNQUOTED(VERSION, "$1") +AC_MSG_RESULT(\"$1\") +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Do you want to turn on "amq -M" code (security hole for IP sproofing!) +AC_DEFUN(AC_OPT_AMQ_MOUNT, +[AC_MSG_CHECKING(for amq -M remote mount code) +AC_ARG_ENABLE(amq-mount, +[ --enable-amq-mount enable amq -M remote mount code], +[if test "$enableval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_AMQ_MOUNT) +else + AC_MSG_RESULT(no) +fi], [ + # default is to not include this code because it is insecure + AC_MSG_RESULT(no) +])]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Which options to add to CFLAGS for compilation? +dnl NOTE: this is only for final compiltions, not for configure tests) +AC_DEFUN(AC_OPT_AMU_CFLAGS, +[AC_MSG_CHECKING(for additional C option compilation flags) +AC_ARG_ENABLE(am-cflags, +[ --enable-am-cflags[=ARG] + compile package with ARG additional C flags], +[if test "$enableval" = ""; then + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) +else + # check if user supplied configure option without argument + if test "$enableval" = "yes"; then + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) + else + # user supplied a cflags option to configure + AMU_CFLAGS="$enableval" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT($enableval) + fi +fi], [ + # default is to have no additional C flags + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Initial settings for CPPFLAGS (-I options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_CPPFLAGS, +[AC_MSG_CHECKING(for configuration/compilation (-I) preprocessor flags) +AC_ARG_ENABLE(cppflags, +[ --enable-cppflags[=ARG] configure/compile with ARG (-I) preprocessor flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + CPPFLAGS="$CPPFLAGS $enableval" + export CPPFLAGS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Debugging: "yes" means general, "mem" means general and memory debugging, +dnl and "no" means none. +AC_DEFUN(AC_OPT_DEBUG, +[AC_MSG_CHECKING(for debugging options) +AC_ARG_ENABLE(debug, +[ --enable-debug[=ARG] enable debugging (yes/mem/no)], +[ +if test "$enableval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(DEBUG) +elif test "$enableval" = mem; then + AC_MSG_RESULT(mem) + AC_DEFINE(DEBUG) + AC_DEFINE(DEBUG_MEM) + AC_CHECK_LIB(mapmalloc, malloc_verify) + AC_CHECK_LIB(malloc, mallinfo) +else + AC_MSG_RESULT(no) +fi +], +[ + # default is no debugging + AC_MSG_RESULT(no) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Initial settings for LDFLAGS (-L options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_LDFLAGS, +[AC_MSG_CHECKING(for configuration/compilation (-L) library flags) +AC_ARG_ENABLE(ldflags, +[ --enable-ldflags[=ARG] configure/compile with ARG (-L) library flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + LDFLAGS="$LDFLAGS $enableval" + export LDFLAGS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Initial settings for LIBS (-l options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_LIBS, +[AC_MSG_CHECKING(for configuration/compilation (-l) library flags) +AC_ARG_ENABLE(libs, +[ --enable-libs[=ARG] configure/compile with ARG (-l) library flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + LIBS="$LIBS $enableval" + export LIBS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Specify additional compile options based on the OS and the compiler +AC_DEFUN(AC_OS_CFLAGS, +[ +AC_CACHE_CHECK(additional compiler flags, +ac_cv_os_cflags, +[ +case "${host_os}" in + irix6* ) + case "${CC}" in + cc ) + # do not use 64-bit compiler + ac_cv_os_cflags="-32 -Wl,-woff,84" + ;; + esac + ;; + osf4* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN" + ;; + esac + ;; + osf* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN -D_NO_PROTO" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN -D_NO_PROTO" + ;; + esac + ;; + solaris2.6* | sunos5.6* | solaris2.7* | sunos5.7* ) + # turn on 64-bit file offset interface + case "${CC}" in + * ) + ac_cv_os_cflags="-D_LARGEFILE64_SOURCE" + ;; + esac + ;; + OFF-sunos4* ) + # make sure passing whole structures is handled in gcc + case "${CC}" in + gcc ) + ac_cv_os_cflags="-fpcc-struct-return" + ;; + esac + ;; + * ) ac_cv_os_cflags="" ;; +esac +]) +CFLAGS="$CFLAGS $ac_cv_os_cflags" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Specify additional cpp options based on the OS and the compiler +AC_DEFUN(AC_OS_CPPFLAGS, +[ +AC_CACHE_CHECK(additional preprocessor flags, +ac_cv_os_cppflags, +[ +case "${host_os}" in +# off for now, posix may be a broken thing for nextstep3... +# nextstep* ) +# ac_cv_os_cppflags="-D_POSIX_SOURCE" +# ;; + * ) ac_cv_os_cppflags="" ;; +esac +]) +CPPFLAGS="$CPPFLAGS $ac_cv_os_cppflags" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Specify additional linker options based on the OS and the compiler +AC_DEFUN(AC_OS_LDFLAGS, +[ +AC_CACHE_CHECK(additional linker flags, +ac_cv_os_ldflags, +[ +case "${host_os}" in + solaris2.7* | sunos5.7* ) + # find LDAP: off until Sun includes ldap headers. + case "${CC}" in + * ) + #ac_cv_os_ldflags="-L/usr/lib/fn" + ;; + esac + ;; + * ) ac_cv_os_ldflags="" ;; +esac +]) +LDFLAGS="$LDFLAGS $ac_cv_os_ldflags" +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl AC_SAVE_STATE: save confdefs.h onto dbgcf.h and write $ac_cv_* cache +dnl variables that are known so far. +define(AC_SAVE_STATE, +AC_MSG(SAVING CONFIGURE STATE) +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +[AC_CACHE_SAVE] +) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the name of the nfs filehandle field in nfs_args_t. +AC_DEFUN(AC_STRUCT_FIELD_NFS_FH, +[ +dnl make sure this is called before macros which depend on it +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_CACHE_CHECK(for the name of the nfs filehandle field in nfs_args_t, +ac_cv_struct_field_nfs_fh, +[ +# set to a default value +ac_cv_struct_field_nfs_fh=notfound +# look for name "fh" (most systems) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_args_t nat; + char *cp = (char *) &(nat.fh); +], ac_cv_struct_field_nfs_fh=fh, ac_cv_struct_field_nfs_fh=notfound) +fi +# look for name "root" (for example Linux) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_args_t nat; + char *cp = (char *) &(nat.root); +], ac_cv_struct_field_nfs_fh=root, ac_cv_struct_field_nfs_fh=notfound) +fi +]) +if test "$ac_cv_struct_field_nfs_fh" != notfound +then + AC_DEFINE_UNQUOTED(NFS_FH_FIELD, $ac_cv_struct_field_nfs_fh) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct mntent exists anywhere in mount.h or mntent.h headers +AC_DEFUN(AC_STRUCT_MNTENT, +[ +AC_CACHE_CHECK(for struct mntent, +ac_cv_have_struct_mntent, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE( +AC_MOUNT_HEADERS +, +[ +struct mntent mt; +], ac_cv_have_struct_mntent=yes, ac_cv_have_struct_mntent=no) +]) +if test "$ac_cv_have_struct_mntent" = yes +then + AC_DEFINE(HAVE_STRUCT_MNTENT) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct mnttab exists anywhere in mount.h or mnttab.h headers +AC_DEFUN(AC_STRUCT_MNTTAB, +[ +AC_CACHE_CHECK(for struct mnttab, +ac_cv_have_struct_mnttab, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE( +AC_MOUNT_HEADERS +, +[ +struct mnttab mt; +], ac_cv_have_struct_mnttab=yes, ac_cv_have_struct_mnttab=no) +]) +if test "$ac_cv_have_struct_mnttab" = yes +then + AC_DEFINE(HAVE_STRUCT_MNTTAB) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct nfs_args exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_ARGS, +[ +dnl make sure this is called before [AC_TYPE_NFS_FH] +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_args, +ac_cv_have_struct_nfs_args, +[ +# try to compile a program which may have a definition for the structure +# assume not found +ac_cv_have_struct_nfs_args=notfound + +# look for "struct irix5_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct irix5_nfs_args na; +], ac_cv_have_struct_nfs_args="struct irix5_nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +# look for "struct aix42_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct aix42_nfs_args na; +], ac_cv_have_struct_nfs_args="struct aix42_nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +# look for "struct nfs_args" +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_args na; +], ac_cv_have_struct_nfs_args="struct nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +]) + +if test "$ac_cv_have_struct_nfs_args" != notfound +then + AC_DEFINE(HAVE_STRUCT_NFS_ARGS) + AC_DEFINE_UNQUOTED(nfs_args_t, $ac_cv_have_struct_nfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the structure of an nfs filehandle. +dnl if found, defined am_nfs_fh to it, else leave it undefined. +dnl THE ORDER OF LOOKUPS IN THIS FILE IS VERY IMPORTANT!!! +AC_DEFUN(AC_STRUCT_NFS_FH, +[ +AC_CACHE_CHECK(for type/structure of NFS V2 filehandle, +ac_cv_struct_nfs_fh, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as struct nfs_fh, fhandle_t, nfsv2fh_t, etc. +# set to a default value +ac_cv_struct_nfs_fh=notfound + +# look for "nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_fh nh; +], ac_cv_struct_nfs_fh="nfs_fh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "struct nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_fh nh; +], ac_cv_struct_nfs_fh="struct nfs_fh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "struct nfssvcfh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfssvcfh nh; +], ac_cv_struct_nfs_fh="struct nfssvcfh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "nfsv2fh_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfsv2fh_t nh; +], ac_cv_struct_nfs_fh="nfsv2fh_t", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "fhandle_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ fhandle_t nh; +], ac_cv_struct_nfs_fh="fhandle_t", ac_cv_struct_nfs_fh=notfound) +fi + +]) + +if test "$ac_cv_struct_nfs_fh" != notfound +then + AC_DEFINE_UNQUOTED(am_nfs_fh, $ac_cv_struct_nfs_fh) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the structure of an NFS V3 filehandle. +dnl if found, defined am_nfs_fh3 to it, else leave it undefined. +AC_DEFUN(AC_STRUCT_NFS_FH3, +[ +AC_CACHE_CHECK(for type/structure of NFS V3 filehandle, +ac_cv_struct_nfs_fh3, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as struct nfs_fh3, fhandle3_t, nfsv3fh_t, etc. +# set to a default value +ac_cv_struct_nfs_fh3=notfound + +# look for "nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_fh3 nh; +], ac_cv_struct_nfs_fh3="nfs_fh3", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "struct nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_fh3 nh; +], ac_cv_struct_nfs_fh3="struct nfs_fh3", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "nfsv3fh_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfsv3fh_t nh; +], ac_cv_struct_nfs_fh3="nfsv3fh_t", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "fhandle3_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ fhandle3_t nh; +], ac_cv_struct_nfs_fh3="fhandle3_t", ac_cv_struct_nfs_fh3=notfound) +fi + +]) + +if test "$ac_cv_struct_nfs_fh3" != notfound +then + AC_DEFINE_UNQUOTED(am_nfs_fh3, $ac_cv_struct_nfs_fh3) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct nfs_gfs_mount exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_GFS_MOUNT, +[ +dnl make sure this is called before [AC_TYPE_NFS_FH] +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_gfs_mount, +ac_cv_have_struct_nfs_gfs_mount, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE_NFS( +[ struct nfs_gfs_mount ngm; +], ac_cv_have_struct_nfs_gfs_mount=yes, ac_cv_have_struct_nfs_gfs_mount=no) +]) +if test "$ac_cv_have_struct_nfs_gfs_mount" = yes +then + AC_DEFINE(HAVE_STRUCT_NFS_GFS_MOUNT) + AC_DEFINE(nfs_args_t, struct nfs_gfs_mount) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find if struct nfs_mount_data exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_MOUNT_DATA, +[ +dnl make sure this is called before macros which depend on it +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_mount_data, +ac_cv_have_struct_nfs_mount_data, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE_NFS( +[ struct nfs_mount_data nmd; +], ac_cv_have_struct_nfs_mount_data=yes, ac_cv_have_struct_nfs_mount_data=no) +]) +if test "$ac_cv_have_struct_nfs_mount_data" = yes +then + AC_DEFINE(HAVE_STRUCT_NFS_MOUNT_DATA) + AC_DEFINE(nfs_args_t, struct nfs_mount_data) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Compile a program with FS headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_ANYFS, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +], [$1], [$2], [$3]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Compile a program with NFS headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_NFS, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ +], [$1], [$2], [$3]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Compile a program with RPC headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_RPC, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ +], [$1], [$2], [$3]) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the 5th argument to authunix_create() +AC_DEFUN(AC_TYPE_AUTH_CREATE_GIDLIST, +[ +AC_CACHE_CHECK(argument type of 5rd argument to authunix_create(), +ac_cv_auth_create_gidlist, +[ +# select the correct type +case "${host_os_name}" in + sunos4* | bsdi2* | sysv4* | hpux10.10 | ultrix* ) + ac_cv_auth_create_gidlist="int" ;; + * ) + ac_cv_auth_create_gidlist="gid_t" ;; +esac +]) +AC_DEFINE_UNQUOTED(AUTH_CREATE_GIDLIST_TYPE, $ac_cv_auth_create_gidlist) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for AUTOFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_AUTOFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of autofs mount(2) arguments, +ac_cv_type_autofs_args, +[ +# set to a default value +ac_cv_type_autofs_args=notfound + +# look for "struct auto_args" +if test "$ac_cv_type_autofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct auto_args a; +], ac_cv_type_autofs_args="struct auto_args", ac_cv_type_autofs_args=notfound) +fi + +# look for "struct autofs_args" +if test "$ac_cv_type_autofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct autofs_args a; +], ac_cv_type_autofs_args="struct autofs_args", ac_cv_type_autofs_args=notfound) +fi + +]) +if test "$ac_cv_type_autofs_args" != notfound +then + AC_DEFINE_UNQUOTED(autofs_args_t, $ac_cv_type_autofs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for CACHEFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_CACHEFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of cachefs mount(2) arguments, +ac_cv_type_cachefs_args, +[ +# set to a default value +ac_cv_type_cachefs_args=notfound +# look for "struct cachefs_mountargs" +if test "$ac_cv_type_cachefs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct cachefs_mountargs a; +], ac_cv_type_cachefs_args="struct cachefs_mountargs", ac_cv_type_cachefs_args=notfound) +fi +]) +if test "$ac_cv_type_cachefs_args" != notfound +then + AC_DEFINE_UNQUOTED(cachefs_args_t, $ac_cv_type_cachefs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for CDFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_CDFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of cdfs mount(2) arguments, +ac_cv_type_cdfs_args, +[ +# set to a default value +ac_cv_type_cdfs_args=notfound + +# look for "struct iso_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso_args a; +], ac_cv_type_cdfs_args="struct iso_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct iso9660_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso9660_args a; +], ac_cv_type_cdfs_args="struct iso9660_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct cdfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct cdfs_args a; +], ac_cv_type_cdfs_args="struct cdfs_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct hsfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct hsfs_args a; +], ac_cv_type_cdfs_args="struct hsfs_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct iso_specific" (ultrix) +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso_specific a; +], ac_cv_type_cdfs_args="struct iso_specific", ac_cv_type_cdfs_args=notfound) +fi + +]) +if test "$ac_cv_type_cdfs_args" != notfound +then + AC_DEFINE_UNQUOTED(cdfs_args_t, $ac_cv_type_cdfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for EFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_EFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of efs mount(2) arguments, +ac_cv_type_efs_args, +[ +# set to a default value +ac_cv_type_efs_args=notfound + +# look for "struct efs_args" +if test "$ac_cv_type_efs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct efs_args a; +], ac_cv_type_efs_args="struct efs_args", ac_cv_type_efs_args=notfound) +fi + +]) +if test "$ac_cv_type_efs_args" != notfound +then + AC_DEFINE_UNQUOTED(efs_args_t, $ac_cv_type_efs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for LOFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_LOFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of lofs mount(2) arguments, +ac_cv_type_lofs_args, +[ +# set to a default value +ac_cv_type_lofs_args=notfound +# look for "struct lofs_args" +if test "$ac_cv_type_lofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct lofs_args a; +], ac_cv_type_lofs_args="struct lofs_args", ac_cv_type_lofs_args=notfound) +fi +# look for "struct lo_args" +if test "$ac_cv_type_lofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct lo_args a; +], ac_cv_type_lofs_args="struct lo_args", ac_cv_type_lofs_args=notfound) +fi +]) +if test "$ac_cv_type_lofs_args" != notfound +then + AC_DEFINE_UNQUOTED(lofs_args_t, $ac_cv_type_lofs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for MFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_MFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of mfs mount(2) arguments, +ac_cv_type_mfs_args, +[ +# set to a default value +ac_cv_type_mfs_args=notfound +# look for "struct mfs_args" +if test "$ac_cv_type_mfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct mfs_args a; +], ac_cv_type_mfs_args="struct mfs_args", ac_cv_type_mfs_args=notfound) +fi +]) +if test "$ac_cv_type_mfs_args" != notfound +then + AC_DEFINE_UNQUOTED(mfs_args_t, $ac_cv_type_mfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for PC/FS mount(2) arguments structure +AC_DEFUN(AC_TYPE_PCFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of pcfs mount(2) arguments, +ac_cv_type_pcfs_args, +[ +# set to a default value +ac_cv_type_pcfs_args=notfound + +# look for "struct msdos_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct msdos_args a; +], ac_cv_type_pcfs_args="struct msdos_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct pc_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct pc_args a; +], ac_cv_type_pcfs_args="struct pc_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct pcfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct pcfs_args a; +], ac_cv_type_pcfs_args="struct pcfs_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct msdosfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct msdosfs_args a; +], ac_cv_type_pcfs_args="struct msdosfs_args", ac_cv_type_pcfs_args=notfound) +fi + +]) + +if test "$ac_cv_type_pcfs_args" != notfound +then + AC_DEFINE_UNQUOTED(pcfs_args_t, $ac_cv_type_pcfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the 6th argument to recvfrom() +AC_DEFUN(AC_TYPE_RECVFROM_FROMLEN, +[ +AC_CACHE_CHECK(non-pointer type of 6th (fromlen) argument to recvfrom(), +ac_cv_recvfrom_fromlen, +[ +# select the correct type +case "${host}" in + *-aix4.2* ) + ac_cv_recvfrom_fromlen="size_t" ;; + * ) + ac_cv_recvfrom_fromlen="int" ;; +esac +]) +AC_DEFINE_UNQUOTED(RECVFROM_FROMLEN_TYPE, $ac_cv_recvfrom_fromlen) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for RFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_RFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of rfs mount(2) arguments, +ac_cv_type_rfs_args, +[ +# set to a default value +ac_cv_type_rfs_args=notfound +# look for "struct rfs_args" +if test "$ac_cv_type_rfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct rfs_args a; +], ac_cv_type_rfs_args="struct rfs_args", ac_cv_type_rfs_args=notfound) +fi +]) +if test "$ac_cv_type_rfs_args" != notfound +then + AC_DEFINE_UNQUOTED(rfs_args_t, $ac_cv_type_rfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the type of the 3rd argument (in) to svc_sendreply() call +AC_DEFUN(AC_TYPE_SVC_IN_ARG, +[ +AC_CACHE_CHECK(for type of 3rd arg ('in') arg to svc_sendreply(), +ac_cv_type_svc_in_arg, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as caddr_t, char *, etc. +# set to a default value +ac_cv_type_svc_in_arg=notfound +# look for "caddr_t" +if test "$ac_cv_type_svc_in_arg" = notfound +then +AC_TRY_COMPILE_RPC( +[ SVCXPRT *SX; + xdrproc_t xp; + caddr_t p; + svc_sendreply(SX, xp, p); +], ac_cv_type_svc_in_arg="caddr_t", ac_cv_type_svc_in_arg=notfound) +fi +# look for "char *" +if test "$ac_cv_type_svc_in_arg" = notfound +then +AC_TRY_COMPILE_RPC( +[ SVCXPRT *SX; + xdrproc_t xp; + char *p; + svc_sendreply(SX, xp, p); +], ac_cv_type_svc_in_arg="char *", ac_cv_type_svc_in_arg=notfound) +fi +]) +if test "$ac_cv_type_svc_in_arg" != notfound +then + AC_DEFINE_UNQUOTED(SVC_IN_ARG_TYPE, $ac_cv_type_svc_in_arg) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for type of time_t (usually in ) +AC_DEFUN(AC_TYPE_TIME_T, +[AC_CHECK_TYPE(time_t, long)]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for TMPFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_TMPFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of tmpfs mount(2) arguments, +ac_cv_type_tmpfs_args, +[ +# set to a default value +ac_cv_type_tmpfs_args=notfound +# look for "struct tmpfs_args" +if test "$ac_cv_type_tmpfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct tmpfs_args a; +], ac_cv_type_tmpfs_args="struct tmpfs_args", ac_cv_type_tmpfs_args=notfound) +fi +]) +if test "$ac_cv_type_tmpfs_args" != notfound +then + AC_DEFINE_UNQUOTED(tmpfs_args_t, $ac_cv_type_tmpfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for UFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_UFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of ufs mount(2) arguments, +ac_cv_type_ufs_args, +[ +# set to a default value +ac_cv_type_ufs_args=notfound + +# look for "struct ufs_args" +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct ufs_args a; +], ac_cv_type_ufs_args="struct ufs_args", ac_cv_type_ufs_args=notfound) +fi + +# look for "struct efs_args" (irix) +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct efs_args a; +], ac_cv_type_ufs_args="struct efs_args", ac_cv_type_ufs_args=notfound) +fi + +# look for "struct ufs_specific" (ultrix) +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct ufs_specific a; +], ac_cv_type_ufs_args="struct ufs_specific", ac_cv_type_ufs_args=notfound) +fi + +]) +if test "$ac_cv_type_ufs_args" != notfound +then + AC_DEFINE_UNQUOTED(ufs_args_t, $ac_cv_type_ufs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check for type of xdrproc_t (usually in ) +AC_DEFUN(AC_TYPE_XDRPROC_T, +[ +AC_CACHE_CHECK(for xdrproc_t, +ac_cv_type_xdrproc_t, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +# look for "xdrproc_t" +AC_TRY_COMPILE_RPC( +[ xdrproc_t xdr_int; +], ac_cv_type_xdrproc_t=yes, ac_cv_type_xdrproc_t=no) +]) +if test "$ac_cv_type_xdrproc_t" = yes +then + AC_DEFINE_UNQUOTED(XDRPROC_T_TYPE, xdrproc_t) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl Find the correct type for XFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_XFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of xfs mount(2) arguments, +ac_cv_type_xfs_args, +[ +# set to a default value +ac_cv_type_xfs_args=notfound + +# look for "struct xfs_args" +if test "$ac_cv_type_xfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct xfs_args a; +], ac_cv_type_xfs_args="struct xfs_args", ac_cv_type_xfs_args=notfound) +fi + +]) +if test "$ac_cv_type_xfs_args" != notfound +then + AC_DEFINE_UNQUOTED(xfs_args_t, $ac_cv_type_xfs_args) +fi +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl check the correct type for the 3rd argument to yp_order() +AC_DEFUN(AC_TYPE_YP_ORDER_OUTORDER, +[ +AC_CACHE_CHECK(pointer type of 3rd argument to yp_order(), +ac_cv_yp_order_outorder, +[ +# select the correct type +case "${host_os_name}" in + solaris2* | svr4* | sysv4* | sunos5* | hpux* ) + ac_cv_yp_order_outorder="unsigned long" ;; + osf* ) + # DU4 man page is wrong, headers are right + ac_cv_yp_order_outorder="unsigned int" ;; + * ) + ac_cv_yp_order_outorder=int ;; +esac +]) +AC_DEFINE_UNQUOTED(YP_ORDER_OUTORDER_TYPE, $ac_cv_yp_order_outorder) +]) +dnl ====================================================================== + + +dnl ###################################################################### +dnl end of aclocal.m4 for am-utils-6.x + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN(AM_CONFIG_HEADER, +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AM_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") +AC_DEFINE_UNQUOTED(VERSION, "$VERSION")) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + + +# serial 1 + +AC_DEFUN(AM_PROG_INSTALL, +[AC_REQUIRE([AC_PROG_INSTALL]) +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' +AC_SUBST(INSTALL_SCRIPT)dnl +]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + + +# serial 24 AM_PROG_LIBTOOL +AC_DEFUN(AM_PROG_LIBTOOL, +[AC_REQUIRE([AM_ENABLE_SHARED])dnl +AC_REQUIRE([AM_ENABLE_STATIC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_RANLIB])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AM_PROG_LD])dnl +AC_REQUIRE([AM_PROG_NM])dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +dnl +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Check for any special flags to pass to ltconfig. +libtool_flags= +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$silent" = yes && libtool_flags="$libtool_flags --silent" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$host" in +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +|| AC_MSG_ERROR([libtool configure failed]) +]) + +# AM_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AM_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AM_ENABLE_SHARED, +[define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(shared, +changequote(<<, >>)dnl +<< --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT] +changequote([, ])dnl +[ --enable-shared=PKGS only build shared libraries if the current package + appears as an element in the PKGS list], +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl +]) + +# AM_DISABLE_SHARED - set the default shared flag to --disable-shared +AC_DEFUN(AM_DISABLE_SHARED, +[AM_ENABLE_SHARED(no)]) + +# AM_DISABLE_STATIC - set the default static flag to --disable-static +AC_DEFUN(AM_DISABLE_STATIC, +[AM_ENABLE_STATIC(no)]) + +# AM_ENABLE_STATIC - implement the --enable-static flag +# Usage: AM_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AM_ENABLE_STATIC, +[define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(static, +changequote(<<, >>)dnl +<< --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT] +changequote([, ])dnl +[ --enable-static=PKGS only build shared libraries if the current package + appears as an element in the PKGS list], +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_static=AM_ENABLE_STATIC_DEFAULT)dnl +]) + + +# AM_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN(AM_PROG_LD, +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC]) +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | [A-Za-z]:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(ac_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$ac_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_SUBST(LD) +AM_PROG_LD_GNU +]) + +AC_DEFUN(AM_PROG_LD_GNU, +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi]) +]) + +# AM_PROG_NM - find the path to a BSD-compatible name lister +AC_DEFUN(AM_PROG_NM, +[AC_MSG_CHECKING([for BSD-compatible nm]) +AC_CACHE_VAL(ac_cv_path_NM, +[case "$NM" in +/* | [A-Za-z]:\\*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; +*) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + else + ac_cv_path_NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + ;; +esac]) +NM="$ac_cv_path_NM" +AC_MSG_RESULT([$NM]) +AC_SUBST(NM) +]) + + +dnl AM_PROG_YACC +AC_DEFUN(AM_PROG_YACC, +[AC_PATH_PROGS(YACC, 'bison -y' byacc yacc, yacc) +if test -n "$YACC" +then + case "$YACC" in + *bison*) YACC="$YACC -y" ;; + esac +fi +AC_SUBST(YACC) +]) + + +dnl AM_PROG_LEX +dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT +AC_DEFUN(AM_PROG_LEX, +[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1) +AC_PATH_PROGS(LEX, flex lex, "$missing_dir/missing flex") +AC_PROG_LEX +AC_DECL_YYTEXT]) + diff --git a/m4/amindent b/m4/amindent new file mode 100755 index 0000000..627dc5e --- /dev/null +++ b/m4/amindent @@ -0,0 +1,328 @@ +#!/bin/sh +# indent all am-utils files +if [ ! -f amd/amd.c ]; then + # maybe we are in a subdir + echo cd .. + cd .. +fi +if [ ! -f amd/amd.c ]; then + echo "please run $0 from the top level of the am-utils source tree" + exit 2 +fi + +# files=" +# */*.[hc] +# */*.h.in +# conf/*/*.[hc] +# OLD/*/*.[hc] +# " +#files="conf/*/*.[hc]" +files="specify_the_file.c" + +sunopts=" +-npro +-nbad +-bap +-bbb +-nbc +-br +-ncdb +-d0 +-di0 +-nei +-eei +-nfc1 +-i2 +-lp +-nsc +-TIntFuncPtr +-Tadd_fn +-Taddrlist +-Tam_node +-Tam_ops +-Tam_opts +-Tam_stats +-Tamq_mount_info +-Tamq_mount_info_list +-Tamq_mount_stats +-Tamq_mount_tree +-Tamq_mount_tree_list +-Tamq_mount_tree_p +-Tamq_opt +-Tamq_setopt +-Tamq_string +-Tattrstat +-Tauto_tree +-Tautomount +-Tcallout +-Tcreateargs +-Tdict +-Tdict_data +-Tdict_ent +-Tdirlist +-Tdiropargs +-Tdiropokres +-Tdiropres +-Tdirpath +-Tdisk_fs +-Tentry +-Tether_if +-Texportnode +-Texports +-Tfattr +-Tfh_cache +-Tfhandle +-Tfhandle_t +-Tfhstatus +-Tfilename +-Tfserver +-Tfsmount +-Tftype +-Tfwd_fun +-Tgid_t +-Tgroupnode +-Tgroups +-Thost +-Tioloc +-Tkv +-Tlinkargs +-Tmap_type +-Tmnt_map +-Tmntfs +-Tmntlist +-Tmount +-Tmountbody +-Tmountlist +-Tname +-Tnfs_fh +-Tnfs_private +-Tnfscookie +-Tnfspath +-Tnfsstat +-Tnfstime +-Tnfsx_mnt +-Tnsw_lookup +-Tnsw_switchconfig +-Topt_apply +-Tpid_t +-Tpjob +-Tqelem +-Treadargs +-Treaddirargs +-Treaddirres +-Treadlinkres +-Treadokres +-Treadres +-Trenameargs +-Trpc_forward +-Tsattr +-Tsattrargs +-Tserv_state +-Tstatfsokres +-Tstatfsres +-Tsymlinkargs +-Ttask_fun +-Ttime_t +-Ttime_type +-Tuid2home_t +-Tuid_t +-Tusername2uid_t +-Tvffserver +-Tvfmount_fs +-Tvfs_init +-Tvfs_match +-Tvfumount_fs +-Tvmount_fs +-Tvmounted +-Tvoidp +-Tvumount_fs +-Tvumounted +-Twriteargs +" + +gnuopts=" +-npro +-nbad +-bap +-sob +-fca +-nfc1 +-ncdb +-br +-ce +-ss +-npcs +-cs +-nbc +-psl +-lp +-sc +-T IntFuncPtr +-T add_fn +-T addrlist +-T am_node +-T am_ops +-T am_opts +-T am_stats +-T amq_mount_info +-T amq_mount_info_list +-T amq_mount_stats +-T amq_mount_tree +-T amq_mount_tree_list +-T amq_mount_tree_p +-T amq_opt +-T amq_setopt +-T amq_string +-T attrstat +-T auto_tree +-T automount +-T callout +-T createargs +-T dict +-T dict_data +-T dict_ent +-T dirlist +-T diropargs +-T diropokres +-T diropres +-T dirpath +-T disk_fs +-T entry +-T ether_if +-T exportnode +-T exports +-T fattr +-T fh_cache +-T fhandle +-T fhandle_t +-T fhstatus +-T filename +-T fserver +-T fsmount +-T ftype +-T fwd_fun +-T gid_t +-T groupnode +-T groups +-T host +-T ioloc +-T kv +-T linkargs +-T map_type +-T mnt_map +-T mntfs +-T mntlist +-T mount +-T mountbody +-T mountlist +-T name +-T nfs_fh +-T nfs_private +-T nfscookie +-T nfspath +-T nfsstat +-T nfstime +-T nfsx_mnt +-T nsw_lookup +-T nsw_switchconfig +-T opt_apply +-T pid_t +-T pjob +-T qelem +-T readargs +-T readdirargs +-T readdirres +-T readlinkres +-T readokres +-T readres +-T renameargs +-T rpc_forward +-T sattr +-T sattrargs +-T serv_state +-T statfsokres +-T statfsres +-T symlinkargs +-T task_fun +-T time_t +-T time_type +-T uid2home_t +-T uid_t +-T username2uid_t +-T vffserver +-T vfmount_fs +-T vfs_init +-T vfs_match +-T vfumount_fs +-T vmount_fs +-T vmounted +-T voidp +-T vumount_fs +-T vumounted +-T writeargs +" + + +#prefix=".C" + +# check args +if [ $# -lt 1 ]; then + echo "Usage: $0 <-g|-s> [files...]" + exit 1 +fi +if [ $1 = "-g" -o "$1" = "-s" ]; then + OPT=$1 + shift +else + echo "Usage: $0 <-g|-s> [files...]" + exit 1 +fi +# check if specified files to process +if [ $# -gt 0 ]; then + files="$*" +fi + +for i in ${files}; do + if [ ! -f $i ]; then + echo "No such file: $i" + continue + fi + + case $OPT in + + -g ) + icmd="/usr/local/gnu/bin/indent" + cmd="${icmd} $i -o $i$prefix $gnuopts" + showcmd="${icmd} $i -o $i$prefix" + + ;; + + -s ) + icmd="/opt/SUNWspro/bin/indent" + cmd="${icmd} $i $i$prefix $sunopts" + showcmd="${icmd} $i $i$prefix" + ;; + + * ) + echo "Usage: $0 <-g|-s>" + exit 1 + ;; + esac + + echo ${showcmd} + ${cmd} + if [ $? != 0 ]; then + echo Failed! + exit $? + fi + + # remove trailing spaces + cmd="./aux/rmtspc $i" + echo ${cmd} + ${cmd} + if [ $? != 0 ]; then + echo Failed! + exit $? + fi + +done diff --git a/m4/autopat b/m4/autopat new file mode 100755 index 0000000..5d03a0d --- /dev/null +++ b/m4/autopat @@ -0,0 +1,36 @@ +#!/bin/bash -norc +# find patterns of cache entries to automatically remove from config.cache +# Used by am-utils developers. +# Erez Zadok +#set -x + +macdir="../aux/macros" + +# find the right directory +if [ ! -d $macdir ]; then + echo "Could not find $macdir directory." + exit 2 +fi + +# skip if no config.cache file +if [ ! -f config.cache ]; then + echo "Not in the A.cpu-company-system." + exit 2 +fi + +# look for files that changed vs. config.cache +pat="" +for i in ${macdir}/*.m4; do + if test $i -nt config.cache; then + n=`egrep '^ac_cv_' $i |sed 's/[^a-zA-Z0-9_].*//g'|sort|uniq` + if test -z "$n"; then + continue; + fi + if test -z "$pat"; then + pat="$n" + else + pat="$pat|$n" + fi + fi +done +echo "$pat" diff --git a/m4/aux_conf.h.in b/m4/aux_conf.h.in new file mode 100644 index 0000000..7740d75 --- /dev/null +++ b/m4/aux_conf.h.in @@ -0,0 +1,56 @@ +/* + * aux_conf.h: + * This file gets "filled in" for each architecture. + * @configure_input@ + */ + +#ifndef _AUX_CONF_H +#define _AUX_CONF_H + +/* + * The next line is a literal inclusion of a file which includes a + * definition for the MOUNT_TRAP macro for a particular architecture. + * If it defines the wrong entry, check the AC_CHECK_MOUNT_TRAP m4 macro + * in $srcdir/aux/macros. + */ +@am_utils_mount_trap@ +/* End of included MOUNT_TRAP macro definition file */ + +/* + * The next line is a literal replacement of a variable which defines the + * the UNMOUNT_TRAP macro for a particular architecture. + * If it defines the wrong entry, check the AC_CHECK_UNMOUNT_CALL m4 macro + * in $srcdir/aclocal.m4. If the arguments are being defined wrong, check + * the macro AC_CHECK_UNMOUNT_ARGS in $srcdir/aux/macros. + */ +#define UNMOUNT_TRAP(mnt) @am_utils_unmount_call@(@am_utils_unmount_args@) +/* End of replaced UNMOUNT_TRAP macro definition */ + +/* + * The next line is a literal inclusion of a file which includes a + * definition for the NFS_FH_DREF macro for a particular architecture. + * If it defines the wrong entry, check the AC_CHECK_NFS_FH_DREF m4 macro + * in $srcdir/aux/macros. + */ +@am_utils_nfs_fh_dref@ +/* End of included NFS_FH_DREF macro definition file */ + +/* + * The next line is a literal inclusion of a file which includes a + * definition for the NFS_SA_DREF macro for a particular architecture. + * If it defines the wrong entry, check the AC_CHECK_NFS_SA_DREF m4 macro + * in $srcdir/aux/macros. + */ +@am_utils_nfs_sa_dref@ +/* End of included NFS_SA_DREF macro definition file */ + +/* + * The next line is a literal inclusion of a file which includes a + * definition for the NFS_HN_DREF macro for a particular architecture. + * If it defines the wrong entry, check the AC_CHECK_NFS_HN_DREF m4 macro + * in $srcdir/aux/macros. + */ +@am_utils_nfs_hn_dref@ +/* End of included NFS_HN_DREF macro definition file */ + +#endif /* not _AUX_CONF_H */ diff --git a/m4/chop-aclocal.pl b/m4/chop-aclocal.pl new file mode 100755 index 0000000..2bf6b75 --- /dev/null +++ b/m4/chop-aclocal.pl @@ -0,0 +1,19 @@ +#!/bin/perl -w + +$seq = 1; +$file = ""; +$file = sprintf("tmp/%02d.m4", $seq); +open(FILE, ">$file") || die "cannot open \"$file\": $!"; +printf(STDOUT "FILE: $file\n"); +while (<>) { + if (/^$/) { + close(FILE); + $seq++; + $file = sprintf("tmp/%02d.m4", $seq); + open(FILE, ">$file") || die "cannot open \"$file\": $!"; + printf(STDOUT "FILE: $file\n"); + next; + } + printf FILE; +} +close(FILE); diff --git a/m4/config.guess b/m4/config.guess new file mode 100755 index 0000000..30230b3 --- /dev/null +++ b/m4/config.guess @@ -0,0 +1,890 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <dummy.s + .globl main + .ent main +main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:NetBSD:*:*) + echo m68k-cbm-netbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + arm32:NetBSD:*:*) + echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:NetBSD:*:*) + echo m68k-atari-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:NetBSD:*:*) + echo m68k-sun-netbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:NetBSD:*:*) + echo m68k-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >dummy.c + int main (argc, argv) int argc; char **argv; { + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + ${CC-cc} dummy.c -o dummy \ + && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[3478]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; + 9000/8?? ) HP_ARCH=hppa1.0 ;; + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin32 + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin32 + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + # uname on the ARM produces all sorts of strangeness, and we need to + # filter it out. + case "$UNAME_MACHINE" in + arm* | sa110*) UNAME_MACHINE="arm" ;; + esac + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. + ld_help_string=`ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; + i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; + sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + sed 's/^ //' <dummy.s + .globl main + .ent main + main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + LIBC="" + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + + objdump --private-headers dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >dummy.c < +main(argc, argv) + int argc; + char *argv[]; +{ +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 +rm -f dummy.c dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/m4/config.h.in b/m4/config.h.in new file mode 100644 index 0000000..972c1aa --- /dev/null +++ b/m4/config.h.in @@ -0,0 +1,1939 @@ +/* aux/config.h.in. Generated automatically from ./aux/configure.in by autoheader. */ +/* + * Start of am-utils-6.x config.h file. + * Erez Zadok + * + * DO NOT EDIT BY HAND. + * Note: acconfig.h generates config.h.in, which generates config.h. + */ + +#ifndef _CONFIG_H +#define _CONFIG_H + + +/* + * Check for types of amd filesystems available. + */ + +/* Define if have automount filesystem */ +#undef HAVE_AM_FS_AUTO + +/* Define if have direct automount filesystem */ +#undef HAVE_AM_FS_DIRECT + +/* Define if have "top-level" filesystem */ +#undef HAVE_AM_FS_TOPLVL + +/* Define if have error filesystem */ +#undef HAVE_AM_FS_ERROR + +/* Define if have inheritance filesystem */ +#undef HAVE_AM_FS_INHERIT + +/* Define if have program filesystem */ +#undef HAVE_AM_FS_PROGRAM + +/* Define if have symbolic-link filesystem */ +#undef HAVE_AM_FS_LINK + +/* Define if have symlink with exitence check filesystem */ +#undef HAVE_AM_FS_LINKX + +/* Define if have NFS host-tree filesystem */ +#undef HAVE_AM_FS_HOST + +/* Define if have nfsl (NFS with local link check) filesystem */ +#undef HAVE_AM_FS_NFSL + +/* Define if have multi-NFS filesystem */ +#undef HAVE_AM_FS_NFSX + +/* Define if have union filesystem */ +#undef HAVE_AM_FS_UNION + +/* Define if have Sun's autofs filesystem (NO LONGER NEEDED?) */ +/* #undef HAVE_AM_FS_AUTOFS */ + + +/* + * Check for types of maps available. + */ + +/* Define if have file maps (everyone should have it!) */ +#undef HAVE_MAP_FILE + +/* Define if have NIS maps */ +#undef HAVE_MAP_NIS + +/* Define if have NIS+ maps */ +#undef HAVE_MAP_NISPLUS + +/* Define if have DBM maps */ +#undef HAVE_MAP_DBM + +/* Define if have NDBM maps */ +#undef HAVE_MAP_NDBM + +/* Define if have HESIOD maps */ +#undef HAVE_MAP_HESIOD + +/* Define if have LDAP maps */ +#undef HAVE_MAP_LDAP + +/* Define if have PASSWD maps */ +#undef HAVE_MAP_PASSWD + +/* Define if have UNION maps */ +#undef HAVE_MAP_UNION + +/* + * Check for filesystem types available. + */ + +/* Define if have UFS filesystem */ +#undef HAVE_FS_UFS + +/* Define if have XFS filesystem (irix) */ +#undef HAVE_FS_XFS + +/* Define if have EFS filesystem (irix) */ +#undef HAVE_FS_EFS + +/* Define if have NFS filesystem */ +#undef HAVE_FS_NFS + +/* Define if have NFS3 filesystem */ +#undef HAVE_FS_NFS3 + +/* Define if have PCFS filesystem */ +#undef HAVE_FS_PCFS + +/* Define if have LOFS filesystem */ +#undef HAVE_FS_LOFS + +/* Define if have HSFS filesystem */ +#undef HAVE_FS_HSFS + +/* Define if have CDFS filesystem */ +#undef HAVE_FS_CDFS + +/* Define if have TFS filesystem */ +#undef HAVE_FS_TFS + +/* Define if have TMPFS filesystem */ +#undef HAVE_FS_TMPFS + +/* Define if have MFS filesystem */ +#undef HAVE_FS_MFS + +/* Define if have CFS (crypto) filesystem */ +#undef HAVE_FS_CFS + +/* Define if have AUTOFS filesystem */ +#undef HAVE_FS_AUTOFS + +/* Define if have CACHEFS filesystem */ +#undef HAVE_FS_CACHEFS + +/* Define if have NULLFS (loopback on bsd44) filesystem */ +#undef HAVE_FS_NULLFS + +/* Define if have UNIONFS filesystem */ +#undef HAVE_FS_UNIONFS + +/* Define if have UMAPFS (uid/gid mapping) filesystem */ +#undef HAVE_FS_UMAPFS + + +/* + * Check for the type of the mount(2) system name for a filesystem. + * Normally this is "nfs" (e.g. Solaris) or an integer (older systems) + */ + +/* Mount(2) type/name for UFS filesystem */ +#undef MOUNT_TYPE_UFS + +/* Mount(2) type/name for XFS filesystem (irix) */ +#undef MOUNT_TYPE_XFS + +/* Mount(2) type/name for EFS filesystem (irix) */ +#undef MOUNT_TYPE_EFS + +/* Mount(2) type/name for NFS filesystem */ +#undef MOUNT_TYPE_NFS + +/* Mount(2) type/name for NFS3 filesystem */ +#undef MOUNT_TYPE_NFS3 + +/* Mount(2) type/name for PCFS filesystem */ +/* XXX: conf/trap/trap_hpux.h may override this definition for HPUX 9.0 */ +#undef MOUNT_TYPE_PCFS + +/* Mount(2) type/name for LOFS filesystem */ +#undef MOUNT_TYPE_LOFS + +/* Mount(2) type/name for CDFS filesystem */ +#undef MOUNT_TYPE_CDFS + +/* Mount(2) type/name for TFS filesystem */ +#undef MOUNT_TYPE_TFS + +/* Mount(2) type/name for TMPFS filesystem */ +#undef MOUNT_TYPE_TMPFS + +/* Mount(2) type/name for MFS filesystem */ +#undef MOUNT_TYPE_MFS + +/* Mount(2) type/name for CFS (crypto) filesystem */ +#undef MOUNT_TYPE_CFS + +/* Mount(2) type/name for AUTOFS filesystem */ +#undef MOUNT_TYPE_AUTOFS + +/* Mount(2) type/name for CACHEFS filesystem */ +#undef MOUNT_TYPE_CACHEFS + +/* Mount(2) type/name for IGNORE filesystem (not real just ignore for df) */ +#undef MOUNT_TYPE_IGNORE + +/* Mount(2) type/name for NULLFS (loopback on bsd44) filesystem */ +#undef MOUNT_TYPE_NULLFS + +/* Mount(2) type/name for UNIONFS filesystem */ +#undef MOUNT_TYPE_UNIONFS + +/* Mount(2) type/name for UMAPFS (uid/gid mapping) filesystem */ +#undef MOUNT_TYPE_UMAPFS + + +/* + * Check for the string name for the mount-table of a filesystem. + */ + +/* Mount-table entry name for UFS filesystem */ +#undef MNTTAB_TYPE_UFS + +/* Mount-table entry name for XFS filesystem (irix) */ +#undef MNTTAB_TYPE_XFS + +/* Mount-table entry name for EFS filesystem (irix) */ +#undef MNTTAB_TYPE_EFS + +/* Mount-table entry name for NFS filesystem */ +#undef MNTTAB_TYPE_NFS + +/* Mount-table entry name for NFS3 filesystem */ +#undef MNTTAB_TYPE_NFS3 + +/* Mount-table entry name for PCFS filesystem */ +#undef MNTTAB_TYPE_PCFS + +/* Mount-table entry name for LOFS filesystem */ +#undef MNTTAB_TYPE_LOFS + +/* Mount-table entry name for CDFS filesystem */ +#undef MNTTAB_TYPE_CDFS + +/* Mount-table entry name for TFS filesystem */ +#undef MNTTAB_TYPE_TFS + +/* Mount-table entry name for TMPFS filesystem */ +#undef MNTTAB_TYPE_TMPFS + +/* Mount-table entry name for MFS filesystem */ +#undef MNTTAB_TYPE_MFS + +/* Mount-table entry name for CFS (crypto) filesystem */ +#undef MNTTAB_TYPE_CFS + +/* Mount-table entry name for AUTOFS filesystem */ +#undef MNTTAB_TYPE_AUTOFS + +/* Mount-table entry name for CACHEFS filesystem */ +#undef MNTTAB_TYPE_CACHEFS + +/* Mount-table entry name for NULLFS (loopback on bsd44) filesystem */ +#undef MNTTAB_TYPE_NULLFS + +/* Mount-table entry name for UNIONFS filesystem */ +#undef MNTTAB_TYPE_UNIONFS + +/* Mount-table entry name for UMAPFS (uid/gid mapping) filesystem */ +#undef MNTTAB_TYPE_UMAPFS + +/* + * Name of mount table file name. + */ +#undef MNTTAB_FILE_NAME + +/* Name of mount type to hide amd mount from df(1) */ +#undef HIDE_MOUNT_TYPE + +/* + * Names of various mount table option strings. + */ + +/* Mount Table option string: Read only */ +#undef MNTTAB_OPT_RO + +/* Mount Table option string: Read/write */ +#undef MNTTAB_OPT_RW + +/* Mount Table option string: Read/write with quotas */ +#undef MNTTAB_OPT_RQ + +/* Mount Table option string: Check quotas */ +#undef MNTTAB_OPT_QUOTA + +/* Mount Table option string: Don't check quotas */ +#undef MNTTAB_OPT_NOQUOTA + +/* Mount Table option string: action to taken on error */ +#undef MNTTAB_OPT_ONERROR + +/* Mount Table option string: min. time between inconsistencies */ +#undef MNTTAB_OPT_TOOSOON + +/* Mount Table option string: Soft mount */ +#undef MNTTAB_OPT_SOFT + +/* Mount Table option string: spongy mount */ +#undef MNTTAB_OPT_SPONGY + +/* Mount Table option string: Hard mount */ +#undef MNTTAB_OPT_HARD + +/* Mount Table option string: Set uid allowed */ +#undef MNTTAB_OPT_SUID + +/* Mount Table option string: Set uid not allowed */ +#undef MNTTAB_OPT_NOSUID + +/* Mount Table option string: SysV-compatible gid on create */ +#undef MNTTAB_OPT_GRPID + +/* Mount Table option string: Change mount options */ +#undef MNTTAB_OPT_REMOUNT + +/* Mount Table option string: Disallow mounts on subdirs */ +#undef MNTTAB_OPT_NOSUB + +/* Mount Table option string: Do multi-component lookup */ +#undef MNTTAB_OPT_MULTI + +/* Mount Table option string: Allow NFS ops to be interrupted */ +#undef MNTTAB_OPT_INTR + +/* Mount Table option string: Don't allow interrupted ops */ +#undef MNTTAB_OPT_NOINTR + +/* Mount Table option string: NFS server IP port number */ +#undef MNTTAB_OPT_PORT + +/* Mount Table option string: Secure (AUTH_DES) mounting */ +#undef MNTTAB_OPT_SECURE + +/* Mount Table option string: Secure (AUTH_Kerb) mounting */ +#undef MNTTAB_OPT_KERB + +/* Mount Table option string: Max NFS read size (bytes) */ +#undef MNTTAB_OPT_RSIZE + +/* Mount Table option string: Max NFS write size (bytes) */ +#undef MNTTAB_OPT_WSIZE + +/* Mount Table option string: NFS timeout (1/10 sec) */ +#undef MNTTAB_OPT_TIMEO + +/* Mount Table option string: Max retransmissions (soft mnts) */ +#undef MNTTAB_OPT_RETRANS + +/* Mount Table option string: Attr cache timeout (sec) */ +#undef MNTTAB_OPT_ACTIMEO + +/* Mount Table option string: Min attr cache timeout (files) */ +#undef MNTTAB_OPT_ACREGMIN + +/* Mount Table option string: Max attr cache timeout (files) */ +#undef MNTTAB_OPT_ACREGMAX + +/* Mount Table option string: Min attr cache timeout (dirs) */ +#undef MNTTAB_OPT_ACDIRMIN + +/* Mount Table option string: Max attr cache timeout (dirs) */ +#undef MNTTAB_OPT_ACDIRMAX + +/* Mount Table option string: Don't cache attributes at all */ +#undef MNTTAB_OPT_NOAC + +/* Mount Table option string: No close-to-open consistency */ +#undef MNTTAB_OPT_NOCTO + +/* Mount Table option string: Do mount retries in background */ +#undef MNTTAB_OPT_BG + +/* Mount Table option string: Do mount retries in foreground */ +#undef MNTTAB_OPT_FG + +/* Mount Table option string: Number of mount retries */ +#undef MNTTAB_OPT_RETRY + +/* Mount Table option string: Device id of mounted fs */ +#undef MNTTAB_OPT_DEV + +/* Mount Table option string: Filesystem id of mounted fs */ +#undef MNTTAB_OPT_FSID + +/* Mount Table option string: Get static pathconf for mount */ +#undef MNTTAB_OPT_POSIX + +/* Mount Table option string: Automount map */ +#undef MNTTAB_OPT_MAP + +/* Mount Table option string: Automount direct map mount */ +#undef MNTTAB_OPT_DIRECT + +/* Mount Table option string: Automount indirect map mount */ +#undef MNTTAB_OPT_INDIRECT + +/* Mount Table option string: Local locking (no lock manager) */ +#undef MNTTAB_OPT_LLOCK + +/* Mount Table option string: Ignore this entry */ +#undef MNTTAB_OPT_IGNORE + +/* Mount Table option string: No auto (what?) */ +#undef MNTTAB_OPT_NOAUTO + +/* Mount Table option string: No connection */ +#undef MNTTAB_OPT_NOCONN + +/* Mount Table option string: protocol version number indicator */ +#undef MNTTAB_OPT_VERS + +/* Mount Table option string: protocol network_id indicator */ +#undef MNTTAB_OPT_PROTO + +/* Mount Table option string: Synchronous local directory ops */ +#undef MNTTAB_OPT_SYNCDIR + +/* Mount Table option string: Do no allow setting sec attrs */ +#undef MNTTAB_OPT_NOSETSEC + +/* Mount Table option string: set symlink cache time-to-live */ +#undef MNTTAB_OPT_SYMTTL + +/* Mount Table option string: compress */ +#undef MNTTAB_OPT_COMPRESS + +/* Mount Table option string: paging threshold */ +#undef MNTTAB_OPT_PGTHRESH + +/* Mount Table option string: max groups */ +#undef MNTTAB_OPT_MAXGROUPS + +/* + * Generic mount(2) options (hex numbers) + */ + +/* asynchronous filesystem access */ +#undef MNT2_GEN_OPT_ASYNC + +/* cache (what?) */ +#undef MNT2_GEN_OPT_CACHE + +/* 6-argument mount */ +#undef MNT2_GEN_OPT_DATA + +/* old (4-argument) mount (compatibility) */ +#undef MNT2_GEN_OPT_FSS + +/* journaling filesystem (AIX's UFS/FFS) */ +#undef MNT2_GEN_OPT_JFS + +/* old BSD group-id on create */ +#undef MNT2_GEN_OPT_GRPID + +/* do multi-component lookup on files */ +#undef MNT2_GEN_OPT_MULTI + +/* use type string instead of int */ +#undef MNT2_GEN_OPT_NEWTYPE + +/* NFS mount */ +#undef MNT2_GEN_OPT_NFS + +/* nocache (what?) */ +#undef MNT2_GEN_OPT_NOCACHE + +/* not a device */ +#undef MNT2_GEN_OPT_NODEV + +/* no exec calls allowed */ +#undef MNT2_GEN_OPT_NOEXEC + +/* not a device */ +#undef MNT2_GEN_OPT_NONDEV + +/* Disallow mounts beneath this mount */ +#undef MNT2_GEN_OPT_NOSUB + +/* Setuid programs disallowed */ +#undef MNT2_GEN_OPT_NOSUID + +/* Return ENAMETOOLONG for long filenames */ +#undef MNT2_GEN_OPT_NOTRUNC + +/* allow overlay mounts */ +#undef MNT2_GEN_OPT_OVERLAY + +/* check quotas */ +#undef MNT2_GEN_OPT_QUOTA + +/* Read-only */ +#undef MNT2_GEN_OPT_RDONLY + +/* change options on an existing mount */ +#undef MNT2_GEN_OPT_REMOUNT + +/* read only */ +#undef MNT2_GEN_OPT_RONLY + +/* synchronize data immediately to filesystem */ +#undef MNT2_GEN_OPT_SYNC + +/* synchronous filesystem access (same as SYNC) */ +#undef MNT2_GEN_OPT_SYNCHRONOUS + +/* Mount with Sys 5-specific semantics */ +#undef MNT2_GEN_OPT_SYS5 + +/* Union mount */ +#undef MNT2_GEN_OPT_UNION + +/* + * NFS-specific mount(2) options (hex numbers) + */ + +/* hide mount type from df(1) */ +#undef MNT2_NFS_OPT_AUTO + +/* set max secs for dir attr cache */ +#undef MNT2_NFS_OPT_ACDIRMAX + +/* set min secs for dir attr cache */ +#undef MNT2_NFS_OPT_ACDIRMIN + +/* set max secs for file attr cache */ +#undef MNT2_NFS_OPT_ACREGMAX + +/* set min secs for file attr cache */ +#undef MNT2_NFS_OPT_ACREGMIN + +/* Authentication error */ +#undef MNT2_NFS_OPT_AUTHERR + +/* set dead server retry thresh */ +#undef MNT2_NFS_OPT_DEADTHRESH + +/* Dismount in progress */ +#undef MNT2_NFS_OPT_DISMINPROG + +/* Dismounted */ +#undef MNT2_NFS_OPT_DISMNT + +/* Don't estimate rtt dynamically */ +#undef MNT2_NFS_OPT_DUMBTIMR + +/* System V-style gid inheritance */ +#undef MNT2_NFS_OPT_GRPID + +/* Has authenticator */ +#undef MNT2_NFS_OPT_HASAUTH + +/* provide name of server's fs to system */ +#undef MNT2_NFS_OPT_FSNAME + +/* set hostname for error printf */ +#undef MNT2_NFS_OPT_HOSTNAME + +/* ignore mount point */ +#undef MNT2_NFS_OPT_IGNORE + +/* allow interrupts on hard mount */ +#undef MNT2_NFS_OPT_INT + +/* Bits set internally */ +#undef MNT2_NFS_OPT_INTERNAL + +/* Use Kerberos authentication */ +#undef MNT2_NFS_OPT_KERB + +/* use kerberos credentials */ +#undef MNT2_NFS_OPT_KERBEROS + +/* transport's knetconfig structure */ +#undef MNT2_NFS_OPT_KNCONF + +/* set lease term (nqnfs) */ +#undef MNT2_NFS_OPT_LEASETERM + +/* Local locking (no lock manager) */ +#undef MNT2_NFS_OPT_LLOCK + +/* set maximum grouplist size */ +#undef MNT2_NFS_OPT_MAXGRPS + +/* Mnt server for mnt point */ +#undef MNT2_NFS_OPT_MNTD + +/* Assume writes were mine */ +#undef MNT2_NFS_OPT_MYWRITE + +/* mount NFS Version 3 */ +#undef MNT2_NFS_OPT_NFSV3 + +/* don't cache attributes */ +#undef MNT2_NFS_OPT_NOAC + +/* Don't Connect the socket */ +#undef MNT2_NFS_OPT_NOCONN + +/* no close-to-open consistency */ +#undef MNT2_NFS_OPT_NOCTO + +/* disallow interrupts on hard mounts */ +#undef MNT2_NFS_OPT_NOINT + +/* Get lease for lookup */ +#undef MNT2_NFS_OPT_NQLOOKLEASE + +/* Use Nqnfs protocol */ +#undef MNT2_NFS_OPT_NQNFS + +/* static pathconf kludge info */ +#undef MNT2_NFS_OPT_POSIX + +/* Rcv socket lock */ +#undef MNT2_NFS_OPT_RCVLOCK + +/* Do lookup with readdir (nqnfs) */ +#undef MNT2_NFS_OPT_RDIRALOOK + +/* set read ahead */ +#undef MNT2_NFS_OPT_READAHEAD + +/* Allocate a reserved port */ +#undef MNT2_NFS_OPT_RESVPORT + +/* set number of request retrys */ +#undef MNT2_NFS_OPT_RETRANS + +/* read only */ +#undef MNT2_NFS_OPT_RONLY + +/* use RPC to do secure NFS time sync */ +#undef MNT2_NFS_OPT_RPCTIMESYNC + +/* set read size */ +#undef MNT2_NFS_OPT_RSIZE + +/* secure mount */ +#undef MNT2_NFS_OPT_SECURE + +/* Send socket lock */ +#undef MNT2_NFS_OPT_SNDLOCK + +/* soft mount (hard is default) */ +#undef MNT2_NFS_OPT_SOFT + +/* spongy mount */ +#undef MNT2_NFS_OPT_SPONGY + +/* set initial timeout */ +#undef MNT2_NFS_OPT_TIMEO + +/* use TCP for mounts */ +#undef MNT2_NFS_OPT_TCP + +/* Wait for authentication */ +#undef MNT2_NFS_OPT_WAITAUTH + +/* Wants an authenticator */ +#undef MNT2_NFS_OPT_WANTAUTH + +/* Want receive socket lock */ +#undef MNT2_NFS_OPT_WANTRCV + +/* Want send socket lock */ +#undef MNT2_NFS_OPT_WANTSND + +/* set write size */ +#undef MNT2_NFS_OPT_WSIZE + +/* set symlink cache time-to-live */ +#undef MNT2_NFS_OPT_SYMTTL + +/* paging threshold */ +#undef MNT2_NFS_OPT_PGTHRESH + +/* + * CDFS-specific mount(2) options (hex numbers) + */ + +/* Ignore permission bits */ +#undef MNT2_CDFS_OPT_DEFPERM + +/* Use on-disk permission bits */ +#undef MNT2_CDFS_OPT_NODEFPERM + +/* Strip off extension from version string */ +#undef MNT2_CDFS_OPT_NOVERSION + +/* Use Rock Ridge Interchange Protocol (RRIP) extensions */ +#undef MNT2_CDFS_OPT_RRIP + +/* + * Existence of fields in structures. + */ + +/* does mntent_t have mnt_cnode field? */ +#undef HAVE_FIELD_MNTENT_T_MNT_CNODE + +/* does mntent_t have mnt_time field? */ +#undef HAVE_FIELD_MNTENT_T_MNT_TIME + +/* does mntent_t have mnt_time field and is of type "char *" ? */ +#undef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING + +/* does mntent_t have mnt_ro field? */ +#undef HAVE_FIELD_MNTENT_T_MNT_RO + +/* does cdfs_args_t have flags field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_FLAGS + +/* does cdfs_args_t have fspec field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_FSPEC + +/* does cdfs_args_t have iso_flags field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_ISO_FLAGS + +/* does cdfs_args_t have iso_pgthresh field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_ISO_PGTHRESH + +/* does cdfs_args_t have norrip field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_NORRIP + +/* does cdfs_args_t have ssector field? */ +#undef HAVE_FIELD_CDFS_ARGS_T_SSECTOR + +/* does pcfs_args_t have dsttime field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_DSTTIME + +/* does pcfs_args_t have fspec field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_FSPEC + +/* does pcfs_args_t have gid field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_GID + +/* does pcfs_args_t have mask field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_MASK + +/* does pcfs_args_t have secondswest field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_SECONDSWEST + +/* does pcfs_args_t have uid field? */ +#undef HAVE_FIELD_PCFS_ARGS_T_UID + +/* does ufs_args_t have flags field? */ +#undef HAVE_FIELD_UFS_ARGS_T_FLAGS + +/* does ufs_args_t have fspec field? */ +#undef HAVE_FIELD_UFS_ARGS_T_FSPEC + +/* does efs_args_t have flags field? */ +#undef HAVE_FIELD_EFS_ARGS_T_FLAGS + +/* does efs_args_t have fspec field? */ +#undef HAVE_FIELD_EFS_ARGS_T_FSPEC + +/* does xfs_args_t have flags field? */ +#undef HAVE_FIELD_XFS_ARGS_T_FLAGS + +/* does xfs_args_t have fspec field? */ +#undef HAVE_FIELD_XFS_ARGS_T_FSPEC + +/* does ufs_ars_t have ufs_flags field? */ +#undef HAVE_FIELD_UFS_ARGS_T_UFS_FLAGS + +/* does ufs_ars_t have ufs_pgthresh field? */ +#undef HAVE_FIELD_UFS_ARGS_T_UFS_PGTHRESH + +/* does struct fhstatus have an fhs_fh field? */ +#undef HAVE_FIELD_STRUCT_FHSTATUS_FHS_FH + +/* does struct statfs have an f_fstypename field? */ +#undef HAVE_FIELD_STRUCT_STATFS_F_FSTYPENAME + +/* does struct nfs_args have an acdirmin field? */ +#undef HAVE_FIELD_NFS_ARGS_T_ACDIRMIN + +/* does struct nfs_args have an acregmin field? */ +#undef HAVE_FIELD_NFS_ARGS_T_ACREGMIN + +/* does struct nfs_args have an fh_len field? */ +#undef HAVE_FIELD_NFS_ARGS_T_FH_LEN + +/* does struct nfs_args have an fhsize field? */ +#undef HAVE_FIELD_NFS_ARGS_T_FHSIZE + +/* does struct nfs_args have an gfs_flags field? */ +#undef HAVE_FIELD_NFS_ARGS_T_GFS_FLAGS + +/* does struct nfs_args have an optstr field? */ +#undef HAVE_FIELD_NFS_ARGS_T_OPTSTR + +/* does struct nfs_args have a proto field? */ +#undef HAVE_FIELD_NFS_ARGS_T_PROTO + +/* does struct nfs_args have a socket type field? */ +#undef HAVE_FIELD_NFS_ARGS_T_SOTYPE + +/* does struct nfs_args have a version field? */ +#undef HAVE_FIELD_NFS_ARGS_T_VERSION + +/* does struct ifreq have field ifr_addr? */ +#undef HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR + +/* does struct sockaddr have field sa_len? */ +#undef HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN + +/* does struct autofs_args have an addr field? */ +#undef HAVE_FIELD_AUTOFS_ARGS_T_ADDR + +/* does umntrequest have an rdevid field? */ +#undef HAVE_FIELD_UMNTREQUEST_RDEVID + + +/* should signal handlers be reinstalled? */ +#undef REINSTALL_SIGNAL_HANDLER + + +/**************************************************************************/ +/*** Everything above this line is part of the "TOP" of acconfig.h. ***/ +/**************************************************************************/ + + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +#undef _ALL_SOURCE +#endif + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define to the type of elements in the array set by `getgroups'. + Usually this is either `int' or `gid_t'. */ +#undef GETGROUPS_T + +/* Define to `int' if doesn't define. */ +#undef gid_t + +/* Define if you support file names longer than 14 characters. */ +#undef HAVE_LONG_FILE_NAMES + +/* Define if system calls automatically restart after interruption + by a signal. */ +#undef HAVE_RESTARTABLE_SYSCALLS + +/* Define if your struct stat has st_rdev. */ +#undef HAVE_ST_RDEV + +/* Define if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define if you have . */ +#undef HAVE_VFORK_H + +/* Define if you have the wait3 system call. */ +#undef HAVE_WAIT3 + +/* Define as __inline if that's what the C compiler calls it. */ +#undef inline + +/* Define to `int' if doesn't define. */ +#undef mode_t + +/* Define if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Define to `int' if doesn't define. */ +#undef pid_t + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* Define if the `S_IS*' macros in do not work properly. */ +#undef STAT_MACROS_BROKEN + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Define if your declares struct tm. */ +#undef TM_IN_SYS_TIME + +/* Define to `int' if doesn't define. */ +#undef uid_t + +/* Define vfork as fork if vfork does not work. */ +#undef vfork + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* Define if lex declares yytext as a char * by default, not a char[]. */ +#undef YYTEXT_POINTER + +/* Turn off general debugging by default */ +#undef DEBUG + +/* Turn off memory debugging by default */ +#undef DEBUG_MEM + +/* Enable "amq -M" remote mount code (insecure due to IP spoofing) */ +#undef ENABLE_AMQ_MOUNT + +/* Define package name (must be defined by configure.in) */ +#undef PACKAGE + +/* Define version of package (must be defined by configure.in) */ +#undef VERSION + +/* Define name of host machine's cpu (eg. sparc) */ +#undef HOST_CPU + +/* Define name of host machine's architecture (eg. sun4) */ +#undef HOST_ARCH + +/* Define name of host machine's vendor (eg. sun) */ +#undef HOST_VENDOR + +/* Define name and version of host machine (eg. solaris2.5.1) */ +#undef HOST_OS + +/* Define only name of host machine OS (eg. solaris2) */ +#undef HOST_OS_NAME + +/* Define only version of host machine (eg. 2.5.1) */ +#undef HOST_OS_VERSION + +/* Define name of host */ +#undef HOST_NAME + +/* Define user name */ +#undef USER_NAME + +/* Define configuration date */ +#undef CONFIG_DATE + +/* what type of network transport type is in use? TLI or sockets? */ +#undef HAVE_TRANSPORT_TYPE_TLI + +/* Define to `long' if doesn't define time_t */ +#undef time_t + +/* Define to "void *" if compiler can handle, otherwise "char *" */ +#undef voidp + +/* Define a type/structure for an NFS V2 filehandle */ +#undef am_nfs_fh + +/* Define a type/structure for an NFS V3 filehandle */ +#undef am_nfs_fh3 + +/* define name of am-utils' NFS protocol header */ +#undef AMU_NFS_PROTOCOL_HEADER + +/* Define a type for the nfs_args structure */ +#undef nfs_args_t + +/* Define the field name for the filehandle within nfs_args_t */ +#undef NFS_FH_FIELD + +/* Define if plain fhandle type exists */ +#undef HAVE_FHANDLE + +/* Define the type of the 3rd argument ('in') to svc_getargs() */ +#undef SVC_IN_ARG_TYPE + +/* Define to the type of xdr procedure type */ +#undef XDRPROC_T_TYPE + +/* Define if mount table is on file, undefine if in kernel */ +#undef MOUNT_TABLE_ON_FILE + +/* Define if have struct mntent in one of the standard headers */ +#undef HAVE_STRUCT_MNTENT + +/* Define if have struct mnttab in one of the standard headers */ +#undef HAVE_STRUCT_MNTTAB + +/* Define if have struct nfs_args in one of the standard nfs headers */ +#undef HAVE_STRUCT_NFS_ARGS + +/* Define if have struct nfs_mount_data in one of the standard nfs headers */ +#undef HAVE_STRUCT_NFS_MOUNT_DATA + +/* Define if have struct nfs_gfs_mount in one of the standard nfs headers */ +#undef HAVE_STRUCT_NFS_GFS_MOUNT + +/* Type of the 3rd argument to yp_order() */ +#undef YP_ORDER_OUTORDER_TYPE + +/* Type of the 6th argument to recvfrom() */ +#undef RECVFROM_FROMLEN_TYPE + +/* Type of the 5rd argument to authunix_create() */ +#undef AUTH_CREATE_GIDLIST_TYPE + +/* The string used in printf to print the mount-type field of mount(2) */ +#undef MTYPE_PRINTF_TYPE + +/* Type of the mount-type field in the mount() system call */ +#undef MTYPE_TYPE + +/* Define a type for the pcfs_args structure */ +#undef pcfs_args_t + +/* Define a type for the autofs_args structure */ +#undef autofs_args_t + +/* Define a type for the cachefs_args structure */ +#undef cachefs_args_t + +/* Define a type for the tmpfs_args structure */ +#undef tmpfs_args_t + +/* Define a type for the ufs_args structure */ +#undef ufs_args_t + +/* Define a type for the efs_args structure */ +#undef efs_args_t + +/* Define a type for the xfs_args structure */ +#undef xfs_args_t + +/* Define a type for the lofs_args structure */ +#undef lofs_args_t + +/* Define a type for the cdfs_args structure */ +#undef cdfs_args_t + +/* Define a type for the mfs_args structure */ +#undef mfs_args_t + +/* Define a type for the rfs_args structure */ +#undef rfs_args_t + +/* define if have a bad version of memcmp() */ +#undef HAVE_BAD_MEMCMP + +/* define if have a bad version of yp_all() */ +#undef HAVE_BAD_YP_ALL + +/* define if must use NFS "noconn" option */ +#undef USE_UNCONNECTED_NFS_SOCKETS +/* define if must NOT use NFS "noconn" option */ +#undef USE_CONNECTED_NFS_SOCKETS + +/* Define if you have the __seterr_reply function. */ +#undef HAVE___SETERR_REPLY + +/* Define if you have the _seterr_reply function. */ +#undef HAVE__SETERR_REPLY + +/* Define if you have the bcmp function. */ +#undef HAVE_BCMP + +/* Define if you have the bcopy function. */ +#undef HAVE_BCOPY + +/* Define if you have the bzero function. */ +#undef HAVE_BZERO + +/* Define if you have the clnt_create function. */ +#undef HAVE_CLNT_CREATE + +/* Define if you have the clnt_create_timed function. */ +#undef HAVE_CLNT_CREATE_TIMED + +/* Define if you have the clnt_spcreateerror function. */ +#undef HAVE_CLNT_SPCREATEERROR + +/* Define if you have the clnt_sperrno function. */ +#undef HAVE_CLNT_SPERRNO + +/* Define if you have the cnodeid function. */ +#undef HAVE_CNODEID + +/* Define if you have the dbm_open function. */ +#undef HAVE_DBM_OPEN + +/* Define if you have the dg_mount function. */ +#undef HAVE_DG_MOUNT + +/* Define if you have the fgets function. */ +#undef HAVE_FGETS + +/* Define if you have the flock function. */ +#undef HAVE_FLOCK + +/* Define if you have the fsmount function. */ +#undef HAVE_FSMOUNT + +/* Define if you have the get_myaddress function. */ +#undef HAVE_GET_MYADDRESS + +/* Define if you have the getccent function. */ +#undef HAVE_GETCCENT + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD + +/* Define if you have the getdomainname function. */ +#undef HAVE_GETDOMAINNAME + +/* Define if you have the getdtablesize function. */ +#undef HAVE_GETDTABLESIZE + +/* Define if you have the gethostname function. */ +#undef HAVE_GETHOSTNAME + +/* Define if you have the getmntinfo function. */ +#undef HAVE_GETMNTINFO + +/* Define if you have the getmountent function. */ +#undef HAVE_GETMOUNTENT + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the getpwnam function. */ +#undef HAVE_GETPWNAM + +/* Define if you have the gettimeofday function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define if you have the hasmntopt function. */ +#undef HAVE_HASMNTOPT + +/* Define if you have the hes_init function. */ +#undef HAVE_HES_INIT + +/* Define if you have the hesiod_init function. */ +#undef HAVE_HESIOD_INIT + +/* Define if you have the hesiod_reload function. */ +#undef HAVE_HESIOD_RELOAD + +/* Define if you have the hesiod_to_bind function. */ +#undef HAVE_HESIOD_TO_BIND + +/* Define if you have the ldap_open function. */ +#undef HAVE_LDAP_OPEN + +/* Define if you have the memcmp function. */ +#undef HAVE_MEMCMP + +/* Define if you have the memcpy function. */ +#undef HAVE_MEMCPY + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + +/* Define if you have the memset function. */ +#undef HAVE_MEMSET + +/* Define if you have the mkdir function. */ +#undef HAVE_MKDIR + +/* Define if you have the mkstemp function. */ +#undef HAVE_MKSTEMP + +/* Define if you have the mntctl function. */ +#undef HAVE_MNTCTL + +/* Define if you have the mount function. */ +#undef HAVE_MOUNT + +/* Define if you have the mountsyscall function. */ +#undef HAVE_MOUNTSYSCALL + +/* Define if you have the nis_domain_of function. */ +#undef HAVE_NIS_DOMAIN_OF + +/* Define if you have the opendir function. */ +#undef HAVE_OPENDIR + +/* Define if you have the plock function. */ +#undef HAVE_PLOCK + +/* Define if you have the regcomp function. */ +#undef HAVE_REGCOMP + +/* Define if you have the regexec function. */ +#undef HAVE_REGEXEC + +/* Define if you have the rmdir function. */ +#undef HAVE_RMDIR + +/* Define if you have the select function. */ +#undef HAVE_SELECT + +/* Define if you have the seteuid function. */ +#undef HAVE_SETEUID + +/* Define if you have the setresuid function. */ +#undef HAVE_SETRESUID + +/* Define if you have the setsid function. */ +#undef HAVE_SETSID + +/* Define if you have the sigaction function. */ +#undef HAVE_SIGACTION + +/* Define if you have the signal function. */ +#undef HAVE_SIGNAL + +/* Define if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strchr function. */ +#undef HAVE_STRCHR + +/* Define if you have the strcspn function. */ +#undef HAVE_STRCSPN + +/* Define if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR + +/* Define if you have the strspn function. */ +#undef HAVE_STRSPN + +/* Define if you have the strstr function. */ +#undef HAVE_STRSTR + +/* Define if you have the svc_getreq function. */ +#undef HAVE_SVC_GETREQ + +/* Define if you have the svc_getreqset function. */ +#undef HAVE_SVC_GETREQSET + +/* Define if you have the sysfs function. */ +#undef HAVE_SYSFS + +/* Define if you have the syslog function. */ +#undef HAVE_SYSLOG + +/* Define if you have the ualarm function. */ +#undef HAVE_UALARM + +/* Define if you have the umount function. */ +#undef HAVE_UMOUNT + +/* Define if you have the uname function. */ +#undef HAVE_UNAME + +/* Define if you have the unmount function. */ +#undef HAVE_UNMOUNT + +/* Define if you have the uvmount function. */ +#undef HAVE_UVMOUNT + +/* Define if you have the vfork function. */ +#undef HAVE_VFORK + +/* Define if you have the vfsmount function. */ +#undef HAVE_VFSMOUNT + +/* Define if you have the vmount function. */ +#undef HAVE_VMOUNT + +/* Define if you have the wait3 function. */ +#undef HAVE_WAIT3 + +/* Define if you have the waitpid function. */ +#undef HAVE_WAITPID + +/* Define if you have the xdr_attrstat function. */ +#undef HAVE_XDR_ATTRSTAT + +/* Define if you have the xdr_createargs function. */ +#undef HAVE_XDR_CREATEARGS + +/* Define if you have the xdr_dirlist function. */ +#undef HAVE_XDR_DIRLIST + +/* Define if you have the xdr_diropargs function. */ +#undef HAVE_XDR_DIROPARGS + +/* Define if you have the xdr_diropokres function. */ +#undef HAVE_XDR_DIROPOKRES + +/* Define if you have the xdr_diropres function. */ +#undef HAVE_XDR_DIROPRES + +/* Define if you have the xdr_dirpath function. */ +#undef HAVE_XDR_DIRPATH + +/* Define if you have the xdr_entry function. */ +#undef HAVE_XDR_ENTRY + +/* Define if you have the xdr_exportnode function. */ +#undef HAVE_XDR_EXPORTNODE + +/* Define if you have the xdr_exports function. */ +#undef HAVE_XDR_EXPORTS + +/* Define if you have the xdr_fattr function. */ +#undef HAVE_XDR_FATTR + +/* Define if you have the xdr_fhandle function. */ +#undef HAVE_XDR_FHANDLE + +/* Define if you have the xdr_fhstatus function. */ +#undef HAVE_XDR_FHSTATUS + +/* Define if you have the xdr_filename function. */ +#undef HAVE_XDR_FILENAME + +/* Define if you have the xdr_ftype function. */ +#undef HAVE_XDR_FTYPE + +/* Define if you have the xdr_groupnode function. */ +#undef HAVE_XDR_GROUPNODE + +/* Define if you have the xdr_groups function. */ +#undef HAVE_XDR_GROUPS + +/* Define if you have the xdr_linkargs function. */ +#undef HAVE_XDR_LINKARGS + +/* Define if you have the xdr_mntrequest function. */ +#undef HAVE_XDR_MNTREQUEST + +/* Define if you have the xdr_mntres function. */ +#undef HAVE_XDR_MNTRES + +/* Define if you have the xdr_mountbody function. */ +#undef HAVE_XDR_MOUNTBODY + +/* Define if you have the xdr_mountlist function. */ +#undef HAVE_XDR_MOUNTLIST + +/* Define if you have the xdr_mountres3 function. */ +#undef HAVE_XDR_MOUNTRES3 + +/* Define if you have the xdr_name function. */ +#undef HAVE_XDR_NAME + +/* Define if you have the xdr_nfs_fh function. */ +#undef HAVE_XDR_NFS_FH + +/* Define if you have the xdr_nfscookie function. */ +#undef HAVE_XDR_NFSCOOKIE + +/* Define if you have the xdr_nfspath function. */ +#undef HAVE_XDR_NFSPATH + +/* Define if you have the xdr_nfsstat function. */ +#undef HAVE_XDR_NFSSTAT + +/* Define if you have the xdr_nfstime function. */ +#undef HAVE_XDR_NFSTIME + +/* Define if you have the xdr_pointer function. */ +#undef HAVE_XDR_POINTER + +/* Define if you have the xdr_readargs function. */ +#undef HAVE_XDR_READARGS + +/* Define if you have the xdr_readdirargs function. */ +#undef HAVE_XDR_READDIRARGS + +/* Define if you have the xdr_readdirres function. */ +#undef HAVE_XDR_READDIRRES + +/* Define if you have the xdr_readlinkres function. */ +#undef HAVE_XDR_READLINKRES + +/* Define if you have the xdr_readokres function. */ +#undef HAVE_XDR_READOKRES + +/* Define if you have the xdr_readres function. */ +#undef HAVE_XDR_READRES + +/* Define if you have the xdr_renameargs function. */ +#undef HAVE_XDR_RENAMEARGS + +/* Define if you have the xdr_sattr function. */ +#undef HAVE_XDR_SATTR + +/* Define if you have the xdr_sattrargs function. */ +#undef HAVE_XDR_SATTRARGS + +/* Define if you have the xdr_statfsokres function. */ +#undef HAVE_XDR_STATFSOKRES + +/* Define if you have the xdr_statfsres function. */ +#undef HAVE_XDR_STATFSRES + +/* Define if you have the xdr_symlinkargs function. */ +#undef HAVE_XDR_SYMLINKARGS + +/* Define if you have the xdr_umntrequest function. */ +#undef HAVE_XDR_UMNTREQUEST + +/* Define if you have the xdr_umntres function. */ +#undef HAVE_XDR_UMNTRES + +/* Define if you have the xdr_writeargs function. */ +#undef HAVE_XDR_WRITEARGS + +/* Define if you have the yp_all function. */ +#undef HAVE_YP_ALL + +/* Define if you have the yp_get_default_domain function. */ +#undef HAVE_YP_GET_DEFAULT_DOMAIN + +/* Define if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define if you have the header file. */ +#undef HAVE_ARPA_NAMESER_H + +/* Define if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define if you have the header file. */ +#undef HAVE_BSD_RPC_RPC_H + +/* Define if you have the header file. */ +#undef HAVE_CDFS_CDFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_CDFS_CDFSMOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_CLUSTER_H + +/* Define if you have the header file. */ +#undef HAVE_CTYPE_H + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define if you have the header file. */ +#undef HAVE_GRP_H + +/* Define if you have the header file. */ +#undef HAVE_HESIOD_H + +/* Define if you have the header file. */ +#undef HAVE_HSFS_HSFS_H + +/* Define if you have the header file. */ +#undef HAVE_ISOFS_CD9660_CD9660_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_LBER_H + +/* Define if you have the header file. */ +#undef HAVE_LDAP_H + +/* Define if you have the header file. */ +#undef HAVE_LIBGEN_H + +/* Define if you have the header file. */ +#undef HAVE_LINUX_AUTO_FS_H + +/* Define if you have the header file. */ +#undef HAVE_LINUX_FS_H + +/* Define if you have the header file. */ +#undef HAVE_LINUX_NFS_H + +/* Define if you have the header file. */ +#undef HAVE_LINUX_NFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_LINUX_POSIX_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_MACHINE_ENDIAN_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if you have the header file. */ +#undef HAVE_MNTENT_H + +/* Define if you have the header file. */ +#undef HAVE_MNTTAB_H + +/* Define if you have the header file. */ +#undef HAVE_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_MSDOSFS_MSDOSFSMOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_NDBM_H + +/* Define if you have the header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_NET_ERRNO_H + +/* Define if you have the header file. */ +#undef HAVE_NET_IF_H + +/* Define if you have the header file. */ +#undef HAVE_NET_IF_VAR_H + +/* Define if you have the header file. */ +#undef HAVE_NET_ROUTE_H + +/* Define if you have the header file. */ +#undef HAVE_NETCONFIG_H + +/* Define if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define if you have the header file. */ +#undef HAVE_NETDIR_H + +/* Define if you have the header file. */ +#undef HAVE_NETINET_IF_ETHER_H + +/* Define if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_EXPORT_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFS_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFS_CLNT_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFS_GFS_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFSMOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFSPROTO_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_NFSV2_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_PATHCONF_H + +/* Define if you have the header file. */ +#undef HAVE_NFS_RPCV2_H + +/* Define if you have the header file. */ +#undef HAVE_NSSWITCH_H + +/* Define if you have the header file. */ +#undef HAVE_PWD_H + +/* Define if you have the header file. */ +#undef HAVE_REGEX_H + +/* Define if you have the header file. */ +#undef HAVE_RESOLV_H + +/* Define if you have the header file. */ +#undef HAVE_RPC_AUTH_DES_H + +/* Define if you have the header file. */ +#undef HAVE_RPC_PMAP_CLNT_H + +/* Define if you have the header file. */ +#undef HAVE_RPC_PMAP_PROT_H + +/* Define if you have the header file. */ +#undef HAVE_RPC_RPC_H + +/* Define if you have the header file. */ +#undef HAVE_RPC_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_RPC_XDR_H + +/* Define if you have the header file. */ +#undef HAVE_RPCSVC_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_RPCSVC_MOUNTV3_H + +/* Define if you have the header file. */ +#undef HAVE_RPCSVC_NFS_PROT_H + +/* Define if you have the header file. */ +#undef HAVE_RPCSVC_NIS_H + +/* Define if you have the header file. */ +#undef HAVE_RPCSVC_YP_PROT_H + +/* Define if you have the header file. */ +#undef HAVE_RPCSVC_YPCLNT_H + +/* Define if you have the header file. */ +#undef HAVE_SETJMP_H + +/* Define if you have the header file. */ +#undef HAVE_SIGNAL_H + +/* Define if you have the header file. */ +#undef HAVE_SOCKETBITS_H + +/* Define if you have the header file. */ +#undef HAVE_STATBUF_H + +/* Define if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_CONFIG_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_DG_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_ERRNO_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FILE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_AUTOFS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_AUTOFS_PROT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_CACHEFS_FS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_EFS_CLNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_NFS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_NFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_NFS_NFS_CLNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_NFS_CLNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_PC_FS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_TMP_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_UFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_XFS_CLNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FS_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FSID_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FSTYP_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_LOCK_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MACHINE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MBUF_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MNTCTL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MNTENT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MNTTAB_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NETCONFIG_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PATHCONF_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PROC_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SEMA_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SIGNAL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SOCKIO_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_STATFS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SYSCALL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SYSLIMITS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SYSLOG_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIUSER_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_UCRED_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_UIO_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_UTSNAME_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_VFS_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_VMOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_VNODE_H + +/* Define if you have the header file. */ +#undef HAVE_SYSLOG_H + +/* Define if you have the header file. */ +#undef HAVE_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_TIUSER_H + +/* Define if you have the header file. */ +#undef HAVE_TMPFS_TMP_H + +/* Define if you have the header file. */ +#undef HAVE_UFS_UFS_MOUNT_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the header file. */ +#undef HAVE_VARARGS_H + +/* Define if you have the gdbm library (-lgdbm). */ +#undef HAVE_LIBGDBM + +/* Define if you have the malloc library (-lmalloc). */ +#undef HAVE_LIBMALLOC + +/* Define if you have the mapmalloc library (-lmapmalloc). */ +#undef HAVE_LIBMAPMALLOC + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the rpc library (-lrpc). */ +#undef HAVE_LIBRPC + +/* Define if you have the rpcsvc library (-lrpcsvc). */ +#undef HAVE_LIBRPCSVC + +/**************************************************************************/ +/*** Everything below this line is part of the "BOTTOM" of acconfig.h. ***/ +/**************************************************************************/ + +/* + * Existence of external definitions. + */ + +/* does sys_errlist[] exist? */ +#undef HAVE_EXTERN_SYS_ERRLIST + +/* does optarg exist? */ +#undef HAVE_EXTERN_OPTARG + +/* does clnt_sperrno() exist? */ +#undef HAVE_EXTERN_CLNT_SPERRNO + +/* does free() exist? */ +#undef HAVE_EXTERN_FREE + +/* does get_myaddress() exist? */ +#undef HAVE_EXTERN_GET_MYADDRESS + +/* does getccent() (hpux) exist? */ +#undef HAVE_EXTERN_GETCCENT + +/* does getdomainname() exist? */ +#undef HAVE_EXTERN_GETDOMAINNAME + +/* does gethostname() exist? */ +#undef HAVE_EXTERN_GETHOSTNAME + +/* does getlogin() exist? */ +#undef HAVE_EXTERN_GETLOGIN + +/* does gettablesize() exist? */ +#undef HAVE_EXTERN_GETTABLESIZE + +/* does getpagesize() exist? */ +#undef HAVE_EXTERN_GETPAGESIZE + +/* does innetgr() exist? */ +#undef HAVE_EXTERN_INNETGR + +/* does mkstemp() exist? */ +#undef HAVE_EXTERN_MKSTEMP + +/* does sbrk() exist? */ +#undef HAVE_EXTERN_SBRK + +/* does strcasecmp() exist? */ +#undef HAVE_EXTERN_STRCASECMP + +/* does strdup() exist? */ +#undef HAVE_EXTERN_STRDUP + +/* does strstr() exist? */ +#undef HAVE_EXTERN_STRSTR + +/* does usleep() exist? */ +#undef HAVE_EXTERN_USLEEP + +/* does wait3() exist? */ +#undef HAVE_EXTERN_WAIT3 + +/* does xdr_opaque_auth() exist? */ +#undef HAVE_EXTERN_XDR_OPAQUE_AUTH + +/****************************************************************************/ +/*** INCLUDE localconfig.h if it exists, to allow users to make some ***/ +/*** compile time configuration changes. ***/ +/****************************************************************************/ +/* does a local configuration file exist? */ +#undef HAVE_LOCALCONFIG_H +#ifdef HAVE_LOCALCONFIG_H +# include +#endif /* HAVE_LOCALCONFIG_H */ + +#endif /* not _CONFIG_H */ + +/* + * Local Variables: + * mode: c + * End: + */ + +/* End of am-utils-6.x config.h file */ diff --git a/m4/config.sub b/m4/config.sub new file mode 100755 index 0000000..e24b850 --- /dev/null +++ b/m4/config.sub @@ -0,0 +1,952 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple) + os= + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 \ + | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ + | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ + | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ + | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ + | mipstx39 | mipstx39el \ + | sparc | sparclet | sparclite | sparc64 | v850) + basic_machine=$basic_machine-unknown + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[34567]86) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ + | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \ + | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ + | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mipstx39-* | mipstx39el-* \ + | f301-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | k6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | k6-* | 6x86-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -xenix) + os=-xenix + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-ibm) + os=-aix + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -hpux*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/m4/configure.in b/m4/configure.in new file mode 100644 index 0000000..85afbc1 --- /dev/null +++ b/m4/configure.in @@ -0,0 +1,977 @@ +dnl configure.in file for am-utils-6.x +dnl Contains general GNU-autoconf macros. +dnl Author: Erez Zadok +dnl +dnl ###################################################################### +dnl UNCOMMENT THE NEXT FEW LINES FOR DEBUGGING CONFIGURE +dnl define([AC_CACHE_LOAD], )dnl +dnl define([AC_CACHE_SAVE], )dnl +dnl ====================================================================== + +dnl ###################################################################### +dnl INITIALIZATION +AC_INIT(amd/amd.c) +AC_MSG(INITIALIZATION) +AM_CONFIG_HEADER(config.h:aux/config.h.in) +AC_CONFIG_AUX_DIR(aux) +AC_PREREQ(2.12) +AC_REVISION($Revision: 1.0) +dnl find out system type +AC_MSG(SYSTEM TYPES) +dnl run by libtool, but must be kept here because HOST_MACROS depends on it +AC_CANONICAL_HOST +AC_HOST_MACROS +dnl ====================================================================== + +dnl ###################################################################### +dnl PACKAGE NAME AND VERSION +AC_MSG(PACKAGE NAME AND VERSION) +PACKAGE=am-utils +VERSION=6.0b2s2 +AC_SUBST(PACKAGE) +AC_NAME_PACKAGE($PACKAGE) +AC_SUBST(VERSION) +AC_NAME_VERSION($VERSION) +AM_INIT_AUTOMAKE($PACKAGE, $VERSION) +dnl set (shared) library version +LIBTOOL_LDFLAGS="-version-info 1:1" +AC_SUBST(LIBTOOL_LDFLAGS) +dnl ====================================================================== + +dnl ###################################################################### +dnl OPTION PROCESSING +AC_MSG(OPTION PROCESSING) +dnl Debugging options (yes, mem, or no) +AC_OPT_DEBUG +dnl Do you want to turn on "amq -M" code +AC_OPT_AMQ_MOUNT +dnl additional preprocessor options for configuration/compilation +AC_OPT_CPPFLAGS +dnl additional linker -l options for configuration/compilation +AC_OPT_LIBS +dnl additional linker -L options for configuration/compilation +AC_OPT_LDFLAGS +dnl Which options to add to CFLAGS for compilation only? +AC_OPT_AMU_CFLAGS +dnl check if a local configuration file exists +AC_LOCALCONFIG +dnl ====================================================================== + +dnl ###################################################################### +dnl ALTERNATIVE PROGRAMS +dnl Part 1: these are required before "unix variants" +dnl ====================================================================== +dnl Particular Program Checks +AC_MSG(PARTICULAR PROGRAMS (part 1)) +dnl my version of prog_libtool will not build shared by default +dnl AM_PROG_LIBTOOL2 +dnl build only static libs by default, but allow users to override +AM_DISABLE_SHARED +AM_PROG_LIBTOOL +dnl no need for this (run by libtool) +dnl AC_PROG_CC +AC_PROG_CC_C_O +AC_PROG_GCC_TRADITIONAL +AC_PROG_CPP +dnl ====================================================================== + +dnl ###################################################################### +dnl ADDITIONAL OPTION PROCESSING (must be done after CC is defined) +AC_MSG(EXTRA OPTION PROCESSING) +AC_OS_CPPFLAGS +AC_OS_CFLAGS +AC_OS_LDFLAGS +dnl ====================================================================== + +dnl ###################################################################### +dnl Some of these macros must be called before any call to the C compiler +AC_MSG(UNIX VARIANTS) +dnl UNIX VARIANTS +AC_AIX +AC_ISC_POSIX +dnl ====================================================================== + +dnl ###################################################################### +dnl ALTERNATIVE PROGRAMS +dnl Part 2: these are required after "unix variants" +dnl ====================================================================== +dnl Particular Program Checks (part 2) +AC_MSG(PARTICULAR PROGRAMS (part 2)) +AM_PROG_INSTALL +dnl the next two are run or supported natively by libtool +dnl AC_PROG_LN_S +dnl AC_PROG_RANLIB +AM_PROG_YACC +AM_PROG_LEX + +dnl ====================================================================== +dnl Generic Program Checks +AC_MSG(GENERIC PROGRAMS) +AC_PATH_PROGS(AR, ar, :) +AC_PATH_PROGS(PERL, perl5 perl4 perl, /usr/bin/perl) +dnl ====================================================================== + +dnl ###################################################################### +dnl LIBRARY FILES +dnl ====================================================================== +dnl Note that the configuration order of libraries is in reverse of linkage +dnl for example, linking of the first two is -lc -lnsl. +AC_MSG(LIBRARY FILES) + +dnl libnsl/libsocket are needed only on solaris and some svr4 systems. +dnl Using a typical macro has proven unsuccesful, because on some other +dnl systems such as irix, including libnsl and or libsocket actually breaks +dnl lots of code. So I am forced to use a special purpose macro that sets +dnl the libraries based on the OS. Sigh. -Erez. +AC_CHECK_OS_LIBS + +dnl librpc and librpcsvc are needed on Solaris (I think) +AC_CHECK_LIB(rpc, clnt_sperrno) +AC_CHECK_LIB(rpcsvc, xdr_fhandle) +dnl Linux RedHat 5.1 puts yp functions only in libnsl (libnsl broken on aix) +AC_CHECK_FUNC(yp_all,,AC_CHECK_LIB(nsl, yp_all)) + +dnl hesiod library may not link unless libresolv is included +AC_CHECK_LIB2(hesiod, hes_init,,, -lresolv) +AC_CHECK_LIB2(ldap, ldap_open,,, -llber) + +dnl some systems replaced old ndbm.h include with GNU ndbm.h, which requires +dnl libgdbm for dbm_pagfno, so check for this. +AC_MSG_CHECKING(for GNU ndbm.h) +AC_TRY_LINK([#include ], [ +DBM *db; +dbm_pagfno(db); +], AC_MSG_RESULT(no), AC_CHECK_LIB(gdbm, dbm_pagfno)) +dnl ====================================================================== + +dnl ###################################################################### +dnl LIBRARY FUNCTIONS +dnl ====================================================================== +dnl Particular Function Checks +AC_MSG(PARTICULAR LIBRARY FUNCTIONS) +dnl this GETMNTENT test will add -lgen to LIBS if needed +dnl AC_FUNC_GETMNTENT +AC_FUNC_BAD_MEMCMP +AC_FUNC_BAD_YP_ALL +AC_FUNC_VFORK +AC_FUNC_WAIT3 +dnl ====================================================================== +dnl Generic Function Checks +AC_MSG(GENERIC LIBRARY FUNCTIONS) +AC_CHECK_FUNCS( \ + __seterr_reply \ + _seterr_reply \ + bcmp \ + bcopy \ + bzero \ + clnt_create \ + clnt_create_timed \ + clnt_spcreateerror \ + cnodeid \ + dg_mount \ + flock \ + fsmount \ + get_myaddress \ + getccent \ + getcwd \ + getdomainname \ + getdtablesize \ + gethostname \ + getmntinfo \ + getmountent \ + getpagesize \ + gettimeofday \ + hasmntopt \ + hes_init \ + hesiod_init \ + hesiod_reload \ + hesiod_to_bind \ + ldap_open \ + memcmp \ + memcpy \ + memmove \ + memset \ + mkdir \ + mkstemp \ + mntctl \ + mount \ + mountsyscall \ + plock \ + regcomp \ + regexec \ + rmdir \ + select \ + seteuid \ + setresuid \ + setsid \ + sigaction \ + signal \ + socket \ + strchr \ + strcspn \ + strcasecmp \ + strdup \ + strerror \ + strspn \ + strstr \ + svc_getreq \ + svc_getreqset \ + sysfs \ + syslog \ + uname \ + umount \ + unmount \ + uvmount \ + vfork \ + vfsmount \ + vmount \ + wait3 \ + waitpid \ + ) +AC_REPLACE_FUNCS( \ + clnt_sperrno \ + hasmntopt \ + strcasecmp \ + strdup \ + strstr \ + ualarm \ + ) +dnl all xdr_* functions are implemented in libamu/xdr_func.c +AC_CHECK_FUNCS( \ + xdr_attrstat \ + xdr_createargs \ + xdr_dirlist \ + xdr_diropargs \ + xdr_diropokres \ + xdr_diropres \ + xdr_dirpath \ + xdr_entry \ + xdr_exportnode \ + xdr_exports \ + xdr_fattr \ + xdr_fhandle \ + xdr_fhstatus \ + xdr_filename \ + xdr_ftype \ + xdr_groupnode \ + xdr_groups \ + xdr_linkargs \ + xdr_mntrequest \ + xdr_mntres \ + xdr_mountbody \ + xdr_mountlist \ + xdr_mountres3 \ + xdr_name \ + xdr_nfs_fh \ + xdr_nfscookie \ + xdr_nfspath \ + xdr_nfsstat \ + xdr_nfstime \ + xdr_pointer \ + xdr_readargs \ + xdr_readdirargs \ + xdr_readdirres \ + xdr_readlinkres \ + xdr_readokres \ + xdr_readres \ + xdr_renameargs \ + xdr_sattr \ + xdr_sattrargs \ + xdr_statfsokres \ + xdr_statfsres \ + xdr_symlinkargs \ + xdr_umntrequest \ + xdr_umntres \ + xdr_writeargs \ + ) +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl HEADER FILES +dnl ====================================================================== +dnl Particular Header Checks +AC_MSG(PARTICULAR HEADER FILES) +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +dnl ====================================================================== +dnl Generic Header Checks +AC_MSG(GENERIC HEADER FILES) +AC_CHECK_HEADERS( \ + arpa/nameser.h \ + arpa/inet.h \ + bsd/rpc/rpc.h \ + cdfs/cdfsmount.h \ + cdfs/cdfs_mount.h \ + hsfs/hsfs.h \ + isofs/cd9660/cd9660_mount.h \ + linux/auto_fs.h \ + linux/fs.h \ + linux/nfs.h \ + linux/nfs_mount.h \ + linux/posix_types.h \ + machine/endian.h \ + msdosfs/msdosfsmount.h \ + net/errno.h \ + net/if.h \ + net/if_var.h \ + net/route.h \ + netinet/if_ether.h \ + netinet/in.h \ + nfs/export.h \ + nfs/mount.h \ + nfs/nfs.h \ + nfs/nfs_clnt.h \ + nfs/nfs_gfs.h \ + nfs/nfs_mount.h \ + nfs/nfsmount.h \ + nfs/nfsproto.h \ + nfs/nfsv2.h \ + nfs/pathconf.h \ + nfs/rpcv2.h \ + nfs/rpcv2.h \ + rpc/auth_des.h \ + rpc/pmap_clnt.h \ + rpc/pmap_prot.h \ + rpc/rpc.h \ + rpc/types.h \ + rpc/xdr.h \ + rpcsvc/mount.h \ + rpcsvc/mountv3.h \ + rpcsvc/nfs_prot.h \ + rpcsvc/nis.h \ + rpcsvc/yp_prot.h \ + rpcsvc/ypclnt.h \ + sys/config.h \ + sys/dg_mount.h \ + sys/dir.h \ + sys/errno.h \ + sys/file.h \ + sys/fs/autofs.h \ + sys/fs/autofs_prot.h \ + sys/fs/cachefs_fs.h \ + sys/fs/efs_clnt.h \ + sys/fs/nfs.h \ + sys/fs/nfs/mount.h \ + sys/fs/nfs/nfs_clnt.h \ + sys/fs/nfs_clnt.h \ + sys/fs/pc_fs.h \ + sys/fs/tmp.h \ + sys/fs/ufs_mount.h \ + sys/fs/xfs_clnt.h \ + sys/fs_types.h \ + sys/fsid.h \ + sys/fstyp.h \ + sys/ioctl.h \ + sys/lock.h \ + sys/machine.h \ + sys/mbuf.h \ + sys/mntctl.h \ + sys/mntent.h \ + sys/mnttab.h \ + sys/mount.h \ + sys/ndir.h \ + sys/netconfig.h \ + sys/param.h \ + sys/pathconf.h \ + sys/proc.h \ + sys/resource.h \ + sys/sema.h \ + sys/signal.h \ + sys/socket.h \ + sys/sockio.h \ + sys/stat.h \ + sys/statfs.h \ + sys/syscall.h \ + sys/syslimits.h \ + sys/syslog.h \ + sys/time.h \ + sys/tiuser.h \ + sys/types.h \ + sys/ucred.h \ + sys/uio.h \ + sys/utsname.h \ + sys/vfs.h \ + sys/vmount.h \ + sys/vnode.h \ +dnl sys/wait.h \ + ufs/ufs_mount.h \ + \ + assert.h \ +dnl cfs.h \ + cluster.h \ + ctype.h \ +dnl dirent.h \ + errno.h \ + fcntl.h \ + grp.h \ + hesiod.h \ + lber.h \ + ldap.h \ + libgen.h \ + malloc.h \ + memory.h \ + mntent.h \ + mnttab.h \ + mount.h \ + ndbm.h \ + ndir.h \ + netconfig.h \ + netdb.h \ + netdir.h \ + nsswitch.h \ + pwd.h \ + regex.h \ + resolv.h \ + setjmp.h \ + signal.h \ + socketbits.h \ + statbuf.h \ + stdarg.h \ + stdlib.h \ + stdio.h \ + string.h \ + strings.h \ + syslog.h \ + time.h \ + tiuser.h \ + varargs.h \ + unistd.h \ + ) +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl STRUCTURES +AC_MSG(PARTICULAR STRUCTURES) +AC_HEADER_STAT +AC_HEADER_TIME +AC_STRUCT_ST_RDEV +AC_STRUCT_TM +dnl ====================================================================== +AC_MSG(GENERIC STRUCTURES) +dnl before any use of macros that need nfs/mount headers, must define O/S +dnl specific header to include. +AC_CHECK_NFS_PROT_HEADERS +AC_STRUCT_MNTENT +AC_STRUCT_MNTTAB +AC_STRUCT_NFS_ARGS +AC_STRUCT_NFS_MOUNT_DATA +AC_STRUCT_NFS_GFS_MOUNT +AC_STRUCT_FIELD_NFS_FH +AC_STRUCT_NFS_FH +AC_STRUCT_NFS_FH3 +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl TYPEDEFS +dnl ====================================================================== +dnl Particular Typedef Checks +AC_MSG(PARTICULAR TYPEDEFS) +AC_TYPE_GETGROUPS +AC_TYPE_MODE_T +AC_TYPE_PID_T +AC_TYPE_SIGNAL +AC_TYPE_SIZE_T +AC_TYPE_UID_T +dnl ====================================================================== +dnl Generic Typedef Checks +AC_MSG(GENERIC TYPEDEFS) +AC_TYPE_TIME_T +AC_CHECK_FHANDLE +AC_CHECK_MTYPE_TYPE +AC_CHECK_MTYPE_PRINTF_TYPE +AC_TYPE_YP_ORDER_OUTORDER +AC_TYPE_RECVFROM_FROMLEN +AC_TYPE_AUTH_CREATE_GIDLIST +AC_TYPE_SVC_IN_ARG +AC_TYPE_AUTOFS_ARGS +AC_TYPE_CACHEFS_ARGS +AC_TYPE_CDFS_ARGS +AC_TYPE_LOFS_ARGS +AC_TYPE_MFS_ARGS +AC_TYPE_PCFS_ARGS +AC_TYPE_RFS_ARGS +AC_TYPE_TMPFS_ARGS +AC_TYPE_UFS_ARGS +AC_TYPE_XFS_ARGS +AC_TYPE_EFS_ARGS +AC_TYPE_XDRPROC_T +dnl ====================================================================== + +dnl ###################################################################### +dnl Particular Compiler Characteristics +AC_MSG(PARTICULAR COMPILER CHARACTERISTICS) +AC_C_BIGENDIAN +AC_C_CONST +AC_C_INLINE +dnl AC_CHECK_SIZEOF(void *, 0) +dnl ====================================================================== +dnl Generic Compiler Characteristics +AC_MSG(GENERIC COMPILER CHARACTERISTICS) +AC_C_VOID_P +dnl ====================================================================== + +dnl ###################################################################### +AC_MSG(EXTERNAL DEFINITIONS) +AC_EXTERN_SYS_ERRLIST +AC_EXTERN_OPTARG +AC_CHECK_EXTERN(clnt_sperrno) +AC_CHECK_EXTERN(free) +AC_CHECK_EXTERN(get_myaddress) +AC_CHECK_EXTERN(getccent) +AC_CHECK_EXTERN(getdomainname) +AC_CHECK_EXTERN(getdtablesize) +AC_CHECK_EXTERN(gethostname) +AC_CHECK_EXTERN(getlogin) +AC_CHECK_EXTERN(getpagesize) +AC_CHECK_EXTERN(getwd) +AC_CHECK_EXTERN(innetgr) +AC_CHECK_EXTERN(mkstemp) +AC_CHECK_EXTERN(sbrk) +AC_CHECK_EXTERN(strcasecmp) +AC_CHECK_EXTERN(strdup) +AC_CHECK_EXTERN(strstr) +AC_CHECK_EXTERN(ualarm) +AC_CHECK_EXTERN(usleep) +AC_CHECK_EXTERN(wait3) +AC_CHECK_EXTERN(xdr_opaque_auth) +dnl ====================================================================== + +dnl ###################################################################### +dnl C PREPROCESSOR MACROS +AC_MSG(C PREPROCESSOR MACROS) +dnl ====================================================================== + +dnl ###################################################################### +dnl SYSTEM SERVICES +AC_MSG(SYSTEM SERVICES) +AC_SYS_LONG_FILE_NAMES +AC_SYS_RESTARTABLE_SYSCALLS +AC_CHECK_NETWORK_TRANSPORT_TYPE +dnl ====================================================================== + +dnl ###################################################################### +AC_MSG(FIELDS WITHIN STRUCTURES) +AC_CHECK_FIELD(mntent_t, mnt_cnode) +AC_CHECK_FIELD(mntent_t, mnt_ro) +AC_CHECK_FIELD(mntent_t, mnt_time) +AC_FIELD_MNTENT_T_MNT_TIME_STRING +AC_CHECK_FIELD(cdfs_args_t, flags) +AC_CHECK_FIELD(cdfs_args_t, fspec) +AC_CHECK_FIELD(cdfs_args_t, iso_flags) +AC_CHECK_FIELD(cdfs_args_t, iso_pgthresh) +AC_CHECK_FIELD(cdfs_args_t, norrip) +AC_CHECK_FIELD(cdfs_args_t, ssector) +AC_CHECK_FIELD(pcfs_args_t, dsttime) +AC_CHECK_FIELD(pcfs_args_t, fspec) +AC_CHECK_FIELD(pcfs_args_t, gid) +AC_CHECK_FIELD(pcfs_args_t, mask) +AC_CHECK_FIELD(pcfs_args_t, secondswest) +AC_CHECK_FIELD(pcfs_args_t, uid) +AC_CHECK_FIELD(ufs_args_t, flags) +AC_CHECK_FIELD(ufs_args_t, fspec) +AC_CHECK_FIELD(ufs_args_t, ufs_flags) +AC_CHECK_FIELD(ufs_args_t, ufs_pgthresh) +AC_CHECK_FIELD(efs_args_t, flags) +AC_CHECK_FIELD(efs_args_t, fspec) +AC_CHECK_FIELD(xfs_args_t, flags) +AC_CHECK_FIELD(xfs_args_t, fspec) +AC_CHECK_FIELD(struct fhstatus, fhs_fh) +AC_CHECK_FIELD(struct statfs, f_fstypename) +AC_CHECK_FIELD(nfs_args_t, acdirmin) +AC_CHECK_FIELD(nfs_args_t, acregmin) +AC_CHECK_FIELD(nfs_args_t, fh_len) +AC_CHECK_FIELD(nfs_args_t, fhsize) +AC_CHECK_FIELD(nfs_args_t, gfs_flags) +AC_CHECK_FIELD(nfs_args_t, optstr) +AC_CHECK_FIELD(nfs_args_t, proto) +AC_CHECK_FIELD(nfs_args_t, sotype) +AC_CHECK_FIELD(nfs_args_t, version) +AC_CHECK_FIELD(struct ifreq, ifr_addr) +AC_CHECK_FIELD(struct sockaddr, sa_len) +AC_CHECK_FIELD(autofs_args_t, addr) +AC_CHECK_FIELD(umntrequest, rdevid) +dnl ====================================================================== + +dnl ###################################################################### +dnl MAP TYPES +AC_MSG(MAP TYPES) +dnl DBM is obsolete, use NDBM +dnl AC_CHECK_MAP_FUNCS(dbminit dbmopen, dbm) +AC_CHECK_MAP_FUNCS(fgets, file) +AC_CHECK_MAP_FUNCS(hes_init hesiod_init, hesiod) +AC_CHECK_MAP_FUNCS(ldap_open, ldap) +AC_CHECK_MAP_FUNCS(dbm_open, ndbm) +AC_CHECK_MAP_FUNCS(yp_get_default_domain yp_all, nis) +AC_CHECK_MAP_FUNCS(nis_domain_of, nisplus, nisplus) +AC_CHECK_MAP_FUNCS(getpwnam, passwd) +AC_CHECK_MAP_FUNCS(opendir, union) +dnl ====================================================================== + +dnl ###################################################################### +dnl FILESYSTEM TYPES +AC_MSG(FILESYSTEM TYPES) +dnl check for filesystem existence if MNTTYPE_ exists, then if +dnl MOUNT_, then MNT_, then in /proc/filesystems, and getvfsbyname() +AC_CHECK_FS_MNTENT(autofs) +AC_CHECK_FS_MNTENT(cdfs hsfs cd9660 iso9660 isofs cdrom, cdfs) +AC_CHECK_FS_MNTENT(cache) +AC_CHECK_FS_MNTENT(lofs lo, lofs) +AC_CHECK_FS_MNTENT(mfs) +AC_CHECK_FS_MNTENT(nfs) +AC_CHECK_FS_MNTENT(nfs3) +AC_CHECK_FS_MNTENT(vfat pcfs pc msdos msdosfs fat, pcfs) +AC_CHECK_FS_MNTENT(tfs) +AC_CHECK_FS_MNTENT(tmpfs) +AC_CHECK_FS_MNTENT(ext2 ufs 42 efs xfs jfs ultrix, ufs) +AC_CHECK_FS_MNTENT(xfs) +AC_CHECK_FS_MNTENT(efs) +dnl new ones in bsd44 +AC_CHECK_FS_MNTENT(null nullfs, nullfs) +AC_CHECK_FS_MNTENT(union unionfs, unionfs) +AC_CHECK_FS_MNTENT(umap umapfs, umapfs) + +dnl check for filesystem existence if their headers exist +dnl AC_CHECK_FS_HEADERS(cfs.h, cfs) +AC_CHECK_FS_HEADERS(hsfs/hsfs.h, cdfs) +AC_CHECK_FS_HEADERS(tmpfs/tmp.h, tmpfs) +AC_CHECK_FS_HEADERS(sys/fs/autofs.h, autofs) +AC_CHECK_FS_HEADERS(sys/fs/cachefs_fs.h, cachefs) +dnl AC_CHECK_FS_HEADERS(jfs/jfsmount.h, ufs) +dnl ====================================================================== +dnl AUTOMOUNTER FILESYSTEM TYPES +AC_MSG(AUTOMOUNTER FILESYSTEM TYPES) +AC_CHECK_AM_FS(auto, automounter) +AC_CHECK_AM_FS(direct, direct automount) +AC_CHECK_AM_FS(toplvl, top-level) +AC_CHECK_AM_FS(error, error) +AC_CHECK_AM_FS(inherit, inheritance) +AC_CHECK_AM_FS(program, program) +AC_CHECK_AM_FS(link, symlink) +AC_CHECK_AM_FS(linkx, symlink with existence check) +AC_CHECK_AM_FS(host, host (nfs), nfs) +AC_CHECK_AM_FS(nfsx, multi-nfs mount, nfs) +AC_CHECK_AM_FS(nfsl, NFS with local existence check) +AC_CHECK_AM_FS(union, union) +dnl AC_CHECK_AM_FS(autofs, Sun AutoFS, autofs) +dnl ====================================================================== + +dnl ###################################################################### +dnl MOUNTING TYPES AND NAMES FOR MOUNTING TABLE +dnl check for mount(2) type/name for filesystem (MNTTYPE_*, MOUNT_*) +AC_MSG(MOUNTING TYPES) +AC_CHECK_MOUNT_TYPE(nfs) +AC_CHECK_MOUNT_TYPE(nfs3) +AC_CHECK_MOUNT_TYPE(4.2 4.3 4.4 ext2 ufs efs xfs ffs jfs ultrix, ufs) +AC_CHECK_MOUNT_TYPE(xfs) +AC_CHECK_MOUNT_TYPE(efs) +AC_CHECK_MOUNT_TYPE(cdfs hsfs cd9660 iso9660 isofs cdrom, cdfs) +AC_CHECK_MOUNT_TYPE(vfat pcfs pc msdos msdosfs fat, pcfs) +AC_CHECK_MOUNT_TYPE(mfs) +AC_CHECK_MOUNT_TYPE(tmpfs tmp, tmpfs) +AC_CHECK_MOUNT_TYPE(lofs lo, lofs) +AC_CHECK_MOUNT_TYPE(lfs) +AC_CHECK_MOUNT_TYPE(afs) +AC_CHECK_MOUNT_TYPE(autofs) +AC_CHECK_MOUNT_TYPE(tfs) +AC_CHECK_MOUNT_TYPE(cachefs) +AC_CHECK_MOUNT_TYPE(ignore) +dnl new ones in bsd44 +AC_CHECK_MOUNT_TYPE(null nullfs, nullfs) +AC_CHECK_MOUNT_TYPE(union unionfs, unionfs) +AC_CHECK_MOUNT_TYPE(umap umapfs, umapfs) +dnl ###################################################################### +dnl check for mnttab name for filesystem +AC_MSG(MOUNTING TABLE NAMES) +AC_CHECK_MNTTAB_TYPE(nfs) +AC_CHECK_MNTTAB_TYPE(nfs3) +AC_CHECK_MNTTAB_TYPE(ext2 ufs jfs 4.2 4.3 4.4 efs xfs ffs, ufs) +AC_CHECK_MNTTAB_TYPE(xfs) +AC_CHECK_MNTTAB_TYPE(efs) +AC_CHECK_MNTTAB_TYPE(cdfs hsfs cd9660 iso9660 isofs cdrom, cdfs) +AC_CHECK_MNTTAB_TYPE(vfat pcfs pc msdos msdosfs fat, pcfs) +AC_CHECK_MNTTAB_TYPE(mfs) +AC_CHECK_MNTTAB_TYPE(tmpfs tmp, tmpfs) +AC_CHECK_MNTTAB_TYPE(lofs lo, lofs) +AC_CHECK_MNTTAB_TYPE(lfs) +AC_CHECK_MNTTAB_TYPE(afs) +AC_CHECK_MNTTAB_TYPE(autofs) +AC_CHECK_MNTTAB_TYPE(tfs) +AC_CHECK_MNTTAB_TYPE(cachefs) +dnl new ones in bsd44 +AC_CHECK_MNTTAB_TYPE(null nullfs, nullfs) +AC_CHECK_MNTTAB_TYPE(union unionfs, unionfs) +AC_CHECK_MNTTAB_TYPE(umap umapfs, umapfs) +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl Mount Table option name strings like MNTOPT_* +dnl if found, defines MNTTAB_OPT_* +AC_MSG(MOUNT TABLE OPTION NAME STRINGS) +AC_CHECK_MNTTAB_OPT(acdirmax) +AC_CHECK_MNTTAB_OPT(acdirmin) +AC_CHECK_MNTTAB_OPT(acregmax) +AC_CHECK_MNTTAB_OPT(acregmin) +AC_CHECK_MNTTAB_OPT(actimeo) +dnl AC_CHECK_MNTTAB_OPT(bg) +AC_CHECK_MNTTAB_OPT(compress) +AC_CHECK_MNTTAB_OPT(dev) +dnl AC_CHECK_MNTTAB_OPT(direct) +dnl AC_CHECK_MNTTAB_OPT(fg) +AC_CHECK_MNTTAB_OPT(fsid) +AC_CHECK_MNTTAB_OPT(grpid) +dnl AC_CHECK_MNTTAB_OPT(hard) +AC_CHECK_MNTTAB_OPT(ignore) +dnl AC_CHECK_MNTTAB_OPT(indirect) +AC_CHECK_MNTTAB_OPT(intr) +dnl AC_CHECK_MNTTAB_OPT(kerb) +dnl AC_CHECK_MNTTAB_OPT(llock) +dnl AC_CHECK_MNTTAB_OPT(map) +AC_CHECK_MNTTAB_OPT(multi) +AC_CHECK_MNTTAB_OPT(maxgroups) +AC_CHECK_MNTTAB_OPT(noac) +AC_CHECK_MNTTAB_OPT(noauto) +AC_CHECK_MNTTAB_OPT(noconn) +AC_CHECK_MNTTAB_OPT(nocto) +dnl AC_CHECK_MNTTAB_OPT(nointr) +dnl AC_CHECK_MNTTAB_OPT(noquota) +dnl AC_CHECK_MNTTAB_OPT(nosetsec) +AC_CHECK_MNTTAB_OPT(nosub) +AC_CHECK_MNTTAB_OPT(nosuid) +dnl AC_CHECK_MNTTAB_OPT(onerror) +AC_CHECK_MNTTAB_OPT(pgthresh) +AC_CHECK_MNTTAB_OPT(port) +AC_CHECK_MNTTAB_OPT(posix) +AC_CHECK_MNTTAB_OPT(proto) +dnl AC_CHECK_MNTTAB_OPT(quota) +dnl AC_CHECK_MNTTAB_OPT(remount) +AC_CHECK_MNTTAB_OPT(retrans) +AC_CHECK_MNTTAB_OPT(retry) +AC_CHECK_MNTTAB_OPT(ro) +dnl AC_CHECK_MNTTAB_OPT(rq) +AC_CHECK_MNTTAB_OPT(rsize) +AC_CHECK_MNTTAB_OPT(rw) +dnl AC_CHECK_MNTTAB_OPT(secure) +AC_CHECK_MNTTAB_OPT(soft) +AC_CHECK_MNTTAB_OPT(spongy) +AC_CHECK_MNTTAB_OPT(suid) +AC_CHECK_MNTTAB_OPT(symttl) +dnl AC_CHECK_MNTTAB_OPT(syncdir) +AC_CHECK_MNTTAB_OPT(timeo) +dnl AC_CHECK_MNTTAB_OPT(toosoon) +AC_CHECK_MNTTAB_OPT(vers) +AC_CHECK_MNTTAB_OPT(wsize) +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl Generic mount(2) system call flags (hex/int numbers) like M_*/MS_*/MNT_* +dnl if found, defines MNT2_GEN_OPT_* +AC_MSG(GENERIC MOUNT(2) OPTIONS) +AC_CHECK_MNT2_GEN_OPT(async) +AC_CHECK_MNT2_GEN_OPT(cache) +AC_CHECK_MNT2_GEN_OPT(data) +dnl AC_CHECK_MNT2_GEN_OPT(done) +dnl AC_CHECK_MNT2_GEN_OPT(exported) +dnl AC_CHECK_MNT2_GEN_OPT(exronly) +dnl AC_CHECK_MNT2_GEN_OPT(force) +AC_CHECK_MNT2_GEN_OPT(fss) +AC_CHECK_MNT2_GEN_OPT(jfs) +AC_CHECK_MNT2_GEN_OPT(grpid) +dnl AC_CHECK_MNT2_GEN_OPT(local) +dnl AC_CHECK_MNT2_GEN_OPT(mod) +AC_CHECK_MNT2_GEN_OPT(multi) +AC_CHECK_MNT2_GEN_OPT(newtype) +AC_CHECK_MNT2_GEN_OPT(nfs) +AC_CHECK_MNT2_GEN_OPT(nocache) +AC_CHECK_MNT2_GEN_OPT(nodev) +AC_CHECK_MNT2_GEN_OPT(noexec) +dnl AC_CHECK_MNT2_GEN_OPT(nofh) +dnl AC_CHECK_MNT2_GEN_OPT(nondev) +AC_CHECK_MNT2_GEN_OPT(nosub) +AC_CHECK_MNT2_GEN_OPT(nosuid) +dnl AC_CHECK_MNT2_GEN_OPT(notrunc) +AC_CHECK_MNT2_GEN_OPT(overlay) +AC_CHECK_MNT2_GEN_OPT(quota) +AC_CHECK_MNT2_GEN_OPT(rdonly) +dnl AC_CHECK_MNT2_GEN_OPT(remount) +AC_CHECK_MNT2_GEN_OPT(ronly) +AC_CHECK_MNT2_GEN_OPT(sync) +AC_CHECK_MNT2_GEN_OPT(synchronous) +dnl AC_CHECK_MNT2_GEN_OPT(sys5) +dnl AC_CHECK_MNT2_GEN_OPT(union) +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl NFS-specific mount(2) options (hex numbers) like NFSMNT_*/NFS_MOUNT_* +AC_MSG(NFS-SPECIFIC MOUNT(2) OPTIONS) +dnl if found, defines MNT2_NFS_OPT_* +AC_CHECK_MNT2_NFS_OPT(acdirmax) +AC_CHECK_MNT2_NFS_OPT(acdirmin) +AC_CHECK_MNT2_NFS_OPT(acregmax) +AC_CHECK_MNT2_NFS_OPT(acregmin) +dnl AC_CHECK_MNT2_NFS_OPT(autherr) +AC_CHECK_MNT2_NFS_OPT(auto) +AC_CHECK_MNT2_NFS_OPT(deadthresh) +dnl AC_CHECK_MNT2_NFS_OPT(disminprog) +dnl AC_CHECK_MNT2_NFS_OPT(dismnt) +AC_CHECK_MNT2_NFS_OPT(dumbtimr) +AC_CHECK_MNT2_NFS_OPT(fsname) +AC_CHECK_MNT2_NFS_OPT(grpid) +dnl AC_CHECK_MNT2_NFS_OPT(hasauth) +AC_CHECK_MNT2_NFS_OPT(hostname) +AC_CHECK_MNT2_NFS_OPT(ignore) +AC_CHECK_MNT2_NFS_OPT(int) +AC_CHECK_MNT2_NFS_OPT(intr) +dnl AC_CHECK_MNT2_NFS_OPT(internal) +dnl AC_CHECK_MNT2_NFS_OPT(kerb) +dnl AC_CHECK_MNT2_NFS_OPT(kerberos) +AC_CHECK_MNT2_NFS_OPT(knconf) +AC_CHECK_MNT2_NFS_OPT(leaseterm) +dnl AC_CHECK_MNT2_NFS_OPT(llock) +AC_CHECK_MNT2_NFS_OPT(maxgrps) +dnl AC_CHECK_MNT2_NFS_OPT(mntd) +dnl AC_CHECK_MNT2_NFS_OPT(mywrite) +AC_CHECK_MNT2_NFS_OPT(nfsv3) +AC_CHECK_MNT2_NFS_OPT(noac) +AC_CHECK_MNT2_NFS_OPT(noconn) +AC_CHECK_MNT2_NFS_OPT(nocto) +AC_CHECK_MNT2_NFS_OPT(noint) +dnl AC_CHECK_MNT2_NFS_OPT(nqlooklease) +AC_CHECK_MNT2_NFS_OPT(nqnfs) +AC_CHECK_MNT2_NFS_OPT(pgthresh) +AC_CHECK_MNT2_NFS_OPT(posix) +dnl AC_CHECK_MNT2_NFS_OPT(rcvlock) +dnl AC_CHECK_MNT2_NFS_OPT(rdiralook) +AC_CHECK_MNT2_NFS_OPT(readahead) +AC_CHECK_MNT2_NFS_OPT(resvport) +AC_CHECK_MNT2_NFS_OPT(retrans) +AC_CHECK_MNT2_NFS_OPT(ronly) +dnl AC_CHECK_MNT2_NFS_OPT(rpctimesync) +AC_CHECK_MNT2_NFS_OPT(rsize) +dnl AC_CHECK_MNT2_NFS_OPT(secure) +dnl AC_CHECK_MNT2_NFS_OPT(sndlock) +AC_CHECK_MNT2_NFS_OPT(soft) +AC_CHECK_MNT2_NFS_OPT(spongy) +AC_CHECK_MNT2_NFS_OPT(symttl) +AC_CHECK_MNT2_NFS_OPT(timeo) +AC_CHECK_MNT2_NFS_OPT(tcp) +dnl AC_CHECK_MNT2_NFS_OPT(waitauth) +dnl AC_CHECK_MNT2_NFS_OPT(wantauth) +dnl AC_CHECK_MNT2_NFS_OPT(wantrcv) +dnl AC_CHECK_MNT2_NFS_OPT(wantsnd) +AC_CHECK_MNT2_NFS_OPT(wsize) +dnl ====================================================================== + +dnl ###################################################################### +dnl CDFS-specific mount(2) options (hex numbers) like M_* +AC_MSG(CDFS-SPECIFIC MOUNT(2) OPTIONS) +dnl if found, defines MNT2_CDFS_OPT_* +AC_CHECK_MNT2_CDFS_OPT(defperm) +AC_CHECK_MNT2_CDFS_OPT(nodefperm) +AC_CHECK_MNT2_CDFS_OPT(noversion) +AC_CHECK_MNT2_CDFS_OPT(rrip) +dnl ====================================================================== + +dnl ###################################################################### +dnl SYSTEM-SPECIFIC TESTS +AC_MSG(SYSTEM-SPECIFIC TESTS) +dnl ====================================================================== +dnl Mount table style +AC_CHECK_MNTTAB_STYLE +AC_CHECK_HIDE_MOUNT_TYPE +AC_CHECK_MNTTAB_LOCATION +AC_CHECK_MNTTAB_FILE_NAME +AC_CHECK_MOUNT_TRAP +AC_CHECK_MOUNT_STYLE +AC_CHECK_UMOUNT_STYLE +AC_CHECK_UNMOUNT_CALL +AC_CHECK_UNMOUNT_ARGS +AC_CHECK_NFS_SA_DREF +AC_CHECK_NFS_HN_DREF +AC_CHECK_NFS_FH_DREF +AC_CHECK_NFS_SOCKET_CONNECTION +AC_CHECK_CHECKMOUNT_STYLE +AC_CHECK_RESTARTABLE_SIGNAL_HANDLER +dnl ====================================================================== + +dnl ********* +AC_SAVE_STATE +dnl ********* + +dnl ###################################################################### +dnl output files +AC_MSG(OUTPUT FILES) +dnl The am_utils_link_files_* variables are set in macros in aclocal.m4 +AC_LINK_FILES(${am_utils_link_files_src}, ${am_utils_link_files_dst}) +dnl ========================================================================== +dnl This is required by libtool 1.0 until an automake after 2.12 does it +dnl automatically. +LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/.lo/g'` +AC_SUBST(LTLIBOBJS) +LTALLOCA=`echo "$ALLOCA" | sed 's/\.o/.lo/g'` +AC_SUBST(LTALLOCA) +dnl ========================================================================== +dnl It is *NOT* a mistake that I listed config.h.in (with ".in" extension) +dnl in this file. It is needed to perform @@ substitution on the final +dnl config.h file, which does not get done by AC_CONFIG_HEADER, only by the +dnl AC_OUTPUT routines. Since AC_CONFIG_HEADER runs after the files listed +dnl in AC_OUTPUT, it overrides the @@ substitutions made earlier. +dnl -Erez Zadok +AC_OUTPUT( \ + aux_conf.h:aux/aux_conf.h.in \ + \ + Makefile \ + amd/Makefile \ + amq/Makefile \ + \ + fixmount/Makefile \ + fsinfo/Makefile \ + hlfsd/Makefile \ + libamu/Makefile \ + mk-amd-map/Makefile \ + wire-test/Makefile \ + \ + scripts/Makefile \ + doc/Makefile \ + \ + scripts/am-eject \ + scripts/amd2ldif \ + scripts/amd2sun \ + scripts/ctl-amd \ + scripts/ctl-hlfsd \ + scripts/expn \ + scripts/fixrmtab \ + scripts/fix-amd-map \ + scripts/lostaltmail \ + scripts/wait4amd \ + scripts/wait4amd2die \ + ) +dnl ====================================================================== + +dnl ###################################################################### +AC_MSG(END OF CONFIGURATION) +dnl end of configure.in for am-utils-6.x diff --git a/m4/install-sh b/m4/install-sh new file mode 100755 index 0000000..5871924 --- /dev/null +++ b/m4/install-sh @@ -0,0 +1,238 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/m4/ltconfig b/m4/ltconfig new file mode 100755 index 0000000..2347e69 --- /dev/null +++ b/m4/ltconfig @@ -0,0 +1,1512 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A lot of this script is taken from autoconf-2.10. + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +echo=echo +if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : +else + # The Solaris and AIX default echo program unquotes backslashes. + # This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # So, we emulate echo with printf '%s\n' + echo="printf %s\\n" + if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : + else + # Oops. We have no working printf. Try to find a not-so-buggy echo. + echo=echo + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH /usr/ucb; do + if test -f $dir/echo && test "X`$dir/echo '\t'`" = 'X\t'; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.2 +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking. +enable_static=yes +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +verify_host=yes +with_gcc=no +with_gnu_ld=no + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_NM="$NM" +old_RANLIB="$RANLIB" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test -f "$ltmain"; then : +else + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to ltmain.sh. + srcdir=`$echo "$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib;$old_postinstall_cmds" +fi + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + IFS="$save_ifs" + test -z "$dir" && dir=. + if test -f $dir/gcc; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:424: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + no_builtin_flag=' -fno-builtin' + + case "$host_os" in + aix3* | aix4* | irix5* | irix6* | osf3* | osf4*) + # PIC is the default for these OSes. + ;; + os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4.2uw2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:547: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:591: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftestdata + if ln -s X conftestdata 2>/dev/null; then + $rm conftestdata + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:624: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | [A-Za-z]:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we are not using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:642: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:645: checking for non-GNU ld" >&5 + fi + + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +archive_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= + +case "$host_os" in +amigaos* | sunos4*) + # On these operating systems, we should treat GNU ld like the system ld. + gnu_ld_acts_native=yes + ;; +*) + gnu_ld_acts_native=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then + + # See if GNU ld supports shared libraries. + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared ${wl}-soname $wl$soname -o $lib$libobjs' + runpath_var=LD_RUN_PATH + ld_shlibs=yes + else + ld_shlibs=no + fi + + if test "$ld_shlibs" = yes; then + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE;$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + allow_undefined_flag=unsupported + archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$CC -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry;$AR cru $lib $objdir/$soname' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data;$echo "#define NAME $libname" > $objdir/a2ixlibrary.data;$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data;$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data;$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data;$AR cru $lib$libobjs;$RANLIB $lib;(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3, at last, uses gcc -shared to do shared libraries. + freebsd3*) + archive_cmds='$CC -shared -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs;mv $objdir/$soname $lib' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + ;; + + netbsd*) + # Tested with NetBSD 1.2 ld + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def;$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def;$echo DATA >> $objdir/$libname.def;$echo " SINGLE NONSHARED" >> $objdir/$libname.def;$echo EXPORTS >> $objdir/$libname.def;emxexp$libobjs >> $objdir/$libname.def;$CC -Zdll -Zcrtdll -o $lib$libobjs $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3* | osf4*) + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs$deplibs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -o $lib$libobjs' + hardcode_direct=yes + ;; + + solaris2*) + no_undefined_flag=' -z text' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + + # Solaris 2 before 2.5 hardcodes -L paths. + case "$host_os" in + solaris2.[0-4]*) + hardcode_minus_L=yes + ;; + esac + ;; + + sunos4*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared -o $lib$libobjs' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs' + fi + + if test "$with_gnu_ld" = yes; then + export_dynamic_flag_spec='${wl}-export-dynamic' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib$libobjs' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + can_build_shared=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + /* | [A-Za-z]:\\*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + else + NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRSTU]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \1' + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDTU]' + ;; +irix*) + # Cannot use undefined symbols on IRIX because inlined functions mess us up. + symcode='[BCDEGRST]' + ;; +solaris2*) + symcode='[BDTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTUW]' +fi + +# Write the raw and C identifiers. +global_symbol_pipe="sed -n -e 's/^.* $symcode $sympat$/$symxfrm/p'" + +# Check to see that the pipe works correctly. +pipe_works=no +$rm conftest* +cat > conftest.c <&5 +if { (eval echo $progname:972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:975: eval \"$NM conftest.o | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.o | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + wcout=`wc "$nlist" 2>/dev/null` + count=`$echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` + (test "$count" -ge 0) 2>/dev/null || count=-1 + else + rm -f "$nlist"T + count=-1 + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + sed 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> conftest.c + + cat <> conftest.c +#if defined (__STDC__) && __STDC__ +# define __ptr_t void * +#else +# define __ptr_t char * +#endif + +/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ +int dld_preloaded_symbol_count = $count; + +/* The mapping between symbol names and symbols. */ +struct { + char *name; + __ptr_t address; +} +dld_preloaded_symbols[] = +{ +EOF + sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (__ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.o conftestm.o + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS='conftestm.o' + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi +else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* + +# Do not use the global_symbol_pipe unless it works. +echo "$ac_t$pipe_works" 1>&6 +test "$pipe_works" = yes || global_symbol_pipe= + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && \ + test "$hardcode_minus_L" != no && \ + test "$hardcode_shlibpath_var" != no; then + + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +elif test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" != yes; then + # We cannot hardcode anything. + hardcode_action=unsupported +else + # We can only hardcode existing directories. + hardcode_action=relink +fi +echo "$ac_t$hardcode_action" 1>&6 +test "$hardcode_action" = unsupported && can_build_shared=no + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linker may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +version_type=none +dynamic_linker="$host_os ld.so" + +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3* | aix4*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so.$major' + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +freebsd2* | freebsd3*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +gnu*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + shlibpath_var=SHLIB_PATH + library_names_spec='${libname}${release}.sl.$versuffix ${libname}${release}.sl.$major $libname.sl' + soname_spec='${libname}${release}.sl.$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd* | openbsd*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so.$major' + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris2*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + finish_cmds='PATH="$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4.2uw2*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds;\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" + +# Now quote all the things that may contain metacharacters. +for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ + old_LN_S AR CC LD LN_S NM reload_flag reload_cmds wl pic_flag \ + link_static_flag no_builtin_flag export_dynamic_flag_spec \ + libname_spec library_names_spec soname_spec RANLIB \ + old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \ + allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe \ + hardcode_libdir_flag_spec hardcode_libdir_separator; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | archive_cmds | \ + postinstall_cmds | postuninstall_cmds | finish_cmds) + # Double-quote double-evaled strings. + eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\"\`" + ;; + *) + eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`" + ;; + esac +done + +ofile=libtool +trap "$rm $ofile; exit 1" 1 2 15 +echo creating $ofile +$rm $ofile +cat < $ofile +#! /bin/sh + +# libtool - Provide generalized library-building support services. +# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This program was configured as follows, +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\ +# LD="$old_LD" NM="$old_NM" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +# An echo program that does not interpret backslashes. +echo="$ltecho" + +# The version of $progname that generated this script. +LTCONFIG_VERSION="$VERSION" + +# Shell to use when invoking shell scripts. +SHELL=${CONFIG_SHELL-/bin/sh} + +# Whether or not to build libtool libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build old-style libraries. +build_old_libs=$enable_static + +# The host system. +host_alias="$host_alias" +host="$host" + +# The archiver. +AR="$AR" + +# The default C compiler. +CC="$CC" + +# The linker used to build libraries. +LD="$LD" + +# Whether we need hard or soft links. +LN_S="$LN_S" + +# A BSD-compatible nm program. +NM="$NM" + +# The name of the directory that contains temporary libtool files. +objdir="$objdir" + +# How to create reloadable object files. +reload_flag="$reload_flag" +reload_cmds="$reload_cmds" + +# How to pass a linker flag through the compiler. +wl="$wl" + +# Additional compiler flags for building library objects. +pic_flag="$pic_flag" + +# Compiler flag to prevent dynamic linking. +link_static_flag="$link_static_flag" + +# Compiler flag to turn off builtin functions. +no_builtin_flag="$no_builtin_flag" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="$export_dynamic_flag_spec" + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec="$libname_spec" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="$library_names_spec" + +# The coded name of the library, if different from the real name. +soname_spec="$soname_spec" + +# Commands used to build and install an old-style archive. +RANLIB="$RANLIB" +old_archive_cmds="$old_archive_cmds" +old_postinstall_cmds="$old_postinstall_cmds" +old_postuninstall_cmds="$old_postuninstall_cmds" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="$old_archive_from_new_cmds" + +# Commands used to build and install a shared archive. +archive_cmds="$archive_cmds" +postinstall_cmds="$postinstall_cmds" +postuninstall_cmds="$postuninstall_cmds" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="$allow_undefined_flag" + +# Flag that forces no undefined symbols. +no_undefined_flag="$no_undefined_flag" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="$finish_cmds" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="$finish_eval" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="$global_symbol_pipe" + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec="$hardcode_libdir_flag_spec" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="$hardcode_libdir_separator" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +EOF + +case "$host_os" in +aix3*) + cat <<\EOF >> $ofile +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES +fi + +EOF + ;; +esac + +# Append the ltmain.sh script. +cat "$ltmain" >> $ofile || (rm -f $ofile; exit 1) + +chmod +x $ofile +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/m4/ltmain.sh b/m4/ltmain.sh new file mode 100644 index 0000000..e9350b3 --- /dev/null +++ b/m4/ltmain.sh @@ -0,0 +1,2453 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# The name of this program. +progname=`$echo "$0" | sed 's%^.*/%%'` +modename="$progname" + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.2 + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION" + exit 0 + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + $echo "$modename: you cannot specify the output filename with \`-o'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + + # Recognize several different file suffixes. + xform='[cCFSfms]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e 's/\.lo$/.o/'` ;; + *) + $echo "$modename: cannot determine name of library object from \`$srcfile'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + $run $rm $obj $libobj + trap "$run $rm $obj $libobj; exit 1" 1 2 15 + else + $run $rm $libobj + trap "$run $rm $libobj; exit 1" 1 2 15 + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + $show "$base_compile$pic_flag -DPIC $srcfile" + if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then : + else + test -n "$obj" && $run $rm $obj + exit 1 + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag"; then + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj + exit $? + fi + + # Just move the object, then go on to compile the next one + $show "$mv $obj $libobj" + $run $mv $obj $libobj || exit 1 + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + # Suppress compiler output if we already did a PIC compilation. + $show "$base_compile $srcfile$suppress_output" + if $run eval "$base_compile \$srcfile$suppress_output"; then : + else + $run $rm $obj $libobj + exit 1 + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + CC="$nonopt" + allow_undefined=yes + compile_command="$CC" + finalize_command="$CC" + + compile_shlibpath= + finalize_shlibpath= + deplibs= + dlfiles= + dlprefiles= + export_dynamic=no + hardcode_libdirs= + libobjs= + link_against_libtool_libs= + ltlibs= + objs= + prev= + prevarg= + release= + rpath= + perm_rpath= + temp_rpath= + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -all-static | -static) + if test "X$arg" = "X-all-static" && test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + for arg + do + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + *) + dlprefiles="$dlprefiles $arg" + test "$prev" = dlfiles && dlfiles="$dlfiles $arg" + prev= + ;; + esac + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath) + rpath="$rpath $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + if test "$export_dynamic" != yes; then + export_dynamic=yes + if test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + else + arg= + fi + + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + fi + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'` + case "$dir" in + /* | [A-Za-z]:\\*) + # Add the corresponding hardcode_libdir_flag, if it is not identical. + ;; + *) + $echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2 + exit 1 + ;; + esac + deplibs="$deplibs $arg" + ;; + + -l*) deplibs="$deplibs $arg" ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.a) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e 's/\.lo$/\.o/'` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + $echo "$modename: \`$arg' contains no -rpath information" 1>&2 + exit 1 + fi + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname"; then + # If there is no dlname, we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test "$build_libtool_libs" = yes && test -n "$library_names"; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # This is the magic to use -rpath. + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + libdir= + fi + fi + + if test -n "$libdir"; then + eval flag=\"$hardcode_libdir_flag_spec\" + + compile_command="$compile_command $flag" + finalize_command="$finalize_command $flag" + fi + elif test -n "$runpath_var"; then + # Do the same for the permanent run path. + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + + + case "$hardcode_action" in + immediate) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = no; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + relink) + # We need an absolute path. + case "$dir" in + /* | [A-Za-z]:\\*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + *) + $echo "$modename: \`$hardcode_action' is an unknown hardcode action" 1>&2 + exit 1 + ;; + esac + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + finalize_command="$finalize_command -L$libdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + finalize_shlibpath="$finalize_shlibpath$libdir:" + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + finalize_command="$finalize_command -L$libdir -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + compile_command="$compile_command -L$dir -l$name" + finalize_command="$finalize_command -L$dir -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$vinfo" && test -n "$release"; then + $echo "$modename: you cannot specify both \`-version-info' and \`-release'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + oldlib= + oldobjs= + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + */* | *\\*) + $echo "$modename: output file \`$output' must have no directory components" 1>&2 + exit 1 + ;; + + *.a) + # Now set the variables for building old libraries. + build_libtool_libs=no + build_old_libs=yes + oldlib="$output" + $show "$rm $oldlib" + $run $rm $oldlib + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$output" in + lib*) ;; + *) + $echo "$modename: libtool library \`$arg' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + name=`$echo "X$output" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + current=0 + revision=0 + age=0 + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored while creating libtool libraries" 1>&2 + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$rpath"; then + $echo "$modename: you must specify an installation directory with \`-rpath'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo + IFS="$save_ifs" + + if test -n "$5"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + test -n "$2" && current="$2" + test -n "$3" && revision="$3" + test -n "$4" && age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + version_vars="version_type current age revision" + case "$version_type" in + none) ;; + + linux) + version_vars="$version_vars major versuffix" + major=`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + version_vars="$version_vars versuffix verstring" + major=`expr $current - $age` + versuffix="$current.$age.$revision" + verstring="$versuffix" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + version_vars="$version_vars major versuffix" + major="$current" + versuffix="$current.$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Create the output directory, or remove our outputs if we need to. + if test -d $objdir; then + $show "$rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*" + $run $rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.* + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + # Add libc to deplibs on all systems. + dependency_libs="$deplibs" + deplibs="$deplibs -lc" + + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are PIC. + test -z "$pic_flag" && libobjs=`$echo "X$libobjs " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//g'` + + # Do each of the archive commands. + eval cmds=\"$archive_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + $show "(cd $objdir && $LN_S $realname $linkname)" + $run eval '(cd $objdir && $LN_S $realname $linkname)' || exit $? + done + + # If -export-dynamic was specified, set the dlname. + if test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + + # Now set the variables for building old libraries. + oldlib="$objdir/$libname.a" + ;; + + *.lo | *.o) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into reloadable objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored while creating objects" 1>&2 + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored while creating objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored while creating objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e 's/\.lo$/.o/'` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Create the old-style object. + reload_objs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + test -z "$libobj" && exit 0 + + if test "$build_libtool_libs" != yes; then + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit 1 + fi + + exit 0 + ;; + + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored while linking programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 + fi + + if test -n "$rpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + libdir= + fi + fi + + if test -n "$libdir"; then + eval flag=\"$hardcode_libdir_flag_spec\" + + compile_command="$compile_command $flag" + finalize_command="$finalize_command $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + fi + + # Substitute the hardcoded libdirs into the compile commands. + if test -n "$hardcode_libdir_separator"; then + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + finalize_command=`$echo "X$finalize_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + fi + + if test "$export_dynamic" = yes && test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${output}S.c" + else + dlsyms= + fi + + if test -n "$dlsyms"; then + # Add our own program objects to the preloaded list. + dlprefiles=`$echo "X$objs$dlprefiles " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + + # Discover the nlist of each of the dlfiles. + nlist="$objdir/${output}.nm" + + if test -d $objdir; then + $show "$rm $nlist ${nlist}T" + $run $rm "$nlist" "${nlist}T" + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + # Parse the name list into a source file. + $show "creating $objdir/$dlsyms" + if test -z "$run"; then + # Make sure we at least have an empty file. + test -f "$nlist" || : > "$nlist" + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + wcout=`wc "$nlist" 2>/dev/null` + count=`echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` + (test "$count" -ge 0) 2>/dev/null || count=-1 + else + $rm "$nlist"T + count=-1 + fi + + case "$dlsyms" in + "") ;; + *.c) + $echo > "$objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$output' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define dld_preloaded_symbol_count some_other_symbol +#define dld_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test -f "$nlist"; then + sed -e 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> "$objdir/$dlsyms" + else + echo '/* NONE */' >> "$objdir/$dlsyms" + fi + + $echo >> "$objdir/$dlsyms" "\ + +#undef dld_preloaded_symbol_count +#undef dld_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define __ptr_t void * +#else +# define __ptr_t char * +#endif + +/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ +int dld_preloaded_symbol_count = $count; + +/* The mapping between symbol names and symbols. */ +struct { + char *name; + __ptr_t address; +} +dld_preloaded_symbols[] = +{\ +" + + if test -f "$nlist"; then + sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> "$objdir/$dlsyms" + fi + + $echo >> "$objdir/$dlsyms" "\ + {0, (__ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif\ +" + ;; + + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + fi + + # Now compile the dynamic symbol file. + $show "(cd $objdir && $CC -c$no_builtin_flag \"$dlsyms\")" + $run eval '(cd $objdir && $CC -c$no_builtin_flag "$dlsyms")' || exit $? + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` + elif test "$export_dynamic" != yes; then + test -n "$dlfiles$dlprefiles" && $echo "$modename: warning: \`-dlopen' and \`-dlpreopen' are ignored without \`-export-dynamic'" 1>&2 + else + # We keep going just in case the user didn't refer to + # dld_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + + # We have no uninstalled library dependencies, so finalize right now. + $show "$compile_command" + $run eval "$compile_command" + exit $? + fi + + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'%g'` + finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'T%g'` + + # Create the binary in the object directory, then wrap it. + if test -d $objdir; then : + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + /* | [A-Za-z]:\\*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + # Delete the old output file. + $run $rm $output + + if test -n "$compile_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" + finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" + fi + + case "$hardcode_action" in + relink) + # AGH! Flame the AIX and HP-UX people for me, will ya? + $echo "$modename: warning: using a buggy system linker" 1>&2 + $echo "$modename: relinking will be required before \`$output' can be installed" 1>&2 + ;; + esac + + $show "$compile_command" + $run eval "$compile_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the finalize command for shipping. + finalize_command=`$echo "X$finalize_command" | $Xsed -e "$sed_quote_subst"` + + # Quote $echo for shipping. + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! /bin/sh + +# $output - temporary wrapper script for $objdir/$output +# Generated by ltmain.sh - GNU $PACKAGE $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of \``pwd`'. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + link_against_libtool_libs='$link_against_libtool_libs' + finalize_command=\"$finalize_command\" +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" = \"$magic\"; then : + else + echo=\"$qecho\" + file=\"\$0\" + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + /* | [A-Za-z]:\\*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" + + progdir=\"\$thisdir/$objdir\" + program='$output' + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/:*\$//'\` + + export $shlibpath_var +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} + + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + if test "$build_old_libs" = "yes"; then + # Transform .lo files to .o files. + oldobjs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.a" + + $show "creating $output" + + # Only create the output if not a dry run. + if test -z "$run"; then + $echo > $output "\ +# $output - a libtool library file +# Generated by ltmain.sh - GNU $PACKAGE $VERSION + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $objdir && $LN_S ../$output $output)" + $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional /bin/sh argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL"; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir= + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test -n "$isdir"; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + /* | [A-Za-z]:\\*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + test "X$dlname" = "X$realname" && dlname= + + if test $# -gt 0; then + # Delete the old symlinks. + rmcmd="$rm" + for linkname + do + rmcmd="$rmcmd $destdir/$linkname" + done + $show "$rmcmd" + $run $rmcmd + + # ... and create new ones. + for linkname + do + test "X$dlname" = "X$linkname" && dlname= + $show "(cd $destdir && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $LN_S $realname $linkname)" + done + fi + + if test -n "$dlname"; then + # Install the dynamically-loadable library. + $show "$install_prog $dir/$dlname $destdir/$dlname" + $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + $show "$install_prog $file $destdir/$name" + $run eval "$install_prog $file $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e 's/\.lo$/\.o/'` + ;; + *.o) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e 's/\.lo$/\.o/'` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + link_against_libtool_libs= + finalize_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -z "$libdir"; then + $echo "$modename: warning: \`$lib' contains no -rpath information" 1>&2 + elif test -f "$libfile"; then : + else + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + if test "$hardcode_action" = relink; then + if test "$finalize" = yes; then + $echo "$modename: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 + $show "$finalize_command" + if $run eval "$finalize_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + continue + fi + file="$objdir/$file"T + else + $echo "$modename: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $dest" + $run eval "$install_prog\$stripme \$file \$dest" || exit $? + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" + fi + done + fi + + echo "------------------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "To link against installed libraries in a given directory, LIBDIR," + echo "you must use the \`-LLIBDIR' flag during linking." + echo + echo " You will also need to do one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "------------------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test -f "$file"; then : + else + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + test "X$n" = "X$dlname" && dlname= + done + test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e 's/\.lo$/\.o/'` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + +-n, --dry-run display commands without modifying any files + --features display configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to dld_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only +library objects (\`.lo' files) may be specified, and \`-rpath' is required. + +If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' +and \`ranlib'. + +If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is +created, otherwise an executable program is created." + ;; + +uninstall) + $echo +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/m4/macros/HEADER b/m4/macros/HEADER new file mode 100644 index 0000000..ee1d826 --- /dev/null +++ b/m4/macros/HEADER @@ -0,0 +1,13 @@ +dnl aclocal.m4 file for am-utils-6.x +dnl Contains definitions for specialized GNU-autoconf macros. +dnl Author: Erez Zadok +dnl +dnl DO NOT EDIT DIRECTLY! Generated automtically by maintainers from +dnl aux/Makefile! +dnl +dnl ###################################################################### +dnl UNCOMMENT THE NEXT FEW LINES FOR DEBUGGING CONFIGURE +dnl define([AC_CACHE_LOAD], )dnl +dnl define([AC_CACHE_SAVE], )dnl +dnl ====================================================================== + diff --git a/m4/macros/TRAILER b/m4/macros/TRAILER new file mode 100644 index 0000000..0e77c35 --- /dev/null +++ b/m4/macros/TRAILER @@ -0,0 +1,2 @@ +dnl ###################################################################### +dnl end of aclocal.m4 for am-utils-6.x diff --git a/m4/macros/c_void_p.m4 b/m4/macros/c_void_p.m4 new file mode 100644 index 0000000..ac0fbf5 --- /dev/null +++ b/m4/macros/c_void_p.m4 @@ -0,0 +1,22 @@ +dnl ###################################################################### +dnl check if compiler can handle "void *" +AC_DEFUN(AC_C_VOID_P, +[ +AC_CACHE_CHECK(if compiler can handle void *, +ac_cv_c_void_p, +[ +# try to compile a program which uses void * +AC_TRY_COMPILE( +[ ], +[ +void *vp; +], ac_cv_c_void_p=yes, ac_cv_c_void_p=no) +]) +if test "$ac_cv_c_void_p" = yes +then + AC_DEFINE(voidp, void *) +else + AC_DEFINE(voidp, char *) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/cache_check_dynamic.m4 b/m4/macros/cache_check_dynamic.m4 new file mode 100644 index 0000000..f68e0ae --- /dev/null +++ b/m4/macros/cache_check_dynamic.m4 @@ -0,0 +1,24 @@ +dnl ###################################################################### +dnl New versions of the cache functions which also dynamically evaluate the +dnl cache-id field, so that it may contain shell variables to expand +dnl dynamically for the creation of $ac_cv_* variables on the fly. +dnl In addition, this function allows you to call COMMANDS which generate +dnl output on the command line, because it prints its own AC_MSG_CHECKING +dnl after COMMANDS are run. +dnl +dnl ====================================================================== +dnl AC_CACHE_CHECK_DYNAMIC(MESSAGE, CACHE-ID, COMMANDS) +define(AC_CACHE_CHECK_DYNAMIC, +[ +ac_tmp=`echo $2` +if eval "test \"`echo '$''{'$ac_tmp'+set}'`\" = set"; then + AC_MSG_CHECKING([$1]) + echo $ac_n "(cached) $ac_c" 1>&AC_FD_MSG +else + $3 + AC_MSG_CHECKING([$1]) +fi +ac_tmp_val=`eval eval "echo '$''{'$ac_tmp'}'"` +AC_MSG_RESULT($ac_tmp_val) +]) +dnl ====================================================================== diff --git a/m4/macros/check_am_fs.m4 b/m4/macros/check_am_fs.m4 new file mode 100644 index 0000000..71a6a2b --- /dev/null +++ b/m4/macros/check_am_fs.m4 @@ -0,0 +1,40 @@ +dnl ###################################################################### +dnl check if an automounter filesystem exists (it almost always does). +dnl Usage: AC_CHECK_AM_FS(, , []) +dnl Print the message in , and declare HAVE_AM_FS_ true. +dnl If is defined, then define this filesystem as tru only of the +dnl filesystem for is true. +AC_DEFUN(AC_CHECK_AM_FS, +[ +# store variable name of fs +ac_upcase_am_fs_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_AM_FS_$ac_upcase_am_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $2 filesystem ($1), +ac_cv_am_fs_$1, +[ +# true by default +eval "ac_cv_am_fs_$1=yes" +# if exists but is defined to "no", set this filesystem to no. +if test -n "$3" +then + # flse by default if arg 3 was supplied + eval "ac_cv_am_fs_$1=no" + if test "`eval echo '$''{ac_cv_fs_'$3'}'`" = yes + then + eval "ac_cv_am_fs_$1=yes" + fi + # some filesystems do not have a mnttab entry, but exist based on headers + if test "`eval echo '$''{ac_cv_fs_header_'$3'}'`" = yes + then + eval "ac_cv_am_fs_$1=yes" + fi +fi +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_am_fs_'$1'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_checkmount_style.m4 b/m4/macros/check_checkmount_style.m4 new file mode 100644 index 0000000..ff883b3 --- /dev/null +++ b/m4/macros/check_checkmount_style.m4 @@ -0,0 +1,28 @@ +dnl ###################################################################### +dnl check style of fixmount check_mount() function +AC_DEFUN(AC_CHECK_CHECKMOUNT_STYLE, +[ +AC_CACHE_CHECK(style of fixmount check_mount(), +ac_cv_style_checkmount, +[ +# select the correct style for unmounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* ) + ac_cv_style_checkmount=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_checkmount=bsd44 ;; + aix* ) + ac_cv_style_checkmount=aix ;; + osf* ) + ac_cv_style_checkmount=osf ;; + ultrix* ) + ac_cv_style_checkmount=ultrix ;; + * ) + ac_cv_style_checkmount=default ;; +esac +]) +am_utils_checkmount_style_file="check_mount.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/checkmount/checkmount_${ac_cv_style_checkmount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}fixmount/${am_utils_checkmount_style_file}" " +]) +dnl ====================================================================== diff --git a/m4/macros/check_extern.m4 b/m4/macros/check_extern.m4 new file mode 100644 index 0000000..ea7a0a0 --- /dev/null +++ b/m4/macros/check_extern.m4 @@ -0,0 +1,77 @@ +dnl ###################################################################### +dnl check for external definition for a function (not external variables) +dnl Usage AC_CHECK_EXTERN(extern) +dnl Checks for external definition for "extern" that is delimited on the +dnl left and the right by a character that is not a valid symbol character. +dnl +dnl Note that $pattern below is very carefully crafted to match any system +dnl external defintion, with __P posix prototypes, with or without an extern +dnl word, etc. Think twice before changing this. +AC_DEFUN(AC_CHECK_EXTERN, +[ +# store variable name for external definition +ac_upcase_extern_name=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_EXTERN_$ac_upcase_extern_name +# check for cached value and set it if needed +AC_CACHE_CHECK_DYNAMIC(external function definition for $1, +ac_cv_extern_$1, +[ +changequote(<<, >>)dnl +# the old pattern assumed that the complete external definition is on one +# line but on some systems it is split over several lines, so only match +# beginning of the extern definition including the opening parenthesis. +#pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(.*\).*;" +pattern="(extern)?.*[^a-zA-Z0-9_]$1[^a-zA-Z0-9_]?.*\(" +changequote([, ])dnl +AC_EGREP_CPP(${pattern}, +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_WAIT_H +# include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#if HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_NETDB_H +# include +#endif /* HAVE_NETDB_H */ +#ifdef HAVE_CLUSTER_H +# include +#endif /* HAVE_CLUSTER_H */ +#ifdef HAVE_RPC_RPC_H +/* + * Turn on PORTMAP, so that additional header files would get included + * and the important definition for UDPMSGSIZE is included too. + */ +# ifndef PORTMAP +# define PORTMAP +# endif /* not PORTMAP */ +# include +# ifndef XDRPROC_T_TYPE +typedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...)); +# endif /* not XDRPROC_T_TYPE */ +#endif /* HAVE_RPC_RPC_H */ + +], eval "ac_cv_extern_$1=yes", eval "ac_cv_extern_$1=no") +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_extern_'$1'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_fhandle.m4 b/m4/macros/check_fhandle.m4 new file mode 100644 index 0000000..1b82af0 --- /dev/null +++ b/m4/macros/check_fhandle.m4 @@ -0,0 +1,25 @@ +dnl ###################################################################### +dnl Find if type 'fhandle' exists +AC_DEFUN(AC_CHECK_FHANDLE, +[ +AC_CACHE_CHECK(if plain fhandle type exists, +ac_cv_have_fhandle, +[ +# try to compile a program which may have a definition for the type +# set to a default value +ac_cv_have_fhandle=no +# look for "struct nfs_fh" +if test "$ac_cv_have_fhandle" = no +then +AC_TRY_COMPILE_NFS( +[ fhandle a; +], ac_cv_have_fhandle=yes, ac_cv_have_fhandle=no) +fi + +]) +if test "$ac_cv_have_fhandle" != no +then + AC_DEFINE(HAVE_FHANDLE) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_field.m4 b/m4/macros/check_field.m4 new file mode 100644 index 0000000..1d41e3f --- /dev/null +++ b/m4/macros/check_field.m4 @@ -0,0 +1,69 @@ +dnl ###################################################################### +dnl find if structure $1 has field field $2 +AC_DEFUN(AC_CHECK_FIELD, +[ +# make variable name a concatenation of the structure name and the field +ac_safe=`echo ac_cv_field_$1_$2 | tr '. ' '__'` +ac_upcase_var_name=`echo HAVE_FIELD_$1_$2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr '. ' '__'` +AC_CACHE_CHECK_DYNAMIC(if $1 field $2 exist, +$ac_safe, +[ +# try to compile a program +AC_TRY_COMPILE( +AC_MOUNT_HEADERS( +[ +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# endif /* HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ + +/* + * for various filesystem specific mount arguments + */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_AUTOFS_PROT_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_PROT_H */ + +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +]), +[ +$1 a; +char *cp = (char *) &(a.$2); +], eval "$ac_safe=yes", eval "$ac_safe=no") +]) +if test "`eval echo '$''{'$ac_safe'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_upcase_var_name) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_fs_headers.m4 b/m4/macros/check_fs_headers.m4 new file mode 100644 index 0000000..219d756 --- /dev/null +++ b/m4/macros/check_fs_headers.m4 @@ -0,0 +1,53 @@ +dnl ###################################################################### +dnl check if a filesystem exists (if any of its header files exist). +dnl Usage: AC_CHECK_FS_HEADERS(..., , []) +dnl Check if if any of the headers exist. If any exist, then +dnl define HAVE_FS_. If exits, then define +dnl HAVE_FS_ instead... +AC_DEFUN(AC_CHECK_FS_HEADERS, +[ +# find what name to give to the fs +if test -n "$3" +then + ac_fs_name=$3 +else + ac_fs_name=$2 +fi +# store variable name of fs +ac_upcase_fs_name=`echo $2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_fs_headers_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_fs_name filesystem in <$1>, +ac_cv_fs_header_$ac_fs_name, +[ +# define to "no" by default +eval "ac_cv_fs_header_$ac_fs_name=no" +# and look to see if it was found +AC_CHECK_HEADERS($1, +[ eval "ac_cv_fs_header_$ac_fs_name=yes" + break +])]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_fs_headers_safe) +# append ops_.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + AC_SUBST(AMD_FS_OBJS) + else + # since this object file could have already been added before + # we need to ensure we do not add it twice. + case "ops_${ac_fs_name}.o" in + ${AMD_FS_OBJS} ) ;; + * ) + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + ;; + esac + fi +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_fs_mntent.m4 b/m4/macros/check_fs_mntent.m4 new file mode 100644 index 0000000..4148309 --- /dev/null +++ b/m4/macros/check_fs_mntent.m4 @@ -0,0 +1,148 @@ +dnl ###################################################################### +dnl check if a filesystem type exists (if its header files exist) +dnl Usage: AC_CHECK_FS_MNTENT(, []) +dnl check in some headers for MNTTYPE_ macro. If that exist, +dnl then define HAVE_FS_. If exits, then defined +dnl HAVE_FS_ instead... +AC_DEFUN(AC_CHECK_FS_MNTENT, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 + ac_fs_as_name=" (from: $1)" +else + ac_fs_name=$1 + ac_fs_as_name="" +fi +# store variable name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_FS_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_fs_name$ac_fs_as_name mntent definition, +ac_cv_fs_$ac_fs_name, +[ +# assume not found +eval "ac_cv_fs_$ac_fs_name=no" +for ac_fs_tmp in $1 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + + # first look for MNTTYPE_* + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MOUNT_ macro + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for MNT_ macro + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # now try to look for GT_ macro (ultrix) + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_fs_$ac_fs_name=yes"], [eval "ac_cv_fs_$ac_fs_name=no"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" != no + then + break + fi + + # look a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # look a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # in addition look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi + + # run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_fs_$ac_fs_name=yes" + break + ] + ) + +done +]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +# append ops_.o object to AMD_FS_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_FS_OBJS" + then + AMD_FS_OBJS="ops_${ac_fs_name}.o" + AC_SUBST(AMD_FS_OBJS) + else + AMD_FS_OBJS="$AMD_FS_OBJS ops_${ac_fs_name}.o" + fi +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_hide_mount_type.m4 b/m4/macros/check_hide_mount_type.m4 new file mode 100644 index 0000000..d2a4df7 --- /dev/null +++ b/m4/macros/check_hide_mount_type.m4 @@ -0,0 +1,31 @@ +dnl ###################################################################### +dnl Define mount type to hide amd mounts from df(1) +dnl +dnl This has to be determined individually per OS. Depending on whatever +dnl mount options are defined in the system header files such as +dnl MNTTYPE_IGNORE or MNTTYPE_AUTO, or others does not work: some OSs define +dnl some of these then use other stuff; some do not define them at all in +dnl the headers, but still use it; and more. After a long attempt to get +dnl this automatically configured, I came to the conclusion that the semi- +dnl automatic per-host-os determination here is the best. +dnl +AC_DEFUN(AC_CHECK_HIDE_MOUNT_TYPE, +[ +AC_CACHE_CHECK(for mount type to hide from df, +ac_cv_hide_mount_type, +[ +case "${host_os}" in + irix* | hpux* ) + ac_cv_hide_mount_type="ignore" + ;; + sunos4* ) + ac_cv_hide_mount_type="auto" + ;; + * ) + ac_cv_hide_mount_type="nfs" + ;; +esac +]) +AC_DEFINE_UNQUOTED(HIDE_MOUNT_TYPE, "$ac_cv_hide_mount_type") +]) +dnl ====================================================================== diff --git a/m4/macros/check_lib2.m4 b/m4/macros/check_lib2.m4 new file mode 100644 index 0000000..e14ee86 --- /dev/null +++ b/m4/macros/check_lib2.m4 @@ -0,0 +1,72 @@ +dnl a bug-fixed version of autoconf 2.12. +dnl first try to link library without $5, and only of that failed, +dnl try with $5 if specified. +dnl it addes $5 to $LIBS if it was needed -Erez. +dnl AC_CHECK_LIB2(LIBRARY, FUNCTION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND +dnl [, OTHER-LIBRARIES]]]) +AC_DEFUN(AC_CHECK_LIB2, +[AC_MSG_CHECKING([for $2 in -l$1]) +dnl Use a cache variable name containing both the library and function name, +dnl because the test really is for library $1 defining function $2, not +dnl just for library $1. Separate tests with the same $1 and different $2s +dnl may have different results. +ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` +AC_CACHE_VAL(ac_cv_lib_$ac_lib_var, +[ac_save_LIBS="$LIBS" + +# first try with base library, without auxiliary library +LIBS="-l$1 $LIBS" +AC_TRY_LINK(dnl +ifelse([$2], [main], , dnl Avoid conflicting decl of main. +[/* Override any gcc2 internal prototype to avoid an error. */ +]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus +extern "C" +#endif +])dnl +[/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $2(); +]), + [$2()], + eval "ac_cv_lib_$ac_lib_var=\"$1\"", + eval "ac_cv_lib_$ac_lib_var=no") + +# if OK, set to no auxiliary library, else try auxiliary library +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = no"; then + LIBS="-l$1 $5 $LIBS" + AC_TRY_LINK(dnl + ifelse([$2], [main], , dnl Avoid conflicting decl of main. + [/* Override any gcc2 internal prototype to avoid an error. */ + ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus + extern "C" + #endif + ])dnl + [/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $2(); + ]), + [$2()], + eval "ac_cv_lib_$ac_lib_var=\"$1 $5\"", + eval "ac_cv_lib_$ac_lib_var=no") +fi + +LIBS="$ac_save_LIBS" +])dnl +ac_tmp="`eval echo '$''{ac_cv_lib_'$ac_lib_var'}'`" +if test "${ac_tmp}" != no; then + AC_MSG_RESULT(-l$ac_tmp) + ifelse([$3], , +[changequote(, )dnl + ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` +changequote([, ])dnl + AC_DEFINE_UNQUOTED($ac_tr_lib) + LIBS="-l$ac_tmp $LIBS" +], [$3]) +else + AC_MSG_RESULT(no) +ifelse([$4], , , [$4 +])dnl +fi + +]) diff --git a/m4/macros/check_lib_funcs.m4 b/m4/macros/check_lib_funcs.m4 new file mode 100644 index 0000000..e87b68c --- /dev/null +++ b/m4/macros/check_lib_funcs.m4 @@ -0,0 +1,32 @@ +dnl ###################################################################### +dnl usage AC_CHECK_LIB_FUNCS(lib, func1 func2 ...) +dnl check if any of funcN exist in lib, and define/use that library +AC_DEFUN(AC_CHECK_LIB_FUNCS, +[ +# make variable out of library name and functions +ac_safe=`echo ac_cv_have_lib_$1_$2 | tr ' ' '_'` +AC_CACHE_CHECK_DYNAMIC(libray $1 for functions: $2, +$ac_safe, +[ +eval "$ac_safe=notfound" +# iterate over all functions +for ac_libfunc_tmp in $2 +do + AC_CHECK_LIB($1, $ac_libfunc_tmp, eval "$ac_safe=found", eval "$ac_safe=notfound") + if test "`eval echo '$''{'$ac_safe'}'`" != notfound + then + break + fi +done +]) +# if cache value found, define HAVE_LIBlib and add it to $LIBS +if test "`eval echo '$''{'$ac_safe'}'`" != notfound +then + changequote(<<, >>)dnl + ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + changequote([, ])dnl + AC_DEFINE_UNQUOTED($ac_tr_lib) + LIBS="-l$1 $LIBS" +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_map_funcs.m4 b/m4/macros/check_map_funcs.m4 new file mode 100644 index 0000000..df7ea73 --- /dev/null +++ b/m4/macros/check_map_funcs.m4 @@ -0,0 +1,47 @@ +dnl ###################################################################### +dnl check if a map exists (if some library function exists). +dnl Usage: AC_CHECK_MAP_FUNCS(..., , []) +dnl Check if any of the functions exist. If any exist, then +dnl define HAVE_MAP_. If exits, then defined +dnl HAVE_MAP_ instead... +AC_DEFUN(AC_CHECK_MAP_FUNCS, +[ +# find what name to give to the map +if test -n "$3" +then + ac_map_name=$3 +else + ac_map_name=$2 +fi +# store variable name of map +ac_upcase_map_name=`echo $2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=HAVE_MAP_$ac_upcase_map_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for $ac_map_name maps, +ac_cv_map_$ac_map_name, +[ +# define to "no" by default +eval "ac_cv_map_$ac_map_name=no" +# and look to see if it was found +AC_CHECK_FUNCS($1, +[ + eval "ac_cv_map_$ac_map_name=yes" + break +])]) +# check if need to define variable +if test "`eval echo '$''{ac_cv_map_'$ac_map_name'}'`" = yes +then + AC_DEFINE_UNQUOTED($ac_safe) +# append info_.o object to AMD_INFO_OBJS for automatic compilation +# if first time we add something to this list, then also tell autoconf +# to replace instances of it in Makefiles. + if test -z "$AMD_INFO_OBJS" + then + AMD_INFO_OBJS="info_${ac_map_name}.o" + AC_SUBST(AMD_INFO_OBJS) + else + AMD_INFO_OBJS="$AMD_INFO_OBJS info_${ac_map_name}.o" + fi +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnt2_cdfs_opt.m4 b/m4/macros/check_mnt2_cdfs_opt.m4 new file mode 100644 index 0000000..67ffe65 --- /dev/null +++ b/m4/macros/check_mnt2_cdfs_opt.m4 @@ -0,0 +1,74 @@ +dnl ###################################################################### +dnl Find CDFS-specific mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_CDFS_OPT() +dnl Check if there is an entry for MS_ or M_ in sys/mntent.h or +dnl mntent.h, then define MNT2_CDFS_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_CDFS_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_CDFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for CDFS-specific mount(2) option $ac_fs_name, +ac_cv_mnt2_cdfs_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MNT_$ac_upcase_fs_name) +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_INT( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +#ifndef _sys_stream_h +# define _sys_stream_h +#endif /* not _sys_stream_h */ +#ifndef _SYS_STREAM_H +# define _SYS_STREAM_H +#endif /* not _SYS_STREAM_H */ +AC_MOUNT_HEADERS +, M_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_cdfs_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_cdfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== + + diff --git a/m4/macros/check_mnt2_gen_opt.m4 b/m4/macros/check_mnt2_gen_opt.m4 new file mode 100644 index 0000000..9350c78 --- /dev/null +++ b/m4/macros/check_mnt2_gen_opt.m4 @@ -0,0 +1,72 @@ +dnl ###################################################################### +dnl Find generic mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_GEN_OPT() +dnl Check if there is an entry for MS_ or M_ in sys/mntent.h or +dnl mntent.h, then define MNT2_GEN_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_GEN_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_GEN_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for generic mount(2) option $ac_fs_name, +ac_cv_mnt2_gen_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=notfound" +value=notfound + +# first, try MS_* (most systems). Must be the first test! +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# if failed, try MNT_* (bsd44 systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, MNT_$ac_upcase_fs_name) +fi + +# if failed, try MS_* as an integer (linux systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_INT( +AC_MOUNT_HEADERS +, MS_$ac_upcase_fs_name) +fi + +# If failed try M_* (must be last test since svr4 systems define M_DATA etc. +# in +# This test was off for now, because of the conflicts with other systems. +# but I turned it back on by faking the inclusion of already. +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +#ifndef _sys_stream_h +# define _sys_stream_h +#endif /* not _sys_stream_h */ +#ifndef _SYS_STREAM_H +# define _SYS_STREAM_H +#endif /* not _SYS_STREAM_H */ +AC_MOUNT_HEADERS +, M_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_gen_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_gen_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnt2_nfs_opt.m4 b/m4/macros/check_mnt2_nfs_opt.m4 new file mode 100644 index 0000000..84b43e6 --- /dev/null +++ b/m4/macros/check_mnt2_nfs_opt.m4 @@ -0,0 +1,47 @@ +dnl ###################################################################### +dnl Find NFS-specific mount(2) options (hex numbers) +dnl Usage: AC_CHECK_MNT2_NFS_OPT() +dnl Check if there is an entry for NFSMNT_ in sys/mntent.h or +dnl mntent.h, then define MNT2_NFS_OPT_ to the hex number. +AC_DEFUN(AC_CHECK_MNT2_NFS_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNT2_NFS_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for NFS-specific mount(2) option $ac_fs_name, +ac_cv_mnt2_nfs_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=notfound" +value=notfound + +# first try NFSMNT_* (most systems) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, NFSMNT_$ac_upcase_fs_name) +fi + +# next try NFS_MOUNT_* (linux) +if test "$value" = notfound +then +AC_EXPAND_CPP_HEX( +AC_MOUNT_HEADERS +, NFS_MOUNT_$ac_upcase_fs_name) +fi + +# set cache variable to value +eval "ac_cv_mnt2_nfs_opt_$ac_fs_name=$value" +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnt2_nfs_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnttab_file_name.m4 b/m4/macros/check_mnttab_file_name.m4 new file mode 100644 index 0000000..655571c --- /dev/null +++ b/m4/macros/check_mnttab_file_name.m4 @@ -0,0 +1,57 @@ +dnl ###################################################################### +dnl Find name of mount table file, and define it as MNTTAB_FILE_NAME +dnl +dnl Solaris defines MNTTAB as /etc/mnttab, the file where /sbin/mount +dnl stores its cache of mounted filesystems. But under SunOS, the same +dnl macro MNTTAB, is defined as the _source_ of filesystems to mount, and +dnl is set to /etc/fstab. That is why I have to first check out +dnl if MOUNTED exists, and if not, check for the MNTTAB macro. +dnl +AC_DEFUN(AC_CHECK_MNTTAB_FILE_NAME, +[ +AC_CACHE_CHECK(for name of mount table file name, +ac_cv_mnttab_file_name, +[ +# expand cpp value for MNTTAB +AC_EXPAND_CPP_STRING( +AC_MOUNT_HEADERS( +[ +/* see M4 comment at the top of the definition of this macro */ +#ifdef MOUNTED +# define _MNTTAB_FILE_NAME MOUNTED +# else /* not MOUNTED */ +# ifdef MNTTAB +# define _MNTTAB_FILE_NAME MNTTAB +# endif /* MNTTAB */ +#endif /* not MOUNTED */ +]), +_MNTTAB_FILE_NAME, +[ ac_cv_mnttab_file_name=$value +], +[ +ac_cv_mnttab_file_name=notfound +# check explicitly for /etc/mnttab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mnttab + then + ac_cv_mnttab_file_name="/etc/mnttab" + fi +fi +# check explicitly for /etc/mtab +if test "$ac_cv_mnttab_file_name" = notfound +then + if test -f /etc/mtab + then + ac_cv_mnttab_file_name="/etc/mtab" + fi +fi +]) +]) +# test value and create macro as needed +if test "$ac_cv_mnttab_file_name" != notfound +then + AC_DEFINE_UNQUOTED(MNTTAB_FILE_NAME, "$ac_cv_mnttab_file_name") +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnttab_location.m4 b/m4/macros/check_mnttab_location.m4 new file mode 100644 index 0000000..9fe69b7 --- /dev/null +++ b/m4/macros/check_mnttab_location.m4 @@ -0,0 +1,18 @@ +dnl ###################################################################### +dnl check if the mount table is kept in a file or in the kernel. +AC_DEFUN(AC_CHECK_MNTTAB_LOCATION, +[ +AC_CACHE_CHECK_DYNAMIC(where mount table is kept, +ac_cv_mnttab_location, +[ +# assume location is on file +ac_cv_mnttab_location=file +AC_CHECK_FUNCS(mntctl getmntinfo getmountent, +ac_cv_mnttab_location=kernel) +]) +if test "$ac_cv_mnttab_location" = file +then + AC_DEFINE(MOUNT_TABLE_ON_FILE) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnttab_opt.m4 b/m4/macros/check_mnttab_opt.m4 new file mode 100644 index 0000000..7c76224 --- /dev/null +++ b/m4/macros/check_mnttab_opt.m4 @@ -0,0 +1,39 @@ +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry +dnl option. +dnl Usage: AC_CHECK_MNTTAB_OPT() +dnl Check if there is an entry for MNTOPT_ in sys/mntent.h or mntent.h +dnl define MNTTAB_OPT_ to the string name (e.g., "ro"). +AC_DEFUN(AC_CHECK_MNTTAB_OPT, +[ +# what name to give to the fs +ac_fs_name=$1 +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_OPT_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mount table option $ac_fs_name, +ac_cv_mnttab_opt_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnttab_opt_$ac_fs_name=notfound" +# and look to see if it was found +AC_EXPAND_CPP_STRING( +AC_MOUNT_HEADERS +, MNTOPT_$ac_upcase_fs_name) +# set cache variable to value +if test "${value}" != notfound +then + eval "ac_cv_mnttab_opt_$ac_fs_name=\\\"$value\\\"" +else + eval "ac_cv_mnttab_opt_$ac_fs_name=$value" +fi +]) +# outside cache check, if ok, define macro +ac_tmp=`eval echo '$''{ac_cv_mnttab_opt_'$ac_fs_name'}'` +if test "${ac_tmp}" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnttab_style.m4 b/m4/macros/check_mnttab_style.m4 new file mode 100644 index 0000000..0127c6f --- /dev/null +++ b/m4/macros/check_mnttab_style.m4 @@ -0,0 +1,33 @@ +dnl ###################################################################### +dnl check style of accessing the mount table file +AC_DEFUN(AC_CHECK_MNTTAB_STYLE, +[ +AC_CACHE_CHECK(mount table style, +ac_cv_style_mnttab, +[ +# select the correct style for mount table manipulation functions +case "${host_os_name}" in + aix* ) + ac_cv_style_mnttab=aix ;; + bsd* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_mnttab=bsd ;; + isc3* ) + ac_cv_style_mnttab=isc3 ;; + mach3* ) + ac_cv_style_mnttab=mach3 ;; + osf* ) + ac_cv_style_mnttab=osf ;; + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_style_mnttab=svr4 ;; + ultrix* ) + ac_cv_style_mnttab=ultrix ;; + * ) + ac_cv_style_mnttab=file ;; +esac +]) +am_utils_link_files_src=${am_utils_link_files_src}conf/mtab/mtab_${ac_cv_style_mnttab}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/mtabutil.c" " +# append mtab utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS mtabutil.o" +]) +dnl ====================================================================== diff --git a/m4/macros/check_mnttab_type.m4 b/m4/macros/check_mnttab_type.m4 new file mode 100644 index 0000000..b0dda13 --- /dev/null +++ b/m4/macros/check_mnttab_type.m4 @@ -0,0 +1,132 @@ +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry. +dnl Usage: AC_CHECK_MNTTAB_TYPE(, [fssymbol]) +dnl Check if there is an entry for MNTTYPE_ in sys/mntent.h and mntent.h +dnl define MNTTAB_TYPE_ to the string name (e.g., "nfs"). If +dnl exist, then define MNTTAB_TYPE_ instead. If is +dnl defined, then can be a list of fs strings to look for. +dnl If no symbols have been defined, but the filesystem has been found +dnl earlier, then set the mount-table type to "" anyway... +AC_DEFUN(AC_CHECK_MNTTAB_TYPE, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 +else + ac_fs_name=$1 +fi +# store variable name of fs +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +ac_safe=MNTTAB_TYPE_$ac_upcase_fs_name +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mnttab name for $ac_fs_name filesystem, +ac_cv_mnttab_type_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mnttab_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in $1 +do + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_* + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), + [ eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + ]) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # next look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # then try to run a program that derefences a static array (bsd44) + AC_EXPAND_RUN_STRING( + AC_MOUNT_HEADERS( + [ +#ifndef INITMOUNTNAMES +# error INITMOUNTNAMES not defined +#endif /* not INITMOUNTNAMES */ + ]), + [ + char const *namelist[] = INITMOUNTNAMES; + if (argc > 1) + printf("\"%s\"", namelist[MOUNT_$ac_upcase_fs_symbol]); + ], [ eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$value\\\"" + ]) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # finally run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) + +done + +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_name\\\"" + fi +fi +]) +# check if need to define variable +ac_tmp=`eval echo '$''{ac_cv_mnttab_type_'$ac_fs_name'}'` +if test "$ac_tmp" != notfound +then + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mount_style.m4 b/m4/macros/check_mount_style.m4 new file mode 100644 index 0000000..4df3ce5 --- /dev/null +++ b/m4/macros/check_mount_style.m4 @@ -0,0 +1,48 @@ +dnl ###################################################################### +dnl check style of mounting filesystems +AC_DEFUN(AC_CHECK_MOUNT_STYLE, +[ +AC_CACHE_CHECK(style of mounting filesystems, +ac_cv_style_mount, +[ +# select the correct style for mounting filesystems +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_style_mount=svr4 ;; + bsdi3* | bsdi4* ) + ac_cv_style_mount=bsdi3 ;; + freebsd3* ) + ac_cv_style_mount=freebsd3 ;; + aix* ) + ac_cv_style_mount=aix ;; + hpux* ) + ac_cv_style_mount=hpux ;; + irix6* ) + ac_cv_style_mount=irix6 ;; + irix5* ) + ac_cv_style_mount=irix5 ;; + isc3* ) + ac_cv_style_mount=isc3 ;; + linux* ) + ac_cv_style_mount=linux ;; + mach3* ) + ac_cv_style_mount=mach3 ;; + stellix* ) + ac_cv_style_mount=stellix ;; + * ) # no style needed. Use default filesystem calls ala BSD + ac_cv_style_mount=default ;; +esac +]) +# only make a link and include the file name if needed. +if test "$ac_cv_style_mount" = default +then + am_utils_mount_style_file="" +else + am_utils_mount_style_file="mountutil.c" + am_utils_link_files_src=${am_utils_link_files_src}conf/mount/mount_${ac_cv_style_mount}.c" " + am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_mount_style_file}" " +# append mount utilities object to LIBOBJS for automatic compilation + LIBOBJS="$LIBOBJS mountutil.o" +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mount_trap.m4 b/m4/macros/check_mount_trap.m4 new file mode 100644 index 0000000..99aaa2a --- /dev/null +++ b/m4/macros/check_mount_trap.m4 @@ -0,0 +1,49 @@ +dnl ###################################################################### +dnl check the mount system call trap needed to mount(2) a filesystem +AC_DEFUN(AC_CHECK_MOUNT_TRAP, +[ +AC_CACHE_CHECK(mount trap system-call style, +ac_cv_mount_trap, +[ +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* | hpux11* ) + ac_cv_mount_trap=svr4 ;; + news4* | riscix* ) + ac_cv_mount_trap=news4 ;; + freebsd3* ) + ac_cv_mount_trap=freebsd3 ;; + linux* ) + ac_cv_mount_trap=linux ;; + irix* ) + ac_cv_mount_trap=irix ;; + aux* ) + ac_cv_mount_trap=aux ;; + hcx* ) + ac_cv_mount_trap=hcx ;; + hpux11* ) + ac_cv_mount_trap=hpux11 ;; + hpux* ) + ac_cv_mount_trap=hpux ;; + rtu6* ) + ac_cv_mount_trap=rtu6 ;; + dgux* ) + ac_cv_mount_trap=dgux ;; + aix* ) + ac_cv_mount_trap=aix3 ;; + mach2* | mach3* ) + ac_cv_mount_trap=mach3 ;; + ultrix* ) + ac_cv_mount_trap=ultrix ;; + isc3* ) + ac_cv_mount_trap=isc3 ;; + stellix* ) + ac_cv_mount_trap=stellix ;; + * ) + ac_cv_mount_trap=default ;; +esac +]) +am_utils_mount_trap=$srcdir"/conf/trap/trap_"$ac_cv_mount_trap".h" +AC_SUBST_FILE(am_utils_mount_trap) +]) +dnl ====================================================================== diff --git a/m4/macros/check_mount_type.m4 b/m4/macros/check_mount_type.m4 new file mode 100644 index 0000000..2a9d775 --- /dev/null +++ b/m4/macros/check_mount_type.m4 @@ -0,0 +1,159 @@ +dnl ###################################################################### +dnl check the string type of the name of a filesystem mount table entry. +dnl Usage: AC_CHECK_MOUNT_TYPE(, [fssymbol]) +dnl Check if there is an entry for MNTTYPE_ in sys/mntent.h and mntent.h +dnl define MOUNT_TYPE_ to the string name (e.g., "nfs"). If +dnl exist, then define MOUNT_TYPE_ instead. If is +dnl defined, then can be a list of fs strings to look for. +dnl If no symbols have been defined, but the filesystem has been found +dnl earlier, then set the mount-table type to "" anyway... +AC_DEFUN(AC_CHECK_MOUNT_TYPE, +[ +# find what name to give to the fs +if test -n "$2" +then + ac_fs_name=$2 +else + ac_fs_name=$1 +fi +# prepare upper-case name of filesystem +ac_upcase_fs_name=`echo $ac_fs_name | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` +############################################################################## +# check for cache and set it if needed +AC_CACHE_CHECK_DYNAMIC(for mount(2) type/name for $ac_fs_name filesystem, +ac_cv_mount_type_$ac_fs_name, +[ +# undefine by default +eval "ac_cv_mount_type_$ac_fs_name=notfound" +# and look to see if it was found +for ac_fs_tmp in $1 +do + + ac_upcase_fs_symbol=`echo $ac_fs_tmp | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | tr -d '.'` + + # first look for MNTTYPE_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNTTYPE_$ac_upcase_fs_symbol + yes +#endif /* MNTTYPE_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MOUNT_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MOUNT_$ac_upcase_fs_symbol + yes +#endif /* MOUNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MOUNT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for MNT_ + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef MNT_$ac_upcase_fs_symbol + yes +#endif /* MNT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=MNT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # next look for GT_ (ultrix) + AC_EGREP_CPP(yes, + AC_MOUNT_HEADERS( + [ +#ifdef GT_$ac_upcase_fs_symbol + yes +#endif /* GT_$ac_upcase_fs_symbol */ + ]), [eval "ac_cv_mount_type_$ac_fs_name=GT_$ac_upcase_fs_symbol"], + [eval "ac_cv_mount_type_$ac_fs_name=notfound"] ) + # check if need to terminate "for" loop + if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound + then + break + fi + + # look for a loadable filesystem module (linux) + if test -f /lib/modules/$host_os_version/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # look for a loadable filesystem module (linux redhat-5.1) + if test -f /lib/modules/preferred/fs/$ac_fs_tmp.o + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # in addition look for statically compiled loadable module (linux) +changequote(<<, >>)dnl + if egrep "[^a-zA-Z0-9_]$ac_fs_tmp$" /proc/filesystems >/dev/null 2>&1 +changequote([, ])dnl + then + eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + fi + + # run a test program for bsdi3 + AC_TRY_RUN( + [ +#include +#include +main() +{ + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) + exit(1); + else + exit(0); +} + ], [eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) + +done +# check if not defined, yet the filesystem is defined +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" = notfound +then +# this should test if $ac_cv_fs_ is "yes" + if test "`eval echo '$''{ac_cv_fs_'$ac_fs_name'}'`" = yes || + test "`eval echo '$''{ac_cv_fs_header_'$ac_fs_name'}'`" = yes + then + eval "ac_cv_mount_type_$ac_fs_name=MNTTYPE_$ac_upcase_fs_name" + fi +fi +]) +# end of cache check for ac_cv_mount_type_$ac_fs_name +############################################################################## +# check if need to define variable +if test "`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'`" != notfound +then + ac_safe=MOUNT_TYPE_$ac_upcase_fs_name + ac_tmp=`eval echo '$''{ac_cv_mount_type_'$ac_fs_name'}'` + AC_DEFINE_UNQUOTED($ac_safe, $ac_tmp) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_mtype_printf_type.m4 b/m4/macros/check_mtype_printf_type.m4 new file mode 100644 index 0000000..34a5159 --- /dev/null +++ b/m4/macros/check_mtype_printf_type.m4 @@ -0,0 +1,22 @@ +dnl ###################################################################### +dnl check the correct printf-style type for the mount type in the mount() +dnl system call. +dnl If you change this one, you must also fix the check_mtype_type.m4. +AC_DEFUN(AC_CHECK_MTYPE_PRINTF_TYPE, +[ +AC_CACHE_CHECK(printf string to print type field of mount() call, +ac_cv_mtype_printf_type, +[ +# select the correct printf type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_printf_type="%d" ;; + irix3 | isc3 ) + ac_cv_mtype_printf_type="0x%x" ;; + * ) + ac_cv_mtype_printf_type="%s" ;; +esac +]) +AC_DEFINE_UNQUOTED(MTYPE_PRINTF_TYPE, "$ac_cv_mtype_printf_type") +]) +dnl ====================================================================== diff --git a/m4/macros/check_mtype_type.m4 b/m4/macros/check_mtype_type.m4 new file mode 100644 index 0000000..7bebfd8 --- /dev/null +++ b/m4/macros/check_mtype_type.m4 @@ -0,0 +1,19 @@ +dnl ###################################################################### +dnl check the correct type for the mount type in the mount() system call +dnl If you change this one, you must also fix the check_mtype_printf_type.m4. +AC_DEFUN(AC_CHECK_MTYPE_TYPE, +[ +AC_CACHE_CHECK(type of mount type field in mount() call, +ac_cv_mtype_type, +[ +# select the correct type +case "${host_os_name}" in + osf* | freebsd2* | bsdi2* | aix* ) + ac_cv_mtype_type=int ;; + * ) + ac_cv_mtype_type="char *" ;; +esac +]) +AC_DEFINE_UNQUOTED(MTYPE_TYPE, $ac_cv_mtype_type) +]) +dnl ====================================================================== diff --git a/m4/macros/check_network_transport_type.m4 b/m4/macros/check_network_transport_type.m4 new file mode 100644 index 0000000..a031217 --- /dev/null +++ b/m4/macros/check_network_transport_type.m4 @@ -0,0 +1,25 @@ +dnl ###################################################################### +dnl check the correct network transport type to use +AC_DEFUN(AC_CHECK_NETWORK_TRANSPORT_TYPE, +[ +AC_CACHE_CHECK(network transport type, +ac_cv_transport_type, +[ +# select the correct type +case "${host_os_name}" in + solaris2* | sunos5* | hpux11* ) + ac_cv_transport_type=tli ;; + * ) + ac_cv_transport_type=sockets ;; +esac +]) +am_utils_link_files_src=${am_utils_link_files_src}conf/transp/transp_${ac_cv_transport_type}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/transputil.c" " +# append transport utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS transputil.o" +if test $ac_cv_transport_type = tli +then + AC_DEFINE(HAVE_TRANSPORT_TYPE_TLI) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_nfs_fh_dref.m4 b/m4/macros/check_nfs_fh_dref.m4 new file mode 100644 index 0000000..0244818 --- /dev/null +++ b/m4/macros/check_nfs_fh_dref.m4 @@ -0,0 +1,50 @@ +dnl ###################################################################### +dnl check the correct way to dereference the address part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_FH_DREF, +[ +AC_CACHE_CHECK(nfs file-handle address dereferencing style, +ac_cv_nfs_fh_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* |solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_fh_dref_style=svr4 ;; + sunos4* ) + ac_cv_nfs_fh_dref_style=sunos4 ;; + sunos3* ) + ac_cv_nfs_fh_dref_style=sunos3 ;; +changequote(<<, >>)dnl + freebsd2.[2-9]* | freebsd3* | bsdi[3-4]* | netbsd* | openbsd* ) +changequote([, ])dnl + # bsdi3, freebsd-2.2, netbsd, etc. + # changed the type of the + # filehandle in nfs_args from nfsv2fh_t to u_char. + ac_cv_nfs_fh_dref_style=freebsd22 ;; + bsd44* | bsdi2* | freebsd* ) + ac_cv_nfs_fh_dref_style=bsd44 ;; + hpux* ) + ac_cv_nfs_fh_dref_style=hpux ;; + irix* ) + ac_cv_nfs_fh_dref_style=irix ;; + linux* ) + ac_cv_nfs_fh_dref_style=linux ;; + aix4.2* ) + ac_cv_nfs_fh_dref_style=aix42 ;; + aix* ) + ac_cv_nfs_fh_dref_style=aix3 ;; + isc3 ) + ac_cv_nfs_fh_dref_style=isc3 ;; + osf4* ) + ac_cv_nfs_fh_dref_style=osf4 ;; + osf* ) + ac_cv_nfs_fh_dref_style=osf2 ;; + nextstep* ) + ac_cv_nfs_fh_dref_style=nextstep ;; + * ) + ac_cv_nfs_fh_dref_style=default ;; +esac +]) +am_utils_nfs_fh_dref=$srcdir"/conf/fh_dref/fh_dref_"$ac_cv_nfs_fh_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_fh_dref) +]) +dnl ====================================================================== diff --git a/m4/macros/check_nfs_hn_dref.m4 b/m4/macros/check_nfs_hn_dref.m4 new file mode 100644 index 0000000..4508d8c --- /dev/null +++ b/m4/macros/check_nfs_hn_dref.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl check the correct way to dereference the hostname part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_HN_DREF, +[ +AC_CACHE_CHECK(nfs hostname dereferencing style, +ac_cv_nfs_hn_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os_name}" in + linux* ) + ac_cv_nfs_hn_dref_style=linux ;; + isc3 ) + ac_cv_nfs_hn_dref_style=isc3 ;; + * ) + ac_cv_nfs_hn_dref_style=default ;; +esac +]) +am_utils_nfs_hn_dref=$srcdir"/conf/hn_dref/hn_dref_"$ac_cv_nfs_hn_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_hn_dref) +]) +dnl ====================================================================== diff --git a/m4/macros/check_nfs_prot_headers.m4 b/m4/macros/check_nfs_prot_headers.m4 new file mode 100644 index 0000000..cfb4c3d --- /dev/null +++ b/m4/macros/check_nfs_prot_headers.m4 @@ -0,0 +1,81 @@ +dnl ###################################################################### +dnl check if system has NFS protocol headers +AC_DEFUN(AC_CHECK_NFS_PROT_HEADERS, +[ +AC_CACHE_CHECK(location of NFS protocol header files, +ac_cv_nfs_prot_headers, +[ +# select the correct style for mounting filesystems +case "${host_os}" in + irix5* ) + ac_cv_nfs_prot_headers=irix5 ;; + irix6* ) + ac_cv_nfs_prot_headers=irix6 ;; + sunos3* ) + ac_cv_nfs_prot_headers=sunos3 ;; + sunos4* ) + ac_cv_nfs_prot_headers=sunos4 ;; + sunos5.3* | solaris2.3* ) + ac_cv_nfs_prot_headers=sunos5_3 ;; + sunos5.4* | solaris2.4* ) + ac_cv_nfs_prot_headers=sunos5_4 ;; + sunos5.5* | solaris2.5* ) + ac_cv_nfs_prot_headers=sunos5_5 ;; + sunos5.6 | solaris* ) + ac_cv_nfs_prot_headers=sunos5_6 ;; + bsdi2* ) + ac_cv_nfs_prot_headers=bsdi2 ;; + bsdi3* | bsdi4* ) + ac_cv_nfs_prot_headers=bsdi3 ;; + freebsd2* ) + ac_cv_nfs_prot_headers=freebsd2 ;; + freebsd3* ) + ac_cv_nfs_prot_headers=freebsd3 ;; + netbsd1.3* ) + ac_cv_nfs_prot_headers=netbsd1_3 ;; + netbsd* ) + ac_cv_nfs_prot_headers=netbsd ;; + openbsd* ) + ac_cv_nfs_prot_headers=openbsd ;; + hpux11* ) + ac_cv_nfs_prot_headers=hpux11 ;; + hpux* ) + ac_cv_nfs_prot_headers=hpux ;; + aix4.2* ) + ac_cv_nfs_prot_headers=aix4_2 ;; + aix4* ) + ac_cv_nfs_prot_headers=aix4 ;; + aix* ) + ac_cv_nfs_prot_headers=aix3 ;; + osf4* ) + ac_cv_nfs_prot_headers=osf4 ;; + osf* ) + ac_cv_nfs_prot_headers=osf2 ;; + svr4* ) + ac_cv_nfs_prot_headers=svr4 ;; + sysv4* ) # this is for NCR2 machines + ac_cv_nfs_prot_headers=ncr2 ;; + linux* ) + ac_cv_nfs_prot_headers=linux ;; + nextstep* ) + ac_cv_nfs_prot_headers=nextstep ;; + ultrix* ) + ac_cv_nfs_prot_headers=ultrix ;; + * ) + ac_cv_nfs_prot_headers=default ;; +esac +]) + +# make sure correct header is linked in top build directory +am_utils_nfs_prot_file="amu_nfs_prot.h" +am_utils_link_files_src=${am_utils_link_files_src}conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h" " +am_utils_link_files_dst=${am_utils_link_files_dst}${am_utils_nfs_prot_file}" " + +# define the name of the header to be included for other M4 macros +AC_DEFINE_UNQUOTED(AMU_NFS_PROTOCOL_HEADER, "${srcdir}/conf/nfs_prot/nfs_prot_${ac_cv_nfs_prot_headers}.h") + +# set headers in a macro for Makefile.am files to use (for dependencies) +AMU_NFS_PROT_HEADERS="../"$am_utils_nfs_prot_file +AC_SUBST(AMU_NFS_PROT_HEADERS) +]) +dnl ====================================================================== diff --git a/m4/macros/check_nfs_sa_dref.m4 b/m4/macros/check_nfs_sa_dref.m4 new file mode 100644 index 0000000..96636f1 --- /dev/null +++ b/m4/macros/check_nfs_sa_dref.m4 @@ -0,0 +1,31 @@ +dnl ###################################################################### +dnl check the correct way to dereference the address part of the nfs fhandle +AC_DEFUN(AC_CHECK_NFS_SA_DREF, +[ +AC_CACHE_CHECK(nfs address dereferencing style, +ac_cv_nfs_sa_dref_style, +[ +# select the correct nfs address dereferencing style +case "${host_os}" in + svr4* | sysv4* | solaris2* | sunos5* | hpux11* ) + ac_cv_nfs_sa_dref_style=svr4 ;; + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_nfs_sa_dref_style=bsd44 ;; + 386bsd* | bsdi1* ) + ac_cv_nfs_sa_dref_style=386bsd ;; + linux* ) + ac_cv_nfs_sa_dref_style=linux ;; + aix* ) + ac_cv_nfs_sa_dref_style=aix3 ;; + aoi* ) + ac_cv_nfs_sa_dref_style=aoi ;; + isc3 ) + ac_cv_nfs_sa_dref_style=isc3 ;; + * ) + ac_cv_nfs_sa_dref_style=default ;; +esac +]) +am_utils_nfs_sa_dref=$srcdir"/conf/sa_dref/sa_dref_"$ac_cv_nfs_sa_dref_style".h" +AC_SUBST_FILE(am_utils_nfs_sa_dref) +]) +dnl ====================================================================== diff --git a/m4/macros/check_nfs_socket_connection.m4 b/m4/macros/check_nfs_socket_connection.m4 new file mode 100644 index 0000000..da1abdd --- /dev/null +++ b/m4/macros/check_nfs_socket_connection.m4 @@ -0,0 +1,28 @@ +dnl ###################################################################### +dnl check if need to turn on, off, or leave alone the NFS "noconn" option +AC_DEFUN(AC_CHECK_NFS_SOCKET_CONNECTION, +[ +AC_CACHE_CHECK(if to turn on/off noconn option, +ac_cv_nfs_socket_connection, +[ +# set default to no-change +ac_cv_nfs_socket_connection=none +# select the correct style +case "${host_os}" in +changequote(<<, >>)dnl + openbsd2.[2-9]* ) +changequote([, ])dnl + ac_cv_nfs_socket_connection=conn ;; + openbsd* ) + ac_cv_nfs_socket_connection=noconn ;; + freebsd3* ) + ac_cv_nfs_socket_connection=conn ;; +esac +]) +# set correct value +case "$ac_cv_nfs_socket_connection" in + noconn ) AC_DEFINE(USE_UNCONNECTED_NFS_SOCKETS) ;; + conn ) AC_DEFINE(USE_CONNECTED_NFS_SOCKETS) ;; +esac +]) +dnl ====================================================================== diff --git a/m4/macros/check_os_libs.m4 b/m4/macros/check_os_libs.m4 new file mode 100644 index 0000000..5d8203a --- /dev/null +++ b/m4/macros/check_os_libs.m4 @@ -0,0 +1,28 @@ +dnl ###################################################################### +dnl set OS libraries specific to an OS: +dnl libnsl/libsocket are needed only on solaris and some svr4 systems. +dnl Using a typical macro has proven unsuccesful, because on some other +dnl systems such as irix, including libnsl and or libsocket actually breaks +dnl lots of code. So I am forced to use a special purpose macro that sets +dnl the libraries based on the OS. Sigh. -Erez. +AC_DEFUN(AC_CHECK_OS_LIBS, +[ +AC_CACHE_CHECK(for additional OS libraries, +ac_cv_os_libs, +[ +# select the correct set of libraries to link with +case "${host_os_name}" in + svr4* | sysv4* | solaris2* | sunos5* | aoi* ) + ac_cv_os_libs="-lsocket -lnsl" ;; + * ) + ac_cv_os_libs=none ;; +esac +]) +# set list of libraries to link with +if test "$ac_cv_os_libs" != none +then + LIBS="$ac_cv_os_libs $LIBS" +fi + +]) +dnl ====================================================================== diff --git a/m4/macros/check_restartable_signal_handler.m4 b/m4/macros/check_restartable_signal_handler.m4 new file mode 100644 index 0000000..c5bbfc0 --- /dev/null +++ b/m4/macros/check_restartable_signal_handler.m4 @@ -0,0 +1,22 @@ +dnl ###################################################################### +dnl check if a system needs to restart its signal handlers +AC_DEFUN(AC_CHECK_RESTARTABLE_SIGNAL_HANDLER, +[ +AC_CACHE_CHECK(if system needs to restart signal handlers, +ac_cv_restartable_signal_handler, +[ +# select the correct systems to restart signal handlers +case "${host_os_name}" in + svr3* | svr4* | sysv4* | solaris2* | sunos5* | aoi* | irix* ) + ac_cv_restartable_signal_handler=yes ;; + * ) + ac_cv_restartable_signal_handler=no ;; +esac +]) +# define REINSTALL_SIGNAL_HANDLER if need to +if test "$ac_cv_restartable_signal_handler" = yes +then + AC_DEFINE(REINSTALL_SIGNAL_HANDLER) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/check_umount_style.m4 b/m4/macros/check_umount_style.m4 new file mode 100644 index 0000000..a024e94 --- /dev/null +++ b/m4/macros/check_umount_style.m4 @@ -0,0 +1,24 @@ +dnl ###################################################################### +dnl check style of unmounting filesystems +AC_DEFUN(AC_CHECK_UMOUNT_STYLE, +[ +AC_CACHE_CHECK(style of unmounting filesystems, +ac_cv_style_umount, +[ +# select the correct style for unmounting filesystems +case "${host_os_name}" in + bsd44* | bsdi* | freebsd* | netbsd* | openbsd* ) + ac_cv_style_umount=bsd44 ;; + osf* ) + ac_cv_style_umount=osf ;; + * ) + ac_cv_style_umount=default ;; +esac +]) +am_utils_umount_style_file="umount_fs.c" +am_utils_link_files_src=${am_utils_link_files_src}conf/umount/umount_${ac_cv_style_umount}.c" " +am_utils_link_files_dst=${am_utils_link_files_dst}libamu/${am_utils_umount_style_file}" " +# append un-mount utilities object to LIBOBJS for automatic compilation +LIBOBJS="$LIBOBJS umount_fs.o" +]) +dnl ====================================================================== diff --git a/m4/macros/check_unmount_args.m4 b/m4/macros/check_unmount_args.m4 new file mode 100644 index 0000000..16488c9 --- /dev/null +++ b/m4/macros/check_unmount_args.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl check the unmount system call arguments needed for +AC_DEFUN(AC_CHECK_UNMOUNT_ARGS, +[ +AC_CACHE_CHECK(unmount system-call arguments, +ac_cv_unmount_args, +[ +# select the correct style to mount(2) a filesystem +case "${host_os_name}" in + aix* ) + ac_cv_unmount_args="mnt->mnt_passno, 0" ;; + ultrix* ) + ac_cv_unmount_args="mnt->mnt_passno" ;; + * ) + ac_cv_unmount_args="mnt->mnt_dir" ;; +esac +]) +am_utils_unmount_args=$ac_cv_unmount_args +AC_SUBST(am_utils_unmount_args) +]) +dnl ====================================================================== diff --git a/m4/macros/check_unmount_call.m4 b/m4/macros/check_unmount_call.m4 new file mode 100644 index 0000000..0c87837 --- /dev/null +++ b/m4/macros/check_unmount_call.m4 @@ -0,0 +1,27 @@ +dnl ###################################################################### +dnl check for the correct system call to unmount a filesystem. +AC_DEFUN(AC_CHECK_UNMOUNT_CALL, +[ +dnl make sure this one is called before [AC_CHECK_UNMOUNT_ARGS] +AC_BEFORE([$0], [AC_CHECK_UNMOUNT_ARGS]) +AC_CACHE_CHECK(the system call to unmount a filesystem, +ac_cv_unmount_call, +[ +# check for various unmount a filesystem calls +if test "$ac_cv_func_uvmount" = yes ; then + ac_cv_unmount_call=uvmount +elif test "$ac_cv_func_unmount" = yes ; then + ac_cv_unmount_call=unmount +elif test "$ac_cv_func_umount" = yes ; then + ac_cv_unmount_call=umount +else + ac_cv_unmount_call=no +fi +]) +if test "$ac_cv_unmount_call" != no +then + am_utils_unmount_call=$ac_cv_unmount_call + AC_SUBST(am_utils_unmount_call) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/expand_cpp_hex.m4 b/m4/macros/expand_cpp_hex.m4 new file mode 100644 index 0000000..f0d5a74 --- /dev/null +++ b/m4/macros/expand_cpp_hex.m4 @@ -0,0 +1,40 @@ +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable hex number. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_HEX, +[ +# we are looking for a regexp of a string +AC_EGREP_CPP(0x, +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("0x%x", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== diff --git a/m4/macros/expand_cpp_int.m4 b/m4/macros/expand_cpp_int.m4 new file mode 100644 index 0000000..021560e --- /dev/null +++ b/m4/macros/expand_cpp_int.m4 @@ -0,0 +1,44 @@ +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable integer number. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_INT, +[ +# we are looking for a regexp of an integer (must not start with 0 --- those +# are octals). +AC_EGREP_CPP( +changequote(<<, >>)dnl +[1-9][0-9]*, +changequote([, ])dnl +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("%d", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== diff --git a/m4/macros/expand_cpp_string.m4 b/m4/macros/expand_cpp_string.m4 new file mode 100644 index 0000000..4bbb9b5 --- /dev/null +++ b/m4/macros/expand_cpp_string.m4 @@ -0,0 +1,40 @@ +dnl ###################################################################### +dnl Expand the value of a CPP macro into a printable string. +dnl Takes: header, macro, [action-if-found, [action-if-not-found]] +dnl It runs the header through CPP looking for a match between the macro +dnl and a string pattern, and if sucessful, it prints the string value out. +AC_DEFUN(AC_EXPAND_CPP_STRING, +[ +# we are looking for a regexp of a string +AC_EGREP_CPP(\".*\", +[$1] +$2, +value="notfound" +AC_TRY_RUN( +[ +[$1] +main(argc) +int argc; +{ +#ifdef $2 +if (argc > 1) + printf("%s", $2); +exit(0); +#else +# error no such option $2 +#endif +exit(1); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +, +value="notfound" +) +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== diff --git a/m4/macros/expand_run_string.m4 b/m4/macros/expand_run_string.m4 new file mode 100644 index 0000000..37eaf27 --- /dev/null +++ b/m4/macros/expand_run_string.m4 @@ -0,0 +1,25 @@ +dnl ###################################################################### +dnl Run a program and print its output as a string +dnl Takes: (header, code-to-run, [action-if-found, [action-if-not-found]]) +AC_DEFUN(AC_EXPAND_RUN_STRING, +[ +value="notfound" +AC_TRY_RUN( +[ +$1 +main(argc) +int argc; +{ +$2 +exit(0); +}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") +if test "$value" = notfound +then + : + $4 +else + : + $3 +fi +]) +dnl ====================================================================== diff --git a/m4/macros/extern_optarg.m4 b/m4/macros/extern_optarg.m4 new file mode 100644 index 0000000..2be475a --- /dev/null +++ b/m4/macros/extern_optarg.m4 @@ -0,0 +1,36 @@ +dnl ###################################################################### +dnl find if "extern char *optarg" exists in headers +AC_DEFUN(AC_EXTERN_OPTARG, +[ +AC_CACHE_CHECK(if external definition for optarg[] exists, +ac_cv_extern_optarg, +[ +# try to compile program that uses the variable +AC_TRY_COMPILE( +[ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ +#ifdef HAVE_STDLIB_H +# include +#endif /* HAVE_STDLIB_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ +], +[ +char *cp = optarg; +], ac_cv_extern_optarg=yes, ac_cv_extern_optarg=no) +]) +if test "$ac_cv_extern_optarg" = yes +then + AC_DEFINE(HAVE_EXTERN_OPTARG) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/extern_sys_errlist.m4 b/m4/macros/extern_sys_errlist.m4 new file mode 100644 index 0000000..6fb1f43 --- /dev/null +++ b/m4/macros/extern_sys_errlist.m4 @@ -0,0 +1,31 @@ +dnl ###################################################################### +dnl find if "extern char *sys_errlist[]" exist in headers +AC_DEFUN(AC_EXTERN_SYS_ERRLIST, +[ +AC_CACHE_CHECK(if external definition for sys_errlist[] exists, +ac_cv_extern_sys_errlist, +[ +# try to locate pattern in header files +changequote(<<, >>)dnl +pattern="(extern)?.*char.*sys_errlist.*\[\]" +changequote([, ])dnl +AC_EGREP_CPP(${pattern}, +[ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +# include +#endif /* HAVE_ERRNO_H */ +], ac_cv_extern_sys_errlist=yes, ac_cv_extern_sys_errlist=no) +]) +# check if need to define variable +if test "$ac_cv_extern_sys_errlist" = yes +then + AC_DEFINE(HAVE_EXTERN_SYS_ERRLIST) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/field_mntent_t_mnt_time_string.m4 b/m4/macros/field_mntent_t_mnt_time_string.m4 new file mode 100644 index 0000000..c206505 --- /dev/null +++ b/m4/macros/field_mntent_t_mnt_time_string.m4 @@ -0,0 +1,36 @@ +fdnl ###################################################################### +dnl find if mntent_t field mnt_time exists and is of type "char *" +AC_DEFUN(AC_FIELD_MNTENT_T_MNT_TIME_STRING, +[ +AC_CACHE_CHECK(if mntent_t field mnt_time exist as type string, +ac_cv_field_mntent_t_mnt_time_string, +[ +# try to compile a program +AC_TRY_COMPILE( +AC_MOUNT_HEADERS( +[ +/* now set the typedef */ +#ifdef HAVE_STRUCT_MNTENT +typedef struct mntent mntent_t; +#else /* not HAVE_STRUCT_MNTENT */ +# ifdef HAVE_STRUCT_MNTTAB +typedef struct mnttab mntent_t; +# else /* not HAVE_STRUCT_MNTTAB */ +# error XXX: could not find definition for struct mntent or struct mnttab! +# endif /* not HAVE_STRUCT_MNTTAB */ +#endif /* not HAVE_STRUCT_MNTENT */ +]), +[ +mntent_t mtt; +char *cp = "test"; +int i; +mtt.mnt_time = cp; +i = mtt.mnt_time[0]; +], ac_cv_field_mntent_t_mnt_time_string=yes, ac_cv_field_mntent_t_mnt_time_string=no) +]) +if test "$ac_cv_field_mntent_t_mnt_time_string" = yes +then + AC_DEFINE(HAVE_FIELD_MNTENT_T_MNT_TIME_STRING) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/func_bad_memcmp.m4 b/m4/macros/func_bad_memcmp.m4 new file mode 100644 index 0000000..5c96bfd --- /dev/null +++ b/m4/macros/func_bad_memcmp.m4 @@ -0,0 +1,20 @@ +dnl my version is similar to the one from Autoconf 2.12, but I also +dnl define HAVE_BAD_MEMCMP so that I can smarter things to avoid +dnl linkage conflicts with bad memcmp versions that are in libc. +AC_DEFUN(AC_FUNC_BAD_MEMCMP, +[AC_CACHE_CHECK(for 8-bit clean memcmp, ac_cv_func_memcmp_clean, +[AC_TRY_RUN([ +main() +{ + char c0 = 0x40, c1 = 0x80, c2 = 0x81; + exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1); +} +], ac_cv_func_memcmp_clean=yes, ac_cv_func_memcmp_clean=no, +ac_cv_func_memcmp_clean=no)]) +if test $ac_cv_func_memcmp_clean = no +then + LIBOBJS="$LIBOBJS memcmp.o" + AC_DEFINE(HAVE_BAD_MEMCMP) +fi +dnl AC_SUBST(LIBOBJS)dnl +]) diff --git a/m4/macros/func_bad_yp_all.m4 b/m4/macros/func_bad_yp_all.m4 new file mode 100644 index 0000000..e61525b --- /dev/null +++ b/m4/macros/func_bad_yp_all.m4 @@ -0,0 +1,27 @@ +dnl Check for a yp_all() function that does not leak a file descriptor +dnl to the ypserv process. +AC_DEFUN(AC_FUNC_BAD_YP_ALL, +[ +AC_CACHE_CHECK(for a file-descriptor leakage clean yp_all, +ac_cv_func_yp_all_clean, +[ +# clean by default +ac_cv_func_yp_all_clean=yes +# select the correct type +case "${host_os_name}" in + irix* ) + ac_cv_func_yp_all_clean=no ;; + linux* ) + # RedHat 5.1 systems with glibc glibc-2.0.7-19 or below + # leak a UDP socket from yp_all() + case "`cat /etc/redhat-release /dev/null 2>/dev/null`" in + *5.1* ) + ac_cv_func_yp_all_clean=no ;; + esac +esac +]) +if test $ac_cv_func_yp_all_clean = no +then + AC_DEFINE(HAVE_BAD_YP_ALL) +fi +]) diff --git a/m4/macros/host_macros.m4 b/m4/macros/host_macros.m4 new file mode 100644 index 0000000..268983d --- /dev/null +++ b/m4/macros/host_macros.m4 @@ -0,0 +1,93 @@ +dnl ###################################################################### +dnl AC_HOST_MACROS: define HOST_CPU, HOST_VENDOR, and HOST_OS +AC_DEFUN(AC_HOST_MACROS, +[ +# these are defined already by the macro 'CANONICAL_HOST' + AC_MSG_CHECKING("host cpu") + AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu") + AC_MSG_RESULT($host_cpu) + + AC_MSG_CHECKING("vendor") + AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor") + AC_MSG_RESULT($host_vendor) + + AC_MSG_CHECKING("host full OS name and version") + # normalize some host OS names + case ${host_os} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os=linux ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS, "$host_os") + AC_MSG_RESULT($host_os) + +# break host_os into host_os_name and host_os_version + AC_MSG_CHECKING("host OS name") + host_os_name=`echo $host_os | sed 's/\..*//g'` + # normalize some OS names + case ${host_os_name} in + # linux is linux is linux, regardless of RMS. + linux-gnu* | lignux* ) host_os_name=linux ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS_NAME, "$host_os_name") + AC_MSG_RESULT($host_os_name) + +# parse out the OS version of the host + AC_MSG_CHECKING("host OS version") +changequote(<<, >>)dnl + host_os_version=`echo $host_os | sed 's/^[^0-9]*//g'` +changequote([, ])dnl + if test -z "$host_os_version" + then + host_os_version=`(uname -r) 2>/dev/null` || host_os_version=unknown + fi + case ${host_os_version} in + # fixes for some OS versions (solaris used to be here) + * ) # do nothing for now + ;; + esac + AC_DEFINE_UNQUOTED(HOST_OS_VERSION, "$host_os_version") + AC_MSG_RESULT($host_os_version) + +# figure out host architecture (different than CPU) + AC_MSG_CHECKING("host OS architecture") + host_arch=`(uname -m) 2>/dev/null` || host_arch=unknown + # normalize some names + case ${host_arch} in + sun4* ) host_arch=sun4 ;; + sun3x ) host_arch=sun3 ;; + sun ) host_arch=`(arch) 2>/dev/null` || host_arch=unknown ;; + i?86 ) host_arch=i386 ;; # all x86 should show up as i386 + esac + AC_DEFINE_UNQUOTED(HOST_ARCH, "$host_arch") + AC_MSG_RESULT($host_arch) + +# figure out host name + AC_MSG_CHECKING("host name") + host_name=`(hostname || uname -n) 2>/dev/null` || host_name=unknown + AC_DEFINE_UNQUOTED(HOST_NAME, "$host_name") + AC_MSG_RESULT($host_name) + +# figure out user name + AC_MSG_CHECKING("user name") + if test -n "$USER" + then + user_name="$USER" + else + if test -n "$LOGNAME" + then + user_name="$LOGNAME" + else + user_name=`(whoami) 2>/dev/null` || user_name=unknown + fi + fi + AC_DEFINE_UNQUOTED(USER_NAME, "$user_name") + AC_MSG_RESULT($user_name) + +# figure out configuration date + AC_MSG_CHECKING("configuration date") + config_date=`(date) 2>/dev/null` || config_date=unknown_date + AC_DEFINE_UNQUOTED(CONFIG_DATE, "$config_date") + AC_MSG_RESULT($config_date) + +]) +dnl ====================================================================== diff --git a/m4/macros/localconfig.m4 b/m4/macros/localconfig.m4 new file mode 100644 index 0000000..221df1f --- /dev/null +++ b/m4/macros/localconfig.m4 @@ -0,0 +1,13 @@ +dnl ###################################################################### +dnl check if a local configuration file exists +AC_DEFUN(AC_LOCALCONFIG, +[AC_MSG_CHECKING(a local configuration file) +if test -f localconfig.h +then + AC_DEFINE(HAVE_LOCALCONFIG_H) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/mount_headers.m4 b/m4/macros/mount_headers.m4 new file mode 100644 index 0000000..b020f6f --- /dev/null +++ b/m4/macros/mount_headers.m4 @@ -0,0 +1,159 @@ +dnl ###################################################################### +dnl an M4 macro to include a list of common headers being used everywhere +define(AC_MOUNT_HEADERS, +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_TIME_H +# include +#endif /* HAVE_SYS_TIME_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ +#ifdef HAVE_SYS_SOCKET_H +# include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_NET_IF_H +# include +#endif /* HAVE_NET_IF_H */ +#ifdef HAVE_STDIO_H +# include +#endif /* HAVE_STDIO_H */ + +#ifndef KERNEL +# define KERNEL_off_for_now_breaks_FreeBSD +#endif /* not KERNEL */ + +#ifdef HAVE_SYS_MNTENT_H +# include +#endif /* HAVE_SYS_MNTENT_H */ +#ifdef HAVE_MNTENT_H +# include +#endif /* HAVE_MNTENT_H */ +#ifdef HAVE_SYS_MNTTAB_H +# include +#endif /* HAVE_SYS_MNTTAB_H */ +#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB) +/* + * Do not include it if MNTTAB is already defined because it probably + * came from and we do not want conflicting definitions. + */ +# include +#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_SYS_FS_TYPES_H +# include +#endif /* HAVE_SYS_FS_TYPES_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_MOUNT_H +# include +#endif /* HAVE_MOUNT_H */ + +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ + +$1 +] +) +dnl ====================================================================== diff --git a/m4/macros/msg.m4 b/m4/macros/msg.m4 new file mode 100644 index 0000000..7714b83 --- /dev/null +++ b/m4/macros/msg.m4 @@ -0,0 +1,5 @@ +dnl ###################################################################### +dnl AC_MSG: a simple printout message +define(AC_MSG, +[echo "*** $1:" 1>&AC_FD_MSG]) +dnl ====================================================================== diff --git a/m4/macros/name_package.m4 b/m4/macros/name_package.m4 new file mode 100644 index 0000000..434e592 --- /dev/null +++ b/m4/macros/name_package.m4 @@ -0,0 +1,8 @@ +dnl ###################################################################### +dnl Package name +AC_DEFUN(AC_NAME_PACKAGE, +[AC_MSG_CHECKING(package name) +AC_DEFINE_UNQUOTED(PACKAGE, "$1") +AC_MSG_RESULT(\"$1\") +]) +dnl ====================================================================== diff --git a/m4/macros/name_version.m4 b/m4/macros/name_version.m4 new file mode 100644 index 0000000..e9b78d6 --- /dev/null +++ b/m4/macros/name_version.m4 @@ -0,0 +1,8 @@ +dnl ###################################################################### +dnl Version of package +AC_DEFUN(AC_NAME_VERSION, +[AC_MSG_CHECKING(version of package) +AC_DEFINE_UNQUOTED(VERSION, "$1") +AC_MSG_RESULT(\"$1\") +]) +dnl ====================================================================== diff --git a/m4/macros/opt_amq_mount.m4 b/m4/macros/opt_amq_mount.m4 new file mode 100644 index 0000000..065144c --- /dev/null +++ b/m4/macros/opt_amq_mount.m4 @@ -0,0 +1,16 @@ +dnl ###################################################################### +dnl Do you want to turn on "amq -M" code (security hole for IP sproofing!) +AC_DEFUN(AC_OPT_AMQ_MOUNT, +[AC_MSG_CHECKING(for amq -M remote mount code) +AC_ARG_ENABLE(amq-mount, +[ --enable-amq-mount enable amq -M remote mount code], +[if test "$enableval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_AMQ_MOUNT) +else + AC_MSG_RESULT(no) +fi], [ + # default is to not include this code because it is insecure + AC_MSG_RESULT(no) +])]) +dnl ====================================================================== diff --git a/m4/macros/opt_amu_cflags.m4 b/m4/macros/opt_amu_cflags.m4 new file mode 100644 index 0000000..95e88b3 --- /dev/null +++ b/m4/macros/opt_amu_cflags.m4 @@ -0,0 +1,32 @@ +dnl ###################################################################### +dnl Which options to add to CFLAGS for compilation? +dnl NOTE: this is only for final compiltions, not for configure tests) +AC_DEFUN(AC_OPT_AMU_CFLAGS, +[AC_MSG_CHECKING(for additional C option compilation flags) +AC_ARG_ENABLE(am-cflags, +[ --enable-am-cflags[=ARG] + compile package with ARG additional C flags], +[if test "$enableval" = ""; then + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) +else + # check if user supplied configure option without argument + if test "$enableval" = "yes"; then + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) + else + # user supplied a cflags option to configure + AMU_CFLAGS="$enableval" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT($enableval) + fi +fi], [ + # default is to have no additional C flags + AMU_CFLAGS="" + AC_SUBST(AMU_CFLAGS) + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== diff --git a/m4/macros/opt_cppflags.m4 b/m4/macros/opt_cppflags.m4 new file mode 100644 index 0000000..1d4bd2f --- /dev/null +++ b/m4/macros/opt_cppflags.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl Initial settings for CPPFLAGS (-I options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_CPPFLAGS, +[AC_MSG_CHECKING(for configuration/compilation (-I) preprocessor flags) +AC_ARG_ENABLE(cppflags, +[ --enable-cppflags[=ARG] configure/compile with ARG (-I) preprocessor flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + CPPFLAGS="$CPPFLAGS $enableval" + export CPPFLAGS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== diff --git a/m4/macros/opt_debug.m4 b/m4/macros/opt_debug.m4 new file mode 100644 index 0000000..9a582c0 --- /dev/null +++ b/m4/macros/opt_debug.m4 @@ -0,0 +1,27 @@ +dnl ###################################################################### +dnl Debugging: "yes" means general, "mem" means general and memory debugging, +dnl and "no" means none. +AC_DEFUN(AC_OPT_DEBUG, +[AC_MSG_CHECKING(for debugging options) +AC_ARG_ENABLE(debug, +[ --enable-debug[=ARG] enable debugging (yes/mem/no)], +[ +if test "$enableval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(DEBUG) +elif test "$enableval" = mem; then + AC_MSG_RESULT(mem) + AC_DEFINE(DEBUG) + AC_DEFINE(DEBUG_MEM) + AC_CHECK_LIB(mapmalloc, malloc_verify) + AC_CHECK_LIB(malloc, mallinfo) +else + AC_MSG_RESULT(no) +fi +], +[ + # default is no debugging + AC_MSG_RESULT(no) +]) +]) +dnl ====================================================================== diff --git a/m4/macros/opt_ldflags.m4 b/m4/macros/opt_ldflags.m4 new file mode 100644 index 0000000..970704f --- /dev/null +++ b/m4/macros/opt_ldflags.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl Initial settings for LDFLAGS (-L options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_LDFLAGS, +[AC_MSG_CHECKING(for configuration/compilation (-L) library flags) +AC_ARG_ENABLE(ldflags, +[ --enable-ldflags[=ARG] configure/compile with ARG (-L) library flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + LDFLAGS="$LDFLAGS $enableval" + export LDFLAGS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== diff --git a/m4/macros/opt_libs.m4 b/m4/macros/opt_libs.m4 new file mode 100644 index 0000000..93e8d24 --- /dev/null +++ b/m4/macros/opt_libs.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl Initial settings for LIBS (-l options) +dnl NOTE: this is for configuration as well as compilations! +AC_DEFUN(AC_OPT_LIBS, +[AC_MSG_CHECKING(for configuration/compilation (-l) library flags) +AC_ARG_ENABLE(libs, +[ --enable-libs[=ARG] configure/compile with ARG (-l) library flags], +[if test "$enableval" = ""; then + # ignore if empty + AC_MSG_RESULT(none) +else + # use supplied options + LIBS="$LIBS $enableval" + export LIBS + AC_MSG_RESULT($enableval) +fi], [ + # default is to have no additional flags + AC_MSG_RESULT(none) +]) +]) +dnl ====================================================================== diff --git a/m4/macros/os_cflags.m4 b/m4/macros/os_cflags.m4 new file mode 100644 index 0000000..fa5db00 --- /dev/null +++ b/m4/macros/os_cflags.m4 @@ -0,0 +1,60 @@ +dnl ###################################################################### +dnl Specify additional compile options based on the OS and the compiler +AC_DEFUN(AC_OS_CFLAGS, +[ +AC_CACHE_CHECK(additional compiler flags, +ac_cv_os_cflags, +[ +case "${host_os}" in + irix6* ) + case "${CC}" in + cc ) + # do not use 64-bit compiler + ac_cv_os_cflags="-32 -Wl,-woff,84" + ;; + esac + ;; + osf4* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN" + ;; + esac + ;; + osf* ) + # get the right version of struct sockaddr + case "${CC}" in + cc ) + ac_cv_os_cflags="-std -D_SOCKADDR_LEN -D_NO_PROTO" + ;; + * ) + ac_cv_os_cflags="-D_SOCKADDR_LEN -D_NO_PROTO" + ;; + esac + ;; + solaris2.6* | sunos5.6* | solaris2.7* | sunos5.7* ) + # turn on 64-bit file offset interface + case "${CC}" in + * ) + ac_cv_os_cflags="-D_LARGEFILE64_SOURCE" + ;; + esac + ;; + OFF-sunos4* ) + # make sure passing whole structures is handled in gcc + case "${CC}" in + gcc ) + ac_cv_os_cflags="-fpcc-struct-return" + ;; + esac + ;; + * ) ac_cv_os_cflags="" ;; +esac +]) +CFLAGS="$CFLAGS $ac_cv_os_cflags" +]) +dnl ====================================================================== diff --git a/m4/macros/os_cppflags.m4 b/m4/macros/os_cppflags.m4 new file mode 100644 index 0000000..7985bb6 --- /dev/null +++ b/m4/macros/os_cppflags.m4 @@ -0,0 +1,18 @@ +dnl ###################################################################### +dnl Specify additional cpp options based on the OS and the compiler +AC_DEFUN(AC_OS_CPPFLAGS, +[ +AC_CACHE_CHECK(additional preprocessor flags, +ac_cv_os_cppflags, +[ +case "${host_os}" in +# off for now, posix may be a broken thing for nextstep3... +# nextstep* ) +# ac_cv_os_cppflags="-D_POSIX_SOURCE" +# ;; + * ) ac_cv_os_cppflags="" ;; +esac +]) +CPPFLAGS="$CPPFLAGS $ac_cv_os_cppflags" +]) +dnl ====================================================================== diff --git a/m4/macros/os_ldflags.m4 b/m4/macros/os_ldflags.m4 new file mode 100644 index 0000000..3687b47 --- /dev/null +++ b/m4/macros/os_ldflags.m4 @@ -0,0 +1,22 @@ +dnl ###################################################################### +dnl Specify additional linker options based on the OS and the compiler +AC_DEFUN(AC_OS_LDFLAGS, +[ +AC_CACHE_CHECK(additional linker flags, +ac_cv_os_ldflags, +[ +case "${host_os}" in + solaris2.7* | sunos5.7* ) + # find LDAP: off until Sun includes ldap headers. + case "${CC}" in + * ) + #ac_cv_os_ldflags="-L/usr/lib/fn" + ;; + esac + ;; + * ) ac_cv_os_ldflags="" ;; +esac +]) +LDFLAGS="$LDFLAGS $ac_cv_os_ldflags" +]) +dnl ====================================================================== diff --git a/m4/macros/save_state.m4 b/m4/macros/save_state.m4 new file mode 100644 index 0000000..574ffd8 --- /dev/null +++ b/m4/macros/save_state.m4 @@ -0,0 +1,12 @@ +dnl ###################################################################### +dnl AC_SAVE_STATE: save confdefs.h onto dbgcf.h and write $ac_cv_* cache +dnl variables that are known so far. +define(AC_SAVE_STATE, +AC_MSG(SAVING CONFIGURE STATE) +if test -f confdefs.h +then + cp confdefs.h dbgcf.h +fi +[AC_CACHE_SAVE] +) +dnl ====================================================================== diff --git a/m4/macros/struct_field_nfs_fh.m4 b/m4/macros/struct_field_nfs_fh.m4 new file mode 100644 index 0000000..51dae0b --- /dev/null +++ b/m4/macros/struct_field_nfs_fh.m4 @@ -0,0 +1,34 @@ +dnl ###################################################################### +dnl Find the name of the nfs filehandle field in nfs_args_t. +AC_DEFUN(AC_STRUCT_FIELD_NFS_FH, +[ +dnl make sure this is called before macros which depend on it +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_CACHE_CHECK(for the name of the nfs filehandle field in nfs_args_t, +ac_cv_struct_field_nfs_fh, +[ +# set to a default value +ac_cv_struct_field_nfs_fh=notfound +# look for name "fh" (most systems) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_args_t nat; + char *cp = (char *) &(nat.fh); +], ac_cv_struct_field_nfs_fh=fh, ac_cv_struct_field_nfs_fh=notfound) +fi +# look for name "root" (for example Linux) +if test "$ac_cv_struct_field_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_args_t nat; + char *cp = (char *) &(nat.root); +], ac_cv_struct_field_nfs_fh=root, ac_cv_struct_field_nfs_fh=notfound) +fi +]) +if test "$ac_cv_struct_field_nfs_fh" != notfound +then + AC_DEFINE_UNQUOTED(NFS_FH_FIELD, $ac_cv_struct_field_nfs_fh) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_mntent.m4 b/m4/macros/struct_mntent.m4 new file mode 100644 index 0000000..f2bf28e --- /dev/null +++ b/m4/macros/struct_mntent.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl Find if struct mntent exists anywhere in mount.h or mntent.h headers +AC_DEFUN(AC_STRUCT_MNTENT, +[ +AC_CACHE_CHECK(for struct mntent, +ac_cv_have_struct_mntent, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE( +AC_MOUNT_HEADERS +, +[ +struct mntent mt; +], ac_cv_have_struct_mntent=yes, ac_cv_have_struct_mntent=no) +]) +if test "$ac_cv_have_struct_mntent" = yes +then + AC_DEFINE(HAVE_STRUCT_MNTENT) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_mnttab.m4 b/m4/macros/struct_mnttab.m4 new file mode 100644 index 0000000..a042d0d --- /dev/null +++ b/m4/macros/struct_mnttab.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl Find if struct mnttab exists anywhere in mount.h or mnttab.h headers +AC_DEFUN(AC_STRUCT_MNTTAB, +[ +AC_CACHE_CHECK(for struct mnttab, +ac_cv_have_struct_mnttab, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE( +AC_MOUNT_HEADERS +, +[ +struct mnttab mt; +], ac_cv_have_struct_mnttab=yes, ac_cv_have_struct_mnttab=no) +]) +if test "$ac_cv_have_struct_mnttab" = yes +then + AC_DEFINE(HAVE_STRUCT_MNTTAB) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_nfs_args.m4 b/m4/macros/struct_nfs_args.m4 new file mode 100644 index 0000000..9330a27 --- /dev/null +++ b/m4/macros/struct_nfs_args.m4 @@ -0,0 +1,47 @@ +dnl ###################################################################### +dnl Find if struct nfs_args exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_ARGS, +[ +dnl make sure this is called before [AC_TYPE_NFS_FH] +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_args, +ac_cv_have_struct_nfs_args, +[ +# try to compile a program which may have a definition for the structure +# assume not found +ac_cv_have_struct_nfs_args=notfound + +# look for "struct irix5_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct irix5_nfs_args na; +], ac_cv_have_struct_nfs_args="struct irix5_nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +# look for "struct aix42_nfs_args" (specially set in conf/nfs_prot/) +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct aix42_nfs_args na; +], ac_cv_have_struct_nfs_args="struct aix42_nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +# look for "struct nfs_args" +if test "$ac_cv_have_struct_nfs_args" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_args na; +], ac_cv_have_struct_nfs_args="struct nfs_args", ac_cv_have_struct_nfs_args=notfound) +fi + +]) + +if test "$ac_cv_have_struct_nfs_args" != notfound +then + AC_DEFINE(HAVE_STRUCT_NFS_ARGS) + AC_DEFINE_UNQUOTED(nfs_args_t, $ac_cv_have_struct_nfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_nfs_fh.m4 b/m4/macros/struct_nfs_fh.m4 new file mode 100644 index 0000000..fc50152 --- /dev/null +++ b/m4/macros/struct_nfs_fh.m4 @@ -0,0 +1,63 @@ +dnl ###################################################################### +dnl Find the structure of an nfs filehandle. +dnl if found, defined am_nfs_fh to it, else leave it undefined. +dnl THE ORDER OF LOOKUPS IN THIS FILE IS VERY IMPORTANT!!! +AC_DEFUN(AC_STRUCT_NFS_FH, +[ +AC_CACHE_CHECK(for type/structure of NFS V2 filehandle, +ac_cv_struct_nfs_fh, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as struct nfs_fh, fhandle_t, nfsv2fh_t, etc. +# set to a default value +ac_cv_struct_nfs_fh=notfound + +# look for "nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_fh nh; +], ac_cv_struct_nfs_fh="nfs_fh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "struct nfs_fh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_fh nh; +], ac_cv_struct_nfs_fh="struct nfs_fh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "struct nfssvcfh" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfssvcfh nh; +], ac_cv_struct_nfs_fh="struct nfssvcfh", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "nfsv2fh_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfsv2fh_t nh; +], ac_cv_struct_nfs_fh="nfsv2fh_t", ac_cv_struct_nfs_fh=notfound) +fi + +# look for "fhandle_t" +if test "$ac_cv_struct_nfs_fh" = notfound +then +AC_TRY_COMPILE_NFS( +[ fhandle_t nh; +], ac_cv_struct_nfs_fh="fhandle_t", ac_cv_struct_nfs_fh=notfound) +fi + +]) + +if test "$ac_cv_struct_nfs_fh" != notfound +then + AC_DEFINE_UNQUOTED(am_nfs_fh, $ac_cv_struct_nfs_fh) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_nfs_fh3.m4 b/m4/macros/struct_nfs_fh3.m4 new file mode 100644 index 0000000..df49a9d --- /dev/null +++ b/m4/macros/struct_nfs_fh3.m4 @@ -0,0 +1,54 @@ +dnl ###################################################################### +dnl Find the structure of an NFS V3 filehandle. +dnl if found, defined am_nfs_fh3 to it, else leave it undefined. +AC_DEFUN(AC_STRUCT_NFS_FH3, +[ +AC_CACHE_CHECK(for type/structure of NFS V3 filehandle, +ac_cv_struct_nfs_fh3, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as struct nfs_fh3, fhandle3_t, nfsv3fh_t, etc. +# set to a default value +ac_cv_struct_nfs_fh3=notfound + +# look for "nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfs_fh3 nh; +], ac_cv_struct_nfs_fh3="nfs_fh3", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "struct nfs_fh3" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ struct nfs_fh3 nh; +], ac_cv_struct_nfs_fh3="struct nfs_fh3", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "nfsv3fh_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ nfsv3fh_t nh; +], ac_cv_struct_nfs_fh3="nfsv3fh_t", ac_cv_struct_nfs_fh3=notfound) +fi + +# look for "fhandle3_t" +if test "$ac_cv_struct_nfs_fh3" = notfound +then +AC_TRY_COMPILE_NFS( +[ fhandle3_t nh; +], ac_cv_struct_nfs_fh3="fhandle3_t", ac_cv_struct_nfs_fh3=notfound) +fi + +]) + +if test "$ac_cv_struct_nfs_fh3" != notfound +then + AC_DEFINE_UNQUOTED(am_nfs_fh3, $ac_cv_struct_nfs_fh3) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_nfs_gfs_mount.m4 b/m4/macros/struct_nfs_gfs_mount.m4 new file mode 100644 index 0000000..98ed18c --- /dev/null +++ b/m4/macros/struct_nfs_gfs_mount.m4 @@ -0,0 +1,22 @@ +dnl ###################################################################### +dnl Find if struct nfs_gfs_mount exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_GFS_MOUNT, +[ +dnl make sure this is called before [AC_TYPE_NFS_FH] +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_gfs_mount, +ac_cv_have_struct_nfs_gfs_mount, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE_NFS( +[ struct nfs_gfs_mount ngm; +], ac_cv_have_struct_nfs_gfs_mount=yes, ac_cv_have_struct_nfs_gfs_mount=no) +]) +if test "$ac_cv_have_struct_nfs_gfs_mount" = yes +then + AC_DEFINE(HAVE_STRUCT_NFS_GFS_MOUNT) + AC_DEFINE(nfs_args_t, struct nfs_gfs_mount) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/struct_nfs_mount_data.m4 b/m4/macros/struct_nfs_mount_data.m4 new file mode 100644 index 0000000..4412b5f --- /dev/null +++ b/m4/macros/struct_nfs_mount_data.m4 @@ -0,0 +1,22 @@ +dnl ###################################################################### +dnl Find if struct nfs_mount_data exists anywhere in typical headers +AC_DEFUN(AC_STRUCT_NFS_MOUNT_DATA, +[ +dnl make sure this is called before macros which depend on it +AC_BEFORE([$0], [AC_TYPE_NFS_FH]) +AC_BEFORE([$0], [AC_STRUCT_FIELD_NFS_FH]) +AC_CACHE_CHECK(for struct nfs_mount_data, +ac_cv_have_struct_nfs_mount_data, +[ +# try to compile a program which may have a definition for the structure +AC_TRY_COMPILE_NFS( +[ struct nfs_mount_data nmd; +], ac_cv_have_struct_nfs_mount_data=yes, ac_cv_have_struct_nfs_mount_data=no) +]) +if test "$ac_cv_have_struct_nfs_mount_data" = yes +then + AC_DEFINE(HAVE_STRUCT_NFS_MOUNT_DATA) + AC_DEFINE(nfs_args_t, struct nfs_mount_data) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/try_compile_anyfs.m4 b/m4/macros/try_compile_anyfs.m4 new file mode 100644 index 0000000..943c64b --- /dev/null +++ b/m4/macros/try_compile_anyfs.m4 @@ -0,0 +1,144 @@ +dnl ###################################################################### +dnl Compile a program with FS headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_ANYFS, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ +#ifdef HAVE_SYS_TIUSER_H +# include +#endif /* HAVE_SYS_TIUSER_H */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ +#ifdef HAVE_SYS_FS_AUTOFS_H +# include +#endif /* HAVE_SYS_FS_AUTOFS_H */ +#ifdef HAVE_SYS_FS_CACHEFS_FS_H +# include +#endif /* HAVE_SYS_FS_CACHEFS_FS_H */ + +#ifdef HAVE_SYS_FS_PC_FS_H +# include +#endif /* HAVE_SYS_FS_PC_FS_H */ +#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H +# include +#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */ + +#ifdef HAVE_SYS_FS_TMP_H +# include +#endif /* HAVE_SYS_FS_TMP_H */ + +#ifdef HAVE_UFS_UFS_MOUNT_H +# include +#endif /* HAVE_UFS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_UFS_MOUNT_H +# include +#endif /* HAVE_SYS_FS_UFS_MOUNT_H */ +#ifdef HAVE_SYS_FS_EFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_EFS_CLNT_H */ +#ifdef HAVE_SYS_FS_XFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_XFS_CLNT_H */ + +#ifdef HAVE_CDFS_CDFS_MOUNT_H +# include +#endif /* HAVE_CDFS_CDFS_MOUNT_H */ +#ifdef HAVE_HSFS_HSFS_H +# include +#endif /* HAVE_HSFS_HSFS_H */ +#ifdef HAVE_CDFS_CDFSMOUNT_H +# include +#endif /* HAVE_CDFS_CDFSMOUNT_H */ +#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H +# include +#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */ + +], [$1], [$2], [$3]) +]) +dnl ====================================================================== diff --git a/m4/macros/try_compile_nfs.m4 b/m4/macros/try_compile_nfs.m4 new file mode 100644 index 0000000..5e4a336 --- /dev/null +++ b/m4/macros/try_compile_nfs.m4 @@ -0,0 +1,150 @@ +dnl ###################################################################### +dnl Compile a program with NFS headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_NFS, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_SYS_ERRNO_H +# include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_SYS_PARAM_H +# include +#endif /* HAVE_SYS_PARAM_H */ +#ifdef HAVE_SYS_UCRED_H +# include +#endif /* HAVE_SYS_UCRED_H */ + +#if TIME_WITH_SYS_TIME +# include +# include +#else /* not TIME_WITH_SYS_TIME */ +# if HAVE_SYS_TIME_H +# include +# else /* not HAVE_SYS_TIME_H */ +# include +# endif /* not HAVE_SYS_TIME_H */ +#endif /* not TIME_WITH_SYS_TIME */ + +#ifdef HAVE_NETINET_IN_H +# include +#endif /* HAVE_NETINET_IN_H */ + +/* + * Some operating systems must define these variables to get + * NFS definitions included. + */ +#ifndef NFSCLIENT +# define NFSCLIENT +#endif /* NFSCLIENT */ +#ifndef NFS +# define NFS +#endif /* NFS */ + +#ifdef HAVE_SYS_MOUNT_H +# ifndef NFSCLIENT +# define NFSCLIENT +# endif /* not NFSCLIENT */ +# ifndef PCFS +# define PCFS +# endif /* not PCFS */ +# ifndef LOFS +# define LOFS +# endif /* not LOFS */ +# ifndef RFS +# define RFS +# endif /* not RFS */ +# ifndef MSDOSFS +# define MSDOSFS +# endif /* not MSDOSFS */ +# ifndef MFS +# define MFS +# endif /* not MFS */ +# ifndef CD9660 +# define CD9660 +# endif /* not CD9660 */ +# ifndef NFS +# define NFS +# endif /* not NFS */ +# include +#endif /* HAVE_SYS_MOUNT_H */ + +#ifdef HAVE_SYS_VMOUNT_H +# include +#endif /* HAVE_SYS_VMOUNT_H */ + +#ifdef HAVE_LINUX_FS_H +/* + * There's a conflict of definitions on redhat alpha linux between + * and . + * Also a conflict in definitions of ntohl/htonl in RH-5.1 sparc64 + * between and (2.1 kernels). + */ +# ifdef HAVE_SOCKETBITS_H +# define _LINUX_SOCKET_H +# undef BLKFLSBUF +# undef BLKGETSIZE +# undef BLKRAGET +# undef BLKRASET +# undef BLKROGET +# undef BLKROSET +# undef BLKRRPART +# undef MS_MGC_VAL +# undef MS_RMT_MASK +# endif /* HAVE_SOCKETBITS_H */ +# ifdef HAVE_LINUX_POSIX_TYPES_H +# include +# endif /* HAVE_LINUX_POSIX_TYPES_H */ +# ifndef _LINUX_BYTEORDER_GENERIC_H +# define _LINUX_BYTEORDER_GENERIC_H +# endif /* _LINUX_BYTEORDER_GENERIC_H */ +# include +#endif /* HAVE_LINUX_FS_H */ + +#ifdef HAVE_NFS_MOUNT_H +# include +#endif /* HAVE_NFS_MOUNT_H */ + +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ + +#ifdef HAVE_RPC_TYPES_H +# include +#endif /* HAVE_RPC_TYPES_H */ + +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ + +/* ALWAYS INCLUDE AM-UTILS' SPECIFIC NFS PROTOCOL HEADER! */ +#include AMU_NFS_PROTOCOL_HEADER + +#ifdef HAVE_RPCSVC_MOUNT_H +# include +#endif /* HAVE_RPCSVC_MOUNT_H */ + +#ifdef HAVE_SYS_FS_NFS_CLNT_H +# include +#endif /* HAVE_SYS_FS_NFS_CLNT_H */ + +#ifdef HAVE_LINUX_NFS_MOUNT_H +# include +#endif /* HAVE_LINUX_NFS_MOUNT_H */ +#ifdef HAVE_NFS_NFS_GFS_H +# include +#endif /* HAVE_NFS_NFS_GFS_H */ +#ifdef HAVE_NFS_NFS_MOUNT_H_off + /* broken on netxtep3 (includes non-existing headers) */ +# include +#endif /* HAVE_NFS_NFS_MOUNT_H */ +], [$1], [$2], [$3]) +]) +dnl ====================================================================== diff --git a/m4/macros/try_compile_rpc.m4 b/m4/macros/try_compile_rpc.m4 new file mode 100644 index 0000000..17b3f4c --- /dev/null +++ b/m4/macros/try_compile_rpc.m4 @@ -0,0 +1,23 @@ +dnl ###################################################################### +dnl Compile a program with RPC headers to try and find a feature. +dnl The headers part are fixed. Only three arguments are allowed: +dnl [$1] is the program to compile (2nd arg to AC_TRY_COMPILE) +dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) +dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) +AC_DEFUN(AC_TRY_COMPILE_RPC, +[# try to compile a program which may have a definition for a structure +AC_TRY_COMPILE( +[ +#ifdef HAVE_SYS_TYPES_H +# include +#endif /* HAVE_SYS_TYPES_H */ +#ifdef HAVE_RPC_RPC_H +# include +#endif /* HAVE_RPC_RPC_H */ +/* Prevent multiple inclusion on Ultrix 4 */ +#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) +# include +#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ +], [$1], [$2], [$3]) +]) +dnl ====================================================================== diff --git a/m4/macros/type_auth_create_gidlist.m4 b/m4/macros/type_auth_create_gidlist.m4 new file mode 100644 index 0000000..e767b00 --- /dev/null +++ b/m4/macros/type_auth_create_gidlist.m4 @@ -0,0 +1,18 @@ +dnl ###################################################################### +dnl check the correct type for the 5th argument to authunix_create() +AC_DEFUN(AC_TYPE_AUTH_CREATE_GIDLIST, +[ +AC_CACHE_CHECK(argument type of 5rd argument to authunix_create(), +ac_cv_auth_create_gidlist, +[ +# select the correct type +case "${host_os_name}" in + sunos4* | bsdi2* | sysv4* | hpux10.10 | ultrix* ) + ac_cv_auth_create_gidlist="int" ;; + * ) + ac_cv_auth_create_gidlist="gid_t" ;; +esac +]) +AC_DEFINE_UNQUOTED(AUTH_CREATE_GIDLIST_TYPE, $ac_cv_auth_create_gidlist) +]) +dnl ====================================================================== diff --git a/m4/macros/type_autofs_args.m4 b/m4/macros/type_autofs_args.m4 new file mode 100644 index 0000000..a72162f --- /dev/null +++ b/m4/macros/type_autofs_args.m4 @@ -0,0 +1,33 @@ +dnl ###################################################################### +dnl Find the correct type for AUTOFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_AUTOFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of autofs mount(2) arguments, +ac_cv_type_autofs_args, +[ +# set to a default value +ac_cv_type_autofs_args=notfound + +# look for "struct auto_args" +if test "$ac_cv_type_autofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct auto_args a; +], ac_cv_type_autofs_args="struct auto_args", ac_cv_type_autofs_args=notfound) +fi + +# look for "struct autofs_args" +if test "$ac_cv_type_autofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct autofs_args a; +], ac_cv_type_autofs_args="struct autofs_args", ac_cv_type_autofs_args=notfound) +fi + +]) +if test "$ac_cv_type_autofs_args" != notfound +then + AC_DEFINE_UNQUOTED(autofs_args_t, $ac_cv_type_autofs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_cachefs_args.m4 b/m4/macros/type_cachefs_args.m4 new file mode 100644 index 0000000..2cfa046 --- /dev/null +++ b/m4/macros/type_cachefs_args.m4 @@ -0,0 +1,23 @@ +dnl ###################################################################### +dnl Find the correct type for CACHEFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_CACHEFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of cachefs mount(2) arguments, +ac_cv_type_cachefs_args, +[ +# set to a default value +ac_cv_type_cachefs_args=notfound +# look for "struct cachefs_mountargs" +if test "$ac_cv_type_cachefs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct cachefs_mountargs a; +], ac_cv_type_cachefs_args="struct cachefs_mountargs", ac_cv_type_cachefs_args=notfound) +fi +]) +if test "$ac_cv_type_cachefs_args" != notfound +then + AC_DEFINE_UNQUOTED(cachefs_args_t, $ac_cv_type_cachefs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_cdfs_args.m4 b/m4/macros/type_cdfs_args.m4 new file mode 100644 index 0000000..01f7868 --- /dev/null +++ b/m4/macros/type_cdfs_args.m4 @@ -0,0 +1,57 @@ +dnl ###################################################################### +dnl Find the correct type for CDFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_CDFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of cdfs mount(2) arguments, +ac_cv_type_cdfs_args, +[ +# set to a default value +ac_cv_type_cdfs_args=notfound + +# look for "struct iso_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso_args a; +], ac_cv_type_cdfs_args="struct iso_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct iso9660_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso9660_args a; +], ac_cv_type_cdfs_args="struct iso9660_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct cdfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct cdfs_args a; +], ac_cv_type_cdfs_args="struct cdfs_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct hsfs_args" +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct hsfs_args a; +], ac_cv_type_cdfs_args="struct hsfs_args", ac_cv_type_cdfs_args=notfound) +fi + +# look for "struct iso_specific" (ultrix) +if test "$ac_cv_type_cdfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct iso_specific a; +], ac_cv_type_cdfs_args="struct iso_specific", ac_cv_type_cdfs_args=notfound) +fi + +]) +if test "$ac_cv_type_cdfs_args" != notfound +then + AC_DEFINE_UNQUOTED(cdfs_args_t, $ac_cv_type_cdfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_efs_args.m4 b/m4/macros/type_efs_args.m4 new file mode 100644 index 0000000..a35ad7b --- /dev/null +++ b/m4/macros/type_efs_args.m4 @@ -0,0 +1,25 @@ +dnl ###################################################################### +dnl Find the correct type for EFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_EFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of efs mount(2) arguments, +ac_cv_type_efs_args, +[ +# set to a default value +ac_cv_type_efs_args=notfound + +# look for "struct efs_args" +if test "$ac_cv_type_efs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct efs_args a; +], ac_cv_type_efs_args="struct efs_args", ac_cv_type_efs_args=notfound) +fi + +]) +if test "$ac_cv_type_efs_args" != notfound +then + AC_DEFINE_UNQUOTED(efs_args_t, $ac_cv_type_efs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_lofs_args.m4 b/m4/macros/type_lofs_args.m4 new file mode 100644 index 0000000..edcf9f0 --- /dev/null +++ b/m4/macros/type_lofs_args.m4 @@ -0,0 +1,30 @@ +dnl ###################################################################### +dnl Find the correct type for LOFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_LOFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of lofs mount(2) arguments, +ac_cv_type_lofs_args, +[ +# set to a default value +ac_cv_type_lofs_args=notfound +# look for "struct lofs_args" +if test "$ac_cv_type_lofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct lofs_args a; +], ac_cv_type_lofs_args="struct lofs_args", ac_cv_type_lofs_args=notfound) +fi +# look for "struct lo_args" +if test "$ac_cv_type_lofs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct lo_args a; +], ac_cv_type_lofs_args="struct lo_args", ac_cv_type_lofs_args=notfound) +fi +]) +if test "$ac_cv_type_lofs_args" != notfound +then + AC_DEFINE_UNQUOTED(lofs_args_t, $ac_cv_type_lofs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_mfs_args.m4 b/m4/macros/type_mfs_args.m4 new file mode 100644 index 0000000..c553c1d --- /dev/null +++ b/m4/macros/type_mfs_args.m4 @@ -0,0 +1,23 @@ +dnl ###################################################################### +dnl Find the correct type for MFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_MFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of mfs mount(2) arguments, +ac_cv_type_mfs_args, +[ +# set to a default value +ac_cv_type_mfs_args=notfound +# look for "struct mfs_args" +if test "$ac_cv_type_mfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct mfs_args a; +], ac_cv_type_mfs_args="struct mfs_args", ac_cv_type_mfs_args=notfound) +fi +]) +if test "$ac_cv_type_mfs_args" != notfound +then + AC_DEFINE_UNQUOTED(mfs_args_t, $ac_cv_type_mfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_pcfs_args.m4 b/m4/macros/type_pcfs_args.m4 new file mode 100644 index 0000000..727444c --- /dev/null +++ b/m4/macros/type_pcfs_args.m4 @@ -0,0 +1,50 @@ +dnl ###################################################################### +dnl Find the correct type for PC/FS mount(2) arguments structure +AC_DEFUN(AC_TYPE_PCFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of pcfs mount(2) arguments, +ac_cv_type_pcfs_args, +[ +# set to a default value +ac_cv_type_pcfs_args=notfound + +# look for "struct msdos_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct msdos_args a; +], ac_cv_type_pcfs_args="struct msdos_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct pc_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct pc_args a; +], ac_cv_type_pcfs_args="struct pc_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct pcfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct pcfs_args a; +], ac_cv_type_pcfs_args="struct pcfs_args", ac_cv_type_pcfs_args=notfound) +fi + +# look for "struct msdosfs_args" +if test "$ac_cv_type_pcfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct msdosfs_args a; +], ac_cv_type_pcfs_args="struct msdosfs_args", ac_cv_type_pcfs_args=notfound) +fi + +]) + +if test "$ac_cv_type_pcfs_args" != notfound +then + AC_DEFINE_UNQUOTED(pcfs_args_t, $ac_cv_type_pcfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_recvfrom_fromlen.m4 b/m4/macros/type_recvfrom_fromlen.m4 new file mode 100644 index 0000000..d26d098 --- /dev/null +++ b/m4/macros/type_recvfrom_fromlen.m4 @@ -0,0 +1,18 @@ +dnl ###################################################################### +dnl check the correct type for the 6th argument to recvfrom() +AC_DEFUN(AC_TYPE_RECVFROM_FROMLEN, +[ +AC_CACHE_CHECK(non-pointer type of 6th (fromlen) argument to recvfrom(), +ac_cv_recvfrom_fromlen, +[ +# select the correct type +case "${host}" in + *-aix4.2* ) + ac_cv_recvfrom_fromlen="size_t" ;; + * ) + ac_cv_recvfrom_fromlen="int" ;; +esac +]) +AC_DEFINE_UNQUOTED(RECVFROM_FROMLEN_TYPE, $ac_cv_recvfrom_fromlen) +]) +dnl ====================================================================== diff --git a/m4/macros/type_rfs_args.m4 b/m4/macros/type_rfs_args.m4 new file mode 100644 index 0000000..9d7233b --- /dev/null +++ b/m4/macros/type_rfs_args.m4 @@ -0,0 +1,23 @@ +dnl ###################################################################### +dnl Find the correct type for RFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_RFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of rfs mount(2) arguments, +ac_cv_type_rfs_args, +[ +# set to a default value +ac_cv_type_rfs_args=notfound +# look for "struct rfs_args" +if test "$ac_cv_type_rfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct rfs_args a; +], ac_cv_type_rfs_args="struct rfs_args", ac_cv_type_rfs_args=notfound) +fi +]) +if test "$ac_cv_type_rfs_args" != notfound +then + AC_DEFINE_UNQUOTED(rfs_args_t, $ac_cv_type_rfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_svc_in_arg.m4 b/m4/macros/type_svc_in_arg.m4 new file mode 100644 index 0000000..1a065e9 --- /dev/null +++ b/m4/macros/type_svc_in_arg.m4 @@ -0,0 +1,39 @@ +dnl ###################################################################### +dnl Find the type of the 3rd argument (in) to svc_sendreply() call +AC_DEFUN(AC_TYPE_SVC_IN_ARG, +[ +AC_CACHE_CHECK(for type of 3rd arg ('in') arg to svc_sendreply(), +ac_cv_type_svc_in_arg, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +dnl such as caddr_t, char *, etc. +# set to a default value +ac_cv_type_svc_in_arg=notfound +# look for "caddr_t" +if test "$ac_cv_type_svc_in_arg" = notfound +then +AC_TRY_COMPILE_RPC( +[ SVCXPRT *SX; + xdrproc_t xp; + caddr_t p; + svc_sendreply(SX, xp, p); +], ac_cv_type_svc_in_arg="caddr_t", ac_cv_type_svc_in_arg=notfound) +fi +# look for "char *" +if test "$ac_cv_type_svc_in_arg" = notfound +then +AC_TRY_COMPILE_RPC( +[ SVCXPRT *SX; + xdrproc_t xp; + char *p; + svc_sendreply(SX, xp, p); +], ac_cv_type_svc_in_arg="char *", ac_cv_type_svc_in_arg=notfound) +fi +]) +if test "$ac_cv_type_svc_in_arg" != notfound +then + AC_DEFINE_UNQUOTED(SVC_IN_ARG_TYPE, $ac_cv_type_svc_in_arg) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_time_t.m4 b/m4/macros/type_time_t.m4 new file mode 100644 index 0000000..810dd6a --- /dev/null +++ b/m4/macros/type_time_t.m4 @@ -0,0 +1,5 @@ +dnl ###################################################################### +dnl check for type of time_t (usually in ) +AC_DEFUN(AC_TYPE_TIME_T, +[AC_CHECK_TYPE(time_t, long)]) +dnl ====================================================================== diff --git a/m4/macros/type_tmpfs_args.m4 b/m4/macros/type_tmpfs_args.m4 new file mode 100644 index 0000000..e37e71e --- /dev/null +++ b/m4/macros/type_tmpfs_args.m4 @@ -0,0 +1,23 @@ +dnl ###################################################################### +dnl Find the correct type for TMPFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_TMPFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of tmpfs mount(2) arguments, +ac_cv_type_tmpfs_args, +[ +# set to a default value +ac_cv_type_tmpfs_args=notfound +# look for "struct tmpfs_args" +if test "$ac_cv_type_tmpfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct tmpfs_args a; +], ac_cv_type_tmpfs_args="struct tmpfs_args", ac_cv_type_tmpfs_args=notfound) +fi +]) +if test "$ac_cv_type_tmpfs_args" != notfound +then + AC_DEFINE_UNQUOTED(tmpfs_args_t, $ac_cv_type_tmpfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_ufs_args.m4 b/m4/macros/type_ufs_args.m4 new file mode 100644 index 0000000..89e17f5 --- /dev/null +++ b/m4/macros/type_ufs_args.m4 @@ -0,0 +1,41 @@ +dnl ###################################################################### +dnl Find the correct type for UFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_UFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of ufs mount(2) arguments, +ac_cv_type_ufs_args, +[ +# set to a default value +ac_cv_type_ufs_args=notfound + +# look for "struct ufs_args" +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct ufs_args a; +], ac_cv_type_ufs_args="struct ufs_args", ac_cv_type_ufs_args=notfound) +fi + +# look for "struct efs_args" (irix) +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct efs_args a; +], ac_cv_type_ufs_args="struct efs_args", ac_cv_type_ufs_args=notfound) +fi + +# look for "struct ufs_specific" (ultrix) +if test "$ac_cv_type_ufs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct ufs_specific a; +], ac_cv_type_ufs_args="struct ufs_specific", ac_cv_type_ufs_args=notfound) +fi + +]) +if test "$ac_cv_type_ufs_args" != notfound +then + AC_DEFINE_UNQUOTED(ufs_args_t, $ac_cv_type_ufs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_xdrproc_t.m4 b/m4/macros/type_xdrproc_t.m4 new file mode 100644 index 0000000..23d4944 --- /dev/null +++ b/m4/macros/type_xdrproc_t.m4 @@ -0,0 +1,20 @@ +dnl ###################################################################### +dnl check for type of xdrproc_t (usually in ) +AC_DEFUN(AC_TYPE_XDRPROC_T, +[ +AC_CACHE_CHECK(for xdrproc_t, +ac_cv_type_xdrproc_t, +[ +# try to compile a program which may have a definition for the type +dnl need a series of compilations, which will test out every possible type +# look for "xdrproc_t" +AC_TRY_COMPILE_RPC( +[ xdrproc_t xdr_int; +], ac_cv_type_xdrproc_t=yes, ac_cv_type_xdrproc_t=no) +]) +if test "$ac_cv_type_xdrproc_t" = yes +then + AC_DEFINE_UNQUOTED(XDRPROC_T_TYPE, xdrproc_t) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_xfs_args.m4 b/m4/macros/type_xfs_args.m4 new file mode 100644 index 0000000..3e3fc78 --- /dev/null +++ b/m4/macros/type_xfs_args.m4 @@ -0,0 +1,25 @@ +dnl ###################################################################### +dnl Find the correct type for XFS mount(2) arguments structure +AC_DEFUN(AC_TYPE_XFS_ARGS, +[ +AC_CACHE_CHECK(for structure type of xfs mount(2) arguments, +ac_cv_type_xfs_args, +[ +# set to a default value +ac_cv_type_xfs_args=notfound + +# look for "struct xfs_args" +if test "$ac_cv_type_xfs_args" = notfound +then +AC_TRY_COMPILE_ANYFS( +[ struct xfs_args a; +], ac_cv_type_xfs_args="struct xfs_args", ac_cv_type_xfs_args=notfound) +fi + +]) +if test "$ac_cv_type_xfs_args" != notfound +then + AC_DEFINE_UNQUOTED(xfs_args_t, $ac_cv_type_xfs_args) +fi +]) +dnl ====================================================================== diff --git a/m4/macros/type_yp_order_outorder.m4 b/m4/macros/type_yp_order_outorder.m4 new file mode 100644 index 0000000..697c281 --- /dev/null +++ b/m4/macros/type_yp_order_outorder.m4 @@ -0,0 +1,21 @@ +dnl ###################################################################### +dnl check the correct type for the 3rd argument to yp_order() +AC_DEFUN(AC_TYPE_YP_ORDER_OUTORDER, +[ +AC_CACHE_CHECK(pointer type of 3rd argument to yp_order(), +ac_cv_yp_order_outorder, +[ +# select the correct type +case "${host_os_name}" in + solaris2* | svr4* | sysv4* | sunos5* | hpux* ) + ac_cv_yp_order_outorder="unsigned long" ;; + osf* ) + # DU4 man page is wrong, headers are right + ac_cv_yp_order_outorder="unsigned int" ;; + * ) + ac_cv_yp_order_outorder=int ;; +esac +]) +AC_DEFINE_UNQUOTED(YP_ORDER_OUTORDER_TYPE, $ac_cv_yp_order_outorder) +]) +dnl ====================================================================== diff --git a/m4/mdate-sh b/m4/mdate-sh new file mode 100755 index 0000000..37171f2 --- /dev/null +++ b/m4/mdate-sh @@ -0,0 +1,92 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# Get the extended ls output of the file or directory. +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +if ls -L /dev/null 1>/dev/null 2>&1; then + set - x`ls -L -l -d $1` +else + set - x`ls -l -d $1` +fi +# The month is at least the fourth argument +# (3 shifts here, the next inside the loop). +shift +shift +shift + +# Find the month. Next argument is day, followed by the year or time. +month= +until test $month +do + shift + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +day=$2 + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year diff --git a/m4/missing b/m4/missing new file mode 100755 index 0000000..cbe2b0e --- /dev/null +++ b/m4/missing @@ -0,0 +1,188 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in` + if test -z "$files"; then + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in` + test -z "$files" || files="$files.in" + else + files=`echo "$files" | sed -e 's/:/ /g'` + fi + test -z "$files" && files="config.h.in" + touch $files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print \ + | sed 's/^\(.*\).am$/touch \1.in/' \ + | sh + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/m4/mk-aclocal b/m4/mk-aclocal new file mode 100755 index 0000000..d5cc458 --- /dev/null +++ b/m4/mk-aclocal @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Make am-utils' aclocal.m4 file (concatendated from others). +# For maintainers only. +# Erez Zadok + +if [ ! -d macros ]; then + echo no macros directory found! + exit 2 +fi + +# if [ ! -d amdir ]; then +# echo no amdir directory found! +# exit 2 +# fi + +cd macros +for i in HEADER *.m4; do + cat $i + echo + echo +done +# include special macros only available in automake +#(cd ../amdir && cat aclocal.m4) +cat TRAILER +exit 0 diff --git a/m4/mkconf b/m4/mkconf new file mode 100755 index 0000000..c5a6516 --- /dev/null +++ b/m4/mkconf @@ -0,0 +1,20 @@ +#!/bin/sh +# (re)make the autoconf configuration files. +# Used by am-utils maintainers only! +# +# Erez Zadok +# +#set -x + +if [ ! -f amd/amd.c ]; then + cd .. +fi +if [ ! -f amd/amd.c ]; then + cd .. +fi +if [ ! -f amd/amd.c ]; then + echo "wrong directory!" + exit 1 +fi + +cd aux && make $* diff --git a/m4/mkinstalldirs b/m4/mkinstalldirs new file mode 100755 index 0000000..cc8783e --- /dev/null +++ b/m4/mkinstalldirs @@ -0,0 +1,36 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Last modified: 1994-03-25 +# Public domain + +errstatus=0 + +for file in ${1+"$@"} ; do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d in ${1+"$@"} ; do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? + fi + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/m4/rmtspc b/m4/rmtspc new file mode 100755 index 0000000..431691d --- /dev/null +++ b/m4/rmtspc @@ -0,0 +1,6 @@ +#!/bin/sh +# remove trailing spaces from C code +#set -x +for i in $*; do + sed 's/[ ]*$//g' < $i > $i.tmp_$$ && mv $i.tmp_$$ $i +done diff --git a/m4/stamp-h.in b/m4/stamp-h.in new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/m4/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/m4/update_build_version b/m4/update_build_version new file mode 100755 index 0000000..e221abd --- /dev/null +++ b/m4/update_build_version @@ -0,0 +1,22 @@ +#!/bin/sh +# Update the build version file for am-utils +# Erez Zadok +#set -x + +file="build_version.h" +vers=1 + +if test -f $file +then + egrep AMU_BUILD_VERSION $file | while read a b vers + do + vers=`expr $vers + 1` + echo '/* do not edit this file by hand */' > $file + echo '/* auto-generated by update_build_version script */' >> $file + echo '#define AMU_BUILD_VERSION '$vers >> $file + done +else + echo '/* do not edit this file by hand */' > $file + echo '/* auto-generated by update_build_version script */' >> $file + echo '#define AMU_BUILD_VERSION '$vers >> $file +fi diff --git a/mk-amd-map/Makefile.am b/mk-amd-map/Makefile.am new file mode 100644 index 0000000..5d021ab --- /dev/null +++ b/mk-amd-map/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for mk-amd-map/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = mk-amd-map + +# man pages +man_MANS = mk-amd-map.8 + +# headers this depends on, not to be installed +#noinst_HEADERS = + +mk_amd_map_SOURCES = \ + mk-amd-map.c + +#LDADD = ../libamu/libamu.a + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) diff --git a/mk-amd-map/Makefile.in b/mk-amd-map/Makefile.in new file mode 100644 index 0000000..db8e15f --- /dev/null +++ b/mk-amd-map/Makefile.in @@ -0,0 +1,368 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for mk-amd-map/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = mk-amd-map + +# man pages +man_MANS = mk-amd-map.8 + +# headers this depends on, not to be installed +#noinst_HEADERS = + +mk_amd_map_SOURCES = \ + mk-amd-map.c + +#LDADD = ../libamu/libamu.a + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +mk_amd_map_OBJECTS = mk-amd-map.o +mk_amd_map_LDADD = $(LDADD) +mk_amd_map_DEPENDENCIES = +mk_amd_map_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(mk_amd_map_SOURCES) +OBJECTS = $(mk_amd_map_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps mk-amd-map/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +mk-amd-map: $(mk_amd_map_OBJECTS) $(mk_amd_map_DEPENDENCIES) + @rm -f mk-amd-map + $(LINK) $(mk_amd_map_LDFLAGS) $(mk_amd_map_OBJECTS) $(mk_amd_map_LDADD) $(LIBS) + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = mk-amd-map + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(sbindir) $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man8 \ +uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mk-amd-map/mk-amd-map.8 b/mk-amd-map/mk-amd-map.8 new file mode 100644 index 0000000..5864393 --- /dev/null +++ b/mk-amd-map/mk-amd-map.8 @@ -0,0 +1,62 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1993 Jan-Simon Pendry +.\" Copyright (c) 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" from: @(#)mk-amd-map.8 8.1 (Berkeley) 6/28/93 +.\" $Id: mk-amd-map.8,v 1.1 1998/11/05 02:04:56 ezk Exp $ +.\" +.TH MK-AMD-MAP 8 "June 28, 1993" +.SH NAME +.B mk-amd-map +\- create database maps for Amd +.SH SYNOPSIS +.B mk-amd-map +[ +.B \-p +] +.I mapname +.SH DESCRIPTION +.B mk-amd-map +creates the database maps used by the keyed map lookups in +amd(8). +It reads input from the named file +and outputs them to a correspondingly named +hashed database. +.TP +.B \-p +This +option prints the map on standard output instead of generating +a database. This is usually used to merge continuation lines +into one physical line. +.SH SEE ALSO +.BR amd (8). diff --git a/mk-amd-map/mk-amd-map.c b/mk-amd-map/mk-amd-map.c new file mode 100644 index 0000000..184b100 --- /dev/null +++ b/mk-amd-map/mk-amd-map.c @@ -0,0 +1,389 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: mk-amd-map.c,v 1.1 1998/11/05 02:04:56 ezk Exp $ + */ + +/* + * Convert a file map into an ndbm map + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +/* dummy variables */ +char *progname; +char hostname[MAXHOSTNAMELEN]; +int orig_umask, foreground, debug_flags; +pid_t mypid; +serv_state amd_state; + +/* (libdb version 2) uses .db extensions but an old dbm API */ +/* check for libgdbm to distinguish it from linux systems */ +#if defined(DBM_SUFFIX) && !defined(HAVE_LIBGDBM) +# define HAVE_DB_SUFFIX +#endif /* not defined(DBM_SUFFIX) && !defined(HAVE_LIBGDBM) */ + +#ifdef HAVE_MAP_NDBM + +static int +store_data(voidp db, char *k, char *v) +{ + datum key, val; + + key.dptr = k; + val.dptr = v; + key.dsize = strlen(k) + 1; + val.dsize = strlen(v) + 1; + return dbm_store((DBM *) db, key, val, DBM_INSERT); +} + + +/* + * Read one line from file. + */ +static int +read_line(char *buf, int size, FILE *fp) +{ + int done = 0; + + do { + while (fgets(buf, size, fp)) { + int len = strlen(buf); + + done += len; + if (len > 1 && buf[len - 2] == '\\' && buf[len - 1] == '\n') { + int ch; + buf += len - 2; + size -= len - 2; + *buf = '\n'; + buf[1] = '\0'; + + /* + * Skip leading white space on next line + */ + while ((ch = getc(fp)) != EOF && isascii(ch) && isspace(ch)) ; + (void) ungetc(ch, fp); + } else { + return done; + } + } + } while (size > 0 && !feof(fp)); + + return done; +} + + +/* + * Read through a map. + */ +static int +read_file(FILE *fp, char *map, voidp db) +{ + char key_val[2048]; + int chuck = 0; + int line_no = 0; + int errs = 0; + + while (read_line(key_val, 2048, fp)) { + char *kp; + char *cp; + char *hash; + int len = strlen(key_val); + + line_no++; + + /* + * Make sure we got the whole line + */ + if (key_val[len - 1] != '\n') { + fprintf(stderr, "line %d in \"%s\" is too long", line_no, map); + chuck = 1; + } else { + key_val[len - 1] = '\0'; + } + + /* + * Strip comments + */ + hash = strchr(key_val, '#'); + if (hash) + *hash = '\0'; + + /* + * Find start of key + */ + for (kp = key_val; *kp && isascii(*kp) && isspace((int)*kp); kp++) ; + + /* + * Ignore blank lines + */ + if (!*kp) + goto again; + + /* + * Find end of key + */ + for (cp = kp; *cp && (!isascii(*cp) || !isspace((int)*cp)); cp++) ; + + /* + * Check whether key matches, or whether + * the entry is a wildcard entry. + */ + if (*cp) + *cp++ = '\0'; + while (*cp && isascii(*cp) && isspace((int)*cp)) + cp++; + if (*kp == '+') { + fprintf(stderr, "Can't interpolate %s\n", kp); + errs++; + } else if (*cp) { + if (db) { + if (store_data(db, kp, cp) < 0) { + fprintf(stderr, "Could store %s -> %s\n", kp, cp); + errs++; + } + } else { + printf("%s\t%s\n", kp, cp); + } + } else { + fprintf(stderr, "%s: line %d has no value field", map, line_no); + errs++; + } + + again: + /* + * If the last read didn't get a whole line then + * throw away the remainder before continuing... + */ + if (chuck) { + while (fgets(key_val, sizeof(key_val), fp) && + !strchr(key_val, '\n')) ; + chuck = 0; + } + } + return errs; +} + + +static int +remove_file(char *f) +{ + if (unlink(f) < 0 && errno != ENOENT) + return -1; + + return 0; +} + + +int +main(int argc, char *argv[]) +{ + FILE *mapf; /* the input file to read from */ + int error; + char *mapsrc; + DBM *db = NULL; + static char maptmp[] = "dbmXXXXXX"; +#ifdef HAVE_DB_SUFFIX + char maptdb[16]; + char *map_name_db = (char *) NULL; +#else /* not HAVE_DB_SUFFIX */ + char maptpag[16], maptdir[16]; + char *map_name_pag = (char *) NULL, *map_name_dir = (char *) NULL; +#endif /* not HAVE_DB_SUFFIX */ + int len; + char *sl; + int printit = 0; + int usage = 0; + int ch; + extern int optind; + + /* test options */ + while ((ch = getopt(argc, argv, "p")) != -1) + switch (ch) { + case 'p': + printit = 1; + break; + default: + usage++; + break; + } + + if (usage || optind != (argc - 1)) { + fputs("Usage: mk-amd-map [-p] file-map\n", stderr); + exit(1); + } + mapsrc = argv[optind]; + + /* test if can get to the map directory */ + sl = strrchr(mapsrc, '/'); + if (sl) { + *sl = '\0'; + if (chdir(mapsrc) < 0) { + fputs("Can't chdir to ", stderr); + perror(mapsrc); + exit(1); + } + mapsrc = sl + 1; + } + + /* open source file */ + mapf = fopen(mapsrc, "r"); + if (!mapf) { + fprintf(stderr, "cannot open source file "); + perror(mapsrc); + exit(1); + } + +#ifndef DEBUG + signal(SIGINT, SIG_IGN); +#endif /* DEBUG */ + + if (!printit) { + len = strlen(mapsrc); +#ifdef HAVE_DB_SUFFIX + map_name_db = (char *) malloc(len + 4); + error = (map_name_db == NULL); +#else /* not HAVE_DB_SUFFIX */ + map_name_pag = (char *) malloc(len + 5); + map_name_dir = (char *) malloc(len + 5); + error = (map_name_pag == NULL || map_name_dir == NULL); +#endif /* not HAVE_DB_SUFFIX */ + if (error) { + perror("mk-amd-map: malloc"); + exit(1); + } + + mktemp(maptmp); + + /* remove existing temps (if any) */ +#ifdef HAVE_DB_SUFFIX + sprintf(maptdb, "%s.db", maptmp); + if (remove_file(maptdb) < 0) { + fprintf(stderr, "Can't remove existing temporary file; "); + perror(maptdb); + exit(1); + } +#else /* not HAVE_DB_SUFFIX */ + sprintf(maptpag, "%s.pag", maptmp); + sprintf(maptdir, "%s.dir", maptmp); + if (remove_file(maptpag) < 0 || remove_file(maptdir) < 0) { + fprintf(stderr, "Can't remove existing temporary files; %s and ", maptpag); + perror(maptdir); + exit(1); + } +#endif /* not HAVE_DB_SUFFIX */ + + db = dbm_open(maptmp, O_RDWR|O_CREAT, 0444); + if (!db) { + fprintf(stderr, "cannot initialize temporary database: %s", maptmp); + exit(1); + } + } + + /* print db to stdout or to temp database */ + error = read_file(mapf, mapsrc, db); + fclose(mapf); + if (error) { + if (printit) + fprintf(stderr, "Error reading source file %s\n", mapsrc); + else + fprintf(stderr, "Error creating database map for %s\n", mapsrc); + exit(1); + } + + if (printit) + exit(0); /* nothing more to do */ + + /* if gets here, we wrote to a database */ + + dbm_close(db); + /* all went well */ + +#ifdef HAVE_DB_SUFFIX + sprintf(map_name_db, "%s.db", mapsrc); + if (rename(maptdb, map_name_db) < 0) { + fprintf(stderr, "Couldn't rename %s to ", maptdb); + perror(map_name_db); + /* Throw away the temporary map */ + unlink(maptdb); + exit(1); + } +#else /* not HAVE_DB_SUFFIX */ + sprintf(map_name_pag, "%s.pag", mapsrc); + sprintf(map_name_dir, "%s.dir", mapsrc); + if (rename(maptpag, map_name_pag) < 0) { + fprintf(stderr, "Couldn't rename %s to ", maptpag); + perror(map_name_pag); + /* Throw away the temporary map */ + unlink(maptpag); + unlink(maptdir); + exit(1); + } + if (rename(maptdir, map_name_dir) < 0) { + fprintf(stderr, "Couldn't rename %s to ", maptdir); + perror(map_name_dir); + /* remove the (presumably bad) .pag file */ + unlink(map_name_pag); + /* throw away remaining part of original map */ + unlink(map_name_dir); + /* throw away the temporary map */ + unlink(maptdir); + fprintf(stderr, "WARNING: existing map \"%s.{dir,pag}\" destroyed\n", + mapsrc); + exit(1); + } +#endif /* not HAVE_DB_SUFFIX */ + + exit(0); +} + +#else /* not HAVE_MAP_NDBM */ + +int +main() +{ + fputs("mk-amd-map: This system does not support hashed database files\n", stderr); + exit(1); +} + +#endif /* not HAVE_MAP_NDBM */ diff --git a/scripts/Makefile.am b/scripts/Makefile.am new file mode 100644 index 0000000..c438058 --- /dev/null +++ b/scripts/Makefile.am @@ -0,0 +1,49 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for scripts/ directory +# Author: Erez Zadok + +sbin_SCRIPTS = \ + am-eject \ + amd2ldif \ + amd2sun \ + ctl-amd \ + ctl-hlfsd \ + fixrmtab \ + fix-amd-map \ + lostaltmail \ + wait4amd \ + wait4amd2die + +bin_SCRIPTS = \ + expn + +sysconf_DATA = \ + amd.conf-sample \ + lostaltmail.conf-sample + +# man pages +man_MANS = \ + amd.conf.5 \ + expn.1 + +EXTRA_DIST = \ + am-eject.in \ + amd2ldif.in \ + amd2sun.in \ + ctl-amd.in \ + ctl-hlfsd.in \ + fixrmtab.in \ + fix-amd-map.in \ + lostaltmail.in \ + wait4amd.in \ + wait4amd2die.in \ + \ + expn.in \ + \ + amd.conf-sample \ + lostaltmail.conf-sample \ + $(man_MANS) + +CLEANFILES = $(sbin_SCRIPTS) $(bin_SCRIPTS) diff --git a/scripts/Makefile.in b/scripts/Makefile.in new file mode 100644 index 0000000..a20d846 --- /dev/null +++ b/scripts/Makefile.in @@ -0,0 +1,381 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for scripts/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_SCRIPTS = \ + am-eject \ + amd2ldif \ + amd2sun \ + ctl-amd \ + ctl-hlfsd \ + fixrmtab \ + fix-amd-map \ + lostaltmail \ + wait4amd \ + wait4amd2die + +bin_SCRIPTS = \ + expn + +sysconf_DATA = \ + amd.conf-sample \ + lostaltmail.conf-sample + +# man pages +man_MANS = \ + amd.conf.5 \ + expn.1 + +EXTRA_DIST = \ + am-eject.in \ + amd2ldif.in \ + amd2sun.in \ + ctl-amd.in \ + ctl-hlfsd.in \ + fixrmtab.in \ + fix-amd-map.in \ + lostaltmail.in \ + wait4amd.in \ + wait4amd2die.in \ + \ + expn.in \ + \ + amd.conf-sample \ + lostaltmail.conf-sample \ + $(man_MANS) + +CLEANFILES = $(sbin_SCRIPTS) $(bin_SCRIPTS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = am-eject amd2ldif amd2sun ctl-amd ctl-hlfsd expn \ +fixrmtab fix-amd-map lostaltmail wait4amd wait4amd2die +SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) + +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +MANS = $(man_MANS) + +NROFF = nroff +DATA = $(sysconf_DATA) + +DIST_COMMON = Makefile.am Makefile.in am-eject.in amd2ldif.in \ +amd2sun.in ctl-amd.in ctl-hlfsd.in expn.in fix-amd-map.in fixrmtab.in \ +lostaltmail.in wait4amd.in wait4amd2die.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +all: Makefile $(SCRIPTS) $(MANS) $(DATA) + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps scripts/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +am-eject: $(top_builddir)/config.status am-eject.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +amd2ldif: $(top_builddir)/config.status amd2ldif.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +amd2sun: $(top_builddir)/config.status amd2sun.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +ctl-amd: $(top_builddir)/config.status ctl-amd.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +ctl-hlfsd: $(top_builddir)/config.status ctl-hlfsd.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +expn: $(top_builddir)/config.status expn.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +fixrmtab: $(top_builddir)/config.status fixrmtab.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +fix-amd-map: $(top_builddir)/config.status fix-amd-map.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +lostaltmail: $(top_builddir)/config.status lostaltmail.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +wait4amd: $(top_builddir)/config.status wait4amd.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status +wait4amd2die: $(top_builddir)/config.status wait4amd2die.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status + +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; fi; \ + done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + list='$(bin_SCRIPTS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + done + +install-sbinSCRIPTS: $(sbin_SCRIPTS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_SCRIPTS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; fi; \ + done + +uninstall-sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + list='$(sbin_SCRIPTS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + +uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done + +install-man5: + $(mkinstalldirs) $(DESTDIR)$(man5dir) + @list='$(man5_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.5*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst; \ + done + +uninstall-man5: + @list='$(man5_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.5*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man5dir)/$$inst"; \ + rm -f $(DESTDIR)$(man5dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man1 install-man5 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man1 uninstall-man5 + +install-sysconfDATA: $(sysconf_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sysconfdir) + @list='$(sysconf_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(sysconfdir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(sysconfdir)/$$p; \ + fi; fi; \ + done + +uninstall-sysconfDATA: + @$(NORMAL_UNINSTALL) + list='$(sysconf_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sysconfdir)/$$p; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = scripts + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-binSCRIPTS install-sbinSCRIPTS install-sysconfDATA + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-binSCRIPTS uninstall-sbinSCRIPTS uninstall-man uninstall-sysconfDATA + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(bindir) $(DATADIR)$(sbindir) \ + $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man5 \ + $(DATADIR)$(sysconfdir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-generic + +clean: clean-generic mostlyclean + +distclean: distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: uninstall-binSCRIPTS install-binSCRIPTS uninstall-sbinSCRIPTS \ +install-sbinSCRIPTS install-man1 uninstall-man1 install-man5 \ +uninstall-man5 install-man uninstall-man uninstall-sysconfDATA \ +install-sysconfDATA tags distdir info dvi installcheck install-exec \ +install-data install uninstall all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/scripts/am-eject.in b/scripts/am-eject.in new file mode 100644 index 0000000..ed7e2d0 --- /dev/null +++ b/scripts/am-eject.in @@ -0,0 +1,52 @@ +#!/bin/sh +# auto-unmount floppy/cd directory before ejecting device +# script taken from Debian Linux's amd +# +# Package: am-utils-6.0 +# (Additional) author: Erez Zadok + +# set path +prefix=@prefix@ +exec_prefix=@exec_prefix@ +PATH=@sbindir@:@bindir@:/usr/ucb:/usr/bin:/bin:${PATH} +export PATH + +if [ $# -ne 1 ]; then + echo "Usage: $0 cd|fd" + exit 2 +fi + +# determine toplevel mount point of amd +fs=`amq | grep ' toplvl ' | cut -d' ' -f1` +if [ "$fs" = "" ]; then + echo "Cannot determine amd toplevel directory" + exit 2 +fi + +# append name of medium +case "$1" in + cd|fd) fs=$fs/$1;; + *) echo "Usage: $0 cd|fd"; exit 2;; +esac + +# is the medium mounted? +if amq | grep -q "^$fs" >/dev/null 2>&1; then + # if yes, try to unmount it + sync + amq -u $fs + sleep 2 + if amq | grep -q "^$fs" >/dev/null 2>&1; then + # failed, bail out + echo -n "Cannot unmount $fs; in use by:" + fuser -uv -m $fs + echo "" + exit 1 + fi +else + echo "$fs not mounted" +fi + +case $1 in + cd) eject;; # eject CD-ROM + fd) echo "Ok to remove disk";; +esac diff --git a/scripts/amd.conf-sample b/scripts/amd.conf-sample new file mode 100644 index 0000000..59ce1f8 --- /dev/null +++ b/scripts/amd.conf-sample @@ -0,0 +1,94 @@ +# -*- text -*- +# A SAMPLE CONFIGURATION FILE FOR AMD + +############################################################################## +# GLOBAL OPTIONS SECTION (must be first in amd.conf file) +[ global ] +# (amd -n) +normalize_hostnames = yes | no +# (amd -p) +print_pid = yes | no +pid_file = /dev/stdout | /var/run/amd.pid +# (amd -r) +restart_mounts = yes | no +unmount_on_exit = no | yes +# (amd -a) +auto_dir = /a +# duration in seconds that a looked up name remain cached (amd -c) +cache_duration = 300 +# (amd -d) +local_domain = cs.columbia.edu +# (amd -k) +karch = sun4m +arch = sun4 +# if you don't like autoconf picking up "sunos5" as the os-type, override it +os = sos5 +# (amd -o) +osver = 2.5.1 +# if you print_version after setting up "os", it will show it. (amd -v) +print_version = yes | no + +# (amd -l) +log_file = /var/log/amd | syslog | syslog:facility +# NFS (RPC/UDP) retry interval, in tenths of secs (amd -t interval.counter) +nfs_retry_interval = 8 +nfs_retransmit_counter = 110 +# (amd -w) +dismount_interval = 120 +# (amd -y) +nis_domain = nisDom-CS.columbia.edu +# (amd -x) +log_options = fatal,error,user,warn,info,map,stats,all +# (amd -D) +debug_options = all,amq,daemon,fork,full,info,mem,mtab,str,test,trace +# (amd -S) +plock = no | yes +# selectors on /defaults are off by default +selectors_on_default = yes | no +# should browsable maps show number of entries to df/statfs (default=no) +show_statfs_entries = yes | no +# (hpux) cluster name (amd -C) +cluster = ??? +# LDAP (Lightweight Directory Access Protocol) options +ldap_base = ldap.your.domain:389 +ldap_hostports = "ou=Marketing, o=AMD Ltd, c=US" +ldap_cache_seconds = 0 (default) +ldap_cache_maxmem = 131072 (default) +# default base name for hesiod maps +hesiod_base = automount +# these 5 options can be overridden by each map individually +browsable_dirs = yes | no | full +map_options = cache:=all +map_type = file|hesiod|ndbm|nis|nisplus|passwd|union|ldap +mount_type = nfs | autofs +search_path = /etc/local:/etc/amdmaps:/misc/yp +# alternate RPC program number to register with the port mapper +portmap_program = 300019-300029 +# Use fully qualified host names +fully_qualified_hosts = yes | no + +############################################################################## +# DEFINE AN AMD MOUNT POINT +[ /home ] +# map name must be defined, all else are optional +map_name = /etc/amd.home | amd.home +map_options = cache:=all +# if map type is not defined, will search all map types (default) +map_type = file|hesiod|ndbm|nis|nisplus|passwd|union|ldap +search_path = /etc/local:/etc/amdmaps:/misc/yp +# an amd or autofs mount point +mount_type = nfs | autofs +browsable_dirs = yes | no +# an optional tag to be used with amd -T tag. untagged entries are always +# used. Tagged ones get used only if specified with "amd -T" +tag = test + +############################################################################## +# DEFINE ANOTHER AMD MOUNT POINT +[ /src ] +map_name = /usr/local/lib/amdmaps/amu.src +# regular amd (nfs) mount point (default) +# don't try the "autofs" type. It is not implemented yet. +mount_type = nfs + +############################################################################## diff --git a/scripts/amd.conf.5 b/scripts/amd.conf.5 new file mode 100644 index 0000000..2e93d25 --- /dev/null +++ b/scripts/amd.conf.5 @@ -0,0 +1,539 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1990 Jan-Simon Pendry +.\" Copyright (c) 1990 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1990 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" %W% (Berkeley) %G% +.\" +.\" $Id: amd.conf.5,v 1.1 1998/11/05 02:04:58 ezk Exp $ +.\" +.TH AMD.CONF 8 "7 August 1997" +.SH NAME +amd.conf \- amd configuration file +.SH SYNOPSIS +.B amd.conf +.SH DESCRIPTION +The +.B amd.conf +file is the configuration file for amd, as part of the am-utils suite. +.P +.B amd.conf +contains runtime configuration information for the +.B amd +automounter program. +.\" ************************************************************************** +.SH FILE FORMAT +.P +The file consists of sections and parameters. A section begins with the +name of the section in square brackets and continues until the next section +begins or the end the file is reached. Sections contain parameters of the +form 'name = value'. +.P +The file is line-based - that is, each newline-terminated line represents +either a comment, a section name or a parameter. No line-continuation +syntax is available. +.P +Section, parameter names and their values are case sensitive. +.P +Only the first equals sign in a parameter is significant. Whitespace before +or after the first equals sign is discarded. Leading, trailing and +internal whitespace in section and parameter names is irrelevant. Leading +and trailing whitespace in a parameter value is discarded. Internal +whitespace within a parameter value is not allowed, unless the whole +parameter value is quoted with double quotes as in 'name = "some value"'. +.P +Any line beginning with a pound sign (#) is ignored, as are lines containing +only whitespace. +.P +The values following the equals sign in parameters are all either a string +(no quotes needed if string does not include spaces) or a boolean, which may +be given as yes/no. Case is significant in all values. Some items such as +cache timeouts are numeric. +.\" ************************************************************************** +.SH SECTIONS +.SS The [global] section +Parameters in this section either apply to amd as a whole, or to all other +regular map sections which follow. There should be only one global section +defined in one configuration file. +.P +It is highly recommended that this section be specified first in the +configuration file. If it is not, then regular map sections which precede +it will not use global values defined later. + +.SS Regular [/map] sections +Parameters in regular (non-global) sections apply to a single map entry. +For example, if the map section +.B [/homes] +is defined, then all parameters following it will be applied to the +.I /homes +amd-managed mount point. +.\" ************************************************************************** +.SH PARAMETERS +.SS Parameters common to all sections +These parameters can be specified either in the global or a map specific +section. Entries specified in a map-specific section override the default +value or one defined in the global section. If such a common parameter is +specified only in the global section, it is applicable to all regular map +sections that follow. +.\" ************************************************************************** +.TP +.BR browsable_dirs " (string, default=no)" +If "yes", then amd's top-level mount points will be browsable to +.BR readdir (3) +calls. This means you could run for example +.BR ls (3) +and see what keys are available to mount in that directory. Not all entries +are made visible to readdir(3): the "/default" entry, wildcard +entries, and those with a "/" in them are not included. If you specify +"full" to this option, all but "/default" will be visible. +Note that if you run a command which will attempt to +.BR stat (2) +the entries, such as often done by "ls -l" or "ls -F", amd will attempt to +mount +.I every +entry in that map. This is often called a ``mount storm''. + +.TP +.BR map_options " (string, default no options)" +This option is the same as specifying map options on the command line to +amd, such as "cache:=all". + +.TP +.BR map_type " (string, default search all map types)" +If specified, amd will initialize the map only for the type given. This is +useful to avoid the default map search type used by amd which takes longer +and can have undesired side-effects such as initializing NIS even if not +used. Possible values are + +.nf +\fBfile\fR plain files +\fBhesiod\fR Hesiod name service from MIT +\fBldap\fR Lightweight Directory Access Protocol +\fBndbm\fR (New) dbm style hash files +\fBnis\fR Network Information Services (version 2) +\fBnisplus\fR Network Information Services Plus (version 3) +\fBpasswd\fR local password files +\fBunion\fR union maps +.fi + +.TP +.BR mount_type " (string, default=nfs)" +All amd mount types default to NFS. That is, amd is an NFS server on the +map mount points, for the local host it is running on. If "autofs" is +specified, amd will be an autofs server for those mount points. + +.TP +.BR search_path " (string, default no search path)" +This provides a (colon-delimited) search path for file maps. Using a search +path, sites can allow for local map customizations and overrides, and can +distributed maps in several locations as needed. + +.\" ************************************************************************** +.SS Parameters applicable to the global section only + +.TP +.BR arch " (string, default to compiled in value)" +Allows you to override the value of the +.I arch +amd variable. + +.TP +.BR auto_dir " (string, default=/a)" +Same as the +.B \-a +option to amd. This sets the private directory where amd will create +sub-directories for its real mount points. + +.TP +.BR cache_duration " (numeric, default=300)" +Same as the +.B \-c +option to amd. Sets the duration in seconds that looked up map entries +remain in the cache. + +.TP +.BR cluster " (string, default no cluster)" +Same as the +.B \-C +option to amd. Specifies the alternate HP-UX cluster to use. + +.TP +.BR debug_options " (string, default no debug options)" +Same as the +.B \-D +option to amd. Specify any debugging options for amd. Works only if +am-utils was configured for debugging using the --enable-debug option. The +"mem" option alone can be turned on via --enable-debug=mem. Otherwise +debugging options are ignored. Options are comma delimited, and can be +preceded by the string "no" to negate their meaning. You can get the list +of supported debugging options by running amd \-v. Possible values are: + +.nf +\fBall\fR all options +\fBamq\fR register for amq +\fBdaemon\fR enter daemon mode +\fBfork\fR fork server +\fBfull\fR program trace +\fBinfo\fR info service specific debugging (hesiod, nis, etc.) +\fBmem\fR trace memory allocations +\fBmtab\fR use local "./mtab" file +\fBstr\fR debug string munging +\fBtest\fR full debug but no daemon +\fBtrace\fR protocol trace +.fi + +.TP +.BR dismount_interval " (numeric, default=120)" +Same as the +.B \-w +option to amd. Specify in seconds, the time between attempts to dismount +file systems that have exceeded their cached times. + +.TP +.BR fully_qualified_hosts " (string, default=no)" +If "yes", +.I Amd +will perform RPC authentication using fully-qualified host names. This is +necessary for some systems, and especially when performing cross-domain +mounting. For this function to work, the +.I Amd +variable ${hostd} is used, requiring that ${domain} not be null. + +.TP +.BR hesiod_base " (string, default=automount)" +Specify the base name for hesiod maps. + +.TP +.BR karch " (string, default to karch of the system)" +Same as the +.B \-k +option to amd. Allows you to override the kernel-architecture of your +system. Useful for example on Sun (Sparc) machines, where you can build one +amd binary, and run it on multiple machines, yet you want each one to get +the correct +.I karch +variable set (for example, sun4c, sun4m, sun4u, etc.) Note that if not +specified, amd will use uname(2) to figure out the kernel architecture of +the machine. + +.TP +.BR ldap_base " (string, default not set)" +Specify the base name for LDAP. + +.TP +.BR ldap_cache_maxmem " (numeric, default=131072)" +Specify the maximum memory amd should use to cache LDAP entries. + +.TP +.BR ldap_cache_seconds " (numeric, default=0)" +Specify the number of seconds to keep entries in the cache. + +.TP +.BR ldap_hostports " (string, default not set)" +Specify LDAP-specific values such as country and organization. + +.TP +.BR local_domain " (string, default no sub-domain)" +Same as the +.B \-d +option to amd. Specify the local domain name. If this option is not given +the domain name is determined from the hostname, by removing the first +component of the fully-qualified host name. + +.TP +.BR log_file " (string, default=/dev/stderr)" +Same as the +.B \-l +option to amd. Specify a file name to log amd events to. +If the string +.B /dev/stderr +is specified, amd will send its events to the standard error file descriptor. +If the string +.B syslog +is given, amd will record its events with the system logger +.BR syslogd (8). +The default syslog facility used is LOG_DAEMON. If you +wish to change it, append its name to the log file name, delimited by a +single colon. For example, if +.I logfile +is the string +.B syslog:local7 +then amd will log messages via +.IR syslog (3) +using the LOG_LOCAL7 facility (if it exists on the system). + +.TP +.BR log_options " (string, default no logging options)" +Same as the +.B \-x +option to amd. Specify any logging options for amd. Options are comma +delimited, and can be preceded by the string "no" to negate their meaning. +The "debug" logging option is only available if am-utils was configured with +--enable-debug. You can get the list of supported debugging options by +running amd \-v. Possible values are: + +.nf +\fBall\fR all messages +\fBdebug\fR debug messages +\fBerror\fR non-fatal system errors +\fBfatal\fR fatal errors +\fBinfo\fR information +\fBmap\fR map errors +\fBstats\fR additional statistical information +\fBuser\fR non-fatal user errors +\fBwarn\fR warnings +\fBwarning\fR warnings +.fi + +.TP +.BR nfs_retransmit_counter " (numeric, default=110)" +Same as the +.I counter +part of the +.BI \-t " interval.counter" +option to amd. Specifies the retransmit counter's value in +.I tenths +of seconds. + +.TP +.BR nfs_retry_interval " (numeric, default=8)" +Same as the +.I interval +part of the +.BI \-t " interval.counter" +option to amd. Specifies the interval in +.I tenths +of seconds, between NFS/RPC/UDP retries. + +.TP +.BR nis_domain " (string, default to local NIS domain name)" +Same as the +.B \-y +option to amd. Specify an alternative NIS domain from which to fetch the +NIS maps. The default is the system domain name. This option is ignored if +NIS support is not available. + +.TP +.BR normalize_hostnames " (boolean, default=no)" +Same as the +.B \-n +option to amd. If "yes", then the name refereed to by ${rhost} is +normalized relative to the host database before being used. The effect is +to translate aliases into ``official'' names. + +.TP +.BR os " (string, default to compiled in value)" +Same as the +.B \-O +option to amd. Allows you to override the compiled-in name of the operating +system. Useful when the built-in name is not desired for backward +compatibility reasons. For example, if the build in name is ``sunos5'', you +can override it to ``sos5'', and use older maps which were written with the +latter in mind. + +.TP +.BR osver " (string, default to compiled in value)" +Same as the +.B \-o +option to amd. Override the compiled-in version number of the operating +system. Useful when the built in version is not desired for backward +compatibility reasons. For example, if the build in version is ``2.5.1'', +you can override it to ``5.5.1'', and use older maps that were written with +the latter in mind. + +.TP +.BR pid_file " (string, default=/dev/stdout)" +Specify a file to store the process ID of the running daemon into. If not +specified, amd will print its process id onto the standard output. Useful +for killing amd after it had run. Note that the PID of a running amd can +also be retrieved via +.B amq +.BR \-p . +This file is used only if the print_pid option is on. + +.TP +.BR plock " (boolean, default=yes)" +Same as the +.B \-S +option to amd. +If "yes", lock the running executable pages of amd into memory. To improve +amd's performance, systems that support the +.BR plock (3) +call can lock the amd process into memory. This way there is less chance it +the operating system will schedule, page out, and swap the amd process as +needed. This improves amd's performance, at the cost of reserving the +memory used by the amd process (making it unavailable for other processes). + +.TP +.BR portmap_program " (numeric, default=300019)" +Specify an alternate Port-mapper RPC program number, other than the official +number. This is useful when running multiple amd processes. For example, +you can run another amd in "test" mode, without affecting the primary amd +process in any way. For safety reasons, the alternate program numbers that +can be specified must be in the range 300019-300029, inclusive. +.B amq +has an option +.B -P +which can be used to specify an alternate program number of an amd to +contact. In this way, amq can fully control any number of amd processes +running on the same host. + +.TP +.BR print_pid " (boolean, default=no)" +Same as the +.B \-p +option to amd. If "yes", amd will print its process ID upon starting. + +.TP +.BR print_version " (boolean, default=no)" +Same as the +.B \-v +option to amd, but the version prints and amd continues to run. If "yes", +amd will print its version information string, which includes some +configuration and compilation values. + +.TP +.BR restart_mounts " (boolean, default=no)" +Same as the +.B \-r +option to amd. If "yes" +.B amd +will scan the mount table to determine which file systems are currently +mounted. Whenever one of these would have been auto-mounted, +.B amd +inherits it. + +.TP +.BR selectors_on_default " (boolean, default=no)" +If "yes", then the /default entry of maps will be look for and process any +selectors before setting defaults for all other keys in that map. Useful +when you want to set different options for a complete map based on some +parameters. For example, you may want to better the NFS performance over +slow slip-based networks as follows: + +.nf +/defaults \\ + wire==slip-net;opts:=intr,rsize=1024,wsize=1024 \\ + wire!=slip-net;opts:=intr,rsize=8192,wsize=8192 +.fi + +.TP +.BR show_statfs_entries " (boolean), default=no)" +If "yes", then all maps which are browsable will also show the number of +entries (keys) they have when "df" runs. (This is accomplished by returning +non-zero values to the statfs(2) system call). + +.TP +.BR unmount_on_exist " (boolean), default=no)" +If "yes", then amd will attempt to unmount all file systems which it knows +about. Normally amd leaves all (esp. NFS) mounted file systems intact. +Note that amd does not know about file systems mounted before it starts up, +unless the restart_mounts option or +.B \-r +flag are used. + +.\" ************************************************************************** +.SS Parameters applicable to regular map sections + +.TP +.BR map_name " (string, must be specified)" +Name of the map where the keys are located. + +.TP +.BR tag " (string, default no tag)" +Each map entry in the configuration file can be tagged. If no tag is +specified, that map section will always be processed by amd. If it is +specified, then amd will process the map if the +.B -T +option was given to amd, and the value given to that command-line option +matches that in the map section. + +.\" ************************************************************************** +.SH EXAMPLES +Here is a real amd configuration file I use daily. +.P +.nf +# GLOBAL OPTIONS SECTION +[ global ] +normalize_hostnames = no +print_pid = no +restart_mounts = yes +auto_dir = /n +log_file = /var/log/amd +log_options = all +#debug_options = all +plock = no +selectors_on_default = yes +# config.guess picks up "sunos5" and I don't want to edit my maps yet +os = sos5 +# if you print_version after setting up "os", it will show it. +print_version = no +map_type = file +search_path = /etc/amdmaps:/usr/lib/amd:/usr/local/AMD/lib +browsable_dirs = yes + +# DEFINE AN AMD MOUNT POINT +[ /u ] +map_name = amd.u + +[ /proj ] +map_name = amd.proj + +[ /src ] +map_name = amd.src + +[ /misc ] +map_name = amd.misc + +[ /import ] +map_name = amd.import + +[ /tftpboot/.amd ] +tag = tftpboot +map_name = amd.tftpboot +.fi +.\" ************************************************************************** +.SH "SEE ALSO" +.BR amd (8), +.BR amq (8), +.BR ctl-amd (8). +.SH AUTHORS +Erez Zadok , Department of Computer Science, Columbia +University, New York, USA. +.P +Other authors and contributors to am-utils are listed in the +.B AUTHORS +file distributed with am-utils. diff --git a/scripts/amd2ldif.in b/scripts/amd2ldif.in new file mode 100755 index 0000000..6d3c28a --- /dev/null +++ b/scripts/amd2ldif.in @@ -0,0 +1,58 @@ +#!@PERL@ + +$usage=<mapfile.ldif + +mapname: name of the amd map beeing converted to ldif +base : The LDAP search base. Do not forget the quotes! + +This script should/could be used in a Makefile together +with ldif2ldbm(8C) to automagically update the ldap +databases and restart slapd whenever a master copy of +the maps have changed. Remember "cd /var/yp; make" ? +EOU + +my $fmt = "%-12s: %s\n"; +my $tfmt = "%-15s: %s\n"; +my $mapname = $ARGV[0] or die $usage; +my $base = $ARGV[1] or die $usage; +$time = time(); + +print "dn: cn=amdmap timestamp, $base\n"; +printf "$tfmt", "cn", "amdmap timestamp"; +printf "$tfmt", "objectClass", "amdmapTimestamp"; +printf "$tfmt", "amdmapTimestamp", $time; +print "\n"; + +my $line = ""; +my $done = 0; + +while () { + chomp; + if (/\s*(.+)\\\s*/) { + if ($line) { + $line .= " ".$1; + } else { + $line = $1; + } + $done = 0; + } else { + s/^\s+//g; + $line .= $_; + $done = 1; + } + if ($done) { + my @vals = split(/\s+/,$line); + my $key = shift @vals; + my $entry; + + print "dn: cn=amdmap $mapname\[$key\], $base\n"; + printf "$fmt","cn","amdmap $mapname\[$key\]"; + printf "$fmt","objectClass", "amdmap"; + printf "$fmt","amdmapName", $mapname; + printf "$fmt","amdmapKey", $key; + printf "$fmt","amdmapValue", join(' ',@vals); + print "\n"; + $line = ""; $done = 0; + } +} diff --git a/scripts/amd2sun.in b/scripts/amd2sun.in new file mode 100755 index 0000000..df69b09 --- /dev/null +++ b/scripts/amd2sun.in @@ -0,0 +1,51 @@ +#!@PERL@ +# convert amd maps to Sun automount maps +# usage: amd2sun file +# +# Package: am-utils-6.0 +# Author: "Mark D. Baushke" + +print "# file created by amd2sun +# +# DO NOT EDIT THIS FILE AT ALL +# It is automatically generated from the amd mount map - edit that instead +# +"; +while (<>) { + print, next if /^#/; + chop; + $line = $_; + while ($line =~ /\\$/) { + chop $line; + $line2 = <>; + $line2 =~ s/^\s*//; + $line .= $line2; + chop $line; + } + + next unless $line =~ /^([^\s]+)\s+(.*)$/; + + $fs = $1; $rest=$2; + + if ($fs =~ /^\/defaults/) { + ($defopts = $rest) =~ s/^.*[\s;]opts:=([^;\s]+)[;\s]*.*$/\1/; + next; + } + + $opts=$defopts; + + if ($rest =~ /opts:=([^;\s]+)[;\s]/) { + $opts = $1; + } + + $opts =~ s/,ping=[-\d]+//g; + + ($rhost = $rest) =~ s/^.*[\s;]rhost:=([^;\s]+)[;\s]*.*$/\1/; + ($rfs = $rest) =~ s/^.*[\s;]rfs:=([^;\s]+)[;\s]*.*$/\1/; + + if ($rest =~ /sublink:=([^;\s]+)[;\s]/ ) { + $rfs .= "/$1"; + } + + print "$fs -$opts $rhost:$rfs\n"; +} diff --git a/scripts/ctl-amd.in b/scripts/ctl-amd.in new file mode 100755 index 0000000..665a7dd --- /dev/null +++ b/scripts/ctl-amd.in @@ -0,0 +1,113 @@ +#!/bin/sh +# control starting, stopping, or restarting amd. +# usage: ctl-amd [start | stop | restart] +# +# Package: am-utils-6.0 +# Author: Erez Zadok + +# set path +prefix=@prefix@ +exec_prefix=@exec_prefix@ +PATH=@sbindir@:@bindir@:/usr/ucb:/usr/bin:/bin:${PATH} +export PATH + +# kill the named process(es) +killproc() +{ +# first try to get PID via an amq RPC +pid=`amq -p 2>/dev/null` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# try bsd style ps +pscmd="ps axc" +pid=`${pscmd} 2>/dev/null | grep "$1" | sed -e 's/^ *//' -e 's/ .*//'` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# try bsd44 style ps +pscmd="ps -x" +pid=`${pscmd} 2>/dev/null | grep "$1" | sed -e 's/^ *//' -e 's/ .*//'` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# try svr4 style ps +pscmd="ps -e" +pid=`${pscmd} 2>/dev/null | grep "$1" | sed -e 's/^ *//' -e 's/ .*//'` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# failed +return 1 +} + +# search for amd.conf file +CF_FILE="${prefix}/etc/amd.conf" +# any local copy of the conf file overrides the "global" one +if [ -f /etc/amd.conf ] +then + CF_FILE="/etc/amd.conf" +fi +if [ -f ${prefix}/etc/amd.conf ] +then + CF_FILE="${prefix}/etc/amd.conf" +fi +if [ -f /etc/local/amd.conf ] +then + CF_FILE="/etc/local/amd.conf" +fi + +# if have the directory /tftpboot/.amd, then add a tag to include it +CF_TAG="" +if [ -d /tftpboot/.amd ] +then + CF_TAG="-T tftpboot" +fi + +case "$1" in +'start') + # + # Start the amd automounter. + # + if [ -x @sbindir@/amd ] + then + # do not specify full path of amd so killproc() works + amd -F $CF_FILE $CF_TAG + fi + ;; + +'stop') + # prepend space to program name to ensure only amd process dies + killproc " amd" + ;; + +'restart') + # kill amd, wait for it to die, then restart + echo "killing amd..." + ctl-amd stop + wait4amd2die + if [ $? != 0 ] + then + echo "NOT restarting amd!" + else + echo "Restarting amd..." + ctl-amd start + fi + ;; + +*) + echo "Usage: @sbindir@/ctl-amd [ start | stop | restart ]" + ;; +esac diff --git a/scripts/ctl-hlfsd.in b/scripts/ctl-hlfsd.in new file mode 100755 index 0000000..a6e97f6 --- /dev/null +++ b/scripts/ctl-hlfsd.in @@ -0,0 +1,101 @@ +#!/bin/sh +# control starting, stopping, or restarting hlfsd. +# usage: ctl-hlfsd [start | stop | restart] +# +# Package: am-utils-6.0 +# Author: Erez Zadok + +# set path +prefix=@prefix@ +exec_prefix=@exec_prefix@ +PATH=@sbindir@:@bindir@:/usr/ucb:/usr/bin:/bin:${PATH} +export PATH + +# kill the named process(es) +killproc() +{ +# try bsd style ps +pscmd="ps axc" +pid=`${pscmd} 2>/dev/null | grep "$1" | sed -e 's/^ *//' -e 's/ .*//'` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# try bsd44 style ps +pscmd="ps -x" +pid=`${pscmd} 2>/dev/null | grep "$1" | sed -e 's/^ *//' -e 's/ .*//'` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# try svr4 style ps +pscmd="ps -e" +pid=`${pscmd} 2>/dev/null | grep "$1" | sed -e 's/^ *//' -e 's/ .*//'` +if test "$pid" != "" +then + kill $pid + return 0 +fi + +# failed +return 1 +} + +# locate logs directory +if [ -d /var/log ]; then + logdir="/var/log" +else + logdir="/tmp" +fi + +# locate the mail spool directory +if [ -d /var/mail/. ]; then + maildir="/var/mail" + altmaildir="/var/alt_mail" +else + maildir="/usr/spool/mail" + altmaildir="/usr/spool/alt_mail" +fi + +# locate any optional password file +if [ -f ${prefix}/etc/passwd ]; then + PASSWD_FILE="-P ${prefix}/etc/passwd" +else + PASSWD_FILE="" +fi + +case "$1" in +'start') + # + # Start the hlfsd mail redirector service + # + if [ -x @sbindir@/hlfsd -a -h $maildir ] + then + echo @sbindir@/hlfsd ${PASSWD_FILE} -a $altmaildir -x all -D fork -l $logdir/hlfsd /mail/home .mailspool + @sbindir@/hlfsd ${PASSWD_FILE} -a $altmaildir -x all -D fork -l $logdir/hlfsd /mail/home .mailspool & + fi + ;; + +'stop') + # prepend space to program name to ensure only amd process dies + killproc " hlfsd" + ;; + +'restart') + # kill hlfsd, wait for it to die, then restart + echo "killing hlfsd..." + ctl-hlfsd stop + echo "Waiting for 10 seconds..." + sleep 10 # hope that's enough + echo "Restarting hlfsd..." + ctl-hlfsd start + ;; + +*) + echo "Usage: @sbindir@/ctl-hlfsd [ start | stop | restart ]" + ;; +esac diff --git a/scripts/expn.1 b/scripts/expn.1 new file mode 100644 index 0000000..6adc6b8 --- /dev/null +++ b/scripts/expn.1 @@ -0,0 +1,1370 @@ +#!@PERL@ +'di '; +'ds 00 \\"'; +'ig 00 '; +# +# THIS PROGRAM IS ITS OWN MANUAL PAGE. INSTALL IN man & bin. +# + +# hardcoded constants, should work fine for BSD-based systems +#require 'sys/socket.ph'; # perl 4 +use Socket; # perl 5 +$AF_INET = &AF_INET; +$SOCK_STREAM = &SOCK_STREAM; +$sockaddr = 'S n a4 x8'; + +# system requirements: +# must have 'nslookup' and 'hostname' programs. + +# $Header: /home/ezk/proj/amd/GIT/cvs/am-utils/scripts/expn.1,v 1.1 1998/11/05 02:04:58 ezk Exp $ + +# TODO: +# less magic should apply to command-line addresses +# less magic should apply to local addresses +# add magic to deal with cross-domain cnames + +# Checklist: (hard addresses) +# 250 Kimmo Suominen <"|/usr/local/mh/lib/slocal -user kim"@grendel.tac.nyc.ny.us> +# harry@hofmann.cs.Berkeley.EDU -> harry@tenet (.berkeley.edu) [dead] +# bks@cs.berkeley.edu -> shiva.CS (.berkeley.edu) [dead] +# dan@tc.cornell.edu -> brown@tiberius (.tc.cornell.edu) + +############################################################################# +# +# Copyright (c) 1993 David Muir Sharnoff +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the David Muir Sharnoff. +# 4. The name of David Sharnoff may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE DAVID MUIR SHARNOFF ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL DAVID MUIR SHARNOFF BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# This copyright notice derrived from material copyrighted by the Regents +# of the University of California. +# +# Contributions accepted. +# +############################################################################# + +# overall structure: +# in an effort to not trace each address individually, but rather +# ask each server in turn a whole bunch of questions, addresses to +# be expanded are queued up. +# +# This means that all accounting w.r.t. an address must be stored in +# various arrays. Generally these arrays are indexed by the +# string "$addr *** $server" where $addr is the address to be +# expanded "foo" or maybe "foo@bar" and $server is the hostname +# of the SMTP server to contact. +# + +# important global variables: +# +# @hosts : list of servers still to be contacted +# $server : name of the current we are currently looking at +# @users = $users{@hosts[0]} : addresses to expand at this server +# $u = $users[0] : the current address being expanded +# $names{"$users[0] *** $server"} : the 'name' associated with the address +# $mxbacktrace{"$users[0] *** $server"} : record of mx expansion +# $mx_secondary{$server} : other mx relays at the same priority +# $domainify_fallback{"$users[0] *** $server"} : alternative names to try +# instead of $server if $server doesn't work +# $temporary_redirect{"$users[0] *** $server"} : when trying alternates, +# temporarily channel all tries along current path +# $giveup{$server} : do not bother expanding addresses at $server +# $verbose : -v +# $watch : -w +# $vw : -v or -w +# $debug : -d +# $valid : -a +# $levels : -1 +# S : the socket connection to $server + +$have_nslookup = 1; # we have the nslookup program +$port = 'smtp'; +$av0 = $0; +$ENV{'PATH'} .= ":/usr/etc" unless $ENV{'PATH'} =~ m,/usr/etc,; +$ENV{'PATH'} .= ":/usr/ucb" unless $ENV{'PATH'} =~ m,/usr/ucb,; +select(STDERR); + +$0 = "$av0 - running hostname"; +chop($name = `hostname || uname -n`); + +$0 = "$av0 - lookup host FQDN and IP addr"; +($hostname,$aliases,$type,$len,$thisaddr) = gethostbyname($name); + +$0 = "$av0 - parsing args"; +$usage = "Usage: $av0 [-1avwd] user[\@host] [user2[host2] ...]"; +for $a (@ARGV) { + die $usage if $a eq "-"; + while ($a =~ s/^(-.*)([1avwd])/$1/) { + eval '$'."flag_$2 += 1"; + } + next if $a eq "-"; + die $usage if $a =~ /^-/; + &expn(&parse($a,$hostname,undef,1)); +} +$verbose = $flag_v; +$watch = $flag_w; +$vw = $flag_v + $flag_w; +$debug = $flag_d; +$valid = $flag_a; +$levels = $flag_1; + +die $usage unless @hosts; +if ($valid) { + if ($valid == 1) { + $validRequirement = 0.8; + } elsif ($valid == 2) { + $validRequirement = 1.0; + } elsif ($valid == 3) { + $validRequirement = 0.9; + } else { + $validRequirement = (1 - (1/($valid-3))); + print "validRequirement = $validRequirement\n" if $debug; + } +} + +$0 = "$av0 - building local socket"; +($name,$aliases,$proto) = getprotobyname('tcp'); +($name,$aliases,$port) = getservbyname($port,'tcp') + unless $port =~ /^\d+/; +$this = pack($sockaddr, &AF_INET, 0, $thisaddr); + +HOST: +while (@hosts) { + $server = shift(@hosts); + @users = split(' ',$users{$server}); + delete $users{$server}; + + # is this server already known to be bad? + $0 = "$av0 - looking up $server"; + if ($giveup{$server}) { + &giveup('mx domainify',$giveup{$server}); + next; + } + + # do we already have an mx record for this host? + next HOST if &mxredirect($server,*users); + + # look it up, or try for an mx. + $0 = "$av0 - gethostbyname($server)"; + + ($name,$aliases,$type,$len,$thataddr) = gethostbyname($server); + # if we can't get an A record, try for an MX record. + unless($thataddr) { + &mxlookup(1,$server,"$server: could not resolve name",*users); + next HOST; + } + + # get a connection, or look for an mx + $0 = "$av0 - socket to $server"; + $that = pack($sockaddr, &AF_INET, $port, $thataddr); + socket(S, &AF_INET, &SOCK_STREAM, $proto) + || die "socket: $!"; + $0 = "$av0 - bind to $server"; + bind(S, $this) + || die "bind $hostname,0: $!"; + $0 = "$av0 - connect to $server"; + print "debug = $debug server = $server\n" if $debug > 8; + if (! connect(S, $that) || ($debug == 10 && $server =~ /relay\d.UU.NET$/i)) { + $0 = "$av0 - $server: could not connect: $!\n"; + $emsg = $!; + unless (&mxlookup(0,$server,"$server: could not connect: $!",*users)) { + &giveup('mx',"$server: Could not connect: $emsg"); + } + next HOST; + } + select((select(S),$| = 1)[0]); # don't buffer output to S + + # read the greeting + $0 = "$av0 - talking to $server"; + &alarm("greeting with $server",''); + while() { + alarm(0); + print if $watch; + if (/^(\d+)([- ])/) { + if ($1 != 220) { + $0 = "$av0 - bad numeric response from $server"; + &alarm("giving up after bad response from $server",''); + &read_response($2,$watch); + alarm(0); + print STDERR "$server: NOT 220 greeting: $_" + if ($debug || $vw); + if (&mxlookup(0,$server,"$server: did not respond with a 220 greeting",*users)) { + close(S); + next HOST; + } + } + last if ($2 eq " "); + } else { + $0 = "$av0 - bad response from $server"; + print STDERR "$server: NOT 220 greeting: $_" + if ($debug || $vw); + unless (&mxlookup(0,$server,"$server: did not respond with SMTP codes",*users)) { + &giveup('',"$server: did not talk SMTP"); + } + close(S); + next HOST; + } + &alarm("greeting with $server",''); + } + alarm(0); + + # if this causes problems, remove it + $0 = "$av0 - sending helo to $server"; + &alarm("sending helo to $server",""); + &ps("helo $hostname"); + while() { + print if $watch; + last if /^\d+ /; + } + alarm(0); + + # try the users, one by one + USER: + while(@users) { + $u = shift(@users); + $0 = "$av0 - expanding $u [\@$server]"; + + # do we already have a name for this user? + $oldname = $names{"$u *** $server"}; + + print &compact($u,$server)." ->\n" if ($verbose && ! $valid); + if ($valid) { + # + # when running with -a, we delay taking any action + # on the results of our query until we have looked + # at the complete output. @toFinal stores expansions + # that will be final if we take them. @toExpn stores + # expnansions that are not final. @isValid keeps + # track of our ability to send mail to each of the + # expansions. + # + @isValid = (); + @toFinal = (); + @toExpn = (); + } + +# ($ecode,@expansion) = &expn_vrfy($u,$server); + (@foo) = &expn_vrfy($u,$server); + ($ecode,@expansion) = @foo; + if ($ecode) { + &giveup('',$ecode,$u); + last USER; + } + + for $s (@expansion) { + $s =~ s/[\n\r]//g; + $0 = "$av0 - parsing $server: $s"; + + $skipwatch = $watch; + + if ($s =~ /^[25]51([- ]).*<(.+)>/) { + print "$s" if $watch; + print "(pretending 250$1<$2>)" if ($debug && $watch); + print "\n" if $watch; + $s = "250$1<$2>"; + $skipwatch = 0; + } + + if ($s =~ /^250([- ])(.+)/) { + print "$s\n" if $skipwatch; + ($done,$addr) = ($1,$2); + ($newhost, $newaddr, $newname) = &parse($addr,$server,$oldname, $#expansion == 0); + print "($newhost, $newaddr, $newname) = &parse($addr, $server, $oldname)\n" if $debug; + if (! $newhost) { + # no expansion is possible w/o a new server to call + if ($valid) { + push(@isValid, &validAddr($newaddr)); + push(@toFinal,$newaddr,$server,$newname); + } else { + &verbose(&final($newaddr,$server,$newname)); + } + } else { + $newmxhost = &mx($newhost,$newaddr); + print "$newmxhost = &mx($newhost)\n" + if ($debug && $newhost ne $newmxhost); + $0 = "$av0 - parsing $newaddr [@$newmxhost]"; + print "levels = $levels, level{$u *** $server} = ".$level{"$u *** $server"}."\n" if ($debug > 1); + # If the new server is the current one, + # it would have expanded things for us + # if it could have. Mx records must be + # followed to compare server names. + # We are also done if the recursion + # count has been exceeded. + if (&trhost($newmxhost) eq &trhost($server) || ($levels && $level{"$u *** $server"} >= $levels)) { + if ($valid) { + push(@isValid, &validAddr($newaddr)); + push(@toFinal,$newaddr,$newmxhost,$newname); + } else { + &verbose(&final($newaddr,$newmxhost,$newname)); + } + } else { + # more work to do... + if ($valid) { + push(@isValid, &validAddr($newaddr)); + push(@toExpn,$newmxhost,$newaddr,$newname,$level{"$u *** $server"}); + } else { + &verbose(&expn($newmxhost,$newaddr,$newname,$level{"$u *** $server"})); + } + } + } + last if ($done eq " "); + next; + } + # 550 is a known code... Should the be + # included in -a output? Might be a bug + # here. Does it matter? Can assume that + # there won't be UNKNOWN USER responses + # mixed with valid users? + if ($s =~ /^(550)([- ])/) { + if ($valid) { + print STDERR "\@$server:$u ($oldname) USER UNKNOWN\n"; + } else { + &verbose(&final($u,$server,$oldname,"USER UNKNOWN")); + } + last if ($2 eq " "); + next; + } + # 553 is a known code... + if ($s =~ /^(553)([- ])/) { + if ($valid) { + print STDERR "\@$server:$u ($oldname) USER AMBIGUOUS\n"; + } else { + &verbose(&final($u,$server,$oldname,"USER AMBIGUOUS")); + } + last if ($2 eq " "); + next; + } + # 252 is a known code... + if ($s =~ /^(252)([- ])/) { + if ($valid) { + print STDERR "\@$server:$u ($oldname) REFUSED TO VRFY\n"; + } else { + &verbose(&final($u,$server,$oldname,"REFUSED TO VRFY")); + } + last if ($2 eq " "); + next; + } + &giveup('',"$server: did not grok '$s'",$u); + last USER; + } + + if ($valid) { + # + # now we decide if we are going to take these + # expansions or roll them back. + # + $avgValid = &average(@isValid); + print "avgValid = $avgValid\n" if $debug; + if ($avgValid >= $validRequirement) { + print &compact($u,$server)." ->\n" if $verbose; + while (@toExpn) { + &verbose(&expn(splice(@toExpn,0,4))); + } + while (@toFinal) { + &verbose(&final(splice(@toFinal,0,3))); + } + } else { + print "Tossing some valid to avoid invalid ".&compact($u,$server)."\n" if ($avgValid > 0.0 && ($vw || $debug)); + print &compact($u,$server)." ->\n" if $verbose; + &verbose(&final($u,$server,$newname)); + } + } + } + + &alarm("sending 'quit' to $server",''); + $0 = "$av0 - sending 'quit' to $server"; + &ps("quit"); + while() { + print if $watch; + last if /^\d+ /; + } + close(S); + alarm(0); +} + +$0 = "$av0 - printing final results"; +print "----------\n" if $vw; +select(STDOUT); +for $f (sort @final) { + print "$f\n"; +} +unlink("/tmp/expn$$"); +exit(0); + + +# abandon all attempts deliver to $server +# register the current addresses as the final ones +sub giveup +{ + local($redirect_okay,$reason,$user) = @_; + local($us,@so,$nh,@remaining_users); + local($pk,$file,$line); + ($pk, $file, $line) = caller; + + $0 = "$av0 - giving up on $server: $reason"; + # + # add back a user if we gave up in the middle + # + push(@users,$user) if $user; + # + # don't bother with this system anymore + # + unless ($giveup{$server}) { + $giveup{$server} = $reason; + print STDERR "$reason\n"; + } + print "Giveup at $file:$line!!! redirect okay = $redirect_okay; $reason\n" if $debug; + # + # Wait! + # Before giving up, see if there is a chance that + # there is another host to redirect to! + # (Kids, don't do this at home! Hacking is a dangerous + # crime and you could end up behind bars.) + # + for $u (@users) { + if ($redirect_okay =~ /\bmx\b/) { + next if &try_fallback('mx',$u,*server, + *mx_secondary, + *already_mx_fellback); + } + if ($redirect_okay =~ /\bdomainify\b/) { + next if &try_fallback('domainify',$u,*server, + *domainify_fallback, + *already_domainify_fellback); + } + push(@remaining_users,$u); + } + @users = @remaining_users; + for $u (@users) { + print &compact($u,$server)." ->\n" if ($verbose && $valid && $u); + &verbose(&final($u,$server,$names{"$u *** $server"},$reason)); + } +} +# +# This routine is used only within &giveup. It checks to +# see if we really have to giveup or if there is a second +# chance because we did something before that can be +# backtracked. +# +# %fallback{"$user *** $host"} tracks what is able to fallback +# %fellback{"$user *** $host"} tracks what has fallen back +# +# If there is a valid backtrack, then queue up the new possibility +# +sub try_fallback +{ + local($method,$user,*host,*fall_table,*fellback) = @_; + local($us,$fallhost,$oldhost,$ft,$i); + + if ($debug > 8) { + print "Fallback table $method:\n"; + for $i (sort keys %fall_table) { + print "\t'$i'\t\t'$fall_table{$i}'\n"; + } + print "Fellback table $method:\n"; + for $i (sort keys %fellback) { + print "\t'$i'\t\t'$fellback{$i}'\n"; + } + print "U: $user H: $host\n"; + } + + $us = "$user *** $host"; + if (defined $fellback{$us}) { + # + # Undo a previous fallback so that we can try again + # Nested fallbacks are avoided because they could + # lead to infinite loops + # + $fallhost = $fellback{$us}; + print "Already $method fell back from $us -> \n" if $debug; + $us = "$user *** $fallhost"; + $oldhost = $fallhost; + } elsif (($method eq 'mx') && (defined $mxbacktrace{$us}) && (defined $mx_secondary{$mxbacktrace{$us}})) { + print "Fallback an MX expansion $us -> \n" if $debug; + $oldhost = $mxbacktrace{$us}; + } else { + print "Oldhost($host, $us) = " if $debug; + $oldhost = $host; + } + print "$oldhost\n" if $debug; + if (((defined $fall_table{$us}) && ($ft = $us)) || ((defined $fall_table{$oldhost}) && ($ft = $oldhost))) { + print "$method Fallback = ".$fall_table{$ft}."\n" if $debug; + local(@so,$newhost); + @so = split(' ',$fall_table{$ft}); + $newhost = shift(@so); + print "Falling back ($method) $us -> $newhost (from $oldhost)\n" if $debug; + if ($method eq 'mx') { + if (! defined ($mxbacktrace{"$user *** $newhost"})) { + if (defined $mxbacktrace{"$user *** $oldhost"}) { + print "resetting oldhost $oldhost to the original: " if $debug; + $oldhost = $mxbacktrace{"$user *** $oldhost"}; + print "$oldhost\n" if $debug; + } + $mxbacktrace{"$user *** $newhost"} = $oldhost; + print "mxbacktrace $user *** $newhost -> $oldhost\n" if $debug; + } + $mx{&trhost($oldhost)} = $newhost; + } else { + $temporary_redirect{$us} = $newhost; + } + if (@so) { + print "Can still $method $us: @so\n" if $debug; + $fall_table{$ft} = join(' ',@so); + } else { + print "No more fallbacks for $us\n" if $debug; + delete $fall_table{$ft}; + } + if (defined $create_host_backtrack{$us}) { + $create_host_backtrack{"$user *** $newhost"} + = $create_host_backtrack{$us}; + } + $fellback{"$user *** $newhost"} = $oldhost; + &expn($newhost,$user,$names{$us},$level{$us}); + return 1; + } + delete $temporary_redirect{$us}; + $host = $oldhost; + return 0; +} +# return 1 if you could send mail to the address as is. +sub validAddr +{ + local($addr) = @_; + $res = &do_validAddr($addr); + print "validAddr($addr) = $res\n" if $debug; + $res; +} +sub do_validAddr +{ + local($addr) = @_; + local($urx) = "[-A-Za-z_.0-9+]+"; + + # \u + return 0 if ($addr =~ /^\\/); + # ?@h + return 1 if ($addr =~ /.\@$urx$/); + # @h:? + return 1 if ($addr =~ /^\@$urx\:./); + # h!u + return 1 if ($addr =~ /^$urx!./); + # u + return 1 if ($addr =~ /^$urx$/); + # ? + print "validAddr($addr) = ???\n" if $debug; + return 0; +} +# Some systems use expn and vrfy interchangeably. Some only +# implement one or the other. Some check expn against mailing +# lists and vrfy against users. It doesn't appear to be +# consistent. +# +# So, what do we do? We try everything! +# +# +# Ranking of result codes: good: 250, 251/551, 252, 550, anything else +# +# Ranking of inputs: best: user@host.domain, okay: user +# +# Return value: $error_string, @responses_from_server +sub expn_vrfy +{ + local($u,$server) = @_; + local(@c) = ('expn', 'vrfy'); + local(@try_u) = $u; + local(@ret,$code); + + if (($u =~ /(.+)@(.+)/) && (&trhost($2) eq &trhost($server))) { + push(@try_u,$1); + } + + TRY: + for $c (@c) { + for $try_u (@try_u) { + &alarm("${c}'ing $try_u on $server",'',$u); + &ps("$c $try_u"); + alarm(0); + $s = ; + if ($s eq '') { + return "$server: lost connection"; + } + if ($s !~ /^(\d+)([- ])/) { + return "$server: garbled reply to '$c $try_u'"; + } + if ($1 == 250) { + $code = 250; + @ret = ("",$s); + push(@ret,&read_response($2,$debug)); + return (@ret); + } + if ($1 == 551 || $1 == 251) { + $code = $1; + @ret = ("",$s); + push(@ret,&read_response($2,$debug)); + next; + } + if ($1 == 252 && ($code == 0 || $code == 550)) { + $code = 252; + @ret = ("",$s); + push(@ret,&read_response($2,$watch)); + next; + } + if ($1 == 550 && $code == 0) { + $code = 550; + @ret = ("",$s); + push(@ret,&read_response($2,$watch)); + next; + } + &read_response($2,$watch); + } + } + return "$server: expn/vrfy not implemented" unless @ret; + return @ret; +} +# sometimes the old parse routine (now parse2) didn't +# reject funky addresses. +sub parse +{ + local($oldaddr,$server,$oldname,$one_to_one) = @_; + local($newhost, $newaddr, $newname, $um) = &parse2($oldaddr,$server,$oldname,$one_to_one); + if ($newaddr =~ m,^["/],) { + return (undef, $oldaddr, $newname) if $valid; + return (undef, $um, $newname); + } + return ($newhost, $newaddr, $newname); +} + +# returns ($new_smtp_server,$new_address,$new_name) +# given a response from a SMTP server ($newaddr), the +# current host ($server), the old "name" and a flag that +# indicates if it is being called during the initial +# command line parsing ($parsing_args) +sub parse2 +{ + local($newaddr,$context_host,$old_name,$parsing_args) = @_; + local(@names) = $old_name; + local($urx) = "[-A-Za-z_.0-9+]+"; + local($unmangle); + + # + # first, separate out the address part. + # + + # + # [NAME] + # [NAME] <[(NAME)] ADDR + # ADDR [(NAME)] + # (NAME) ADDR + # [(NAME)] + # + if ($newaddr =~ /^\<(.*)\>$/) { + print "\n" if $debug; + ($newaddr) = &trim($1); + print "na = $newaddr\n" if $debug; + } + if ($newaddr =~ /^([^\<\>]*)\<([^\<\>]*)\>([^\<\>]*)$/) { + # address has a < > pair in it. + print "N:$1 N:$3\n" if $debug; + ($newaddr) = &trim($2); + unshift(@names, &trim($3,$1)); + print "na = $newaddr\n" if $debug; + } + if ($newaddr =~ /^([^\(\)]*)\(([^\(\)]*)\)([^\(\)]*)$/) { + # address has a ( ) pair in it. + print "A:$1 (N:$2) A:$3\n" if $debug; + unshift(@names,&trim($2)); + local($f,$l) = (&trim($1),&trim($3)); + if (($f && $l) || !($f || $l)) { + # address looks like: + # foo (bar) baz or (bar) + # not allowed! + print STDERR "Could not parse $newaddr\n" if $vw; + return(undef,$newaddr,&firstname(@names)); + } + $newaddr = $f if $f; + $newaddr = $l if $l; + print "newaddr now = $newaddr\n" if $debug; + } + # + # @foo:bar + # j%k@l + # a@b + # b!a + # a + # + $unmangle = $newaddr; + if ($newaddr =~ /^\@($urx)\:(.+)$/) { + print "(\@:)" if $debug; + # this is a bit of a cheat, but it seems necessary + return (&domainify($1,$context_host,$2),$2,&firstname(@names),$unmangle); + } + if ($newaddr =~ /^(.+)\@($urx)$/) { + print "(\@)" if $debug; + return (&domainify($2,$context_host,$newaddr),$newaddr,&firstname(@names),$unmangle); + } + if ($parsing_args) { + if ($newaddr =~ /^($urx)\!(.+)$/) { + return (&domainify($1,$context_host,$newaddr),$newaddr,&firstname(@names),$unmangle); + } + if ($newaddr =~ /^($urx)$/) { + return ($context_host,$newaddr,&firstname(@names),$unmangle); + } + print STDERR "Could not parse $newaddr\n"; + } + print "(?)" if $debug; + return(undef,$newaddr,&firstname(@names),$unmangle); +} +# return $u (@$server) unless $u includes reference to $server +sub compact +{ + local($u, $server) = @_; + local($se) = $server; + local($sp); + $se =~ s/(\W)/\\$1/g; + $sp = " (\@$server)"; + if ($u !~ /$se/i) { + return "$u$sp"; + } + return $u; +} +# remove empty (spaces don't count) members from an array +sub trim +{ + local(@v) = @_; + local($v,@r); + for $v (@v) { + $v =~ s/^\s+//; + $v =~ s/\s+$//; + push(@r,$v) if ($v =~ /\S/); + } + return(@r); +} +# using the host part of an address, and the server name, add the +# servers' domain to the address if it doesn't already have a +# domain. Since this sometimes fails, save a back reference so +# it can be unrolled. +sub domainify +{ + local($host,$domain_host,$u) = @_; + local($domain,$newhost); + + # cut of trailing dots + $host =~ s/\.$//; + $domain_host =~ s/\.$//; + + if ($domain_host !~ /\./) { + # + # domain host isn't, keep $host whatever it is + # + print "domainify($host,$domain_host) = $host\n" if $debug; + return $host; + } + + # + # There are several weird situtations that need to be + # accounted for. They have to do with domain relay hosts. + # + # Examples: + # host server "right answer" + # + # shiva.cs cs.berkeley.edu shiva.cs.berkeley.edu + # shiva cs.berkeley.edu shiva.cs.berekley.edu + # cumulus reed.edu @reed.edu:cumulus.uucp + # tiberius tc.cornell.edu tiberius.tc.cornell.edu + # + # The first try must always be to cut the domain part out of + # the server and tack it onto the host. + # + # A reasonable second try is to tack the whole server part onto + # the host and for each possible repeated element, eliminate + # just that part. + # + # These extra "guesses" get put into the %domainify_fallback + # array. They will be used to give addresses a second chance + # in the &giveup routine + # + + local(%fallback); + + local($long); + $long = "$host $domain_host"; + $long =~ tr/A-Z/a-z/; + print "long = $long\n" if $debug; + if ($long =~ s/^([^ ]+\.)([^ ]+) \2(\.[^ ]+\.[^ ]+)/$1$2$3/) { + # matches shiva.cs cs.berkeley.edu and returns shiva.cs.berkeley.edu + print "condensed fallback $host $domain_host -> $long\n" if $debug; + $fallback{$long} = 9; + } + + local($fh); + $fh = $domain_host; + while ($fh =~ /\./) { + print "FALLBACK $host.$fh = 1\n" if $debug > 7; + $fallback{"$host.$fh"} = 1; + $fh =~ s/^[^\.]+\.//; + } + + $fallback{"$host.$domain_host"} = 2; + + ($domain = $domain_host) =~ s/^[^\.]+//; + $fallback{"$host$domain"} = 6 + if ($domain =~ /\./); + + if ($host =~ /\./) { + # + # Host is already okay, but let's look for multiple + # interpretations + # + print "domainify($host,$domain_host) = $host\n" if $debug; + delete $fallback{$host}; + $domainify_fallback{"$u *** $host"} = join(' ',sort {$fallback{$b} <=> $fallback{$a};} keys %fallback) if %fallback; + return $host; + } + + $domain = ".$domain_host" + if ($domain !~ /\..*\./); + $newhost = "$host$domain"; + + $create_host_backtrack{"$u *** $newhost"} = $domain_host; + print "domainify($host,$domain_host) = $newhost\n" if $debug; + delete $fallback{$newhost}; + $domainify_fallback{"$u *** $newhost"} = join(' ',sort {$fallback{$b} <=> $fallback{$a};} keys %fallback) if %fallback; + if ($debug) { + print "fallback = "; + print $domainify_fallback{"$u *** $newhost"} + if defined($domainify_fallback{"$u *** $newhost"}); + print "\n"; + } + return $newhost; +} +# return the first non-empty element of an array +sub firstname +{ + local(@names) = @_; + local($n); + while(@names) { + $n = shift(@names); + return $n if $n =~ /\S/; + } + return undef; +} +# queue up more addresses to expand +sub expn +{ + local($host,$addr,$name,$level) = @_; + if ($host) { + $host = &trhost($host); + + if (($debug > 3) || (defined $giveup{$host})) { + unshift(@hosts,$host) unless $users{$host}; + } else { + push(@hosts,$host) unless $users{$host}; + } + $users{$host} .= " $addr"; + $names{"$addr *** $host"} = $name; + $level{"$addr *** $host"} = $level + 1; + print "expn($host,$addr,$name)\n" if $debug; + return "\t$addr\n"; + } else { + return &final($addr,'NONE',$name); + } +} +# compute the numerical average value of an array +sub average +{ + local(@e) = @_; + return 0 unless @e; + local($e,$sum); + for $e (@e) { + $sum += $e; + } + $sum / @e; +} +# print to the server (also to stdout, if -w) +sub ps +{ + local($p) = @_; + print ">>> $p\n" if $watch; + print S "$p\n"; +} +# return case-adjusted name for a host (for comparison purposes) +sub trhost +{ + # treat foo.bar as an alias for Foo.BAR + local($host) = @_; + local($trhost) = $host; + $trhost =~ tr/A-Z/a-z/; + if ($trhost{$trhost}) { + $host = $trhost{$trhost}; + } else { + $trhost{$trhost} = $host; + } + $trhost{$trhost}; +} +# re-queue users if an mx record dictates a redirect +# don't allow a user to be redirected more than once +sub mxredirect +{ + local($server,*users) = @_; + local($u,$nserver,@still_there); + + $nserver = &mx($server); + + if (&trhost($nserver) ne &trhost($server)) { + $0 = "$av0 - mx redirect $server -> $nserver\n"; + for $u (@users) { + if (defined $mxbacktrace{"$u *** $nserver"}) { + push(@still_there,$u); + } else { + $mxbacktrace{"$u *** $nserver"} = $server; + print "mxbacktrace{$u *** $nserver} = $server\n" + if ($debug > 1); + &expn($nserver,$u,$names{"$u *** $server"}); + } + } + @users = @still_there; + if (! @users) { + return $nserver; + } else { + return undef; + } + } + return undef; +} +# follow mx records, return a hostname +# also follow temporary redirections comming from &domainify and +# &mxlookup +sub mx +{ + local($h,$u) = @_; + + for (;;) { + if (defined $mx{&trhost($h)} && $h ne $mx{&trhost($h)}) { + $0 = "$av0 - mx expand $h"; + $h = $mx{&trhost($h)}; + return $h; + } + if ($u) { + if (defined $temporary_redirect{"$u *** $h"}) { + $0 = "$av0 - internal redirect $h"; + print "Temporary redirect taken $u *** $h -> " if $debug; + $h = $temporary_redirect{"$u *** $h"}; + print "$h\n" if $debug; + next; + } + $htr = &trhost($h); + if (defined $temporary_redirect{"$u *** $htr"}) { + $0 = "$av0 - internal redirect $h"; + print "temporary redirect taken $u *** $h -> " if $debug; + $h = $temporary_redirect{"$u *** $htr"}; + print "$h\n" if $debug; + next; + } + } + return $h; + } +} +# look up mx records with the name server. +# re-queue expansion requests if possible +# optionally give up on this host. +sub mxlookup +{ + local($lastchance,$server,$giveup,*users) = @_; + local(*T); + local(*NSLOOKUP); + local($nh, $pref,$cpref); + local($o0) = $0; + local($nserver); + local($name,$aliases,$type,$len,$thataddr); + local(%fallback); + + return 1 if &mxredirect($server,*users); + + if ((defined $mx{$server}) || (! $have_nslookup)) { + return 0 unless $lastchance; + &giveup('mx domainify',$giveup); + return 0; + } + + $0 = "$av0 - nslookup of $server"; + open(T,">/tmp/expn$$") || die "open > /tmp/expn$$: $!\n"; + print T "set querytype=MX\n"; + print T "$server\n"; + close(T); + $cpref = 1.0E12; + undef $nserver; + open(NSLOOKUP,"nslookup < /tmp/expn$$ 2>&1 |") || die "open nslookup: $!"; + while() { + print if ($debug > 2); + if (/mail exchanger = ([-A-Za-z_.0-9+]+)/) { + $nh = $1; + if (/preference = (\d+)/) { + $pref = $1; + if ($pref < $cpref) { + $nserver = $nh; + $cpref = $pref; + } elsif ($pref) { + $fallback{$pref} .= " $nh"; + } + } + } + if (/Non-existent domain/) { + # + # These addresss are hosed. Kaput! Dead! + # However, if we created the address in the + # first place then there is a chance of + # salvation. + # + 1 while(); + close(NSLOOKUP); + return 0 unless $lastchance; + &giveup('domainify',"$server: Non-existent domain",undef,1); + return 0; + } + + } + close(NSLOOKUP); + unlink("/tmp/expn$$"); + unless ($nserver) { + $0 = "$o0 - finished mxlookup"; + return 0 unless $lastchance; + &giveup('mx domainify',"$server: Could not resolve address"); + return 0; + } + + # provide fallbacks in case $nserver doesn't work out + if (defined $fallback{$cpref}) { + $mx_secondary{$server} = $fallback{$cpref}; + } + + $0 = "$av0 - gethostbyname($nserver)"; + ($name,$aliases,$type,$len,$thataddr) = gethostbyname($nserver); + + unless ($thataddr) { + $0 = $o0; + return 0 unless $lastchance; + &giveup('mx domainify',"$nserver: could not resolve address"); + return 0; + } + print "MX($server) = $nserver\n" if $debug; + print "$server -> $nserver\n" if $vw && !$debug; + $mx{&trhost($server)} = $nserver; + # redeploy the users + unless (&mxredirect($server,*users)) { + return 0 unless $lastchance; + &giveup('mx domainify',"$nserver: only one level of mx redirect allowed"); + return 0; + } + $0 = "$o0 - finished mxlookup"; + return 1; +} +# if mx expansion did not help to resolve an address +# (ie: foo@bar became @baz:foo@bar, then undo the +# expansion). +# this is only used by &final +sub mxunroll +{ + local(*host,*addr) = @_; + local($r) = 0; + print "looking for mxbacktrace{$addr *** $host}\n" + if ($debug > 1); + while (defined $mxbacktrace{"$addr *** $host"}) { + print "Unrolling MX expnasion: \@$host:$addr -> " + if ($debug || $verbose); + $host = $mxbacktrace{"$addr *** $host"}; + print "\@$host:$addr\n" + if ($debug || $verbose); + $r = 1; + } + return 1 if $r; + $addr = "\@$host:$addr" + if ($host =~ /\./); + return 0; +} +# register a completed expnasion. Make the final address as +# simple as possible. +sub final +{ + local($addr,$host,$name,$error) = @_; + local($he); + local($hb,$hr); + local($au,$ah); + + if ($error =~ /Non-existent domain/) { + # + # If we created the domain, then let's undo the + # damage... + # + if (defined $create_host_backtrack{"$addr *** $host"}) { + while (defined $create_host_backtrack{"$addr *** $host"}) { + print "Un&domainifying($host) = " if $debug; + $host = $create_host_backtrack{"$addr *** $host"}; + print "$host\n" if $debug; + } + $error = "$host: could not locate"; + } else { + # + # If we only want valid addresses, toss out + # bad host names. + # + if ($valid) { + print STDERR "\@$host:$addr ($name) Non-existent domain\n"; + return ""; + } + } + } + + MXUNWIND: { + $0 = "$av0 - final parsing of \@$host:$addr"; + ($he = $host) =~ s/(\W)/\\$1/g; + if ($addr !~ /@/) { + # addr does not contain any host + $addr = "$addr@$host"; + } elsif ($addr !~ /$he/i) { + # if host part really something else, use the something + # else. + if ($addr =~ m/(.*)\@([^\@]+)$/) { + ($au,$ah) = ($1,$2); + print "au = $au ah = $ah\n" if $debug; + if (defined $temporary_redirect{"$addr *** $ah"}) { + $addr = "$au\@".$temporary_redirect{"$addr *** $ah"}; + print "Rewrite! to $addr\n" if $debug; + next MXUNWIND; + } + } + # addr does not contain full host + if ($valid) { + if ($host =~ /^([^\.]+)(\..+)$/) { + # host part has a . in it - foo.bar + ($hb, $hr) = ($1, $2); + if ($addr =~ /\@([^\.\@]+)$/ && ($1 eq $hb)) { + # addr part has not . + # and matches beginning of + # host part -- tack on a + # domain name. + $addr .= $hr; + } else { + &mxunroll(*host,*addr) + && redo MXUNWIND; + } + } else { + &mxunroll(*host,*addr) + && redo MXUNWIND; + } + } else { + $addr = "${addr}[\@$host]" + if ($host =~ /\./); + } + } + } + $name = "$name " if $name; + $error = " $error" if $error; + if ($valid) { + push(@final,"$name<$addr>"); + } else { + push(@final,"$name<$addr>$error"); + } + "\t$name<$addr>$error\n"; +} + +sub alarm +{ + local($alarm_action,$alarm_redirect,$alarm_user) = @_; + alarm(3600); + $SIG{ALRM} = 'handle_alarm'; +} +# this involves one great big ugly hack. +# the "next HOST" unwinds the stack! +sub handle_alarm +{ + &giveup($alarm_redirect,"Timed out during $alarm_action",$alarm_user); + next HOST; +} + +# read the rest of the current smtp daemon's response (and toss it away) +sub read_response +{ + local($done,$watch) = @_; + local(@resp); + print $s if $watch; + while(($done eq "-") && ($s = ) && ($s =~ /^\d+([- ])/)) { + print $s if $watch; + $done = $1; + push(@resp,$s); + } + return @resp; +} +# print args if verbose. Return them in any case +sub verbose +{ + local(@tp) = @_; + print "@tp" if $verbose; +} +# to pass perl -w: +@tp; +$flag_a; +$flag_d; +$flag_1; +%already_domainify_fellback; +%already_mx_fellback; +&handle_alarm; +################### BEGIN PERL/TROFF TRANSITION +.00 ; + +'di +.nr nl 0-1 +.nr % 0 +.\\"'; __END__ +.\" ############## END PERL/TROFF TRANSITION +.TH EXPN 1 "March 11, 1993" +.AT 3 +.SH NAME +expn \- recursively expand mail aliases +.SH SYNOPSIS +.B expn +.RI [ -a ] +.RI [ -v ] +.RI [ -w ] +.RI [ -d ] +.RI [ -1 ] +.IR user [@ hostname ] +.RI [ user [@ hostname ]]... +.SH DESCRIPTION +.B expn +will use the SMTP +.B expn +and +.B vrfy +commands to expand mail aliases. +It will first look up the addresses you provide on the command line. +If those expand into addresses on other systems, it will +connect to the other systems and expand again. It will keep +doing this until no further expansion is possible. +.SH OPTIONS +The default output of +.B expn +can contain many lines which are not valid +email addresses. With the +.I -aa +flag, only expansions that result in legal addresses +are used. Since many mailing lists have an illegal +address or two, the single +.IR -a , +address, flag specifies that a few illegal addresses can +be mixed into the results. More +.I -a +flags vary the ratio. Read the source to track down +the formula. With the +.I -a +option, you should be able to construct a new mailing +list out of an existing one. +.LP +If you wish to limit the number of levels deep that +.B expn +will recurse as it traces addresses, use the +.I -1 +option. For each +.I -1 +another level will be traversed. So, +.I -111 +will traverse no more than three levels deep. +.LP +The normal mode of operation for +.B expn +is to do all of its work silently. +The following options make it more verbose. +It is not necessary to make it verbose to see what it is +doing because as it works, it changes its +.BR argv [0] +variable to reflect its current activity. +To see how it is expanding things, the +.IR -v , +verbose, flag will cause +.B expn +to show each address before +and after translation as it works. +The +.IR -w , +watch, flag will cause +.B expn +to show you its conversations with the mail daemons. +Finally, the +.IR -d , +debug, flag will expose many of the inner workings so that +it is possible to eliminate bugs. +.SH ENVIRONMENT +No enviroment variables are used. +.SH FILES +.PD 0 +.B /tmp/expn$$ +.B temporary file used as input to +.BR nslookup . +.SH SEE ALSO +.BR aliases (5), +.BR sendmail (8), +.BR nslookup (8), +RFC 823, and RFC 1123. +.SH BUGS +Not all mail daemons will implement +.B expn +or +.BR vrfy . +It is not possible to verify addresses that are served +by such daemons. +.LP +When attempting to connect to a system to verify an address, +.B expn +only tries one IP address. Most mail daemons +will try harder. +.LP +It is assumed that you are running domain names and that +the +.BR nslookup (8) +program is available. If not, +.B expn +will not be able to verify many addresses. It will also pause +for a long time unless you change the code where it says +.I $have_nslookup = 1 +to read +.I $have_nslookup = +.IR 0 . +.LP +Lastly, +.B expn +does not handle every valid address. If you have an example, +please submit a bug report. +.SH CREDITS +In 1986 or so, Jon Broome wrote a program of the same name +that did about the same thing. It has since suffered bit rot +and Jon Broome has dropped off the face of the earth! +(Jon, if you are out there, drop me a line) +.SH AVAILABILITY +The latest version of +.B expn +is available through anonymous ftp at +.IR ftp://ftp.idiom.com/pub/muir-programs/expn . +.SH AUTHOR +.I David Muir Sharnoff\ \ \ \ diff --git a/scripts/expn.in b/scripts/expn.in new file mode 100755 index 0000000..0fa018e --- /dev/null +++ b/scripts/expn.in @@ -0,0 +1,1370 @@ +#!@PERL@ +'di '; +'ds 00 \\"'; +'ig 00 '; +# +# THIS PROGRAM IS ITS OWN MANUAL PAGE. INSTALL IN man & bin. +# + +# hardcoded constants, should work fine for BSD-based systems +#require 'sys/socket.ph'; # perl 4 +use Socket; # perl 5 +$AF_INET = &AF_INET; +$SOCK_STREAM = &SOCK_STREAM; +$sockaddr = 'S n a4 x8'; + +# system requirements: +# must have 'nslookup' and 'hostname' programs. + +# $Header: /home/ezk/proj/amd/GIT/cvs/am-utils/scripts/expn.in,v 1.1 1998/11/05 02:04:57 ezk Exp $ + +# TODO: +# less magic should apply to command-line addresses +# less magic should apply to local addresses +# add magic to deal with cross-domain cnames + +# Checklist: (hard addresses) +# 250 Kimmo Suominen <"|/usr/local/mh/lib/slocal -user kim"@grendel.tac.nyc.ny.us> +# harry@hofmann.cs.Berkeley.EDU -> harry@tenet (.berkeley.edu) [dead] +# bks@cs.berkeley.edu -> shiva.CS (.berkeley.edu) [dead] +# dan@tc.cornell.edu -> brown@tiberius (.tc.cornell.edu) + +############################################################################# +# +# Copyright (c) 1993 David Muir Sharnoff +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the David Muir Sharnoff. +# 4. The name of David Sharnoff may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE DAVID MUIR SHARNOFF ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL DAVID MUIR SHARNOFF BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# This copyright notice derrived from material copyrighted by the Regents +# of the University of California. +# +# Contributions accepted. +# +############################################################################# + +# overall structure: +# in an effort to not trace each address individually, but rather +# ask each server in turn a whole bunch of questions, addresses to +# be expanded are queued up. +# +# This means that all accounting w.r.t. an address must be stored in +# various arrays. Generally these arrays are indexed by the +# string "$addr *** $server" where $addr is the address to be +# expanded "foo" or maybe "foo@bar" and $server is the hostname +# of the SMTP server to contact. +# + +# important global variables: +# +# @hosts : list of servers still to be contacted +# $server : name of the current we are currently looking at +# @users = $users{@hosts[0]} : addresses to expand at this server +# $u = $users[0] : the current address being expanded +# $names{"$users[0] *** $server"} : the 'name' associated with the address +# $mxbacktrace{"$users[0] *** $server"} : record of mx expansion +# $mx_secondary{$server} : other mx relays at the same priority +# $domainify_fallback{"$users[0] *** $server"} : alternative names to try +# instead of $server if $server doesn't work +# $temporary_redirect{"$users[0] *** $server"} : when trying alternates, +# temporarily channel all tries along current path +# $giveup{$server} : do not bother expanding addresses at $server +# $verbose : -v +# $watch : -w +# $vw : -v or -w +# $debug : -d +# $valid : -a +# $levels : -1 +# S : the socket connection to $server + +$have_nslookup = 1; # we have the nslookup program +$port = 'smtp'; +$av0 = $0; +$ENV{'PATH'} .= ":/usr/etc" unless $ENV{'PATH'} =~ m,/usr/etc,; +$ENV{'PATH'} .= ":/usr/ucb" unless $ENV{'PATH'} =~ m,/usr/ucb,; +select(STDERR); + +$0 = "$av0 - running hostname"; +chop($name = `hostname || uname -n`); + +$0 = "$av0 - lookup host FQDN and IP addr"; +($hostname,$aliases,$type,$len,$thisaddr) = gethostbyname($name); + +$0 = "$av0 - parsing args"; +$usage = "Usage: $av0 [-1avwd] user[\@host] [user2[host2] ...]"; +for $a (@ARGV) { + die $usage if $a eq "-"; + while ($a =~ s/^(-.*)([1avwd])/$1/) { + eval '$'."flag_$2 += 1"; + } + next if $a eq "-"; + die $usage if $a =~ /^-/; + &expn(&parse($a,$hostname,undef,1)); +} +$verbose = $flag_v; +$watch = $flag_w; +$vw = $flag_v + $flag_w; +$debug = $flag_d; +$valid = $flag_a; +$levels = $flag_1; + +die $usage unless @hosts; +if ($valid) { + if ($valid == 1) { + $validRequirement = 0.8; + } elsif ($valid == 2) { + $validRequirement = 1.0; + } elsif ($valid == 3) { + $validRequirement = 0.9; + } else { + $validRequirement = (1 - (1/($valid-3))); + print "validRequirement = $validRequirement\n" if $debug; + } +} + +$0 = "$av0 - building local socket"; +($name,$aliases,$proto) = getprotobyname('tcp'); +($name,$aliases,$port) = getservbyname($port,'tcp') + unless $port =~ /^\d+/; +$this = pack($sockaddr, &AF_INET, 0, $thisaddr); + +HOST: +while (@hosts) { + $server = shift(@hosts); + @users = split(' ',$users{$server}); + delete $users{$server}; + + # is this server already known to be bad? + $0 = "$av0 - looking up $server"; + if ($giveup{$server}) { + &giveup('mx domainify',$giveup{$server}); + next; + } + + # do we already have an mx record for this host? + next HOST if &mxredirect($server,*users); + + # look it up, or try for an mx. + $0 = "$av0 - gethostbyname($server)"; + + ($name,$aliases,$type,$len,$thataddr) = gethostbyname($server); + # if we can't get an A record, try for an MX record. + unless($thataddr) { + &mxlookup(1,$server,"$server: could not resolve name",*users); + next HOST; + } + + # get a connection, or look for an mx + $0 = "$av0 - socket to $server"; + $that = pack($sockaddr, &AF_INET, $port, $thataddr); + socket(S, &AF_INET, &SOCK_STREAM, $proto) + || die "socket: $!"; + $0 = "$av0 - bind to $server"; + bind(S, $this) + || die "bind $hostname,0: $!"; + $0 = "$av0 - connect to $server"; + print "debug = $debug server = $server\n" if $debug > 8; + if (! connect(S, $that) || ($debug == 10 && $server =~ /relay\d.UU.NET$/i)) { + $0 = "$av0 - $server: could not connect: $!\n"; + $emsg = $!; + unless (&mxlookup(0,$server,"$server: could not connect: $!",*users)) { + &giveup('mx',"$server: Could not connect: $emsg"); + } + next HOST; + } + select((select(S),$| = 1)[0]); # don't buffer output to S + + # read the greeting + $0 = "$av0 - talking to $server"; + &alarm("greeting with $server",''); + while() { + alarm(0); + print if $watch; + if (/^(\d+)([- ])/) { + if ($1 != 220) { + $0 = "$av0 - bad numeric response from $server"; + &alarm("giving up after bad response from $server",''); + &read_response($2,$watch); + alarm(0); + print STDERR "$server: NOT 220 greeting: $_" + if ($debug || $vw); + if (&mxlookup(0,$server,"$server: did not respond with a 220 greeting",*users)) { + close(S); + next HOST; + } + } + last if ($2 eq " "); + } else { + $0 = "$av0 - bad response from $server"; + print STDERR "$server: NOT 220 greeting: $_" + if ($debug || $vw); + unless (&mxlookup(0,$server,"$server: did not respond with SMTP codes",*users)) { + &giveup('',"$server: did not talk SMTP"); + } + close(S); + next HOST; + } + &alarm("greeting with $server",''); + } + alarm(0); + + # if this causes problems, remove it + $0 = "$av0 - sending helo to $server"; + &alarm("sending helo to $server",""); + &ps("helo $hostname"); + while() { + print if $watch; + last if /^\d+ /; + } + alarm(0); + + # try the users, one by one + USER: + while(@users) { + $u = shift(@users); + $0 = "$av0 - expanding $u [\@$server]"; + + # do we already have a name for this user? + $oldname = $names{"$u *** $server"}; + + print &compact($u,$server)." ->\n" if ($verbose && ! $valid); + if ($valid) { + # + # when running with -a, we delay taking any action + # on the results of our query until we have looked + # at the complete output. @toFinal stores expansions + # that will be final if we take them. @toExpn stores + # expnansions that are not final. @isValid keeps + # track of our ability to send mail to each of the + # expansions. + # + @isValid = (); + @toFinal = (); + @toExpn = (); + } + +# ($ecode,@expansion) = &expn_vrfy($u,$server); + (@foo) = &expn_vrfy($u,$server); + ($ecode,@expansion) = @foo; + if ($ecode) { + &giveup('',$ecode,$u); + last USER; + } + + for $s (@expansion) { + $s =~ s/[\n\r]//g; + $0 = "$av0 - parsing $server: $s"; + + $skipwatch = $watch; + + if ($s =~ /^[25]51([- ]).*<(.+)>/) { + print "$s" if $watch; + print "(pretending 250$1<$2>)" if ($debug && $watch); + print "\n" if $watch; + $s = "250$1<$2>"; + $skipwatch = 0; + } + + if ($s =~ /^250([- ])(.+)/) { + print "$s\n" if $skipwatch; + ($done,$addr) = ($1,$2); + ($newhost, $newaddr, $newname) = &parse($addr,$server,$oldname, $#expansion == 0); + print "($newhost, $newaddr, $newname) = &parse($addr, $server, $oldname)\n" if $debug; + if (! $newhost) { + # no expansion is possible w/o a new server to call + if ($valid) { + push(@isValid, &validAddr($newaddr)); + push(@toFinal,$newaddr,$server,$newname); + } else { + &verbose(&final($newaddr,$server,$newname)); + } + } else { + $newmxhost = &mx($newhost,$newaddr); + print "$newmxhost = &mx($newhost)\n" + if ($debug && $newhost ne $newmxhost); + $0 = "$av0 - parsing $newaddr [@$newmxhost]"; + print "levels = $levels, level{$u *** $server} = ".$level{"$u *** $server"}."\n" if ($debug > 1); + # If the new server is the current one, + # it would have expanded things for us + # if it could have. Mx records must be + # followed to compare server names. + # We are also done if the recursion + # count has been exceeded. + if (&trhost($newmxhost) eq &trhost($server) || ($levels && $level{"$u *** $server"} >= $levels)) { + if ($valid) { + push(@isValid, &validAddr($newaddr)); + push(@toFinal,$newaddr,$newmxhost,$newname); + } else { + &verbose(&final($newaddr,$newmxhost,$newname)); + } + } else { + # more work to do... + if ($valid) { + push(@isValid, &validAddr($newaddr)); + push(@toExpn,$newmxhost,$newaddr,$newname,$level{"$u *** $server"}); + } else { + &verbose(&expn($newmxhost,$newaddr,$newname,$level{"$u *** $server"})); + } + } + } + last if ($done eq " "); + next; + } + # 550 is a known code... Should the be + # included in -a output? Might be a bug + # here. Does it matter? Can assume that + # there won't be UNKNOWN USER responses + # mixed with valid users? + if ($s =~ /^(550)([- ])/) { + if ($valid) { + print STDERR "\@$server:$u ($oldname) USER UNKNOWN\n"; + } else { + &verbose(&final($u,$server,$oldname,"USER UNKNOWN")); + } + last if ($2 eq " "); + next; + } + # 553 is a known code... + if ($s =~ /^(553)([- ])/) { + if ($valid) { + print STDERR "\@$server:$u ($oldname) USER AMBIGUOUS\n"; + } else { + &verbose(&final($u,$server,$oldname,"USER AMBIGUOUS")); + } + last if ($2 eq " "); + next; + } + # 252 is a known code... + if ($s =~ /^(252)([- ])/) { + if ($valid) { + print STDERR "\@$server:$u ($oldname) REFUSED TO VRFY\n"; + } else { + &verbose(&final($u,$server,$oldname,"REFUSED TO VRFY")); + } + last if ($2 eq " "); + next; + } + &giveup('',"$server: did not grok '$s'",$u); + last USER; + } + + if ($valid) { + # + # now we decide if we are going to take these + # expansions or roll them back. + # + $avgValid = &average(@isValid); + print "avgValid = $avgValid\n" if $debug; + if ($avgValid >= $validRequirement) { + print &compact($u,$server)." ->\n" if $verbose; + while (@toExpn) { + &verbose(&expn(splice(@toExpn,0,4))); + } + while (@toFinal) { + &verbose(&final(splice(@toFinal,0,3))); + } + } else { + print "Tossing some valid to avoid invalid ".&compact($u,$server)."\n" if ($avgValid > 0.0 && ($vw || $debug)); + print &compact($u,$server)." ->\n" if $verbose; + &verbose(&final($u,$server,$newname)); + } + } + } + + &alarm("sending 'quit' to $server",''); + $0 = "$av0 - sending 'quit' to $server"; + &ps("quit"); + while() { + print if $watch; + last if /^\d+ /; + } + close(S); + alarm(0); +} + +$0 = "$av0 - printing final results"; +print "----------\n" if $vw; +select(STDOUT); +for $f (sort @final) { + print "$f\n"; +} +unlink("/tmp/expn$$"); +exit(0); + + +# abandon all attempts deliver to $server +# register the current addresses as the final ones +sub giveup +{ + local($redirect_okay,$reason,$user) = @_; + local($us,@so,$nh,@remaining_users); + local($pk,$file,$line); + ($pk, $file, $line) = caller; + + $0 = "$av0 - giving up on $server: $reason"; + # + # add back a user if we gave up in the middle + # + push(@users,$user) if $user; + # + # don't bother with this system anymore + # + unless ($giveup{$server}) { + $giveup{$server} = $reason; + print STDERR "$reason\n"; + } + print "Giveup at $file:$line!!! redirect okay = $redirect_okay; $reason\n" if $debug; + # + # Wait! + # Before giving up, see if there is a chance that + # there is another host to redirect to! + # (Kids, don't do this at home! Hacking is a dangerous + # crime and you could end up behind bars.) + # + for $u (@users) { + if ($redirect_okay =~ /\bmx\b/) { + next if &try_fallback('mx',$u,*server, + *mx_secondary, + *already_mx_fellback); + } + if ($redirect_okay =~ /\bdomainify\b/) { + next if &try_fallback('domainify',$u,*server, + *domainify_fallback, + *already_domainify_fellback); + } + push(@remaining_users,$u); + } + @users = @remaining_users; + for $u (@users) { + print &compact($u,$server)." ->\n" if ($verbose && $valid && $u); + &verbose(&final($u,$server,$names{"$u *** $server"},$reason)); + } +} +# +# This routine is used only within &giveup. It checks to +# see if we really have to giveup or if there is a second +# chance because we did something before that can be +# backtracked. +# +# %fallback{"$user *** $host"} tracks what is able to fallback +# %fellback{"$user *** $host"} tracks what has fallen back +# +# If there is a valid backtrack, then queue up the new possibility +# +sub try_fallback +{ + local($method,$user,*host,*fall_table,*fellback) = @_; + local($us,$fallhost,$oldhost,$ft,$i); + + if ($debug > 8) { + print "Fallback table $method:\n"; + for $i (sort keys %fall_table) { + print "\t'$i'\t\t'$fall_table{$i}'\n"; + } + print "Fellback table $method:\n"; + for $i (sort keys %fellback) { + print "\t'$i'\t\t'$fellback{$i}'\n"; + } + print "U: $user H: $host\n"; + } + + $us = "$user *** $host"; + if (defined $fellback{$us}) { + # + # Undo a previous fallback so that we can try again + # Nested fallbacks are avoided because they could + # lead to infinite loops + # + $fallhost = $fellback{$us}; + print "Already $method fell back from $us -> \n" if $debug; + $us = "$user *** $fallhost"; + $oldhost = $fallhost; + } elsif (($method eq 'mx') && (defined $mxbacktrace{$us}) && (defined $mx_secondary{$mxbacktrace{$us}})) { + print "Fallback an MX expansion $us -> \n" if $debug; + $oldhost = $mxbacktrace{$us}; + } else { + print "Oldhost($host, $us) = " if $debug; + $oldhost = $host; + } + print "$oldhost\n" if $debug; + if (((defined $fall_table{$us}) && ($ft = $us)) || ((defined $fall_table{$oldhost}) && ($ft = $oldhost))) { + print "$method Fallback = ".$fall_table{$ft}."\n" if $debug; + local(@so,$newhost); + @so = split(' ',$fall_table{$ft}); + $newhost = shift(@so); + print "Falling back ($method) $us -> $newhost (from $oldhost)\n" if $debug; + if ($method eq 'mx') { + if (! defined ($mxbacktrace{"$user *** $newhost"})) { + if (defined $mxbacktrace{"$user *** $oldhost"}) { + print "resetting oldhost $oldhost to the original: " if $debug; + $oldhost = $mxbacktrace{"$user *** $oldhost"}; + print "$oldhost\n" if $debug; + } + $mxbacktrace{"$user *** $newhost"} = $oldhost; + print "mxbacktrace $user *** $newhost -> $oldhost\n" if $debug; + } + $mx{&trhost($oldhost)} = $newhost; + } else { + $temporary_redirect{$us} = $newhost; + } + if (@so) { + print "Can still $method $us: @so\n" if $debug; + $fall_table{$ft} = join(' ',@so); + } else { + print "No more fallbacks for $us\n" if $debug; + delete $fall_table{$ft}; + } + if (defined $create_host_backtrack{$us}) { + $create_host_backtrack{"$user *** $newhost"} + = $create_host_backtrack{$us}; + } + $fellback{"$user *** $newhost"} = $oldhost; + &expn($newhost,$user,$names{$us},$level{$us}); + return 1; + } + delete $temporary_redirect{$us}; + $host = $oldhost; + return 0; +} +# return 1 if you could send mail to the address as is. +sub validAddr +{ + local($addr) = @_; + $res = &do_validAddr($addr); + print "validAddr($addr) = $res\n" if $debug; + $res; +} +sub do_validAddr +{ + local($addr) = @_; + local($urx) = "[-A-Za-z_.0-9+]+"; + + # \u + return 0 if ($addr =~ /^\\/); + # ?@h + return 1 if ($addr =~ /.\@$urx$/); + # @h:? + return 1 if ($addr =~ /^\@$urx\:./); + # h!u + return 1 if ($addr =~ /^$urx!./); + # u + return 1 if ($addr =~ /^$urx$/); + # ? + print "validAddr($addr) = ???\n" if $debug; + return 0; +} +# Some systems use expn and vrfy interchangeably. Some only +# implement one or the other. Some check expn against mailing +# lists and vrfy against users. It doesn't appear to be +# consistent. +# +# So, what do we do? We try everything! +# +# +# Ranking of result codes: good: 250, 251/551, 252, 550, anything else +# +# Ranking of inputs: best: user@host.domain, okay: user +# +# Return value: $error_string, @responses_from_server +sub expn_vrfy +{ + local($u,$server) = @_; + local(@c) = ('expn', 'vrfy'); + local(@try_u) = $u; + local(@ret,$code); + + if (($u =~ /(.+)@(.+)/) && (&trhost($2) eq &trhost($server))) { + push(@try_u,$1); + } + + TRY: + for $c (@c) { + for $try_u (@try_u) { + &alarm("${c}'ing $try_u on $server",'',$u); + &ps("$c $try_u"); + alarm(0); + $s = ; + if ($s eq '') { + return "$server: lost connection"; + } + if ($s !~ /^(\d+)([- ])/) { + return "$server: garbled reply to '$c $try_u'"; + } + if ($1 == 250) { + $code = 250; + @ret = ("",$s); + push(@ret,&read_response($2,$debug)); + return (@ret); + } + if ($1 == 551 || $1 == 251) { + $code = $1; + @ret = ("",$s); + push(@ret,&read_response($2,$debug)); + next; + } + if ($1 == 252 && ($code == 0 || $code == 550)) { + $code = 252; + @ret = ("",$s); + push(@ret,&read_response($2,$watch)); + next; + } + if ($1 == 550 && $code == 0) { + $code = 550; + @ret = ("",$s); + push(@ret,&read_response($2,$watch)); + next; + } + &read_response($2,$watch); + } + } + return "$server: expn/vrfy not implemented" unless @ret; + return @ret; +} +# sometimes the old parse routine (now parse2) didn't +# reject funky addresses. +sub parse +{ + local($oldaddr,$server,$oldname,$one_to_one) = @_; + local($newhost, $newaddr, $newname, $um) = &parse2($oldaddr,$server,$oldname,$one_to_one); + if ($newaddr =~ m,^["/],) { + return (undef, $oldaddr, $newname) if $valid; + return (undef, $um, $newname); + } + return ($newhost, $newaddr, $newname); +} + +# returns ($new_smtp_server,$new_address,$new_name) +# given a response from a SMTP server ($newaddr), the +# current host ($server), the old "name" and a flag that +# indicates if it is being called during the initial +# command line parsing ($parsing_args) +sub parse2 +{ + local($newaddr,$context_host,$old_name,$parsing_args) = @_; + local(@names) = $old_name; + local($urx) = "[-A-Za-z_.0-9+]+"; + local($unmangle); + + # + # first, separate out the address part. + # + + # + # [NAME] + # [NAME] <[(NAME)] ADDR + # ADDR [(NAME)] + # (NAME) ADDR + # [(NAME)] + # + if ($newaddr =~ /^\<(.*)\>$/) { + print "\n" if $debug; + ($newaddr) = &trim($1); + print "na = $newaddr\n" if $debug; + } + if ($newaddr =~ /^([^\<\>]*)\<([^\<\>]*)\>([^\<\>]*)$/) { + # address has a < > pair in it. + print "N:$1 N:$3\n" if $debug; + ($newaddr) = &trim($2); + unshift(@names, &trim($3,$1)); + print "na = $newaddr\n" if $debug; + } + if ($newaddr =~ /^([^\(\)]*)\(([^\(\)]*)\)([^\(\)]*)$/) { + # address has a ( ) pair in it. + print "A:$1 (N:$2) A:$3\n" if $debug; + unshift(@names,&trim($2)); + local($f,$l) = (&trim($1),&trim($3)); + if (($f && $l) || !($f || $l)) { + # address looks like: + # foo (bar) baz or (bar) + # not allowed! + print STDERR "Could not parse $newaddr\n" if $vw; + return(undef,$newaddr,&firstname(@names)); + } + $newaddr = $f if $f; + $newaddr = $l if $l; + print "newaddr now = $newaddr\n" if $debug; + } + # + # @foo:bar + # j%k@l + # a@b + # b!a + # a + # + $unmangle = $newaddr; + if ($newaddr =~ /^\@($urx)\:(.+)$/) { + print "(\@:)" if $debug; + # this is a bit of a cheat, but it seems necessary + return (&domainify($1,$context_host,$2),$2,&firstname(@names),$unmangle); + } + if ($newaddr =~ /^(.+)\@($urx)$/) { + print "(\@)" if $debug; + return (&domainify($2,$context_host,$newaddr),$newaddr,&firstname(@names),$unmangle); + } + if ($parsing_args) { + if ($newaddr =~ /^($urx)\!(.+)$/) { + return (&domainify($1,$context_host,$newaddr),$newaddr,&firstname(@names),$unmangle); + } + if ($newaddr =~ /^($urx)$/) { + return ($context_host,$newaddr,&firstname(@names),$unmangle); + } + print STDERR "Could not parse $newaddr\n"; + } + print "(?)" if $debug; + return(undef,$newaddr,&firstname(@names),$unmangle); +} +# return $u (@$server) unless $u includes reference to $server +sub compact +{ + local($u, $server) = @_; + local($se) = $server; + local($sp); + $se =~ s/(\W)/\\$1/g; + $sp = " (\@$server)"; + if ($u !~ /$se/i) { + return "$u$sp"; + } + return $u; +} +# remove empty (spaces don't count) members from an array +sub trim +{ + local(@v) = @_; + local($v,@r); + for $v (@v) { + $v =~ s/^\s+//; + $v =~ s/\s+$//; + push(@r,$v) if ($v =~ /\S/); + } + return(@r); +} +# using the host part of an address, and the server name, add the +# servers' domain to the address if it doesn't already have a +# domain. Since this sometimes fails, save a back reference so +# it can be unrolled. +sub domainify +{ + local($host,$domain_host,$u) = @_; + local($domain,$newhost); + + # cut of trailing dots + $host =~ s/\.$//; + $domain_host =~ s/\.$//; + + if ($domain_host !~ /\./) { + # + # domain host isn't, keep $host whatever it is + # + print "domainify($host,$domain_host) = $host\n" if $debug; + return $host; + } + + # + # There are several weird situtations that need to be + # accounted for. They have to do with domain relay hosts. + # + # Examples: + # host server "right answer" + # + # shiva.cs cs.berkeley.edu shiva.cs.berkeley.edu + # shiva cs.berkeley.edu shiva.cs.berekley.edu + # cumulus reed.edu @reed.edu:cumulus.uucp + # tiberius tc.cornell.edu tiberius.tc.cornell.edu + # + # The first try must always be to cut the domain part out of + # the server and tack it onto the host. + # + # A reasonable second try is to tack the whole server part onto + # the host and for each possible repeated element, eliminate + # just that part. + # + # These extra "guesses" get put into the %domainify_fallback + # array. They will be used to give addresses a second chance + # in the &giveup routine + # + + local(%fallback); + + local($long); + $long = "$host $domain_host"; + $long =~ tr/A-Z/a-z/; + print "long = $long\n" if $debug; + if ($long =~ s/^([^ ]+\.)([^ ]+) \2(\.[^ ]+\.[^ ]+)/$1$2$3/) { + # matches shiva.cs cs.berkeley.edu and returns shiva.cs.berkeley.edu + print "condensed fallback $host $domain_host -> $long\n" if $debug; + $fallback{$long} = 9; + } + + local($fh); + $fh = $domain_host; + while ($fh =~ /\./) { + print "FALLBACK $host.$fh = 1\n" if $debug > 7; + $fallback{"$host.$fh"} = 1; + $fh =~ s/^[^\.]+\.//; + } + + $fallback{"$host.$domain_host"} = 2; + + ($domain = $domain_host) =~ s/^[^\.]+//; + $fallback{"$host$domain"} = 6 + if ($domain =~ /\./); + + if ($host =~ /\./) { + # + # Host is already okay, but let's look for multiple + # interpretations + # + print "domainify($host,$domain_host) = $host\n" if $debug; + delete $fallback{$host}; + $domainify_fallback{"$u *** $host"} = join(' ',sort {$fallback{$b} <=> $fallback{$a};} keys %fallback) if %fallback; + return $host; + } + + $domain = ".$domain_host" + if ($domain !~ /\..*\./); + $newhost = "$host$domain"; + + $create_host_backtrack{"$u *** $newhost"} = $domain_host; + print "domainify($host,$domain_host) = $newhost\n" if $debug; + delete $fallback{$newhost}; + $domainify_fallback{"$u *** $newhost"} = join(' ',sort {$fallback{$b} <=> $fallback{$a};} keys %fallback) if %fallback; + if ($debug) { + print "fallback = "; + print $domainify_fallback{"$u *** $newhost"} + if defined($domainify_fallback{"$u *** $newhost"}); + print "\n"; + } + return $newhost; +} +# return the first non-empty element of an array +sub firstname +{ + local(@names) = @_; + local($n); + while(@names) { + $n = shift(@names); + return $n if $n =~ /\S/; + } + return undef; +} +# queue up more addresses to expand +sub expn +{ + local($host,$addr,$name,$level) = @_; + if ($host) { + $host = &trhost($host); + + if (($debug > 3) || (defined $giveup{$host})) { + unshift(@hosts,$host) unless $users{$host}; + } else { + push(@hosts,$host) unless $users{$host}; + } + $users{$host} .= " $addr"; + $names{"$addr *** $host"} = $name; + $level{"$addr *** $host"} = $level + 1; + print "expn($host,$addr,$name)\n" if $debug; + return "\t$addr\n"; + } else { + return &final($addr,'NONE',$name); + } +} +# compute the numerical average value of an array +sub average +{ + local(@e) = @_; + return 0 unless @e; + local($e,$sum); + for $e (@e) { + $sum += $e; + } + $sum / @e; +} +# print to the server (also to stdout, if -w) +sub ps +{ + local($p) = @_; + print ">>> $p\n" if $watch; + print S "$p\n"; +} +# return case-adjusted name for a host (for comparison purposes) +sub trhost +{ + # treat foo.bar as an alias for Foo.BAR + local($host) = @_; + local($trhost) = $host; + $trhost =~ tr/A-Z/a-z/; + if ($trhost{$trhost}) { + $host = $trhost{$trhost}; + } else { + $trhost{$trhost} = $host; + } + $trhost{$trhost}; +} +# re-queue users if an mx record dictates a redirect +# don't allow a user to be redirected more than once +sub mxredirect +{ + local($server,*users) = @_; + local($u,$nserver,@still_there); + + $nserver = &mx($server); + + if (&trhost($nserver) ne &trhost($server)) { + $0 = "$av0 - mx redirect $server -> $nserver\n"; + for $u (@users) { + if (defined $mxbacktrace{"$u *** $nserver"}) { + push(@still_there,$u); + } else { + $mxbacktrace{"$u *** $nserver"} = $server; + print "mxbacktrace{$u *** $nserver} = $server\n" + if ($debug > 1); + &expn($nserver,$u,$names{"$u *** $server"}); + } + } + @users = @still_there; + if (! @users) { + return $nserver; + } else { + return undef; + } + } + return undef; +} +# follow mx records, return a hostname +# also follow temporary redirections comming from &domainify and +# &mxlookup +sub mx +{ + local($h,$u) = @_; + + for (;;) { + if (defined $mx{&trhost($h)} && $h ne $mx{&trhost($h)}) { + $0 = "$av0 - mx expand $h"; + $h = $mx{&trhost($h)}; + return $h; + } + if ($u) { + if (defined $temporary_redirect{"$u *** $h"}) { + $0 = "$av0 - internal redirect $h"; + print "Temporary redirect taken $u *** $h -> " if $debug; + $h = $temporary_redirect{"$u *** $h"}; + print "$h\n" if $debug; + next; + } + $htr = &trhost($h); + if (defined $temporary_redirect{"$u *** $htr"}) { + $0 = "$av0 - internal redirect $h"; + print "temporary redirect taken $u *** $h -> " if $debug; + $h = $temporary_redirect{"$u *** $htr"}; + print "$h\n" if $debug; + next; + } + } + return $h; + } +} +# look up mx records with the name server. +# re-queue expansion requests if possible +# optionally give up on this host. +sub mxlookup +{ + local($lastchance,$server,$giveup,*users) = @_; + local(*T); + local(*NSLOOKUP); + local($nh, $pref,$cpref); + local($o0) = $0; + local($nserver); + local($name,$aliases,$type,$len,$thataddr); + local(%fallback); + + return 1 if &mxredirect($server,*users); + + if ((defined $mx{$server}) || (! $have_nslookup)) { + return 0 unless $lastchance; + &giveup('mx domainify',$giveup); + return 0; + } + + $0 = "$av0 - nslookup of $server"; + open(T,">/tmp/expn$$") || die "open > /tmp/expn$$: $!\n"; + print T "set querytype=MX\n"; + print T "$server\n"; + close(T); + $cpref = 1.0E12; + undef $nserver; + open(NSLOOKUP,"nslookup < /tmp/expn$$ 2>&1 |") || die "open nslookup: $!"; + while() { + print if ($debug > 2); + if (/mail exchanger = ([-A-Za-z_.0-9+]+)/) { + $nh = $1; + if (/preference = (\d+)/) { + $pref = $1; + if ($pref < $cpref) { + $nserver = $nh; + $cpref = $pref; + } elsif ($pref) { + $fallback{$pref} .= " $nh"; + } + } + } + if (/Non-existent domain/) { + # + # These addresss are hosed. Kaput! Dead! + # However, if we created the address in the + # first place then there is a chance of + # salvation. + # + 1 while(); + close(NSLOOKUP); + return 0 unless $lastchance; + &giveup('domainify',"$server: Non-existent domain",undef,1); + return 0; + } + + } + close(NSLOOKUP); + unlink("/tmp/expn$$"); + unless ($nserver) { + $0 = "$o0 - finished mxlookup"; + return 0 unless $lastchance; + &giveup('mx domainify',"$server: Could not resolve address"); + return 0; + } + + # provide fallbacks in case $nserver doesn't work out + if (defined $fallback{$cpref}) { + $mx_secondary{$server} = $fallback{$cpref}; + } + + $0 = "$av0 - gethostbyname($nserver)"; + ($name,$aliases,$type,$len,$thataddr) = gethostbyname($nserver); + + unless ($thataddr) { + $0 = $o0; + return 0 unless $lastchance; + &giveup('mx domainify',"$nserver: could not resolve address"); + return 0; + } + print "MX($server) = $nserver\n" if $debug; + print "$server -> $nserver\n" if $vw && !$debug; + $mx{&trhost($server)} = $nserver; + # redeploy the users + unless (&mxredirect($server,*users)) { + return 0 unless $lastchance; + &giveup('mx domainify',"$nserver: only one level of mx redirect allowed"); + return 0; + } + $0 = "$o0 - finished mxlookup"; + return 1; +} +# if mx expansion did not help to resolve an address +# (ie: foo@bar became @baz:foo@bar, then undo the +# expansion). +# this is only used by &final +sub mxunroll +{ + local(*host,*addr) = @_; + local($r) = 0; + print "looking for mxbacktrace{$addr *** $host}\n" + if ($debug > 1); + while (defined $mxbacktrace{"$addr *** $host"}) { + print "Unrolling MX expnasion: \@$host:$addr -> " + if ($debug || $verbose); + $host = $mxbacktrace{"$addr *** $host"}; + print "\@$host:$addr\n" + if ($debug || $verbose); + $r = 1; + } + return 1 if $r; + $addr = "\@$host:$addr" + if ($host =~ /\./); + return 0; +} +# register a completed expnasion. Make the final address as +# simple as possible. +sub final +{ + local($addr,$host,$name,$error) = @_; + local($he); + local($hb,$hr); + local($au,$ah); + + if ($error =~ /Non-existent domain/) { + # + # If we created the domain, then let's undo the + # damage... + # + if (defined $create_host_backtrack{"$addr *** $host"}) { + while (defined $create_host_backtrack{"$addr *** $host"}) { + print "Un&domainifying($host) = " if $debug; + $host = $create_host_backtrack{"$addr *** $host"}; + print "$host\n" if $debug; + } + $error = "$host: could not locate"; + } else { + # + # If we only want valid addresses, toss out + # bad host names. + # + if ($valid) { + print STDERR "\@$host:$addr ($name) Non-existent domain\n"; + return ""; + } + } + } + + MXUNWIND: { + $0 = "$av0 - final parsing of \@$host:$addr"; + ($he = $host) =~ s/(\W)/\\$1/g; + if ($addr !~ /@/) { + # addr does not contain any host + $addr = "$addr@$host"; + } elsif ($addr !~ /$he/i) { + # if host part really something else, use the something + # else. + if ($addr =~ m/(.*)\@([^\@]+)$/) { + ($au,$ah) = ($1,$2); + print "au = $au ah = $ah\n" if $debug; + if (defined $temporary_redirect{"$addr *** $ah"}) { + $addr = "$au\@".$temporary_redirect{"$addr *** $ah"}; + print "Rewrite! to $addr\n" if $debug; + next MXUNWIND; + } + } + # addr does not contain full host + if ($valid) { + if ($host =~ /^([^\.]+)(\..+)$/) { + # host part has a . in it - foo.bar + ($hb, $hr) = ($1, $2); + if ($addr =~ /\@([^\.\@]+)$/ && ($1 eq $hb)) { + # addr part has not . + # and matches beginning of + # host part -- tack on a + # domain name. + $addr .= $hr; + } else { + &mxunroll(*host,*addr) + && redo MXUNWIND; + } + } else { + &mxunroll(*host,*addr) + && redo MXUNWIND; + } + } else { + $addr = "${addr}[\@$host]" + if ($host =~ /\./); + } + } + } + $name = "$name " if $name; + $error = " $error" if $error; + if ($valid) { + push(@final,"$name<$addr>"); + } else { + push(@final,"$name<$addr>$error"); + } + "\t$name<$addr>$error\n"; +} + +sub alarm +{ + local($alarm_action,$alarm_redirect,$alarm_user) = @_; + alarm(3600); + $SIG{ALRM} = 'handle_alarm'; +} +# this involves one great big ugly hack. +# the "next HOST" unwinds the stack! +sub handle_alarm +{ + &giveup($alarm_redirect,"Timed out during $alarm_action",$alarm_user); + next HOST; +} + +# read the rest of the current smtp daemon's response (and toss it away) +sub read_response +{ + local($done,$watch) = @_; + local(@resp); + print $s if $watch; + while(($done eq "-") && ($s = ) && ($s =~ /^\d+([- ])/)) { + print $s if $watch; + $done = $1; + push(@resp,$s); + } + return @resp; +} +# print args if verbose. Return them in any case +sub verbose +{ + local(@tp) = @_; + print "@tp" if $verbose; +} +# to pass perl -w: +@tp; +$flag_a; +$flag_d; +$flag_1; +%already_domainify_fellback; +%already_mx_fellback; +&handle_alarm; +################### BEGIN PERL/TROFF TRANSITION +.00 ; + +'di +.nr nl 0-1 +.nr % 0 +.\\"'; __END__ +.\" ############## END PERL/TROFF TRANSITION +.TH EXPN 1 "March 11, 1993" +.AT 3 +.SH NAME +expn \- recursively expand mail aliases +.SH SYNOPSIS +.B expn +.RI [ -a ] +.RI [ -v ] +.RI [ -w ] +.RI [ -d ] +.RI [ -1 ] +.IR user [@ hostname ] +.RI [ user [@ hostname ]]... +.SH DESCRIPTION +.B expn +will use the SMTP +.B expn +and +.B vrfy +commands to expand mail aliases. +It will first look up the addresses you provide on the command line. +If those expand into addresses on other systems, it will +connect to the other systems and expand again. It will keep +doing this until no further expansion is possible. +.SH OPTIONS +The default output of +.B expn +can contain many lines which are not valid +email addresses. With the +.I -aa +flag, only expansions that result in legal addresses +are used. Since many mailing lists have an illegal +address or two, the single +.IR -a , +address, flag specifies that a few illegal addresses can +be mixed into the results. More +.I -a +flags vary the ratio. Read the source to track down +the formula. With the +.I -a +option, you should be able to construct a new mailing +list out of an existing one. +.LP +If you wish to limit the number of levels deep that +.B expn +will recurse as it traces addresses, use the +.I -1 +option. For each +.I -1 +another level will be traversed. So, +.I -111 +will traverse no more than three levels deep. +.LP +The normal mode of operation for +.B expn +is to do all of its work silently. +The following options make it more verbose. +It is not necessary to make it verbose to see what it is +doing because as it works, it changes its +.BR argv [0] +variable to reflect its current activity. +To see how it is expanding things, the +.IR -v , +verbose, flag will cause +.B expn +to show each address before +and after translation as it works. +The +.IR -w , +watch, flag will cause +.B expn +to show you its conversations with the mail daemons. +Finally, the +.IR -d , +debug, flag will expose many of the inner workings so that +it is possible to eliminate bugs. +.SH ENVIRONMENT +No enviroment variables are used. +.SH FILES +.PD 0 +.B /tmp/expn$$ +.B temporary file used as input to +.BR nslookup . +.SH SEE ALSO +.BR aliases (5), +.BR sendmail (8), +.BR nslookup (8), +RFC 823, and RFC 1123. +.SH BUGS +Not all mail daemons will implement +.B expn +or +.BR vrfy . +It is not possible to verify addresses that are served +by such daemons. +.LP +When attempting to connect to a system to verify an address, +.B expn +only tries one IP address. Most mail daemons +will try harder. +.LP +It is assumed that you are running domain names and that +the +.BR nslookup (8) +program is available. If not, +.B expn +will not be able to verify many addresses. It will also pause +for a long time unless you change the code where it says +.I $have_nslookup = 1 +to read +.I $have_nslookup = +.IR 0 . +.LP +Lastly, +.B expn +does not handle every valid address. If you have an example, +please submit a bug report. +.SH CREDITS +In 1986 or so, Jon Broome wrote a program of the same name +that did about the same thing. It has since suffered bit rot +and Jon Broome has dropped off the face of the earth! +(Jon, if you are out there, drop me a line) +.SH AVAILABILITY +The latest version of +.B expn +is available through anonymous ftp at +.IR ftp://ftp.idiom.com/pub/muir-programs/expn . +.SH AUTHOR +.I David Muir Sharnoff\ \ \ \ diff --git a/scripts/fix-amd-map.in b/scripts/fix-amd-map.in new file mode 100755 index 0000000..6746462 --- /dev/null +++ b/scripts/fix-amd-map.in @@ -0,0 +1,52 @@ +#!@PERL@ +# +# fix an old-syntax amd map to new one +# +# takes any number of files on the command line, and produces +# a fixed map on stdout. +# +# Package: am-utils-6.0 +# Author: Erez Zadok +# + +############################################################################## +### MAINTAINER EDITABLE SECTION + +# Mappings of old names to new ones: +# Update when needed, do not forget commas but not on the last entry! +# For your convenience, this is the complete list of all OSs that were +# supported by amd-upl102, in their old names: +# +# 386bsd acis43 aix3 aoi aux bsd43 bsd44 bsdi11 +# concentrix dgux fpx4 freebsd hcx hlh42 hpux irix3 irix4 irix5 isc3 +# linux mach2 mach3 netbsd news4 next osf1 pyrOSx riscix riscos +# rtu6 sos3 sos4 sos5 stellix svr4 u2_2 u3_0 u4_0 u4_2 u4_3 u4_4 +# umax43 utek utx32 xinu43 +# +%mappings = ( + "sos4", "sunos4", + "sos5", "sunos5", + "freebsd", "freebsd2" +); + +############################################################################## +### DO NOT EDIT ANYTHING BELOW + +# This is a trivial parser and works as follows: +# (1) read each line +# (2) search of regexps that start with '=', continue with a word to replace +# and end with a non-value name (whitespace, ';', or newline +while (<>) { + # skip trivial lines + if ($_ =~ /^$/ || $_ =~ /^#/) { + print; + next; + } + # modify the line if needed + foreach $m (keys %mappings) { + $val = $mappings{$m}; + $_ =~ s/=$m([^a-zA-Z0-9_])/=$val$1/g; + } + # print the (possibly) modified line + print; +} diff --git a/scripts/fixrmtab.in b/scripts/fixrmtab.in new file mode 100755 index 0000000..33b7bcf --- /dev/null +++ b/scripts/fixrmtab.in @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Invalidate /etc/rmtab entries for hosts named. +# Restart mountd for changes to take effect. +# +# usage: fixrmtab host1 host2 ... +# +# Package: am-utils-6.0 +# Author: Andreas Stolcke + +#set -x + +RMTAB=/etc/rmtab +TMP=/tmp/rmtab.$$ + +if [ ! -f /etc/rmtab ]; then + exit 0 +fi + +for host in $* +do + sed -e '/^'$host':/s/^./#/' $RMTAB > $TMP && cp $TMP $RMTAB +done +rm -f $TMP diff --git a/scripts/lostaltmail.conf-sample b/scripts/lostaltmail.conf-sample new file mode 100644 index 0000000..a20158c --- /dev/null +++ b/scripts/lostaltmail.conf-sample @@ -0,0 +1,84 @@ +# -*- perl -*- +############################################################################## +# # +# CONFIGURABLE VALUES # +# # +############################################################################## + +$MAILGRUNT="postmaster"; # To whom to send log mail if mail is prefered. + +$TMPDIR="/tmp/"; # Place lostmail can do its dirty work. + +$LOCAL_LOCK_EXT=".lock"; # Name of file local mailer uses to lock + # spool file. This the correct setting for + # /bin/mail + +$SYSTEM_FROM_ADDRESS="Mailer-Daemon"; + +$MAILDIR="/var/alt_mail"; # What directory should I run out of. +$MAILER='/usr/lib/sendmail -t'; # Which mailer should I use. + +$LOCALMAILJUNK='.*~|\#.*|core'; # Files name patterns that might appear in + # alt_mail and should be ignored. This REGEXP + # gets or'ed with $MAILJUNK below. + +$SMTPHOST='localhost'; # The name of a local host which speaks SMTP + # and knows *all* your aliases. You probably + # don't want to change this. If the machine + # running lost_alt mail doesn't run an SMTP, + # daemon then something is either wrong or you + # should be setting `noverify' to prevent + # SMTP verification. + +$HOSTNAME='localhost'; # Hostname to use for SMTP HELO + +# Subject of lost log mail message. Must define $MAILGRUNT. +# I overwrite this variable in the subroutine Clean_up. Please make sure I +# haven't noodle-headdly forgotten to remove that hack in the distribution! +# No newline here please. The script will insert it for you. +$LOG_SUBJECT="Log of lostmail resends"; + +############################################################################## +# # +# DEFAULTED CONFIGURATIONS # +# # +############################################################################## + +$LOGFILE="$TMPDIR" . "lostlog"; + + +# MAILJUNK is a pattern of ignorable alt_mail files which are either common +# to most platforms or actually produced by this script. You should customize +# this REGEXP by hacking at $LOCALMAILJUNK above. +$MAILJUNK='[a-z]\.[0-9]*|\.\.?|lost\+found'; + +$LOCKEXT=".lostlock"; # our lock file extension. Should not need to + # modify + +$MESSAGE_DELIM="^From[^:]"; # /bin/mail message delimiter. Your milage + # may differ + +$HEADER_BODY_DELIM="\n"; # RFC 822 header-body delimiter. + +$RESENT_TO="Resent-To: "; # +$RESENT_FROM="Resent-From: "; # Resent headers (RFC 822). +$RESENT_DATE="Resent-Date: "; # You probably don't want to muck with these. +$RESENT_INFO="X-Resent-Info: "; # (special one to alert folks about mail). + + +############################################################################## +# # +# LOSTMAIL DEFINITIONS (DON'T TOUCH) # +# # +############################################################################## + +$FALSE=0; +$TRUE=(! $FALSE); + +$OK=$TRUE; +$ABORT_RESEND=2; +$LOCK_RETRIES=10; # The number of seconds/retries lost mail + # should wait before requeing or aborting a + # resend. + +TRUE; # Ansures true return from include file. diff --git a/scripts/lostaltmail.in b/scripts/lostaltmail.in new file mode 100755 index 0000000..5ba454c --- /dev/null +++ b/scripts/lostaltmail.in @@ -0,0 +1,648 @@ +#!@PERL@ -sw +# +# Package: am-utils-6.0 +# Author: James Tanis +# + +############################################################################ +# +# lostaltmail -- remail files files found alt_mail (or -a argument to hlfsd) to +# whomever should receive it. This version is for SMTP varient which +# support VRFY as a non-expanding verifier!!! (sendmail V8 is a an +# example). +# +# Usage: lostaltmail [-debug] [-nomail] [-noverify] +# +# GLOBAL VARIABLES (as if you care :-) ) +# Probably a very incomplete list. +# +# Everything in the config file for this program *and* ... +# +# $debug: set it from the command line with -debug. Does the obvious +# $nomail: set it from the command line with -nomail. *Not* implied by +# $debug +# $currentTO: The addresss we are currently checking on. Actually this is +# left over from an earlier version of lostaltmail and will hopefully +# go away. +# $noverify: set it from the address line. Avoid verification of $currentTO. +# This should be relatively safe as long as your are willing to +# endure bounces from mail that cannot be redelivered as opposed to +# just getting a warning. UNTESTED (but should work). +# +# $logopen: state variable indicating weather the log file (should there be +# one) is in fact open. +# +# @allentries: Array of all the directory entries in $MAILDIR +# @allnames: Array of all *likely* recipients. It is created from @allentries +# sans junk files (see $MAILJUNK and $LOCALMAILJUNK) +# @wanderers: Array of all the files associated with a *single* address +# which might need remailing. Should lostaltmail die unexpectedly, +# it might leave a temporary file containing messages it was +# currently trying to deliver. These will get picked and resent +# later. +# +# VRFY: Handle onto SMTP verification channel. Not to be confused with mail +# delivery; only verification occurs accross this handle. +# +############################################################################ + +############################################################################## +# # +# SMTP_SEND # +# # +############################################################################## +# +# Send a message to the smtp channel. Inserts the necessary NEWLINE if it +# does not exist; +# I stole this from myself. It shouldn nott be printing errors to STDERR, but +# this is a quick hack. +# +sub smtp_send { + local ($msg) = @_; + local ($length); + + $length=length($msg); + + if ( $msg !~ /^.*\n$/ ) { + $msg = $msg . "\n"; + $length++; + } + + + if ( ! syswrite (VRFY, $msg, $length)) { + print STDERR "Failing SMTP write: $msg"; + return 0; + } + + return 1; +} + +############################################################################## +# # +# SMTP_RECV # +# # +############################################################################## +# +# Read in lines from SMTP connection and return the final +# Really hideous -- please excuse. +# +sub smtp_recv { + local ($line,$rin, $win, $ein, $readbuf, $ret); + $readbuf = ""; + + $rin = $win = $ein = ''; # Null fd sets, + vec ($rin, fileno(VRFY), 1) = 1; # Stolen straight from the example; + $ein = $rin | $win; # This is probably useless + + +LINE_OF_INPUT: + while (1) { # Read in all the input + + if ((select ( $rin, $win, $ein, 600.0))[0] == 0 ) { + print "select returned -1" if ($debug); + return -1; # timeout + } + sysread (VRFY, $readbuf, 1024); + chop ($readbuf); + + foreach $line ( split('\n', $readbuf)) { + + # This loop is actually needed since V8 has a multi-line greet. + + ( $line =~ /^(\d\d\d).*/ && ($SMTP_retval=$1)) || + warn "Badly formed reply from SMTP peer: $line\n"; + + # Space after return code indicates EOT + + if ($line =~ /^\d\d\d /) { + $ret = $line; # Oddly $line is in a different context here; + # and thus we need to export it out of the + # while loop via $ret. + last LINE_OF_INPUT; + } + } # End of read. + } # End of input. + + return $ret; +} + + + + +############################################################################## +# # +# LOG_INFO # +# # +############################################################################## +# +# +# Opens appropriate logging file -- STDOUT (cron) or temp file (mail). +# +sub Log_info { + local($message) = @_; + + if ( !$logopened ) { + if ( $MAILGRUNT eq "" || $debug) { + open (LOGFILE, ">-") || die "Unable to open stdout"; + } + else { + # Snarf the log into a tmp file for final mailing to MAILGRUNT + $logfile = $LOGFILE . ".$$"; + open (LOGFILE, (">". "$logfile")) || die "Unable to create log file"; + } + } + + $logopened=1; # Note that the log is now open + + # Heart of the function. + print LOGFILE "$message"; + + print LOGFILE "\n" if ( index($message,"\n") == -1 ); +} + +############################################################################## +# # +# LOCK_FILE # +# # +############################################################################## + +# +# Tries to grab a lock on the supplied file name. +# Spins for a bit if it can't on the assumption that the lock will be released +# quickly. If it times out and it's allowed to requeue, it will defer +# until later, other wise write a message to loginfo. + +# If a recurring error or really unexpected situation arrises, return +# ABORT_RESEND +# +# PARAMETERS +# mailfile: path to the file to resend. +# should_requeue: BOOLEAN - TRUE if the mailfile should be put on the +# queue for a later retry if we can not finish +# now. + +sub Lock_file { + + local($mailfile,$should_requeue,$i,$new_lost_file) = @_; + +# We need to rename the current mailbox so that mail can loop back into it if +# the resent mail just gets looped right back to us. + $new_lost_file = $mailfile . ".$$"; + +# make a tmpfile name based on mailfile; + $lostlockfile = "$mailfile" . "$LOCKEXT"; + + if ( ! open(LOCKFILE, (">" . $lostlockfile)) ) { + printf(STDERR "Could not create lostlockfile for %s: %s\n", $mailfile,$!); + return $ABORT_RESEND; + } + close(LOCKFILE); + + $maillockfile = "$mailfile" . "$LOCAL_LOCK_EXT"; + + for ($i=0; $i < $LOCK_RETRIES && ! link ($lostlockfile, $maillockfile); + $i++) { + sleep(1); + } + + unlink($lostlockfile); # No matter what eliminate our cruft + + if ( $i == $LOCK_RETRIES ) { + &Log_info("Could not grab lock on: " . "$mailfile" . " :timed out"); + if ( $should_requeue ) { + &Log_info("Requeing " . "$mailfile" . " for later retry"); + $retry_list .= " $mailfile"; + } + else { + &Log_info("Giving up on: " . "$mailfile"); + } + + return $ABORT_RESEND; + } + + # We created the link and therefore have the lock + + if (rename ($mailfile, $new_lost_file) == 0 ){ + # Failed to rename file -- this is serious. + unlink($maillockfile); + return $ABORT_RESEND; + } + + unlink($maillockfile); + return $new_lost_file; + +} + +############################################################################## +# # +# PARSE NEXT MAIL MESSAGE # +# # +############################################################################## +# +# Parameters: +# mailfile: handle of mailfile to use. +# +# Parses the next message in the mail file and inserts it in $current_msg +# +sub Get_next_msg { + local($mailfile,$found_body_delimiter) = @_; + + # If this is the first message in the spool file, read the first line + # otherwise use the MESSAGE_DELIM line from the previous message (which we + # were forced to overread). + + $done=$FALSE; + $found_body_delimiter=$FALSE; + + # This if eats the very first "From " line and should never fire again. + if ( ! defined $current_msg ) {<$mailfile>}; + undef ($current_msg); # Erase the old message. + + + # Read the mailfile and pass through all the lines up until the next + # message delimiter. Kill any previous resend headers. + while ( <$mailfile> ) { + last if (/$MESSAGE_DELIM/); + next if ( !$found_body_delimiter && /[Rr][Ee][Ss][Ee][Nn][Tt]-.+:/); + if ( !$found_body_delimiter && /^$HEADER_BODY_DELIM/) { + &Splice_in_resent_headers(); + $found_body_delimiter=$TRUE; + } + if (defined($current_msg)) { + $current_msg .= $_; + } else { + $current_msg = $_; + } + } + + # Return TRUE when we have hit the end of the file. + if (!defined($_) || $_ eq "" ) { + return $TRUE; + } else { + return $FALSE; + } +} + +############################################################################## +# # +# SPLICE IN RESENT_HEADERS # +# # +############################################################################## +# +# Insert the Resent- headers at the *current location* of the message stream +# (In Engish, print out a few Resent-X: lines and return :-) ) +# In addition splice in the X-resent-info: header. + +# +# Paremters: None. +# Return: None +# +sub Splice_in_resent_headers { + local($date,$utctime,$weekday,$time,$month,$hostname); + + $current_msg .= "$RESENT_TO" . "$currentTO" . "\n"; + $current_msg .= "$RESENT_FROM" . "$SYSTEM_FROM_ADDRESS" . "\n"; + + # Calculate date and time. It is a bit of a shame to do this each time + # the time needs to be acurate. + + @utctime=gmtime(time); + + $weekday=(Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$utctime[6]]; + + + # If the minutes or second do not take two columns each, patch em up. + if ( $utctime[1] < 10 ) { + if ( $utctime[0] < 10 ) { + $time=sprintf("%d:0%d:0%d",$utctime[2],$utctime[1],$utctime[0]); + } + else { + $time=sprintf("%d:0%d:%d",$utctime[2],$utctime[1],$utctime[0]); + } + } + else { + if ( $utctime[0] < 10 ) { + $time=sprintf("%d:%d:0%d",$utctime[2],$utctime[1],$utctime[0]); + } + else { + $time=sprintf("%d:%2d:%2d",$utctime[2],$utctime[1],$utctime[0]); + } + } + + $month=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$utctime[4]]; + + $date=sprintf("%s, %d %s %d %s UTC", $weekday, $utctime[3], $month, (($utctime[5] < 93 ? 20 : 19).$utctime[5]), $time); + + $current_msg .= "$RESENT_DATE" . $date . "\n"; + + if ( defined $RESENT_INFO && $RESENT_INFO ne "") { + $hostname=`uname -n`; + $current_msg .= "$RESENT_INFO" . "Lost mail resent from ". $hostname; + } + + return; +} + +############################################################################## +# # +# DO_REMAIL # +# # +############################################################################## +# +# Actually resends the mail. Talks to the process configured as $MAILER +# We need better handling. +# +sub Do_remail { + open (MAILER, "| $MAILER $currentTO") || return $ABORT_RESEND; + print MAILER $current_msg; + close (MAILER); +} + +############################################################################## +# # +# CLEAN_UP # +# # +############################################################################## +# +# Clean up my messes. +# +sub Clean_up { + local ($hostname); + + # Ugly local hack that you should never have seen, but I forgot to + # remove. Hopefully it did not kill you (I tried as you see), but you + # should eiter remove or update it for yourself. I find the message + # subject needs to have the hostname to be useful. + # + chop ($hostname=`uname -n`); + $LOG_SUBJECT="$LOG_SUBJECT from $hostname" if ( $hostname =~ /.*\.cs\.columbia\.edu/ ); + # + # End of ugly local hack + + # Mail any log info to MAILGRUNT. + if (defined($logfile) && $logfile ne "" ) { + close (LOGFILE); # Flush logfile output. + if ( -s $logfile ) { + open (MAILER, "| $MAILER $MAILGRUNT"); + + print MAILER "To: $MAILGRUNT\n"; + print MAILER "Subject: $LOG_SUBJECT\n"; + print MAILER "$HEADER_BODY_DELIM"; + + open (LOGFILE, "< $logfile"); + + while () { + print MAILER $_; + } + close (MAILER); + close (LOGFILE); + } + + unlink($logfile); + } + exit(0); +} + + +############################################################################## +# # +# COLLECT_WANDERERS # +# # +############################################################################## + +# +# Collects other files that appear to be mail file for the $currentTO +# but were not remailed successfully. +# +# Parameters: none (but uses $currentTO) +# Return: True if a old mail directory is found. False otherwise. +# Side effects: $wanderers set. +# +sub Collect_wanderers { + + undef (@wanderers); + + # Slurp in the directory and close. + + return ($found); +} + +############################################################################# +# # +# REMAIL ALL # +# # +############################################################################# + +# +# Takes an array of files that all seem to share a common repcipient and +# remails them if possible. +# +# Parameters: None (uses @wanderers). +# +sub Remail_all { + local($file,$i); + + $i=0; + foreach $file (@wanderers) { + if ( !open (LOSTFILE, "< $file")) { + &Log_info("Could not open " . "$file" . " for remailing"); + next; + } + + do { # Power loop! + $done = &Get_next_msg(LOSTFILE); # Retrieve the next message... + &Do_remail; # and remail it. + } until $done; + undef ($current_msg); # Erase the final remailed message. + + close(LOSTFILE); # Tidy up. + + unlink ($file); # Remove the remailed file + $i++; + } + +} + +############################################################################# +# # +# CHECK_USER # +# # +############################################################################# + +# +# Checks the password tables for the uid of $currentTO. If the user is +# uid 0 (ie *supposed* to get mail in altmail) or unknown the resend is +# aborted. +# +# +sub Check_user { + local (@passwdinfo); + undef (@passwdinfo); + + if ( !&vrfy_user($currentTO) ) { + &Log_info("Possible non user mail file: $currentTO"); + return $ABORT_RESEND; + } + + @passwdinfo = getpwnam($currentTO); + + print "Non user mailable mail: Name: $currentTO\n" + if ( $debug && ! defined @passwdinfo ); + + return !$ABORT_RESEND if ( ! defined @passwdinfo ); # A non user but evidently mailable + + print "Check User(): Name: $currentTO -- UID: $passwdinfo[2]\n" if ($debug); + + return $ABORT_RESEND if ( $passwdinfo[2] == 0 ); + + + return !$ABORT_RESEND; +} + +############################################################################# +# # +# VRFY USER # +# # +############################################################################# +# +# Use SMTP VRFY to insure that argument is in fact a legal mail id. +# Boolean: TRUE if mailable account, FALSE if not. + +sub vrfy_user { + + local ($mailname,$repl) = @_; + + if ( !&smtp_send("vrfy $mailname") ) { + &Log_info("Failed sending to vrfy smtp command for: $mailname"); + return 0; + } + + $repl = &smtp_recv; + + print "VRFY REPLY: $repl\n" if ($debug); + + return ( $repl =~ /^2\d\d/ ); + + +} + + +############################################################################# +# # +# MAIN PROC # +# # +############################################################################# + +# dummy code to shut up perl -w +$debug = 0 if !defined($debug); +print $nomail if $debug > 1; +print $RESENT_FROM if $debug > 1; +print $logopen if $debug > 1; +print $LOCAL_LOCK_EXT if $debug > 1; +print $RESENT_TO if $debug > 1; +print $LOCKEXT if $debug > 1; +print $RESENT_DATE if $debug > 1; +print $MESSAGE_DELIM if $debug > 1; +print $SMTP_retval if $debug > 1; +print $found if $debug > 1; +print $retry_list if $debug > 1; +print $MAILJUNK if $debug > 1; +print $noverify if $debug > 1; +print $SYSTEM_FROM_ADDRESS if $debug > 1; + +# BEGIN: stuff +$prefix="@prefix@"; +$CONFIGDIR="@sysconfdir@"; # Directory where global config lives +require "$CONFIGDIR/lostaltmail.conf" if (-f "$CONFIGDIR/lostaltmail.conf"); +require "/etc/global/lostaltmail.conf" if (-f "/etc/global/lostaltmail.conf"); +require "/etc/os/lostaltmail.conf" if (-f "/etc/os/lostaltmail.conf"); +require "/etc/local/lostaltmail.conf" if (-f "/etc/local/lostaltmail.conf"); + + +require "ctime.pl"; +use Socket; +#require "sys/socket.ph"; + +# SET some initial state variales +$logopen = 0; + +# +# Change to alt_dir +# +# Important!! This directory should be local. Folks will be responsible +# for finding this out for themselves. +# +chdir ( $MAILDIR ) || die "Cannot change to $MAILDIR (`x' bit not set?)"; + +# +# slurp in directory +# +opendir (MAIL, ".") || die "Cannot open $MAILDIR (`r' bit not set?)"; +@allentries= readdir (MAIL); +closedir (MAIL); +@allnames = grep (!/$LOCALMAILJUNK|$MAILJUNK/, @allentries); + +# Open chanel to SMTP for verification -- unless this option is +# configured off. + +if ( ! $noverify ) { + local($addr, $port,$sockaddr); + + socket (VRFY, &AF_INET, &SOCK_STREAM, 0) || + die "Could not create TCP socket (SMTP channel)"; + + $addr = (gethostbyname($SMTPHOST))[4]; # Just use the first addr + + die "Could not obtain STMP host ($SMTPHOST) address" + if ( $addr eq "" ); + + $port = (getservbyname('smtp','tcp'))[2]; # Get smtp port. + die "Could not obtain SMTP port number" if (!defined($port)); + + printf("SMTP: address: %s port: $port\n", + join ('.',unpack('C4',$addr))) if ($debug); + + $sockaddr = pack('n2C4x8',2, $port ,unpack('C4',$addr)); + + printf("Sockaddr: %s\n", join (' ',unpack('C14',$sockaddr))) if ($debug); + + connect (VRFY, $sockaddr) || + die "Could not connect to SMTP daemon on $SMTPHOST"; + + print "Establshed SMTP channel\n" if ($debug); + + &smtp_recv; # Greet wait + &smtp_send("helo $SMTPHOST"); # Helo message for picky SMTPs + &smtp_recv; # Helo reply + + # Connection is up and ready to VRFY +} + +# main stuff starts here +foreach $currentTO (@allnames) { + next if ( &Check_user == $ABORT_RESEND); + + undef (@wanderers); # Just reset this at each pass. + @wanderers=grep (/$currentTO\.\d+/, @allentries); + + $remail_file = &Lock_file($currentTO,$FALSE); # Need to lock the spool. + + next if ( $remail_file eq $ABORT_RESEND); # Could not get that lock + + push (@wanderers, $remail_file); # Try to resend "old" files. + print "List to remail: @wanderers\n" if ($debug); + # check if there is something to remail + &Remail_all if ( defined @wanderers && !$nomail); +} + +# this stuff should run at the end +foreach $file (grep (/$LOCALMAILJUNK/,@allentries)) { + + if ($debug) { + print "Would unlink $file\n" if ($debug); + } else { + unlink $file if (-f $file); + } + +} +&Clean_up; # Do a clean exit. diff --git a/scripts/wait4amd.in b/scripts/wait4amd.in new file mode 100755 index 0000000..5fd5030 --- /dev/null +++ b/scripts/wait4amd.in @@ -0,0 +1,45 @@ +#!/bin/sh +# wait for amd to start up and then execute program +# usage: wait4amd [ [args ...]] +# If only hostname is supplied, command defaults to rsh $hostname +# +# Package: am-utils-6.0 +# Author: Erez Zadok + +#set -x + +if [ "X$1" = "X" ]; then + echo "Usage: wait4amd [ [args ...]]" + exit 1 +else + hostname=$1 + shift +fi + +# set path +prefix=@prefix@ +exec_prefix=@exec_prefix@ +PATH=@sbindir@:@bindir@:${PATH} +export PATH + +while true +do + amq -h $hostname > /dev/null 2>&1 + if [ $? != 0 ] + then + # failed + echo "Amd not up. Sleeping..." + sleep 5; + else + echo "Amd is active on host $hostname!" + cmd=$* + if [ -z "${cmd}" ] + then + cmd="rlogin $hostname" + fi + echo "Running: $cmd" + $cmd + echo "Sleep 1 second" + sleep 1 + fi +done diff --git a/scripts/wait4amd2die.in b/scripts/wait4amd2die.in new file mode 100755 index 0000000..d3541e7 --- /dev/null +++ b/scripts/wait4amd2die.in @@ -0,0 +1,49 @@ +#!/bin/sh +# wait for amd to die on local host before returning from program. +# Usage: wait4amd2die [delay [count]] +# If not specified, delay=5 seconds and count=6 (total 30 seconds) +# If at end of total delay amd is till up, return 1; else return 0. +# +# Package: am-utils-6.0 +# Author: Erez Zadok + +#set -x + +# set path +prefix=@prefix@ +exec_prefix=@exec_prefix@ +PATH=@sbindir@:@bindir@:/usr/bin:/bin:${PATH} +export PATH + +# how long to wait? +if test -n "$1" +then + delay=$1 +else + delay=5 +fi +# how many times to delay +if test -n "$2" +then + count=$2 +else + count=6 +fi + +i=1 +maxcount=`expr $count + 1` +while [ $i != $maxcount ]; do + # run amq + @sbindir@/amq > /dev/null 2>&1 + if [ $? != 0 ] + then + # amq failed to run (because amd is dead) + echo "wait4amd2die: amd is down!" + exit 0 + fi + echo "wait4amd2die: delay $delay sec ($i of $count)..." + sleep $delay + i=`expr $i + 1` +done +echo "wait4amd2die: amd is still up..." +exit 1 diff --git a/tasks b/tasks new file mode 100644 index 0000000..0b44340 --- /dev/null +++ b/tasks @@ -0,0 +1,70 @@ +# -*- text -*- + + AM-UTILS-6.0 TASKS TODO + +Please volunteer to do any of the following: + +- complete testing of untested platforms in INSTALL file + ncr2 + sunos 3.5 + +- autofs support: see README.autofs for details. + needs to be re-ported to solaris 2.6 (headers changed) + +- deal with everything that has XXX on it in the sources +- documentation update ("XXX: FILL IN" sections). + +- hlfsd should be able to not use /var/alt_mail, but send code 75 back to +sendmail (telling it to re-queue the mail and retry later). + +- compatibility with Sun's automount maps? + should be easier via the amd.conf file to specify type of map + perhaps done at the same time autofs support is done. + +- a selector ala if_exists() for networkmask(1.2.3.4/5.6.7.8), will match +against all known IP addresses of this host. + +- convert to using my own rpcgen .x files for amq/amq/nfs (v2 and v3) + +- support multiple "fail-over" NFS mounts in Solaris 2.6. + +- add LSM file + +- use packaging info for various OSs (such as RPM, Redhat Package Format) + +- $mindelay and $maxdelay in milliseconds + +- multiple nfsl should be matched if one matched and nfs mount failed. fall +through. +- fall through syntax? opts:=nofail,fallthrough? + +- random nfs rhost:={srv1, srv2, srv3} + +- after cutting next release dist, check that all files are there + +- nfslx, same as nfsl, but using linkx + +- find out why this sometimes works and sometimes not: + mcl -rhost:=minetta host!=${rhost};type:=nfs host==${rhost} + +- loadable info_*, amfs_*, and ops_* modules (lazy evaluation). + +- hlfsd for ~root/.mailspool (getpwnam("root")) +- hlfsd should daemonize even if -DDEBUG, then use -D nofork + +- fixmount should use generic code from transp/transp_{tli,sockets}.c + +- report netbsd/openbsd bugs in BUGS file + +- contribute patches to automake 1.3 + +- reverse notion of -F and other cmd-line options, so they override the +amd.conf file (right now amd.conf overrides cmd-line options). + +- y2k compliance. + +- an un/install script for binaries + +- update README +add am-utils URL and COPYRIGHT to all distributed scripts and +sources and programs etc. diff --git a/wire-test/Makefile.am b/wire-test/Makefile.am new file mode 100644 index 0000000..92c9903 --- /dev/null +++ b/wire-test/Makefile.am @@ -0,0 +1,41 @@ +## Process this file with automake to produce Makefile.in + +# Package: am-utils +# Level: Makefile for wire-test/ directory +# Author: Erez Zadok + +sbin_PROGRAMS = wire-test + +# man pages +man_MANS = wire-test.8 + +# headers this depends on, not to be installed +#noinst_HEADERS = + +wire_test_SOURCES = \ + wire-test.c + +LDADD = ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) diff --git a/wire-test/Makefile.in b/wire-test/Makefile.in new file mode 100644 index 0000000..57dabe1 --- /dev/null +++ b/wire-test/Makefile.in @@ -0,0 +1,368 @@ +# Makefile.in generated automatically by automake 1.3.2 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Package: am-utils +# Level: Makefile for wire-test/ directory +# Author: Erez Zadok + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +LEX = @LEX@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_LDFLAGS = @LIBTOOL_LDFLAGS@ +LTALLOCA = @LTALLOCA@ +LTLIBOBJS = @LTLIBOBJS@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +sbin_PROGRAMS = wire-test + +# man pages +man_MANS = wire-test.8 + +# headers this depends on, not to be installed +#noinst_HEADERS = + +wire_test_SOURCES = \ + wire-test.c + +LDADD = ../libamu/libamu.la + +INCLUDES = -I$(top_srcdir)/include + +# allow users to add their own flags via "configure --enable-am-flags=ARG" +AMU_CFLAGS = @AMU_CFLAGS@ +CFLAGS = @CFLAGS@ $(AMU_CFLAGS) + +# additional files to distribute and clean +EXTRA_DIST = \ + $(man_MANS) +mkinstalldirs = $(SHELL) $(top_srcdir)/aux/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +wire_test_OBJECTS = wire-test.o +wire_test_LDADD = $(LDADD) +wire_test_DEPENDENCIES = ../libamu/libamu.la +wire_test_LDFLAGS = +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +man8dir = $(mandir)/man8 +MANS = $(man_MANS) + +NROFF = nroff +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(wire_test_SOURCES) +OBJECTS = $(wire_test_OBJECTS) + +all: Makefile $(PROGRAMS) $(MANS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/./aux/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --localdir=./aux --gnu --include-deps wire-test/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +wire-test: $(wire_test_OBJECTS) $(wire_test_DEPENDENCIES) + @rm -f wire-test + $(LINK) $(wire_test_LDFLAGS) $(wire_test_OBJECTS) $(wire_test_LDADD) $(LIBS) + +install-man8: + $(mkinstalldirs) $(DESTDIR)$(man8dir) + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ + done + +uninstall-man8: + @list='$(man8_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ + rm -f $(DESTDIR)$(man8dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man8 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man8 + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = wire-test + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-sbinPROGRAMS + @$(NORMAL_INSTALL) + +install-data: install-man + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-sbinPROGRAMS uninstall-man + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(sbindir) $(DESTDIR)$(mandir)/man8 + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-sbinPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-sbinPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool install-man8 \ +uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# dependencies +$(PROGRAMS): $(LDADD) +$(OBJECTS): \ + ../config.h \ + ../aux_conf.h \ + $(top_srcdir)/include/am_compat.h \ + $(top_srcdir)/include/am_defs.h \ + $(top_srcdir)/include/am_utils.h \ + $(top_srcdir)/include/am_xdr_func.h \ + $(top_srcdir)/include/amq_defs.h \ + @AMU_NFS_PROT_HEADERS@ \ + $(noinst_HEADERS) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/wire-test/wire-test.8 b/wire-test/wire-test.8 new file mode 100644 index 0000000..c7d9846 --- /dev/null +++ b/wire-test/wire-test.8 @@ -0,0 +1,70 @@ +.\" +.\" Copyright (c) 1997-1998 Erez Zadok +.\" Copyright (c) 1990 Jan-Simon Pendry +.\" Copyright (c) 1990 Imperial College of Science, Technology & Medicine +.\" Copyright (c) 1990 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Jan-Simon Pendry at Imperial College, London. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgment: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" %W% (Berkeley) %G% +.\" +.\" $Id: wire-test.8,v 1.1 1998/11/05 02:04:56 ezk Exp $ +.\" +.TH WIRE-TEST 8L "26 Feb 1993" +.SH NAME +wire-test \- test your network interfaces and local IP address +.SH SYNOPSIS +.B wire-test +[ +.I host +] +.SH DESCRIPTION +.LP +.B wire-test +is used to find out what amd thinks are the first two network +interfaces and network names/numbers used, as well as the IP address +used for amd to NFS-mount itself. + +If +.I host +is specified, then +.B wire-test +will test for the working combinations of NFS protocol and version from +the current client to the NFS server +.I host. +If not specified, +.I host +defaults to "localhost". + +.SH "SEE ALSO" +.BR amd (8). diff --git a/wire-test/wire-test.c b/wire-test/wire-test.c new file mode 100644 index 0000000..4bfd4f5 --- /dev/null +++ b/wire-test/wire-test.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 1997-1998 Erez Zadok + * Copyright (c) 1990 Jan-Simon Pendry + * Copyright (c) 1990 Imperial College of Science, Technology & Medicine + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Jan-Simon Pendry at Imperial College, London. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * %W% (Berkeley) %G% + * + * $Id: wire-test.c,v 1.1 1998/11/05 02:04:56 ezk Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ +#include + +#define STRMAX 100 + +/* dummy variables */ +char *progname, hostname[MAXHOSTNAMELEN + 1]; +int orig_umask, foreground, debug_flags; +pid_t mypid; +serv_state amd_state; + +int +main(int argc, char **argv) +{ + char *networkName1, *networkNumber1; + struct in_addr myipaddr; /* (An) IP address of this host */ + char *testhost, *proto, *tmp_buf; + int nv, ret; + struct sockaddr_in *ip; + struct hostent *hp = 0; + + progname = argv[0]; + mypid = getpid(); + orig_umask = umask(0); + + if (gethostname(hostname, sizeof(hostname)) < 0) { + perror(argv[0]); + exit(1); + } + hostname[sizeof(hostname) - 1] = '\0'; + + /* get list of networks */ + getwire(&networkName1, &networkNumber1); + tmp_buf = print_wires(); + if (tmp_buf) { + fprintf(stderr, "%s", tmp_buf); + XFREE(tmp_buf); + } + + /* also print my IP address */ + amu_get_myaddress(&myipaddr); + fprintf(stderr, "My IP address is 0x%x.\n", (unsigned int) htonl(myipaddr.s_addr)); + + /* + * NFS VERSION/PROTOCOL TESTS: + * If argv[1] is specified perform nfs tests to that host, else use + * localhost. + */ + if (argc > 1) + testhost = argv[1]; + else + testhost = "localhost"; + hp = gethostbyname(testhost); + if (!hp) { + fprintf(stderr, "NFS vers/proto failed: no such hostname \"%s\"\n", testhost); + exit(1); + } + ip = (struct sockaddr_in *) xmalloc(sizeof(struct sockaddr_in)); + memset((voidp) ip, 0, sizeof(*ip)); + ip->sin_family = AF_INET; + memmove((voidp) &ip->sin_addr, (voidp) hp->h_addr, sizeof(ip->sin_addr)); + ip->sin_port = htons(NFS_PORT); + + xlog_level = 0; /* turn off debugging */ + fprintf(stderr, "NFS Version and protocol tests to host \"%s\"...\n", testhost); + proto = "udp"; + for (nv=2; nv<=3; ++nv) { + fprintf(stderr, "\ttesting vers=%d, proto=\"%s\" -> ", nv, proto); + ret = get_nfs_version(testhost, ip, nv, proto); + if (ret == 0) + fprintf(stderr, "failed!\n"); + else + fprintf(stderr, "found version %d.\n", ret); + } + + proto = "tcp"; + for (nv=2; nv<=3; ++nv) { + fprintf(stderr, "\ttesting vers=%d, proto=\"%s\" -> ", nv, proto); + ret = get_nfs_version(testhost, ip, nv, proto); + if (ret == 0) + fprintf(stderr, "failed!\n"); + else + fprintf(stderr, "found version %d.\n", ret); + } + + exit(0); + return 0; /* should never reach here */ +} -- 2.43.0