summaryrefslogtreecommitdiffstats
path: root/sys/nfs
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1999-06-30 02:53:51 +0000
committerjulian <julian@FreeBSD.org>1999-06-30 02:53:51 +0000
commit0154a689b36d47b7e5a8521af5492d8e892d94f9 (patch)
tree29b9547c35d89c848e265a0041245e5dee3fdb86 /sys/nfs
parentcd20be7e99cbcb86168130dc60649299448ce927 (diff)
downloadFreeBSD-src-0154a689b36d47b7e5a8521af5492d8e892d94f9.zip
FreeBSD-src-0154a689b36d47b7e5a8521af5492d8e892d94f9.tar.gz
Submitted by: Conrad Minshall <conrad@apple.com>
Reviewed by: Matthew Dillon <dillon@apollo.backplane.com> The following ugly hack to the exit path of nfs_readlinkrpc() circumvents an Auspex bug: for symlinks longer than 112 (0x70) they return a 1024 byte xdr string - the correct data with many nulls appended. Without this fix namei returns ENAMETOOLONG, at least it does on our source base and on FreeBSD 3.0. Note we do not (and should not) rely upon their null padding.
Diffstat (limited to 'sys/nfs')
-rw-r--r--sys/nfs/nfs_vnops.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c
index f146631..c01e7bc 100644
--- a/sys/nfs/nfs_vnops.c
+++ b/sys/nfs/nfs_vnops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_vnops.c 8.16 (Berkeley) 5/27/95
- * $Id: nfs_vnops.c,v 1.132 1999/06/26 02:46:32 mckusick Exp $
+ * $Id: nfs_vnops.c,v 1.133 1999/06/28 12:34:40 peter Exp $
*/
@@ -1009,6 +1009,11 @@ nfs_readlinkrpc(vp, uiop, cred)
nfsm_postop_attr(vp, attrflag);
if (!error) {
nfsm_strsiz(len, NFS_MAXPATHLEN);
+ if (len == NFS_MAXPATHLEN) {
+ struct nfsnode *np = VTONFS(vp);
+ if (np->n_size && np->n_size < NFS_MAXPATHLEN)
+ len = np->n_size;
+ }
nfsm_mtouio(uiop, len);
}
nfsm_reqdone;
OpenPOWER on IntegriCloud