1
0
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:
Jeremy Allison 2013-11-12 15:32:42 -08:00 committed by Andreas Schneider
parent 7d8e22c7c1
commit fc611dd6e8
4 changed files with 43 additions and 27 deletions

View File

@ -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 */

View File

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

View File

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

View File

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