diff options
author | Jeremy Allison <jra@samba.org> | 2013-11-12 15:32:42 -0800 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2013-11-14 19:29:00 +0100 |
commit | fc611dd6e849537aa4817504275cdbf48f6f1e79 (patch) | |
tree | 682a75b4d2db33fbd889849b3420d7751d32d49d /source3/lib/util.c | |
parent | 7d8e22c7c1cf0041fa638f3bb345e00fc339486b (diff) | |
download | samba-fc611dd6e849537aa4817504275cdbf48f6f1e79.tar.gz |
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>
Diffstat (limited to 'source3/lib/util.c')
-rw-r--r-- | source3/lib/util.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c index 51680923fdd..551beab8671 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.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; +} |