summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Dowse <iedowse@FreeBSD.org>2001-05-19 18:18:20 +0000
committerIan Dowse <iedowse@FreeBSD.org>2001-05-19 18:18:20 +0000
commitabe339b2a65b734b5d91dacf521dd66d3efeff27 (patch)
tree578e75ce30a09e7cf5433ce9d60512a9d96d4b0f
parent2db7a70179d77399e111b940613a509a04c23c03 (diff)
Notes
-rw-r--r--sbin/mountd/mountd.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sbin/mountd/mountd.c b/sbin/mountd/mountd.c
index ffb1b6ebb525..268b210e127c 100644
--- a/sbin/mountd/mountd.c
+++ b/sbin/mountd/mountd.c
@@ -1596,7 +1596,8 @@ do_mount(ep, grp, exflags, anoncrp, dirp, dirplen, fsb)
int dirplen;
struct statfs *fsb;
{
- char *cp = (char *)NULL;
+ struct statfs fsb1;
+ char *cp = NULL;
u_int32_t **addrp;
int done;
char savedc = '\0';
@@ -1705,6 +1706,13 @@ do_mount(ep, grp, exflags, anoncrp, dirp, dirplen, fsb)
}
savedc = *cp;
*cp = '\0';
+ /* Check that we're still on the same filesystem. */
+ if (statfs(dirp, &fsb1) != 0 || bcmp(&fsb1.f_fsid,
+ &fsb->f_fsid, sizeof(fsb1.f_fsid)) != 0) {
+ *cp = savedc;
+ syslog(LOG_ERR, "can't export %s", dirp);
+ return (1);
+ }
}
if (addrp) {
++addrp;