mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-27 10:03:20 +00:00
From [1]:
- Update to version 0.3.9-pre1.20080208 (agreed with author). - Download directly from the Mercurial reposirory (as tarball), to ease maintainence. - Remove all local patches as they were integrated. - Convert setup.sh into setup.sh.in, and use SUB_FILES instead of manual replacement. - Use kldload instead of rc.d script in setup.sh.in because the latter gives an error. - Remove "sleep 1" from rc.d script as now the FUSE daemon makes umount wait until disks are synced (synchronous unmount). - Update pkg-message. From [2]: - Pass SRC_BASE to the actual build (previously was only used by the port to detect if the source was installed, but not passed to the internal Makefile). PR: ports/120420 [1], ports/118112 [2] Submitted by: alepulver [1], Yuri Pankov <yuri.pankov@gmail.com> [2] Approved by: maintainer (timeout) [1], maintainer [2]
This commit is contained in:
parent
3947b8268d
commit
6b3f87a53a
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=207369
@ -6,13 +6,12 @@
|
||||
#
|
||||
|
||||
PORTNAME= fusefs
|
||||
DISTVERSION= 0.3.9-pre1
|
||||
PORTREVISION= 3
|
||||
DISTVERSION= 0.3.9-pre1.20080208
|
||||
CATEGORIES= sysutils kld
|
||||
MASTER_SITES= http://fuse4bsd.creo.hu/downloads/ \
|
||||
http://am-productions.biz/docs/
|
||||
MASTER_SITES= http://mercurial.creo.hu/repos/fuse4bsd-hg/index.cgi/archive/
|
||||
PKGNAMESUFFIX= -kmod
|
||||
DISTNAME= fuse4bsd-${DISTVERSION}
|
||||
DISTNAME= ${HG_SHORTREV}
|
||||
DIST_SUBDIR= fuse4bsd
|
||||
|
||||
MAINTAINER= amistry@am-productions.biz
|
||||
COMMENT= Kernel module for fuse
|
||||
@ -23,15 +22,17 @@ BUILD_DEPENDS= fusefs-libs>2.4.1:${PORTSDIR}/sysutils/fusefs-libs
|
||||
BUILD_DEPENDS+= deplate:${PORTSDIR}/textproc/ruby-deplate
|
||||
.endif
|
||||
|
||||
USE_BZIP2= yes
|
||||
MAKE_ENV= BINDIR="${PREFIX}/sbin" MANDIR="${PREFIX}/man/man"
|
||||
USE_RC_SUBR= fusefs
|
||||
MAKE_ENV= BINDIR="${PREFIX}/sbin" MANDIR="${MANPREFIX}/man/man" \
|
||||
KMODDIR="${KMODDIR}" SYSDIR="${SRC_BASE}/sys" \
|
||||
MOUNT="${SRC_BASE}/sbin/mount"
|
||||
WRKSRC= ${WRKDIR}/fuse4bsd-${HG_SHORTREV}
|
||||
DISABLE_SIZE= yes
|
||||
|
||||
SRC_BASE?= /usr/src
|
||||
KMODDIR= ${PREFIX}/modules
|
||||
MAKE_ARGS= KMODDIR=${KMODDIR}
|
||||
MODULE_PATH= `/sbin/sysctl -n kern.module_path`;${KMODDIR}
|
||||
USE_RC_SUBR= fusefs
|
||||
SETUP= setup.sh
|
||||
HG_SHORTREV= 498acaef33b0
|
||||
|
||||
MAN8= mount_fusefs.8
|
||||
TXT_DOCS= doc.text
|
||||
@ -66,8 +67,10 @@ IGNORE= requires the Kernel source to be installed. Set SRC_BASE if it is not i
|
||||
IGNORE= requires the userland sources to be installed. Set SRC_BASE if it is not in /usr/src
|
||||
.endif
|
||||
|
||||
.if !defined(WITH_AUTOSETUP)
|
||||
SUB_FILES= pkg-message
|
||||
.if defined(WITH_AUTOSETUP)
|
||||
SUB_FILES+= ${SETUP}
|
||||
.else
|
||||
SUB_FILES+= pkg-message
|
||||
.endif
|
||||
|
||||
post-patch:
|
||||
@ -88,10 +91,8 @@ pre-install:
|
||||
post-install:
|
||||
@${LN} -fs ${PREFIX}/sbin/mount_fusefs /usr/sbin
|
||||
.if defined(WITH_AUTOSETUP) && !defined(PACKAGE_BUILDING)
|
||||
@${SED} -e 's|@@PREFIX@@|${PREFIX}|g' \
|
||||
${FILESDIR}/${SETUP} > ${WRKDIR}/${SETUP}
|
||||
@${ECHO} "Modifying global startup config files and loading module...";
|
||||
${SH} ${WRKDIR}/${SETUP}
|
||||
@${ECHO} "Modifying global startup config files and loading module..."
|
||||
@${SH} ${WRKDIR}/${SETUP}
|
||||
.else
|
||||
@${ECHO_CMD}; ${CAT} ${PKGMESSAGE}; ${ECHO_CMD}
|
||||
.endif
|
||||
|
@ -1,3 +1,3 @@
|
||||
MD5 (fuse4bsd-0.3.9-pre1.tar.bz2) = d427d6c831794f6d62ce1aef9f254f9e
|
||||
SHA256 (fuse4bsd-0.3.9-pre1.tar.bz2) = e339fce188b3667ca267f8d672d3f9657d61e384d54997a93d64ddd178fd55d7
|
||||
SIZE (fuse4bsd-0.3.9-pre1.tar.bz2) = 112627
|
||||
MD5 (fuse4bsd/498acaef33b0.tar.gz) = 9fd12d284be9450dae0ec5e718a5bc8e
|
||||
SHA256 (fuse4bsd/498acaef33b0.tar.gz) = 70ec94c6700f6395316c68d60ba0307236b20cddd6aeeedd4597870e7670ff2a
|
||||
SIZE (fuse4bsd/498acaef33b0.tar.gz) = 116037
|
||||
|
@ -40,13 +40,13 @@ fusefs_stop()
|
||||
return 1
|
||||
fi
|
||||
echo "Stopping ${name}."
|
||||
# Unmount FUSE filesystems in reverse order (in case they are nested) with
|
||||
# a delay of one second after, to allow 'umount' finish.
|
||||
# Unmount FUSE filesystems in reverse order (in case they are nested) to
|
||||
# allow recent FUSE implementation to synchronize disks before shutdown.
|
||||
mount | sed -e '1!G;h;$!d' | while read dev d1 mountpoint d2; do
|
||||
case "$dev" in
|
||||
/dev/fuse[0-9]*)
|
||||
echo "fusefs: unmounting ${mountpoint}."
|
||||
umount $mountpoint ; sleep 1
|
||||
umount $mountpoint
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
@ -1,35 +0,0 @@
|
||||
--- fuse_module/fuse_io.c.orig 2007-06-19 16:35:22.000000000 +0400
|
||||
+++ fuse_module/fuse_io.c 2008-01-20 20:47:05.000000000 +0300
|
||||
@@ -139,7 +139,11 @@
|
||||
struct vnode *vp = fp->f_vnode;
|
||||
int err = 0;
|
||||
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
|
||||
+#else
|
||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
+#endif
|
||||
|
||||
ASSERT_VOP_LOCKED__FH(vp);
|
||||
if (_file_is_bad(fp) || ! _file_is_fat(fp)) {
|
||||
@@ -148,7 +152,7 @@
|
||||
}
|
||||
|
||||
if (uio->uio_resid == 0)
|
||||
- return (0);
|
||||
+ goto out;
|
||||
|
||||
if (uio->uio_rw == UIO_WRITE && fp->f_flag & O_APPEND) {
|
||||
if ((err = VOP_GETATTR(vp, &va, cred, td)))
|
||||
@@ -166,7 +170,11 @@
|
||||
fp->f_nextoff = uio->uio_offset;
|
||||
|
||||
out:
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ VOP_UNLOCK(vp, 0);
|
||||
+#else
|
||||
VOP_UNLOCK(vp, 0, td);
|
||||
+#endif
|
||||
|
||||
DEBUG("leaving with %d\n", err);
|
||||
return (err);
|
@ -1,18 +0,0 @@
|
||||
--- fuse_module/Makefile.orig 2007-06-19 14:35:22.000000000 +0200
|
||||
+++ fuse_module/Makefile 2007-08-16 18:31:50.000000000 +0200
|
||||
@@ -21,7 +21,14 @@
|
||||
.endif
|
||||
|
||||
.if defined(KERNCONF)
|
||||
-KERNCONFDIR= /usr/obj/usr/src/sys/${KERNCONF}
|
||||
+.if !defined(MAKEOBJDIRPREFIX)
|
||||
+MAKEOBJDIRPREFIX=/usr/obj
|
||||
+.endif
|
||||
+.if !defined(SRC_BASE)
|
||||
+SRC_BASE=/usr/src
|
||||
+.endif
|
||||
+KERNCONF1!= echo ${KERNCONF} | sed -e 's/ .*//g'
|
||||
+KERNCONFDIR= ${MAKEOBJDIRPREFIX}${SRC_BASE}/sys/${KERNCONF1}
|
||||
.endif
|
||||
|
||||
.if defined(KERNCONFDIR)
|
@ -1,36 +0,0 @@
|
||||
--- fuse_module/fuse.h.orig Tue Jun 19 14:35:22 2007
|
||||
+++ fuse_module/fuse.h Sat Jul 14 13:23:37 2007
|
||||
@@ -33,6 +33,24 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#ifndef USE_PRIVILEGE_API
|
||||
+/*
|
||||
+ * __FreeBSD_version bump was omitted for introduction of
|
||||
+ * the privilege API (both when it's been added and when the
|
||||
+ * legacy API has been removed), so here we just use the first
|
||||
+ * value of __FreeBSD_version after adding the priv stuff.
|
||||
+ */
|
||||
+#if __FreeBSD_version >= 700025
|
||||
+#define USE_PRIVILEGE_API 1
|
||||
+#else
|
||||
+#define USE_PRIVILEGE_API 0
|
||||
+#endif
|
||||
+#endif
|
||||
+#if ! USE_PRIVILEGE_API
|
||||
+#define priv_check(td, priv) suser(td)
|
||||
+#define priv_check_cred(cred, priv, flag) suser_cred(cred, SUSER_ALLOWJAIL)
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* Appearance of new FUSE operations is not always in par with version
|
||||
* numbering... At least, 7.3 is a sufficient condition for having
|
||||
@@ -210,7 +228,7 @@
|
||||
void fprettyprint(struct fuse_iov *fiov, size_t dlen);
|
||||
#endif
|
||||
|
||||
-#if _DEBUG || _DEBUG2G || _DEBUG3G || defined(INVARIANTS)
|
||||
+#if _DEBUG || _DEBUG2G || _DEBUG3G || defined(INVARIANTS) || FUSELIB_CONFORM_BIOREAD
|
||||
int isbzero(void *buf, size_t len);
|
||||
#endif
|
||||
|
@ -1,108 +0,0 @@
|
||||
--- fuse_module/fuse_vfsops.c.orig 2007-06-19 16:35:22.000000000 +0400
|
||||
+++ fuse_module/fuse_vfsops.c 2008-01-20 20:39:38.000000000 +0300
|
||||
@@ -23,6 +23,18 @@
|
||||
#include "fuse_session.h"
|
||||
#include "fuse_vnode.h"
|
||||
|
||||
+#if USE_PRIVILEGE_API
|
||||
+#include <sys/priv.h>
|
||||
+#endif
|
||||
+
|
||||
+/* This will do for privilege types for now */
|
||||
+#ifndef PRIV_VFS_FUSE_ALLOWOTHER
|
||||
+#define PRIV_VFS_FUSE_ALLOWOTHER PRIV_VFS_MOUNT_NONUSER
|
||||
+#endif
|
||||
+#ifndef PRIV_VFS_FUSE_MOUNT_NONUSER
|
||||
+#define PRIV_VFS_FUSE_MOUNT_NONUSER PRIV_VFS_MOUNT_NONUSER
|
||||
+#endif
|
||||
+
|
||||
static int fuse_init_handler(struct fuse_ticket *tick, struct uio *uio);
|
||||
static void fuse_send_init(struct fuse_data *data, struct thread *td);
|
||||
static vfs_hash_cmp_t fuse_vnode_bgdrop_cmp;
|
||||
@@ -207,10 +219,8 @@
|
||||
KASSERT(fuse_useco >= 0,
|
||||
("negative fuse usecount despite Giant"));
|
||||
|
||||
- if (mp->mnt_flag & MNT_UPDATE) {
|
||||
- uprintf("fuse: updating mounts is not supported\n");
|
||||
+ if (mp->mnt_flag & MNT_UPDATE)
|
||||
return (EOPNOTSUPP);
|
||||
- }
|
||||
|
||||
mp->mnt_flag |= MNT_SYNCHRONOUS;
|
||||
/* Get the new options passed to mount */
|
||||
@@ -293,10 +303,8 @@
|
||||
|
||||
if (fdata_kick_get(data))
|
||||
err = ENOTCONN;
|
||||
- if (mntopts & FSESS_DAEMON_CAN_SPY && suser(td)) {
|
||||
- uprintf("only root can use \"allow_other\"\n");
|
||||
- err = EPERM;
|
||||
- }
|
||||
+ if (mntopts & FSESS_DAEMON_CAN_SPY)
|
||||
+ err = priv_check(td, PRIV_VFS_FUSE_ALLOWOTHER);
|
||||
|
||||
slock = &data->mhierlock;
|
||||
/* Note that sx_try_xlock returns 0 on _failure_ */
|
||||
@@ -334,10 +342,9 @@
|
||||
*/
|
||||
err = EINVAL;
|
||||
} else {
|
||||
- if (suser(td) &&
|
||||
- td->td_ucred->cr_uid != data->daemoncred->cr_uid)
|
||||
- /* we are not allowed to do the first mount */
|
||||
- err = EPERM;
|
||||
+ if (td->td_ucred->cr_uid != data->daemoncred->cr_uid)
|
||||
+ /* are we allowed to do the first mount? */
|
||||
+ err = priv_check(td, PRIV_VFS_FUSE_MOUNT_NONUSER);
|
||||
}
|
||||
|
||||
if (err) {
|
||||
@@ -370,7 +377,11 @@
|
||||
|
||||
err = getnewvnode("fuse", mp, &fuse_vnops, &rvp);
|
||||
if (! err) {
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ err = vn_lock(rvp, LK_EXCLUSIVE | LK_RETRY);
|
||||
+#else
|
||||
err = vn_lock(rvp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
+#endif
|
||||
#if NEW_VNODES_ADJUSTED_MANUALLY
|
||||
if (err)
|
||||
printf("fuse4bsd: leaking vnode %p\n", rvp);
|
||||
@@ -398,7 +409,11 @@
|
||||
free(fvdat, M_FUSEVN);
|
||||
goto out;
|
||||
} else
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ VOP_UNLOCK(rvp, 0);
|
||||
+#else
|
||||
VOP_UNLOCK(rvp, 0, td);
|
||||
+#endif
|
||||
|
||||
data->mp = mp;
|
||||
data->mpri = FM_PRIMARY;
|
||||
@@ -582,7 +597,11 @@
|
||||
|
||||
vp = data->rvp;
|
||||
vref(vp);
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ vn_lock(vp, flags | LK_RETRY);
|
||||
+#else
|
||||
vn_lock(vp, flags | LK_RETRY, td);
|
||||
+#endif
|
||||
if (vp->v_type == VNON) {
|
||||
struct vattr va;
|
||||
|
||||
@@ -808,7 +827,11 @@
|
||||
}
|
||||
|
||||
#if NEW_VNODES_ADJUSTED_MANUALLY
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ err = vn_lock(*vpp, myflags);
|
||||
+#else
|
||||
err = vn_lock(*vpp, myflags, td);
|
||||
+#endif
|
||||
if (err)
|
||||
printf("fuse4bsd: leaking vnode %p\n", *vpp);
|
||||
else
|
@ -1,211 +0,0 @@
|
||||
--- fuse_module/fuse_vnops.c.orig 2007-06-19 16:35:22.000000000 +0400
|
||||
+++ fuse_module/fuse_vnops.c 2008-01-20 20:45:28.000000000 +0300
|
||||
@@ -42,6 +42,10 @@
|
||||
#include "fuse_vnode.h"
|
||||
#include "fuse_io.h"
|
||||
|
||||
+#if USE_PRIVILEGE_API
|
||||
+#include <sys/priv.h>
|
||||
+#endif
|
||||
+
|
||||
/* function prototype for iterators over filehandles (of a vp) */
|
||||
typedef int fuse_metrics_t(struct vnode *vp, struct thread *td,
|
||||
struct ucred *cred, struct fuse_filehandle *fufh,
|
||||
@@ -63,7 +67,9 @@
|
||||
#define FACCESS_CHOWN 0x08 /* do permission check for owner changing */
|
||||
#define FACCESS_NOCHECKSPY 0x10 /* don't check if daemon is allowed to spy on
|
||||
user */
|
||||
-#define FACCESS_XQUERIES FACCESS_STICKY | FACCESS_CHOWN
|
||||
+#define FACCESS_SETGID 0x12 /* do permission check for setting setgid flag */
|
||||
+
|
||||
+#define FACCESS_XQUERIES FACCESS_STICKY | FACCESS_CHOWN | FACCESS_SETGID
|
||||
|
||||
#define FVP_ACCESS_NOOP 0x01 /* vnode based control flag for doing access check */
|
||||
|
||||
@@ -855,6 +861,7 @@
|
||||
|
||||
/*
|
||||
* Attribute caching hasn't yet been implemented.
|
||||
+ * [... Update: it _has been_ implemented.]
|
||||
* However, within one function we don't wanna query attributes
|
||||
* several times. Now it's enough pull the attributes once, and throw
|
||||
* it into the following routine with various modes.
|
||||
@@ -929,12 +936,16 @@
|
||||
mode == VWRITE) {
|
||||
if (cred->cr_uid != facp->xuid &&
|
||||
cred->cr_uid != VTOVA(vp)->va_uid)
|
||||
- err = suser_cred(cred, SUSER_ALLOWJAIL);
|
||||
+ err = priv_check_cred(cred,
|
||||
+ PRIV_VFS_ADMIN,
|
||||
+ 0);
|
||||
}
|
||||
/*
|
||||
* We return here because this flags is exlusive
|
||||
* with the others
|
||||
*/
|
||||
+ KASSERT(facp->facc_flags == FACCESS_STICKY,
|
||||
+ ("sticky access check comes in mixed"));
|
||||
return (err);
|
||||
}
|
||||
|
||||
@@ -947,10 +958,21 @@
|
||||
(cred->cr_gid != facp->xgid &&
|
||||
facp->xgid != (gid_t)VNOVAL &&
|
||||
! groupmember(facp->xgid, cred)))
|
||||
- err = suser_cred(cred, SUSER_ALLOWJAIL);
|
||||
- return (err);
|
||||
+ err = priv_check_cred(cred, PRIV_VFS_CHOWN, 0);
|
||||
+ if (err)
|
||||
+ return (err);
|
||||
}
|
||||
|
||||
+ if (facp->facc_flags & FACCESS_SETGID) {
|
||||
+ gid_t sgid = facp->xgid;
|
||||
+
|
||||
+ if (sgid == (gid_t)VNOVAL)
|
||||
+ sgid = VTOVA(vp)->va_gid;
|
||||
+
|
||||
+ if (! groupmember(sgid, cred))
|
||||
+ err = priv_check_cred(cred, PRIV_VFS_SETGID, 0);
|
||||
+ return (err);
|
||||
+ }
|
||||
|
||||
} else {
|
||||
#if FUSE_HAS_ACCESS
|
||||
@@ -1234,7 +1256,13 @@
|
||||
*/
|
||||
if (nameiop == RENAME && wantparent && islastcn) {
|
||||
DEBUG("something to rename...\n");
|
||||
- if ((err = fuse_access_i(dvp, VWRITE, cred, td, &facp)))
|
||||
+
|
||||
+ facp.xuid = fattr->uid;
|
||||
+ facp.facc_flags |= FACCESS_STICKY;
|
||||
+ err = fuse_access_i(dvp, VWRITE, cred, td, &facp);
|
||||
+ facp.facc_flags &= ~FACCESS_XQUERIES;
|
||||
+
|
||||
+ if (err)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
@@ -1270,12 +1298,20 @@
|
||||
* If doing dotdot, we unlock dvp for vget time
|
||||
* to conform lock order regulations.
|
||||
*/
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ VOP_UNLOCK(dvp, 0);
|
||||
+#else
|
||||
VOP_UNLOCK(dvp, 0, td);
|
||||
+#endif
|
||||
err = fuse_vget_i(dvp->v_mount, td, nid,
|
||||
IFTOVT(fattr->mode), &vp, VG_NORMAL,
|
||||
parentid);
|
||||
if (flags & ISDOTDOT)
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
|
||||
+#else
|
||||
vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
+#endif
|
||||
if (err)
|
||||
goto out;
|
||||
*vpp = vp;
|
||||
@@ -1540,7 +1576,11 @@
|
||||
cache_attrs(vp, feo);
|
||||
|
||||
try_insert:
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ VOP_UNLOCK(vp, 0);
|
||||
+#else
|
||||
VOP_UNLOCK(vp, 0, td);
|
||||
+#endif
|
||||
/*
|
||||
* We can't let the vnode being vput() here, the caller wants
|
||||
* that do by herself.
|
||||
@@ -1555,7 +1595,11 @@
|
||||
|
||||
#if NEW_VNODES_ADJUSTED_MANUALLY
|
||||
if (! err) {
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ err = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
|
||||
+#else
|
||||
err = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
+#endif
|
||||
if (err)
|
||||
printf("fuse4bsd: leaking vnode %p\n", vp);
|
||||
else {
|
||||
@@ -1928,7 +1972,11 @@
|
||||
if (! _file_is_fat(fp))
|
||||
panic("non-fat file passed to close routine");
|
||||
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
|
||||
+#else
|
||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
+#endif
|
||||
|
||||
if (_file_is_bad(fp)) {
|
||||
DEBUG2G("fp %p, vnode #%llu: went bad, giving up\n",
|
||||
@@ -2371,8 +2419,11 @@
|
||||
*/
|
||||
if ((err = getnewvnode("fuse", dvp->v_mount, &fuse_vnops, vpp)))
|
||||
return (err);
|
||||
-
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ if ((err = vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY))) {
|
||||
+#else
|
||||
if ((err = vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY, curthread))) {
|
||||
+#endif
|
||||
#if NEW_VNODES_ADJUSTED_MANUALLY
|
||||
printf("fuse4bsd: leaking vnode %p\n", *vpp);
|
||||
#endif
|
||||
@@ -2719,7 +2770,11 @@
|
||||
* No LK_RETRY. See discussion in thread
|
||||
* http://thread.gmane.org/gmane.os.dragonfly-bsd.kernel/8952/focus=8964
|
||||
*/
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ err = vn_lock(fvp, LK_EXCLUSIVE);
|
||||
+#else
|
||||
err = vn_lock(fvp, LK_EXCLUSIVE, td);
|
||||
+#endif
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
@@ -2730,7 +2785,11 @@
|
||||
if ((fcnp->cn_namelen == 1 && fcnp->cn_nameptr[0] == '.')
|
||||
|| fdvp == fvp
|
||||
|| ((fcnp->cn_flags | tcnp->cn_flags) & ISDOTDOT)) {
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ VOP_UNLOCK(fvp, 0);
|
||||
+#else
|
||||
VOP_UNLOCK(fvp, 0, td);
|
||||
+#endif
|
||||
err = EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -2748,7 +2807,11 @@
|
||||
*/
|
||||
err = fuse_access_i(fvp, VWRITE, tcnp->cn_cred, tcnp->cn_thread, &facp);
|
||||
fnid = VTOI(fvp);
|
||||
+#if __FreeBSD_version > 800009
|
||||
+ VOP_UNLOCK(fvp, 0);
|
||||
+#else
|
||||
VOP_UNLOCK(fvp, 0, td);
|
||||
+#endif
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
@@ -2948,8 +3011,14 @@
|
||||
}
|
||||
|
||||
if (vap->va_mode != (mode_t)VNOVAL) {
|
||||
+#if _DEBUG
|
||||
if (vap->va_mode & S_IFMT)
|
||||
- DEBUG("fuse_setattr -- weird: format bits in mode field, 0%o\n", vap->va_mode);
|
||||
+ DEBUG("fuse_setattr -- weird: "
|
||||
+ "format bits in mode field, 0%o\n",
|
||||
+ vap->va_mode);
|
||||
+#endif
|
||||
+ if (vap->va_mode & S_ISGID)
|
||||
+ facp.facc_flags |= FACCESS_SETGID;
|
||||
fsai->FUSEATTR(mode) = vap->va_mode & ALLPERMS;
|
||||
fsai->valid |= FATTR_MODE;
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
--- mount_fusefs/mount_fusefs.c.orig Tue Jun 19 09:35:22 2007
|
||||
+++ mount_fusefs/mount_fusefs.c Thu Dec 13 02:44:12 2007
|
||||
@@ -70,6 +70,8 @@
|
||||
{ "user_id=", 0, 0x00, 1 },
|
||||
{ "group_id=", 0, 0x00, 1 },
|
||||
{ "large_read", 0, 0x00, 1 },
|
||||
+ /* "nonempty", just the first two chars are stripped off during parsing */
|
||||
+ { "nempty", 0, 0x00, 1 },
|
||||
MOPT_STDOPTS,
|
||||
MOPT_END
|
||||
};
|
||||
@@ -469,7 +471,8 @@
|
||||
int
|
||||
init_backgrounded(void)
|
||||
{
|
||||
- int ibg, len;
|
||||
+ int ibg;
|
||||
+ size_t len;
|
||||
|
||||
len = sizeof(ibg);
|
||||
|
@ -13,8 +13,7 @@ Now fuse filesystems (sysutils/fusefs-*) can be mounted at startup from
|
||||
named "mount_<fstype>", which is not created by all the fusefs ports.
|
||||
|
||||
Note that the rc.d script will unmount all fuse filesystems when called with
|
||||
"stop", so it can unload the kernel module, and as a temporary workaround to
|
||||
flush cache in drivers like NTFS-3G (sysutils/fusefs-ntfs) at shutdown (until
|
||||
a proper solution is implemented).
|
||||
"stop" (in reverse order in case of nested mounts), so it can unload the
|
||||
kernel module.
|
||||
|
||||
==============================================================================
|
||||
|
@ -4,9 +4,9 @@
|
||||
SYSCTL_CONFIG=/etc/sysctl.conf
|
||||
LOADER_CONFIG=/etc/rc.conf
|
||||
|
||||
sysctl kern.module_path | grep "[:space:;=]@@PREFIX@@/modules[;]\?\b" > /dev/null 2>&1; RESULT=$?
|
||||
sysctl kern.module_path | grep "[:space:;=]%%PREFIX%%/modules[;]\?\b" > /dev/null 2>&1; RESULT=$?
|
||||
if [ ${RESULT} -eq 1 ]; then
|
||||
MODULE_PATH="`sysctl -n kern.module_path`;@@PREFIX@@/modules"
|
||||
MODULE_PATH="`sysctl -n kern.module_path`;%%PREFIX%%/modules"
|
||||
sysctl "kern.module_path=${MODULE_PATH}"
|
||||
else
|
||||
MODULE_PATH=`sysctl -n kern.module_path`
|
||||
@ -15,10 +15,10 @@ fi
|
||||
grep "kern\.module_path" ${SYSCTL_CONFIG} > /dev/null 2>&1; RESULT=$?
|
||||
if [ ${RESULT} -eq 0 ]; then
|
||||
# Variable present
|
||||
grep "kern\.module_path" ${SYSCTL_CONFIG} | grep "[:space:;=]@@PREFIX@@/modules[;]\?\b" ${SYSCTL_CONFIG} > /dev/null 2>&1; RESULT=$?
|
||||
grep "kern\.module_path" ${SYSCTL_CONFIG} | grep "[:space:;=]%%PREFIX%%/modules[;]\?\b" ${SYSCTL_CONFIG} > /dev/null 2>&1; RESULT=$?
|
||||
if [ ${RESULT} -eq 1 ]; then
|
||||
# Not present in variable, so add
|
||||
ESC_PREFIX=`echo '@@PREFIX@@' | sed -e 's/\//\\\\\//g'`
|
||||
ESC_PREFIX=`echo '%%PREFIX%%' | sed -e 's/\//\\\\\//g'`
|
||||
sed -i .orig -e 's/kern\.module_path[:space:]*=[:space:]*["]*\([[:alnum:][:space:]\.,;\/_-]*\)["]*/kern\.module_path="\1;'${ESC_PREFIX}'\/modules"/g' ${SYSCTL_CONFIG}
|
||||
fi
|
||||
else
|
||||
@ -45,7 +45,7 @@ else
|
||||
echo 'fusefs_enable="YES"' >> ${LOADER_CONFIG}
|
||||
fi
|
||||
|
||||
@@PREFIX@@/etc/rc.d/fusefs start > /dev/null 2>&1 ; RESULT=$?
|
||||
kldload fuse > /dev/null 2>&1 ; RESULT=$?
|
||||
if [ ${RESULT} -ne 0 ]; then
|
||||
echo 'NOTICE: Failed to load the Fuse module!'
|
||||
echo 'NOTICE: Unload and load Fuse module manually, or reboot.'
|
Loading…
Reference in New Issue
Block a user