static int security_eo_remove(struct gfs2_inode *ip, struct gfs2_ea_request *er) { struct inode *inode = &ip->i_inode; int error = permission(inode, MAY_WRITE, NULL); if (error) return error; return gfs2_ea_remove_i(ip, er); }
static int system_eo_set(struct gfs2_inode *ip, struct gfs2_ea_request *er) { int remove = 0; int error; if (GFS2_ACL_IS_ACCESS(er->er_name, er->er_name_len)) { if (!(er->er_flags & GFS2_ERF_MODE)) { er->er_mode = ip->i_inode.i_mode; er->er_flags |= GFS2_ERF_MODE; } error = gfs2_acl_validate_set(ip, 1, er, &remove, &er->er_mode); if (error) return error; error = gfs2_ea_set_i(ip, er); if (error) return error; if (remove) gfs2_ea_remove_i(ip, er); return 0; } else if (GFS2_ACL_IS_DEFAULT(er->er_name, er->er_name_len)) { error = gfs2_acl_validate_set(ip, 0, er, &remove, NULL); if (error) return error; if (!remove) error = gfs2_ea_set_i(ip, er); else { error = gfs2_ea_remove_i(ip, er); if (error == -ENODATA) error = 0; } return error; } return -EPERM; }
static int user_eo_remove(struct gfs2_inode *ip, struct gfs2_ea_request *er) { struct inode *inode = &ip->i_inode; if (S_ISREG(inode->i_mode) || (S_ISDIR(inode->i_mode) && !(inode->i_mode & S_ISVTX))) { int error = permission(inode, MAY_WRITE, NULL); if (error) return error; } else return -EPERM; return gfs2_ea_remove_i(ip, er); }
static int system_eo_remove(struct gfs2_inode *ip, struct gfs2_ea_request *er) { if (GFS2_ACL_IS_ACCESS(er->er_name, er->er_name_len)) { int error = gfs2_acl_validate_remove(ip, 1); if (error) return error; } else if (GFS2_ACL_IS_DEFAULT(er->er_name, er->er_name_len)) { int error = gfs2_acl_validate_remove(ip, 0); if (error) return error; } else return -EPERM; return gfs2_ea_remove_i(ip, er); }
static int user_eo_remove(struct gfs2_inode *ip, struct gfs2_ea_request *er) { return gfs2_ea_remove_i(ip, er); }