1
0
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:
Volker Lendecke 2024-09-20 21:33:33 +02:00 committed by Ralph Boehme
parent 2ba46540c9
commit bf82e232d1
3 changed files with 21 additions and 15 deletions

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;