mirror of
https://github.com/samba-team/samba.git
synced 2025-03-14 00:58:38 +03:00
smbd: Factor out create/directory mode/mask logic
Don't write down that logic twice Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
parent
2ba46540c9
commit
bf82e232d1
@ -87,6 +87,20 @@ static uint32_t filter_mode_by_protocol(enum protocol_types protocol,
|
||||
return mode;
|
||||
}
|
||||
|
||||
mode_t apply_conf_file_mask(struct connection_struct *conn, mode_t mode)
|
||||
{
|
||||
mode &= lp_create_mask(SNUM(conn));
|
||||
mode |= lp_force_create_mode(SNUM(conn));
|
||||
return mode;
|
||||
}
|
||||
|
||||
mode_t apply_conf_dir_mask(struct connection_struct *conn, mode_t mode)
|
||||
{
|
||||
mode &= lp_directory_mask(SNUM(conn));
|
||||
mode |= lp_force_directory_mode(SNUM(conn));
|
||||
return mode;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Change a dos mode to a unix mode.
|
||||
Base permission for files:
|
||||
@ -158,11 +172,7 @@ mode_t unix_mode(connection_struct *conn, int dosmode,
|
||||
} else {
|
||||
/* Provisionally add all 'x' bits */
|
||||
result |= (S_IXUSR | S_IXGRP | S_IXOTH);
|
||||
|
||||
/* Apply directory mask */
|
||||
result &= lp_directory_mask(SNUM(conn));
|
||||
/* Add in force bits */
|
||||
result |= lp_force_directory_mode(SNUM(conn));
|
||||
result = apply_conf_dir_mask(conn, result);
|
||||
}
|
||||
} else {
|
||||
if ((dosmode & FILE_ATTRIBUTE_ARCHIVE) &&
|
||||
@ -184,10 +194,7 @@ mode_t unix_mode(connection_struct *conn, int dosmode,
|
||||
/* Inherit 666 component of parent directory mode */
|
||||
result |= dir_mode & (S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH);
|
||||
} else {
|
||||
/* Apply mode mask */
|
||||
result &= lp_create_mask(SNUM(conn));
|
||||
/* Add in force bits */
|
||||
result |= lp_force_create_mode(SNUM(conn));
|
||||
result = apply_conf_file_mask(conn, result);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -193,6 +193,9 @@ bool smbd_setup_mdns_registration(struct tevent_context *ev,
|
||||
|
||||
/* The following definitions come from smbd/dosmode.c */
|
||||
|
||||
mode_t apply_conf_file_mask(struct connection_struct *conn, mode_t mode);
|
||||
mode_t apply_conf_dir_mask(struct connection_struct *conn, mode_t mode);
|
||||
|
||||
mode_t unix_mode(connection_struct *conn, int dosmode,
|
||||
const struct smb_filename *smb_fname,
|
||||
struct files_struct *parent_dirfsp);
|
||||
|
@ -914,17 +914,13 @@ NTSTATUS unix_perms_from_wire(connection_struct *conn,
|
||||
* "create mask"/"force create mode" are
|
||||
* only applied to new files, not existing ones.
|
||||
*/
|
||||
ret &= lp_create_mask(SNUM(conn));
|
||||
/* Add in force bits */
|
||||
ret |= lp_force_create_mode(SNUM(conn));
|
||||
ret = apply_conf_file_mask(conn, ret);
|
||||
} else if (ptype == PERM_NEW_DIR) {
|
||||
/*
|
||||
* "directory mask"/"force directory mode" are
|
||||
* only applied to new directories, not existing ones.
|
||||
*/
|
||||
ret &= lp_directory_mask(SNUM(conn));
|
||||
/* Add in force bits */
|
||||
ret |= lp_force_directory_mode(SNUM(conn));
|
||||
ret = apply_conf_dir_mask(conn, ret);
|
||||
}
|
||||
|
||||
*ret_perms = ret;
|
||||
|
Loading…
x
Reference in New Issue
Block a user