/* * mount_dispatch This file contains the function dispatch table. * * Copyright (C) 1995 Olaf Kirch */ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_TCP_WRAPPER #include "tcpwrapper.h" #endif #include "mountd.h" #include "rpcmisc.h" /* * Procedures for MNTv1 */ static struct rpc_dentry mnt_1_dtable[] = { dtable_ent(mount_null,1,void,void), /* NULL */ dtable_ent(mount_mnt,1,dirpath,fhstatus), /* MNT */ dtable_ent(mount_dump,1,void,mountlist), /* DUMP */ dtable_ent(mount_umnt,1,dirpath,void), /* UMNT */ dtable_ent(mount_umntall,1,void,void), /* UMNTALL */ dtable_ent(mount_export,1,void,exports), /* EXPORT */ dtable_ent(mount_exportall,1,void,exports), /* EXPORTALL */ }; /* * Procedures for MNTv2 */ static struct rpc_dentry mnt_2_dtable[] = { dtable_ent(mount_null,1,void,void), /* NULL */ dtable_ent(mount_mnt,1,dirpath,fhstatus), /* MNT */ dtable_ent(mount_dump,1,void,mountlist), /* DUMP */ dtable_ent(mount_umnt,1,dirpath,void), /* UMNT */ dtable_ent(mount_umntall,1,void,void), /* UMNTALL */ dtable_ent(mount_export,1,void,exports), /* EXPORT */ dtable_ent(mount_exportall,1,void,exports), /* EXPORTALL */ dtable_ent(mount_pathconf,2,dirpath,ppathcnf), /* PATHCONF */ }; /* * Procedures for MNTv3 */ static struct rpc_dentry mnt_3_dtable[] = { dtable_ent(mount_null,1,void,void), /* NULL */ dtable_ent(mount_mnt,3,dirpath,mountres3), /* MNT */ dtable_ent(mount_dump,1,void,mountlist), /* DUMP */ dtable_ent(mount_umnt,1,dirpath,void), /* UMNT */ dtable_ent(mount_umntall,1,void,void), /* UMNTALL */ dtable_ent(mount_export,1,void,exports), /* EXPORT */ }; #define number_of(x) (sizeof(x)/sizeof(x[0])) static struct rpc_dtable dtable[] = { { mnt_1_dtable, number_of(mnt_1_dtable) }, { mnt_2_dtable, number_of(mnt_2_dtable) }, { mnt_3_dtable, number_of(mnt_3_dtable) }, }; /* * The main dispatch routine. */ void mount_dispatch(struct svc_req *rqstp, SVCXPRT *transp) { union mountd_arguments argument; union mountd_results result; #ifdef HAVE_TCP_WRAPPER /* remote host authorization check */ if (!check_default("mountd", nfs_getrpccaller(transp), MOUNTPROG)) { svcerr_auth (transp, AUTH_FAILED); return; } #endif rpc_dispatch(rqstp, transp, dtable, number_of(dtable), &argument, &result); }