diff options
author | Jeremy Allison <jra@samba.org> | 2002-03-11 21:57:12 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-03-11 21:57:12 +0000 |
commit | db4c62d7ed2eb5503927edf7e25c5a2fc94f4174 (patch) | |
tree | 9268354ba8661b6af4b459595790e9dd490cfa7b /source3/smbd/open.c | |
parent | 3bc38669efda51f754890474298b9d59f060724d (diff) | |
download | samba-db4c62d7ed2eb5503927edf7e25c5a2fc94f4174.tar.gz samba-db4c62d7ed2eb5503927edf7e25c5a2fc94f4174.tar.bz2 samba-db4c62d7ed2eb5503927edf7e25c5a2fc94f4174.zip |
Implemented default ACL patch (set inherit acls = true on a per share basis).
Based on code donated by Olaf Frączyk <olaf@cbk.poznan.pl>. Further commit
will change to sending via vfs interface.
Jeremy.
(This used to be commit d85133e2697eb22f1573c78447b57791ae63dd6b)
Diffstat (limited to 'source3/smbd/open.c')
-rw-r--r-- | source3/smbd/open.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 03646c5019..b284175302 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -646,6 +646,7 @@ files_struct *open_file_shared1(connection_struct *conn,char *fname, SMB_STRUCT_ BOOL delete_on_close = GET_DELETE_ON_CLOSE_FLAG(share_mode); BOOL file_existed = VALID_STAT(*psbuf); BOOL fcbopen = False; + BOOL def_acl = False; SMB_DEV_T dev = 0; SMB_INO_T inode = 0; int num_share_modes = 0; @@ -800,6 +801,14 @@ flags=0x%X flags2=0x%X mode=0%o returned %d\n", */ } + /* + * Ensure we pay attention to default ACLs on directories if required. + */ + + if ((flags2 & O_CREAT) && lp_inherit_acls(SNUM(conn)) && + (def_acl = directory_has_default_acl(parent_dirname(fname)))) + mode = 0777; + DEBUG(4,("calling open_file with flags=0x%X flags2=0x%X mode=0%o\n", flags,flags2,(int)mode)); @@ -951,10 +960,11 @@ flags=0x%X flags2=0x%X mode=0%o returned %d\n", } /* - * Take care of inherited ACLs on created files. JRA. + * Take care of inherited ACLs on created files - if default ACL not + * selected. */ - if (!file_existed && (conn->vfs_ops.fchmod_acl != NULL)) { + if (!file_existed && !def_acl && (conn->vfs_ops.fchmod_acl != NULL)) { int saved_errno = errno; /* We might get ENOSYS in the next call.. */ if (conn->vfs_ops.fchmod_acl(fsp, fsp->fd, mode) == -1 && errno == ENOSYS) errno = saved_errno; /* Ignore ENOSYS */ |