s3-lib: smbclient shows no error if deleting a directory with del failed
authorJeremy Allison <jra@samba.org>
Tue, 12 Nov 2013 23:32:42 +0000 (15:32 -0800)
committerAndreas Schneider <asn@samba.org>
Thu, 14 Nov 2013 18:29:00 +0000 (19:29 +0100)
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>
source3/include/proto.h
source3/lib/util.c
source3/smbd/dir.c
source3/smbd/proto.h

index 277547bef7dab876f6e1a037e0b229b97a7e6075..fc7f24d534cf49ed8fccd83307326dce87fcf6e7 100644 (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  */
index 51680923fddfc4b93ddbe14ac603fb6954599121..551beab867178b78639d01415b8264f7d06cb543 100644 (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;
+}
index 6b7cce266be34604cb0ab1c9064be280684f1d5c..8fa320b197b0a5318274f21833f655b9d063efff 100644 (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)
index a373cd6e66517aa470dbdba7a7865a2136000980..a550dd7743dae67315e1e5c24cb8b7dc8e08f547 100644 (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,