return 0;
#endif
if (flags & FMODE_READ)
- res = MAY_READ;
+ res |= MAY_READ;
if (flags & (FMODE_WRITE | MDS_OPEN_TRUNC | MDS_OPEN_APPEND))
res |= MAY_WRITE;
if (flags & MDS_FMODE_EXEC)
- res = MAY_EXEC;
+ res |= MAY_EXEC;
return res;
}
* actually live on the filesystem itself, and as such you
* can write to them even if the filesystem is read-only.
*/
- if (S_ISFIFO(tmp_la->la_mode) || S_ISSOCK(tmp_la->la_mode) ||
- S_ISBLK(tmp_la->la_mode) || S_ISCHR(tmp_la->la_mode))
+ if (S_ISFIFO(tmp_la->la_mode) || S_ISSOCK(tmp_la->la_mode))
flag &= ~O_TRUNC;
/*
* An append-only file must be opened in append mode for writing.
*/
if (mdd_is_append(obj)) {
- if ((flag & FMODE_WRITE) && !(flag & O_APPEND))
+ if ((mode & FMODE_WRITE) && !(flag & O_APPEND))
RETURN(-EPERM);
if (flag & O_TRUNC)
RETURN(-EPERM);
{
struct dt_object *next = mdd_object_child(mdd_obj);
int rc;
+ ENTRY;
+
+ if (ma->ma_valid & MA_ACL_DEF)
+ RETURN(0);
rc = next->do_ops->do_xattr_get(env, next,
mdd_buf_get(env, ma->ma_acl,