diff options
Diffstat (limited to 'sys/nfsserver')
-rw-r--r-- | sys/nfsserver/nfs_fha_old.c | 30 | ||||
-rw-r--r-- | sys/nfsserver/nfs_serv.c | 1 | ||||
-rw-r--r-- | sys/nfsserver/nfs_srvkrpc.c | 5 |
3 files changed, 31 insertions, 5 deletions
diff --git a/sys/nfsserver/nfs_fha_old.c b/sys/nfsserver/nfs_fha_old.c index 82149b867b20..a9282785fef4 100644 --- a/sys/nfsserver/nfs_fha_old.c +++ b/sys/nfsserver/nfs_fha_old.c @@ -49,7 +49,7 @@ static void fhaold_init(void *foo); static void fhaold_uninit(void *foo); rpcproc_t fhaold_get_procnum(rpcproc_t procnum); int fhaold_realign(struct mbuf **mb, int malloc_flags); -int fhaold_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos); +int fhaold_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos); int fhaold_is_read(rpcproc_t procnum); int fhaold_is_write(rpcproc_t procnum); int fhaold_get_offset(struct mbuf **md, caddr_t *dpos, int v3, @@ -135,9 +135,33 @@ fhaold_realign(struct mbuf **mb, int malloc_flags) } int -fhaold_get_fh(fhandle_t *fh, int v3, struct mbuf **md, caddr_t *dpos) +fhaold_get_fh(uint64_t *fh, int v3, struct mbuf **md, caddr_t *dpos) { - return (nfsm_srvmtofh_xx(fh, v3, md, dpos)); + u_int32_t *tl; + uint8_t *buf; + uint64_t t; + int fhlen, i; + + if (v3) { + tl = nfsm_dissect_xx_nonblock(NFSX_UNSIGNED, md, dpos); + if (tl == NULL) + return EBADRPC; + fhlen = fxdr_unsigned(int, *tl); + if (fhlen != 0 && fhlen != NFSX_V3FH) + return EBADRPC; + } else { + fhlen = NFSX_V2FH; + } + t = 0; + if (fhlen != 0) { + buf = nfsm_dissect_xx_nonblock(fhlen, md, dpos); + if (buf == NULL) + return EBADRPC; + for (i = 0; i < fhlen; i++) + t ^= ((uint64_t)buf[i] << (i & 7) * 8); + } + *fh = t; + return 0; } int diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c index c1a7d2ae9506..de58421d8dab 100644 --- a/sys/nfsserver/nfs_serv.c +++ b/sys/nfsserver/nfs_serv.c @@ -911,6 +911,7 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp, uiop->uio_resid = len; uiop->uio_rw = UIO_READ; uiop->uio_segflg = UIO_SYSSPACE; + uiop->uio_td = NULL; nh = nfsrv_sequential_heuristic(uiop, vp); ioflag |= nh->nh_seqcount << IO_SEQSHIFT; error = VOP_READ(vp, uiop, IO_NODELOCKED | ioflag, cred); diff --git a/sys/nfsserver/nfs_srvkrpc.c b/sys/nfsserver/nfs_srvkrpc.c index 85003b7b1be5..8bd045a32789 100644 --- a/sys/nfsserver/nfs_srvkrpc.c +++ b/sys/nfsserver/nfs_srvkrpc.c @@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$"); #include "opt_kgssapi.h" #include <sys/param.h> -#include <sys/capability.h> +#include <sys/capsicum.h> #include <sys/systm.h> #include <sys/sysproto.h> #include <sys/kernel.h> @@ -68,7 +68,8 @@ __FBSDID("$FreeBSD$"); #include <netinet/tcp.h> #ifdef INET6 #include <net/if.h> -#include <netinet6/in6_var.h> +#include <net/if_var.h> /* XXX: for in6_var.h */ +#include <netinet6/in6_var.h> /* XXX: for ip6_sprintf */ #endif #include <rpc/rpc.h> |