X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmountd%2Fmountd.c;h=4df7083e1815efd11d99b026d1e88ae5082b220b;hb=75cbc5abeb4b1d39abf298be217783c2b0889ae5;hp=7f54be6e263ba7f37d6e3386f292bb15d2558827;hpb=93a8e35ff8def529f41b82a13440f2e9b46d0dbd;p=nfs-utils.git diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index 7f54be6..4df7083 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -36,6 +36,7 @@ static struct option longopts[] = { "no-nfs-version", 1, 0, 'N' }, { "version", 0, 0, 'v' }, { "port", 1, 0, 'p' }, + { "no-tcp", 0, 0, 'n' }, { NULL, 0, 0, 0 } }; @@ -76,8 +77,10 @@ mount_mnt_1_svc(struct svc_req *rqstp, dirpath *path, fhstatus *res) bool_t mount_dump_1_svc(struct svc_req *rqstp, void *argp, mountlist *res) { + struct sockaddr_in *addr = + (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); xlog(L_NOTICE, "dump request from %s", - inet_ntoa(svc_getcaller(rqstp->rq_xprt)->sin_addr)); + inet_ntoa(addr->sin_addr)); *res = mountlist_list(); return 1; @@ -86,7 +89,8 @@ mount_dump_1_svc(struct svc_req *rqstp, void *argp, mountlist *res) bool_t mount_umnt_1_svc(struct svc_req *rqstp, dirpath *argp, void *resp) { - struct sockaddr_in *sin = svc_getcaller(rqstp->rq_xprt); + struct sockaddr_in *sin + = (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); nfs_export *exp; char *p = *argp; char rpath[MAXPATHLEN+1]; @@ -113,15 +117,17 @@ mount_umntall_1_svc(struct svc_req *rqstp, void *argp, void *resp) /* Reload /etc/xtab if necessary */ auth_reload(); - mountlist_del_all(svc_getcaller(rqstp->rq_xprt)); + mountlist_del_all((struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt)); return 1; } bool_t mount_export_1_svc(struct svc_req *rqstp, void *argp, exports *resp) { + struct sockaddr_in *addr = + (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); xlog(L_NOTICE, "export request from %s", - inet_ntoa(svc_getcaller(rqstp->rq_xprt)->sin_addr)); + inet_ntoa(addr->sin_addr)); *resp = get_exportlist(); return 1; } @@ -129,8 +135,10 @@ mount_export_1_svc(struct svc_req *rqstp, void *argp, exports *resp) bool_t mount_exportall_1_svc(struct svc_req *rqstp, void *argp, exports *resp) { + struct sockaddr_in *addr = + (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); xlog(L_NOTICE, "exportall request from %s", - inet_ntoa(svc_getcaller(rqstp->rq_xprt)->sin_addr)); + inet_ntoa(addr->sin_addr)); *resp = get_exportlist(); return 1; } @@ -149,7 +157,8 @@ mount_exportall_1_svc(struct svc_req *rqstp, void *argp, exports *resp) bool_t mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) { - struct sockaddr_in *sin = svc_getcaller(rqstp->rq_xprt); + struct sockaddr_in *sin + = (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); struct stat stb; nfs_export *exp; char rpath[MAXPATHLEN+1]; @@ -220,7 +229,8 @@ mount_mnt_3_svc(struct svc_req *rqstp, dirpath *path, mountres3 *res) static struct nfs_fh_len * get_rootfh(struct svc_req *rqstp, dirpath *path, int *error, int v3) { - struct sockaddr_in *sin = svc_getcaller(rqstp->rq_xprt); + struct sockaddr_in *sin = + (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); struct stat stb; nfs_export *exp; char rpath[MAXPATHLEN+1]; @@ -254,7 +264,7 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, int *error, int v3) } else { struct nfs_fh_len *fh; - if (!exp->m_exported) + if (exp->m_exported<1) export_export(exp); if (!exp->m_xtabent) xtab_append(exp); @@ -410,6 +420,9 @@ main(int argc, char **argv) case 'N': nfs_version &= ~(1 << (atoi (optarg) - 1)); break; + case 'n': + _rpcfdtype = SOCK_DGRAM; + break; case 'V': nfs_version |= 1 << (atoi (optarg) - 1); break; @@ -436,6 +449,8 @@ main(int argc, char **argv) sigaction(SIGHUP, &sa, NULL); sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); + /* WARNING: the following works on Linux and SysV, but not BSD! */ + sigaction(SIGCHLD, &sa, NULL); if (nfs_version & 0x1) rpc_init("mountd", MOUNTPROG, MOUNTVERS, @@ -488,6 +503,6 @@ usage(const char *prog, int n) "Usage: %s [-Fhnv] [-d kind] [-f exports-file] [-V version]\n" " [-N version] [--debug kind] [-p|--port port] [--help] [--version]\n" " [--exports-file=file] [--nfs-version version]\n" -" [--no-nfs-version version]\n", prog); +" [--no-nfs-version version] [--no-tcp]\n", prog); exit(n); }