mirror of
https://github.com/samba-team/samba.git
synced 2025-03-05 20:58:40 +03:00
Made "security XXX" masks apply to ACL set. By default they have no effect.
Removed "restrict acl with mask" - redundent. Jeremy.
This commit is contained in:
parent
8b435b0a2a
commit
0db8a61d71
@ -599,6 +599,7 @@ char *sid_to_string(fstring sidstr_out, DOM_SID *sid);
|
||||
BOOL string_to_sid(DOM_SID *sidout, char *sidstr);
|
||||
BOOL sid_append_rid(DOM_SID *sid, uint32 rid);
|
||||
BOOL sid_split_rid(DOM_SID *sid, uint32 *rid);
|
||||
BOOL sid_peek_rid(DOM_SID *sid, uint32 *rid);
|
||||
void sid_copy(DOM_SID *dst, const DOM_SID *src);
|
||||
DOM_SID *sid_dup(DOM_SID *src);
|
||||
BOOL sid_linearize(char *outbuf, size_t len, DOM_SID *sid);
|
||||
@ -1944,15 +1945,14 @@ BOOL lp_dos_filetime_resolution(int );
|
||||
BOOL lp_fake_dir_create_times(int );
|
||||
BOOL lp_blocking_locks(int );
|
||||
BOOL lp_inherit_perms(int );
|
||||
BOOL lp_restrict_acl_with_mask(int );
|
||||
int lp_create_mask(int );
|
||||
int lp_force_create_mode(int );
|
||||
int _lp_security_mask(int );
|
||||
int _lp_force_security_mode(int );
|
||||
int lp_security_mask(int );
|
||||
int lp_force_security_mode(int );
|
||||
int lp_dir_mask(int );
|
||||
int lp_force_dir_mode(int );
|
||||
int _lp_dir_security_mask(int );
|
||||
int _lp_force_dir_security_mode(int );
|
||||
int lp_dir_security_mask(int );
|
||||
int lp_force_dir_security_mode(int );
|
||||
int lp_max_connections(int );
|
||||
int lp_defaultcase(int );
|
||||
int lp_minprintspace(int );
|
||||
@ -1994,10 +1994,6 @@ int lp_default_server_announce(void);
|
||||
int lp_major_announce_version(void);
|
||||
int lp_minor_announce_version(void);
|
||||
void lp_set_name_resolve_order(char *new_order);
|
||||
int lp_security_mask(int snum);
|
||||
int lp_force_security_mode(int snum);
|
||||
int lp_dir_security_mask(int snum);
|
||||
int lp_force_dir_security_mode(int snum);
|
||||
char *lp_printername(int snum);
|
||||
|
||||
/*The following definitions come from param/params.c */
|
||||
@ -3764,6 +3760,7 @@ uint32 _samr_create_dom_group(pipes_struct *p, SAMR_Q_CREATE_DOM_GROUP *q_u, SAM
|
||||
uint32 _samr_create_dom_alias(pipes_struct *p, SAMR_Q_CREATE_DOM_ALIAS *q_u, SAMR_R_CREATE_DOM_ALIAS *r_u);
|
||||
uint32 _samr_query_groupinfo(pipes_struct *p, SAMR_Q_QUERY_GROUPINFO *q_u, SAMR_R_QUERY_GROUPINFO *r_u);
|
||||
uint32 _samr_set_groupinfo(pipes_struct *p, SAMR_Q_SET_GROUPINFO *q_u, SAMR_R_SET_GROUPINFO *r_u);
|
||||
uint32 _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_SET_ALIASINFO *r_u);
|
||||
uint32 _samr_get_dom_pwinfo(pipes_struct *p, SAMR_Q_GET_DOM_PWINFO *q_u, SAMR_R_GET_DOM_PWINFO *r_u);
|
||||
uint32 _samr_open_group(pipes_struct *p, SAMR_Q_OPEN_GROUP *q_u, SAMR_R_OPEN_GROUP *r_u);
|
||||
uint32 _samr_unknown_2d(pipes_struct *p, SAMR_Q_UNKNOWN_2D *q_u, SAMR_R_UNKNOWN_2D *r_u);
|
||||
|
@ -396,7 +396,6 @@ typedef struct
|
||||
BOOL bBlockingLocks;
|
||||
BOOL bInheritPerms;
|
||||
BOOL bMSDfsRoot;
|
||||
BOOL bRestrictAclWithMask;
|
||||
|
||||
char dummy[3]; /* for alignment */
|
||||
}
|
||||
@ -455,12 +454,12 @@ static service sDefault = {
|
||||
0, /* iWriteCacheSize */
|
||||
0744, /* iCreate_mask */
|
||||
0000, /* iCreate_force_mode */
|
||||
-1, /* iSecurity_mask */
|
||||
-1, /* iSecurity_force_mode */
|
||||
0777, /* iSecurity_mask */
|
||||
0, /* iSecurity_force_mode */
|
||||
0755, /* iDir_mask */
|
||||
0000, /* iDir_force_mode */
|
||||
-1, /* iDir_Security_mask */
|
||||
-1, /* iDir_Security_force_mode */
|
||||
777, /* iDir_Security_mask */
|
||||
0, /* iDir_Security_force_mode */
|
||||
0, /* iMaxConnections */
|
||||
CASE_LOWER, /* iDefaultCase */
|
||||
DEFAULT_PRINTING, /* iPrinting */
|
||||
@ -510,7 +509,6 @@ static service sDefault = {
|
||||
True, /* bBlockingLocks */
|
||||
False, /* bInheritPerms */
|
||||
False, /* bMSDfsRoot */
|
||||
False, /* bRestrictAclWithMask */
|
||||
|
||||
"" /* dummy */
|
||||
};
|
||||
@ -794,7 +792,6 @@ static struct parm_struct parm_table[] = {
|
||||
{"nt smb support", P_BOOL, P_GLOBAL, &Globals.bNTSmbSupport, NULL, NULL, 0},
|
||||
{"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, 0},
|
||||
{"nt acl support", P_BOOL, P_GLOBAL, &Globals.bNTAclSupport, NULL, NULL, 0},
|
||||
{"restrict acl with mask", P_BOOL, P_LOCAL, &sDefault.bRestrictAclWithMask, NULL, NULL, FLAG_SHARE},
|
||||
{"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, 0},
|
||||
{"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, 0},
|
||||
{"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, 0},
|
||||
@ -1679,15 +1676,14 @@ FN_LOCAL_BOOL(lp_dos_filetime_resolution, bDosFiletimeResolution)
|
||||
FN_LOCAL_BOOL(lp_fake_dir_create_times, bFakeDirCreateTimes)
|
||||
FN_LOCAL_BOOL(lp_blocking_locks, bBlockingLocks)
|
||||
FN_LOCAL_BOOL(lp_inherit_perms, bInheritPerms)
|
||||
FN_LOCAL_BOOL(lp_restrict_acl_with_mask, bRestrictAclWithMask)
|
||||
FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask)
|
||||
FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode)
|
||||
FN_LOCAL_INTEGER(_lp_security_mask, iSecurity_mask)
|
||||
FN_LOCAL_INTEGER(_lp_force_security_mode, iSecurity_force_mode)
|
||||
FN_LOCAL_INTEGER(lp_security_mask, iSecurity_mask)
|
||||
FN_LOCAL_INTEGER(lp_force_security_mode, iSecurity_force_mode)
|
||||
FN_LOCAL_INTEGER(lp_dir_mask, iDir_mask)
|
||||
FN_LOCAL_INTEGER(lp_force_dir_mode, iDir_force_mode)
|
||||
FN_LOCAL_INTEGER(_lp_dir_security_mask, iDir_Security_mask)
|
||||
FN_LOCAL_INTEGER(_lp_force_dir_security_mode, iDir_Security_force_mode)
|
||||
FN_LOCAL_INTEGER(lp_dir_security_mask, iDir_Security_mask)
|
||||
FN_LOCAL_INTEGER(lp_force_dir_security_mode, iDir_Security_force_mode)
|
||||
FN_LOCAL_INTEGER(lp_max_connections, iMaxConnections)
|
||||
FN_LOCAL_INTEGER(lp_defaultcase, iDefaultCase)
|
||||
FN_LOCAL_INTEGER(lp_minprintspace, iMinPrintSpace)
|
||||
@ -3616,43 +3612,6 @@ void lp_set_name_resolve_order(char *new_order)
|
||||
Globals.szNameResolveOrder = new_order;
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
Functions to return the current security masks/modes. If
|
||||
set to -1 then return the create mask/mode instead.
|
||||
************************************************************/
|
||||
|
||||
int lp_security_mask(int snum)
|
||||
{
|
||||
int val = _lp_security_mask(snum);
|
||||
if (val == -1)
|
||||
return lp_create_mask(snum);
|
||||
return val;
|
||||
}
|
||||
|
||||
int lp_force_security_mode(int snum)
|
||||
{
|
||||
int val = _lp_force_security_mode(snum);
|
||||
if (val == -1)
|
||||
return lp_force_create_mode(snum);
|
||||
return val;
|
||||
}
|
||||
|
||||
int lp_dir_security_mask(int snum)
|
||||
{
|
||||
int val = _lp_dir_security_mask(snum);
|
||||
if (val == -1)
|
||||
return lp_dir_mask(snum);
|
||||
return val;
|
||||
}
|
||||
|
||||
int lp_force_dir_security_mode(int snum)
|
||||
{
|
||||
int val = _lp_force_dir_security_mode(snum);
|
||||
if (val == -1)
|
||||
return lp_force_dir_mode(snum);
|
||||
return val;
|
||||
}
|
||||
|
||||
char *lp_printername(int snum)
|
||||
{
|
||||
char *ret = _lp_printername(snum);
|
||||
|
@ -468,17 +468,14 @@ static mode_t apply_default_perms(files_struct *fsp, mode_t perms, mode_t type)
|
||||
mode_t and_bits = (mode_t)0;
|
||||
mode_t or_bits = (mode_t)0;
|
||||
|
||||
if (!lp_restrict_acl_with_mask(snum))
|
||||
return perms;
|
||||
|
||||
/* Get the initial bits to apply. */
|
||||
|
||||
if (fsp->is_directory) {
|
||||
and_bits = lp_dir_mask(snum);
|
||||
or_bits = lp_force_dir_mode(snum);
|
||||
and_bits = lp_dir_security_mask(snum);
|
||||
or_bits = lp_force_dir_security_mode(snum);
|
||||
} else {
|
||||
and_bits = lp_create_mask(snum);
|
||||
or_bits = lp_force_create_mode(snum);
|
||||
and_bits = lp_security_mask(snum);
|
||||
or_bits = lp_force_security_mode(snum);
|
||||
}
|
||||
|
||||
/* Now bounce them into the S_USR space. */
|
||||
@ -1174,20 +1171,17 @@ static mode_t create_default_mode(files_struct *fsp, BOOL interitable_mode)
|
||||
if (fsp->is_directory)
|
||||
mode |= (S_IWUSR|S_IXUSR);
|
||||
|
||||
if (!lp_restrict_acl_with_mask(snum))
|
||||
return mode;
|
||||
|
||||
/*
|
||||
* Now AND with the create mode/directory mode bits then OR with the
|
||||
* force create mode/force directory mode bits.
|
||||
*/
|
||||
|
||||
if (fsp->is_directory) {
|
||||
and_bits = lp_dir_mask(snum);
|
||||
or_bits = lp_force_dir_mode(snum);
|
||||
and_bits = lp_dir_security_mask(snum);
|
||||
or_bits = lp_force_dir_security_mode(snum);
|
||||
} else {
|
||||
and_bits = lp_create_mask(snum);
|
||||
or_bits = lp_force_create_mode(snum);
|
||||
and_bits = lp_security_mask(snum);
|
||||
or_bits = lp_force_security_mode(snum);
|
||||
}
|
||||
|
||||
return ((mode & and_bits)|or_bits);
|
||||
@ -1703,6 +1697,8 @@ static BOOL convert_canon_ace_to_posix_perms( files_struct *fsp, canon_ace *file
|
||||
canon_ace *owner_ace = NULL;
|
||||
canon_ace *group_ace = NULL;
|
||||
canon_ace *other_ace = NULL;
|
||||
mode_t and_bits;
|
||||
mode_t or_bits;
|
||||
|
||||
if (ace_count != 3) {
|
||||
DEBUG(3,("convert_canon_ace_to_posix_perms: Too many ACE entries for file %s to convert to \
|
||||
@ -1743,24 +1739,18 @@ posix perms.\n", fsp->fsp_name ));
|
||||
|
||||
/* If requested apply the masks. */
|
||||
|
||||
if (lp_restrict_acl_with_mask(snum)) {
|
||||
mode_t and_bits;
|
||||
mode_t or_bits;
|
||||
|
||||
/* Get the initial bits to apply. */
|
||||
|
||||
if (fsp->is_directory) {
|
||||
and_bits = lp_dir_mask(snum);
|
||||
or_bits = lp_force_dir_mode(snum);
|
||||
} else {
|
||||
and_bits = lp_create_mask(snum);
|
||||
or_bits = lp_force_create_mode(snum);
|
||||
}
|
||||
|
||||
*posix_perms = (((*posix_perms) & and_bits)|or_bits);
|
||||
/* Get the initial bits to apply. */
|
||||
|
||||
if (fsp->is_directory) {
|
||||
and_bits = lp_dir_security_mask(snum);
|
||||
or_bits = lp_force_dir_security_mode(snum);
|
||||
} else {
|
||||
and_bits = lp_security_mask(snum);
|
||||
or_bits = lp_force_security_mode(snum);
|
||||
}
|
||||
|
||||
*posix_perms = (((*posix_perms) & and_bits)|or_bits);
|
||||
|
||||
DEBUG(10,("convert_canon_ace_to_posix_perms: converted u=%o,g=%o,w=%o to perm=0%o for file %s.\n",
|
||||
(int)owner_ace->perms, (int)group_ace->perms, (int)other_ace->perms, (int)*posix_perms,
|
||||
fsp->fsp_name ));
|
||||
|
Loading…
x
Reference in New Issue
Block a user