mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
s3-lib: smbclient shows no error if deleting a directory with del failed
BUG: https://bugzilla.samba.org/show_bug.cgi?id=10260 Move dir_check_ftype() to util.c Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
7d8e22c7c1
commit
fc611dd6e8
@ -475,6 +475,7 @@ bool map_open_params_to_ntcreate(const char *smb_base_fname,
|
||||
uint32 *pcreate_options,
|
||||
uint32_t *pprivate_flags);
|
||||
struct security_unix_token *copy_unix_token(TALLOC_CTX *ctx, const struct security_unix_token *tok);
|
||||
bool dir_check_ftype(uint32_t mode, uint32_t dirtype);
|
||||
void init_modules(void);
|
||||
|
||||
/* The following definitions come from lib/util_builtin.c */
|
||||
|
@ -2393,3 +2393,45 @@ struct security_unix_token *copy_unix_token(TALLOC_CTX *ctx, const struct securi
|
||||
}
|
||||
return cpy;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Check that a file matches a particular file type.
|
||||
****************************************************************************/
|
||||
|
||||
bool dir_check_ftype(uint32_t mode, uint32_t dirtype)
|
||||
{
|
||||
uint32_t mask;
|
||||
|
||||
/* Check the "may have" search bits. */
|
||||
if (((mode & ~dirtype) &
|
||||
(FILE_ATTRIBUTE_HIDDEN |
|
||||
FILE_ATTRIBUTE_SYSTEM |
|
||||
FILE_ATTRIBUTE_DIRECTORY)) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check the "must have" bits,
|
||||
which are the may have bits shifted eight */
|
||||
/* If must have bit is set, the file/dir can
|
||||
not be returned in search unless the matching
|
||||
file attribute is set */
|
||||
mask = ((dirtype >> 8) & (FILE_ATTRIBUTE_DIRECTORY|
|
||||
FILE_ATTRIBUTE_ARCHIVE|
|
||||
FILE_ATTRIBUTE_READONLY|
|
||||
FILE_ATTRIBUTE_HIDDEN|
|
||||
FILE_ATTRIBUTE_SYSTEM)); /* & 0x37 */
|
||||
if(mask) {
|
||||
if((mask & (mode & (FILE_ATTRIBUTE_DIRECTORY|
|
||||
FILE_ATTRIBUTE_ARCHIVE|
|
||||
FILE_ATTRIBUTE_READONLY|
|
||||
FILE_ATTRIBUTE_HIDDEN|
|
||||
FILE_ATTRIBUTE_SYSTEM))) == mask) {
|
||||
/* check if matching attribute present */
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -962,32 +962,6 @@ struct dptr_struct *dptr_fetch_lanman2(struct smbd_server_connection *sconn,
|
||||
return(dptr);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Check that a file matches a particular file type.
|
||||
****************************************************************************/
|
||||
|
||||
bool dir_check_ftype(uint32_t mode, uint32_t dirtype)
|
||||
{
|
||||
uint32_t mask;
|
||||
|
||||
/* Check the "may have" search bits. */
|
||||
if (((mode & ~dirtype) & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY)) != 0)
|
||||
return False;
|
||||
|
||||
/* Check the "must have" bits, which are the may have bits shifted eight */
|
||||
/* If must have bit is set, the file/dir can not be returned in search unless the matching
|
||||
file attribute is set */
|
||||
mask = ((dirtype >> 8) & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)); /* & 0x37 */
|
||||
if(mask) {
|
||||
if((mask & (mode & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))) == mask) /* check if matching attribute present */
|
||||
return True;
|
||||
else
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
static bool mangle_mask_match(connection_struct *conn,
|
||||
const char *filename,
|
||||
const char *mask)
|
||||
|
@ -218,7 +218,6 @@ struct dptr_struct *dptr_fetch(struct smbd_server_connection *sconn,
|
||||
char *buf,int *num);
|
||||
struct dptr_struct *dptr_fetch_lanman2(struct smbd_server_connection *sconn,
|
||||
int dptr_num);
|
||||
bool dir_check_ftype(uint32_t mode, uint32_t dirtype);
|
||||
bool get_dir_entry(TALLOC_CTX *ctx,
|
||||
struct dptr_struct *dirptr,
|
||||
const char *mask,
|
||||
|
Loading…
Reference in New Issue
Block a user