if (lp_inherit_acls(SNUM(handle->conn))) {
ok = parent_smb_fname(talloc_tos(), smb_fname, &parent, NULL);
- if (ok && directory_has_default_acl(handle->conn,
- parent->base_name))
- {
+ if (ok && directory_has_default_acl(handle->conn, parent)) {
mode = 0777;
}
}
if (lp_inherit_acls(SNUM(handle->conn))) {
ok = parent_smb_fname(talloc_tos(), smb_fname, &parent, NULL);
- if (ok && directory_has_default_acl(handle->conn,
- parent->base_name))
- {
+ if (ok && directory_has_default_acl(handle->conn, parent)) {
mode = (0777 & lp_directory_mask(SNUM(handle->conn)));
}
}
Check for an existing default Windows ACL on a directory.
****************************************************************************/
-bool directory_has_default_acl(connection_struct *conn, const char *fname)
+bool directory_has_default_acl(connection_struct *conn,
+ struct smb_filename *smb_fname)
{
struct security_descriptor *secdesc = NULL;
unsigned int i;
NTSTATUS status;
- struct smb_filename *smb_fname = synthetic_smb_fname(talloc_tos(),
- fname,
- NULL,
- NULL,
- 0);
-
- if (smb_fname == NULL) {
- return false;
- }
status = SMB_VFS_GET_NT_ACL(conn, smb_fname,
SECINFO_DACL, talloc_tos(),
*/
if ((flags2 & O_CREAT) && lp_inherit_acls(SNUM(conn)) &&
- (def_acl = directory_has_default_acl(conn, parent_dir))) {
+ (def_acl = directory_has_default_acl(conn, parent_dir_fname))) {
unx_mode = (0777 & lp_create_mask(SNUM(conn)));
}
const struct smb_filename *smb_fname);
bool can_write_to_file(connection_struct *conn,
const struct smb_filename *smb_fname);
-bool directory_has_default_acl(connection_struct *conn, const char *fname);
+bool directory_has_default_acl(connection_struct *conn,
+ struct smb_filename *smb_fname);
NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32_t dosmode);
/* The following definitions come from smbd/fileio.c */