version 1.7, 2006/03/01 12:38:33 |
version 1.8, 2006/05/14 21:33:39 |
Line 91 static int ufs_extattr_disable(struct uf |
|
Line 91 static int ufs_extattr_disable(struct uf |
|
const char *attrname, struct lwp *l); |
const char *attrname, struct lwp *l); |
static int ufs_extattr_get(struct vnode *vp, int attrnamespace, |
static int ufs_extattr_get(struct vnode *vp, int attrnamespace, |
const char *name, struct uio *uio, size_t *size, |
const char *name, struct uio *uio, size_t *size, |
struct ucred *cred, struct lwp *l); |
kauth_cred_t cred, struct lwp *l); |
static int ufs_extattr_set(struct vnode *vp, int attrnamespace, |
static int ufs_extattr_set(struct vnode *vp, int attrnamespace, |
const char *name, struct uio *uio, struct ucred *cred, |
const char *name, struct uio *uio, kauth_cred_t cred, |
struct lwp *l); |
struct lwp *l); |
static int ufs_extattr_rm(struct vnode *vp, int attrnamespace, |
static int ufs_extattr_rm(struct vnode *vp, int attrnamespace, |
const char *name, struct ucred *cred, struct lwp *l); |
const char *name, kauth_cred_t cred, struct lwp *l); |
|
|
/* |
/* |
* Per-FS attribute lock protecting attribute operations. |
* Per-FS attribute lock protecting attribute operations. |
Line 224 ufs_extattr_start(struct mount *mp, stru |
|
Line 224 ufs_extattr_start(struct mount *mp, stru |
|
|
|
ump->um_extattr.uepm_flags |= UFS_EXTATTR_UEPM_STARTED; |
ump->um_extattr.uepm_flags |= UFS_EXTATTR_UEPM_STARTED; |
|
|
ump->um_extattr.uepm_ucred = l->l_proc->p_ucred; |
ump->um_extattr.uepm_ucred = l->l_proc->p_cred; |
crhold(ump->um_extattr.uepm_ucred); |
kauth_cred_hold(ump->um_extattr.uepm_ucred); |
|
|
unlock: |
unlock: |
ufs_extattr_uepm_unlock(ump); |
ufs_extattr_uepm_unlock(ump); |
Line 257 ufs_extattr_lookup(struct vnode *start_d |
|
Line 257 ufs_extattr_lookup(struct vnode *start_d |
|
cnp.cn_nameiop = LOOKUP; |
cnp.cn_nameiop = LOOKUP; |
cnp.cn_flags = ISLASTCN | lockparent; |
cnp.cn_flags = ISLASTCN | lockparent; |
cnp.cn_lwp = l; |
cnp.cn_lwp = l; |
cnp.cn_cred = l->l_proc->p_ucred; |
cnp.cn_cred = l->l_proc->p_cred; |
cnp.cn_pnbuf = PNBUF_GET(); |
cnp.cn_pnbuf = PNBUF_GET(); |
cnp.cn_nameptr = cnp.cn_pnbuf; |
cnp.cn_nameptr = cnp.cn_pnbuf; |
error = copystr(dirname, cnp.cn_pnbuf, MAXPATHLEN, |
error = copystr(dirname, cnp.cn_pnbuf, MAXPATHLEN, |
Line 329 ufs_extattr_enable_with_open(struct ufsm |
|
Line 329 ufs_extattr_enable_with_open(struct ufsm |
|
{ |
{ |
int error; |
int error; |
|
|
error = VOP_OPEN(vp, FREAD|FWRITE, l->l_proc->p_ucred, l); |
error = VOP_OPEN(vp, FREAD|FWRITE, l->l_proc->p_cred, l); |
if (error) { |
if (error) { |
printf("ufs_extattr_enable_with_open.VOP_OPEN(): failed " |
printf("ufs_extattr_enable_with_open.VOP_OPEN(): failed " |
"with %d\n", error); |
"with %d\n", error); |
Line 345 ufs_extattr_enable_with_open(struct ufsm |
|
Line 345 ufs_extattr_enable_with_open(struct ufsm |
|
|
|
error = ufs_extattr_enable(ump, attrnamespace, attrname, vp, l); |
error = ufs_extattr_enable(ump, attrnamespace, attrname, vp, l); |
if (error != 0) |
if (error != 0) |
vn_close(vp, FREAD|FWRITE, l->l_proc->p_ucred, l); |
vn_close(vp, FREAD|FWRITE, l->l_proc->p_cred, l); |
return (error); |
return (error); |
} |
} |
|
|
Line 383 ufs_extattr_iterate_directory(struct ufs |
|
Line 383 ufs_extattr_iterate_directory(struct ufs |
|
vargs.a_desc = NULL; |
vargs.a_desc = NULL; |
vargs.a_vp = dvp; |
vargs.a_vp = dvp; |
vargs.a_uio = &auio; |
vargs.a_uio = &auio; |
vargs.a_cred = l->l_proc->p_ucred; |
vargs.a_cred = l->l_proc->p_cred; |
vargs.a_eofflag = &eofflag; |
vargs.a_eofflag = &eofflag; |
vargs.a_ncookies = NULL; |
vargs.a_ncookies = NULL; |
vargs.a_cookies = NULL; |
vargs.a_cookies = NULL; |
Line 578 ufs_extattr_stop(struct mount *mp, struc |
|
Line 578 ufs_extattr_stop(struct mount *mp, struc |
|
|
|
ump->um_extattr.uepm_flags &= ~UFS_EXTATTR_UEPM_STARTED; |
ump->um_extattr.uepm_flags &= ~UFS_EXTATTR_UEPM_STARTED; |
|
|
crfree(ump->um_extattr.uepm_ucred); |
kauth_cred_free(ump->um_extattr.uepm_ucred); |
ump->um_extattr.uepm_ucred = NULL; |
ump->um_extattr.uepm_ucred = NULL; |
|
|
unlock: |
unlock: |
Line 635 ufs_extattr_enable(struct ufsmount *ump, |
|
Line 635 ufs_extattr_enable(struct ufsmount *ump, |
|
auio.uio_rw = UIO_READ; |
auio.uio_rw = UIO_READ; |
UIO_SETUP_SYSSPACE(&auio); |
UIO_SETUP_SYSSPACE(&auio); |
|
|
VOP_LEASE(backing_vnode, l, l->l_proc->p_ucred, LEASE_WRITE); |
VOP_LEASE(backing_vnode, l, l->l_proc->p_cred, LEASE_WRITE); |
vn_lock(backing_vnode, LK_SHARED | LK_RETRY); |
vn_lock(backing_vnode, LK_SHARED | LK_RETRY); |
error = VOP_READ(backing_vnode, &auio, IO_NODELOCKED, |
error = VOP_READ(backing_vnode, &auio, IO_NODELOCKED, |
ump->um_extattr.uepm_ucred); |
ump->um_extattr.uepm_ucred); |
Line 712 ufs_extattr_disable(struct ufsmount *ump |
|
Line 712 ufs_extattr_disable(struct ufsmount *ump |
|
LIST_REMOVE(uele, uele_entries); |
LIST_REMOVE(uele, uele_entries); |
|
|
error = vn_close(uele->uele_backing_vnode, FREAD|FWRITE, |
error = vn_close(uele->uele_backing_vnode, FREAD|FWRITE, |
l->l_proc->p_ucred, l); |
l->l_proc->p_cred, l); |
|
|
free(uele, M_UFS_EXTATTR); |
free(uele, M_UFS_EXTATTR); |
|
|
Line 734 ufs_extattrctl(struct mount *mp, int cmd |
|
Line 734 ufs_extattrctl(struct mount *mp, int cmd |
|
/* |
/* |
* Only privileged processes can configure extended attributes. |
* Only privileged processes can configure extended attributes. |
*/ |
*/ |
if ((error = suser(l->l_proc->p_ucred, &l->l_proc->p_acflag)) != 0) { |
if ((error = kauth_authorize_generic(l->l_proc->p_cred, KAUTH_GENERIC_ISSUSER, |
|
&l->l_proc->p_acflag)) != 0) { |
if (filename_vp != NULL) |
if (filename_vp != NULL) |
VOP_UNLOCK(filename_vp, 0); |
VOP_UNLOCK(filename_vp, 0); |
return (error); |
return (error); |
Line 811 vop_getextattr { |
|
Line 812 vop_getextattr { |
|
IN const char *a_name; |
IN const char *a_name; |
INOUT struct uio *a_uio; |
INOUT struct uio *a_uio; |
OUT size_t *a_size; |
OUT size_t *a_size; |
IN struct ucred *a_cred; |
IN kauth_cred_t a_cred; |
IN struct lwp *a_l; |
IN struct lwp *a_l; |
}; |
}; |
*/ |
*/ |
Line 836 vop_getextattr { |
|
Line 837 vop_getextattr { |
|
*/ |
*/ |
static int |
static int |
ufs_extattr_get(struct vnode *vp, int attrnamespace, const char *name, |
ufs_extattr_get(struct vnode *vp, int attrnamespace, const char *name, |
struct uio *uio, size_t *size, struct ucred *cred, struct lwp *l) |
struct uio *uio, size_t *size, kauth_cred_t cred, struct lwp *l) |
{ |
{ |
struct ufs_extattr_list_entry *attribute; |
struct ufs_extattr_list_entry *attribute; |
struct ufs_extattr_header ueh; |
struct ufs_extattr_header ueh; |
Line 992 vop_deleteextattr { |
|
Line 993 vop_deleteextattr { |
|
IN struct vnode *a_vp; |
IN struct vnode *a_vp; |
IN int a_attrnamespace; |
IN int a_attrnamespace; |
IN const char *a_name; |
IN const char *a_name; |
IN struct ucred *a_cred; |
IN kauth_cred_t a_cred; |
IN struct lwp *a_l; |
IN struct lwp *a_l; |
}; |
}; |
*/ |
*/ |
Line 1022 vop_setextattr { |
|
Line 1023 vop_setextattr { |
|
IN int a_attrnamespace; |
IN int a_attrnamespace; |
IN const char *a_name; |
IN const char *a_name; |
INOUT struct uio *a_uio; |
INOUT struct uio *a_uio; |
IN struct ucred *a_cred; |
IN kauth_cred_t a_cred; |
IN struct lwp *a_l; |
IN struct lwp *a_l; |
}; |
}; |
*/ |
*/ |
Line 1053 vop_setextattr { |
|
Line 1054 vop_setextattr { |
|
*/ |
*/ |
static int |
static int |
ufs_extattr_set(struct vnode *vp, int attrnamespace, const char *name, |
ufs_extattr_set(struct vnode *vp, int attrnamespace, const char *name, |
struct uio *uio, struct ucred *cred, struct lwp *l) |
struct uio *uio, kauth_cred_t cred, struct lwp *l) |
{ |
{ |
struct ufs_extattr_list_entry *attribute; |
struct ufs_extattr_list_entry *attribute; |
struct ufs_extattr_header ueh; |
struct ufs_extattr_header ueh; |
Line 1167 ufs_extattr_set(struct vnode *vp, int at |
|
Line 1168 ufs_extattr_set(struct vnode *vp, int at |
|
*/ |
*/ |
static int |
static int |
ufs_extattr_rm(struct vnode *vp, int attrnamespace, const char *name, |
ufs_extattr_rm(struct vnode *vp, int attrnamespace, const char *name, |
struct ucred *cred, struct lwp *l) |
kauth_cred_t cred, struct lwp *l) |
{ |
{ |
struct ufs_extattr_list_entry *attribute; |
struct ufs_extattr_list_entry *attribute; |
struct ufs_extattr_header ueh; |
struct ufs_extattr_header ueh; |
Line 1316 ufs_extattr_vnode_inactive(struct vnode |
|
Line 1317 ufs_extattr_vnode_inactive(struct vnode |
|
|
|
LIST_FOREACH(uele, &ump->um_extattr.uepm_list, uele_entries) |
LIST_FOREACH(uele, &ump->um_extattr.uepm_list, uele_entries) |
ufs_extattr_rm(vp, uele->uele_attrnamespace, |
ufs_extattr_rm(vp, uele->uele_attrnamespace, |
uele->uele_attrname, proc0.p_ucred, l); |
uele->uele_attrname, proc0.p_cred, l); |
|
|
ufs_extattr_uepm_unlock(ump); |
ufs_extattr_uepm_unlock(ump); |
} |
} |