llow for open(..., O_CREATE, 444)

This commit is contained in:
wbaumann 2009-05-01 11:23:03 +00:00
parent 35ba2db45a
commit c5872e5833
5 changed files with 18 additions and 7 deletions

View File

@ -1,6 +1,11 @@
ChangeLog for davfs2
--------------------

2009-05-01 Werner Baumann (werner.baumann@onlinehome.de)
* cache.h, dav_open:
Add parameter open_create to allow
for open(..., O_CREATE, 444).

2009-04-30 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, dav_close:
if delay_upload == 0 save to server immediately.

View File

@ -1062,7 +1062,8 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid,


int
dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid)
dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid,
int open_create)
{
if (!is_valid(node))
return ENOENT;
@ -1079,7 +1080,7 @@ dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid)
} else {
how = R_OK | W_OK;
}
if (!has_permission(node, uid, how))
if (!open_create && !has_permission(node, uid, how))
return EACCES;

if (is_dir(node)) {

View File

@ -335,9 +335,14 @@ dav_mkdir(dav_node **nodep, dav_node *parent, const char *name, uid_t uid,
Permissions:
uid must have execute permission for parent and all of its ancestors, as
as well as read and/or write permission for node, according to the
accessmode. */
accessmode.
If open_create is set to 1, permissions will not be checked. This flag must
only be set when the call to dav_open is part of an open-call with flag
O_CREATE. It allows dav_open to succeed if when the file mode would not
allow this. */
int
dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid);
dav_open(int *fd, dav_node *node, int flags, pid_t pid, pid_t pgid, uid_t uid,
int open_create);

/* Reads size bytes from file descriptor fd, starting at position offset
and copies them into buf.

View File

@ -603,7 +603,7 @@ coda_open_by_fd(void)
}
flags |= (in->flags & C_O_TRUNC) ? O_TRUNC : 0;

oh->result = dav_open(&out->fd, node, flags, ih->pid, ih->pgid, ih->uid);
oh->result = dav_open(&out->fd, node, flags, ih->pid, ih->pgid, ih->uid, 0);

if (oh->result || !out->fd) {
if (!oh->result)

View File

@ -479,7 +479,7 @@ fuse_create(void)

int fd = 0;
oh->error = dav_open(&fd, node, in->flags & ~(O_EXCL | O_CREAT), ih->pid,
0, ih->uid);
0, ih->uid, 1);

if (oh->error || !fd) {
if (created)
@ -806,7 +806,7 @@ fuse_open(void)

int fd = 0;
oh->error = dav_open(&fd, (dav_node *) ((size_t) ih->nodeid), in->flags,
ih->pid, 0, ih->uid);
ih->pid, 0, ih->uid, 0);

if (oh->error || !fd) {
if (!oh->error)