AFS_GUNLOCK();
#if defined(AFS_FBSD80_ENV)
vn_lock(afile->vnode, LK_EXCLUSIVE | LK_RETRY);
- code = VOP_GETATTR(afile->vnode, &tvattr, afs_osi_credp, curthread);
+ code = VOP_GETATTR(afile->vnode, &tvattr, afs_osi_credp);
VOP_UNLOCK(afile->vnode, 0);
#elif defined(AFS_FBSD50_ENV)
vn_lock(afile->vnode, LK_EXCLUSIVE | LK_RETRY, curthread);
AFS_GUNLOCK();
#if defined(AFS_FBSD80_ENV)
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
- code = VOP_GETATTR(afile->vnode, &tvattr, afs_osi_credp, curthread);
+ code = VOP_GETATTR(afile->vnode, &tvattr, afs_osi_credp);
#elif defined(AFS_FBSD50_ENV)
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
code = VOP_GETATTR(afile->vnode, &tvattr, afs_osi_credp, curthread);
VATTR_NULL(&tvattr);
tvattr.va_size = asize;
-#if defined(AFS_FBSD50_ENV)
+#if defined(AFS_FBSD80_ENV)
+ code = VOP_SETATTR(vp, &tvattr, afs_osi_credp);
+#elif defined(AFS_FBSD50_ENV)
code = VOP_SETATTR(vp, &tvattr, afs_osi_credp, curthread);
#else
code = VOP_SETATTR(vp, &tvattr, afs_osi_credp, curproc);
#if defined(AFS_FBSD50_ENV)
#include <sys/mutex.h>
#endif
+#include <sys/vnode.h>
+#if defined(AFS_FBSD80_ENV)
+#include <sys/priv.h>
+#endif
/*
* Time related macros
#define iodone biodone
#endif
+#define VSUID S_ISUID
+#define VSGID S_ISGID
+
#define osi_vnhold(avc,r) vref(AFSTOV(avc))
#define vType(vc) AFSTOV(vc)->v_type
#endif
#define SetAfsVnode(v) /* nothing; done in getnewvnode() */
+#if defined(AFS_FBSD80_ENV)
+#define osi_vinvalbuf(vp, flags, slpflag, slptimeo) \
+ vinvalbuf((vp), (flags), (slpflag), (slptimeo))
+#else
+#define osi_vinvalbuf(vp, flags, slpflag, slptimeo) \
+ vinvalbuf((vp), (flags), (curthread), (slpflag), (slptimeo))
+#endif
+
#undef gop_lookupname
#define gop_lookupname osi_lookupname
#undef gop_lookupname_user
-#define gop_lookupname osi_lookupname_user
-
-#undef afs_suser
+#define gop_lookupname_user osi_lookupname
#define afs_strcat(s1, s2) strcat((s1), (s2))
#endif
#define VN_HOLD(vp) VREF(vp)
-
+#undef afs_suser
+#if defined(AFS_FBSD80_ENV)
+/* OpenAFS-specific privileges negotiated for FreeBSD, thanks due to
+ * Ben Kaduk */
+#define osi_suser_client_settings(x) (!priv_check(curthread, PRIV_AFS_ADMIN))
+#define osi_suser_afs_daemon(x) (!priv_check(curthread, PRIV_AFS_DAEMON))
+#define afs_suser(x) (osi_suser_client_settings((x)) && osi_suser_afs_daemon((x)))
+#elif defined(AFS_FBSD50_ENV)
+#define afs_suser(x) (!suser(curthread))
+#else
+#define afs_suser(x) (!suser(curproc))
+#endif
#undef osi_getpid
#if defined(AFS_FBSD50_ENV)
#define VROOT VV_ROOT
#define v_flag v_vflag
#define osi_curcred() (curthread->td_ucred)
-#define afs_suser(x) (!suser(curthread))
#define osi_getpid() (curthread->td_proc->p_pid)
#define simple_lock(x) mtx_lock(x)
#define simple_unlock(x) mtx_unlock(x)
#else /* FBSD50 */
extern struct lock afs_global_lock;
#define osi_curcred() (curproc->p_cred->pc_ucred)
-#define afs_suser(x) (!suser(curproc))
#define osi_getpid() (curproc->p_pid)
#define gop_rdwr(rw,gp,base,len,offset,segflg,unit,cred,aresid) \
vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(unit),(cred),(aresid), curproc)
/*
* osi_misc.c
*
- * Implements:
- * afs_suser
*/
#include <afsconfig.h>
}
tries = 5;
- code = vinvalbuf(vp, V_SAVE, curthread, PCATCH, 0);
+ code = osi_vinvalbuf(vp, V_SAVE, PCATCH, 0);
while (code && (tries > 0)) {
- code = vinvalbuf(vp, V_SAVE, curthread, PCATCH, 0);
+ code = osi_vinvalbuf(vp, V_SAVE, PCATCH, 0);
--tries;
}
USERPRI;
.vop_getpages = afs_vop_getpages,
.vop_inactive = afs_vop_inactive,
.vop_ioctl = afs_vop_ioctl,
+#if !defined(AFS_FBSD80_ENV)
+ /* removed at least temporarily (NFSv4 flux) */
.vop_lease = VOP_NULL,
+#endif
.vop_link = afs_vop_link,
.vop_lookup = afs_vop_lookup,
.vop_mkdir = afs_vop_mkdir,
struct lock *lkp = vp->v_vnlock;
#ifdef AFS_FBSD80_ENV
- int code;
+ int code = 0;
u_int op;
op = ((ap->a_flags) | LK_RELEASE) & LK_TYPE_MASK;
int glocked = ISAFS_GLOCK();
{
int code;
AFS_GLOCK();
+#if defined(AFS_FBSD80_ENV)
+ code = afs_access(VTOAFS(ap->a_vp), ap->a_accmode, ap->a_cred);
+#else
code = afs_access(VTOAFS(ap->a_vp), ap->a_mode, ap->a_cred);
+#endif
AFS_GUNLOCK();
return code;
}
{
int error;
AFS_GLOCK();
- error = afs_ustrategy(ap->a_bp, osi_cred());
+ error = afs_ustrategy(ap->a_bp, osi_curcred());
AFS_GUNLOCK();
return error;
}
if (afs_cacheVfsp && ((st = *(vfs_statfs(afs_cacheVfsp))),1))
#elif defined(AFS_DARWIN_ENV)
if (!VFS_STATFS(filevp->v_mount, &st, current_proc()))
+#elif defined(AFS_FBSD80_ENV)
+ if (!VFS_STATFS(filevp->v_mount, &st))
#elif defined(AFS_FBSD50_ENV)
if (!VFS_STATFS(filevp->v_mount, &st, curthread))
#elif defined(AFS_XBSD_ENV)
if (glocked)
AFS_GLOCK();
}
- vinvalbuf(vp, V_SAVE, curthread, PINOD, 0);
+ vinvalbuf(vp, V_SAVE, PINOD, 0); /* changed late in 8.0-CURRENT */
if (!iheldthelock)
VOP_UNLOCK(vp, 0);
#elif defined(AFS_FBSD60_ENV)
#endif
#include <sys/types.h>
#include <sys/file.h>
-#if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD80_ENV)
#include <sgtty.h>
#endif
#include <stdio.h>
${AS} -o syscall.o syscall.i; \
$(RM) -f syscall.ss syscall.i;; \
*fbsd* ) \
- touch syscall.o ;; \
+ touch syscall.c ; \
+ ${CC} ${CFLAGS} -c syscall.c;; \
*) \
$(PATH_CPP) ${SFLAGS} ${SYS}/syscall.s > syscall.ss; \
as -o syscall.o syscall.ss; \
#define AFS_VICE_H 1
#include <sys/types.h>
-#ifndef AFS_NT40_ENV
+#if !defined(AFS_NT40_ENV)
+# if !defined(AFS_FBSD80_ENV) || !defined(KERNEL) || defined(UKERNEL)
#include <sys/ioctl.h>
-#endif
+#endif /* AFS_FBSD80_ENV */
+#endif /* AFS_NT40_ENV */
#if (defined(__sun) && defined(__SVR4)) || defined(AFS_DFBSD_ENV) || defined(AFS_USR_DFBSD_ENV)
# include <sys/ioccom.h>
#endif