Date: Wed, 23 Oct 2013 18:36:06 +0000 (UTC) From: Will Andrews <will@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r257004 - in projects/vps/sys: kern vps Message-ID: <201310231836.r9NIa6nn094098@svn.freebsd.org>
index | next in thread | raw e-mail
Author: will Date: Wed Oct 23 18:36:05 2013 New Revision: 257004 URL: http://svnweb.freebsd.org/changeset/base/257004 Log: Sync with svn.7he.at/vps/trunk r199. r199 | klaus | 2013-07-30 04:29:38 -0600 (Tue, 30 Jul 2013) | 3 lines Showing relative paths for mountpoints in vps. Submitted by: Klaus P. Ohrhallinger <k@7he.at> Modified: projects/vps/sys/kern/vfs_syscalls.c projects/vps/sys/vps/vps2.h projects/vps/sys/vps/vps_priv.c Modified: projects/vps/sys/kern/vfs_syscalls.c ============================================================================== --- projects/vps/sys/kern/vfs_syscalls.c Wed Oct 23 18:35:06 2013 (r257003) +++ projects/vps/sys/kern/vfs_syscalls.c Wed Oct 23 18:36:05 2013 (r257004) @@ -339,9 +339,18 @@ kern_statfs(struct thread *td, char *pat error = VFS_STATFS(mp, sp); if (error) goto out; - if (priv_check(td, PRIV_VFS_GENERATION)) { +#ifdef VPS + if (td->td_ucred->cr_vps != vps0) { bcopy(sp, &sb, sizeof(sb)); sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0; + vps_statfs(td->td_ucred, mp, &sb); + sp = &sb; + } +#endif + if (priv_check(td, PRIV_VFS_GENERATION)) { + if (sp != &sb) + bcopy(sp, &sb, sizeof(sb)); + sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0; prison_enforce_statfs(td->td_ucred, mp, &sb); sp = &sb; } @@ -423,9 +432,18 @@ kern_fstatfs(struct thread *td, int fd, error = VFS_STATFS(mp, sp); if (error) goto out; - if (priv_check(td, PRIV_VFS_GENERATION)) { +#ifdef VPS + if (td->td_ucred->cr_vps != vps0) { bcopy(sp, &sb, sizeof(sb)); sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0; + vps_statfs(td->td_ucred, mp, &sb); + sp = &sb; + } +#endif + if (priv_check(td, PRIV_VFS_GENERATION)) { + if (sp != &sb) + bcopy(sp, &sb, sizeof(sb)); + sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0; prison_enforce_statfs(td->td_ucred, mp, &sb); sp = &sb; } @@ -536,9 +554,18 @@ kern_getfsstat(struct thread *td, struct vfs_unbusy(mp); continue; } - if (priv_check(td, PRIV_VFS_GENERATION)) { +#ifdef VPS + if (td->td_ucred->cr_vps != vps0) { bcopy(sp, &sb, sizeof(sb)); sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0; + vps_statfs(td->td_ucred, mp, &sb); + sp = &sb; + } +#endif + if (priv_check(td, PRIV_VFS_GENERATION)) { + if (sp != &sb) + bcopy(sp, &sb, sizeof(sb)); + sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0; prison_enforce_statfs(td->td_ucred, mp, &sb); sp = &sb; } Modified: projects/vps/sys/vps/vps2.h ============================================================================== --- projects/vps/sys/vps/vps2.h Wed Oct 23 18:35:06 2013 (r257003) +++ projects/vps/sys/vps/vps2.h Wed Oct 23 18:36:05 2013 (r257004) @@ -162,7 +162,6 @@ int vps_free_locked(struct vps *); int vps_destroy(struct vps *); void vps_ref(struct vps *, struct ucred *); void vps_deref(struct vps *, struct ucred *); -int vps_canseemount(struct ucred *, struct mount *); int vps_devfs_ruleset_create(struct vps *vps); int vps_devfs_ruleset_destroy(struct vps *vps); @@ -219,6 +218,9 @@ int vps_ioc_getconsfd(struct vps *, stru struct in_addr; struct in6_addr; struct vps_arg_item; +struct ucred; +struct mount; +struct statfs; void vps_priv_setdefault(struct vps *, struct vps_param *); int vps_priv_setitem(struct vps *, struct vps *, struct vps_arg_item *); @@ -228,6 +230,8 @@ int vps_ip_getitemall(struct vps *, stru int vps_priv_check(struct ucred *, int); int vps_ip4_check(struct vps *, struct in_addr *, struct in_addr *); int vps_ip6_check(struct vps *, struct in6_addr *, u_int8_t); +int vps_canseemount(struct ucred *, struct mount *); +void vps_statfs(struct ucred *cred, struct mount *mp, struct statfs *sp); int vps_console_fdopen(struct cdev *, int, struct thread *, struct file *); int vps_console_init(void); Modified: projects/vps/sys/vps/vps_priv.c ============================================================================== --- projects/vps/sys/vps/vps_priv.c Wed Oct 23 18:35:06 2013 (r257003) +++ projects/vps/sys/vps/vps_priv.c Wed Oct 23 18:36:05 2013 (r257004) @@ -550,6 +550,37 @@ out: return (error); } +void +vps_statfs(struct ucred *cred, struct mount *mp, struct statfs *sp) +{ + char buf[MAXPATHLEN]; + struct vps *vps; + int len; + + vps = cred->cr_vps; + + if (vps == vps0) + return; + + if (vps->_rootpath[0] == 0) + return; + + memcpy(buf, sp->f_mntonname, sizeof(buf)); + bzero(sp->f_mntonname, sizeof(sp->f_mntonname)); + len = sizeof(buf) - strlen(vps->_rootpath); + if (len > sizeof(sp->f_mntonname)) + len = sizeof(sp->f_mntonname); + memcpy(sp->f_mntonname, buf + strlen(vps->_rootpath), len); + sp->f_mntonname[sizeof(sp->f_mntonname) - 1] = '\0'; + + if (sp->f_mntonname[0] == '\0') + /* This is the case where for the root fs. */ + strcpy(sp->f_mntonname, "/"); + + DBGCORE("%s: vps=%p [%s] --> [%s]\n", + __func__, vps, buf, sp->f_mntonname); +} + int vps_priv_setitem(struct vps *vpsp, struct vps *vps, struct vps_arg_item *item)help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310231836.r9NIa6nn094098>
