smbd: Fix opening the quota magic file
authorStefan Metzmacher <metze@samba.org>
Mon, 21 Dec 2009 15:26:34 +0000 (16:26 +0100)
committerKarolin Seeger <kseeger@samba.org>
Wed, 13 Jan 2010 13:01:06 +0000 (14:01 +0100)
This fixes bug #6642 and bug #6919.

metze
(cherry picked from commit c30bd2f2ac1c79a4c3893b2c28e0ba7997685c01)

source/smbd/reply.c

index 8c20e95306bf0370edac938566a30a8aa28e698b..1141cfe0ec75376666f72476f6d833ba0d730990 100644 (file)
@@ -50,9 +50,9 @@ static NTSTATUS check_path_syntax_internal(char *path,
 {
        char *d = path;
        const char *s = path;
-       NTSTATUS ret = NT_STATUS_OK;
        bool start_of_name_component = True;
        bool stream_started = false;
+       bool check_quota = false;
 
        *p_last_component_contains_wcard = False;
 
@@ -70,7 +70,7 @@ static NTSTATUS check_path_syntax_internal(char *path,
                                        return NT_STATUS_OBJECT_NAME_INVALID;
                                }
                                if (StrCaseCmp(s, ":$DATA") != 0) {
-                                       return NT_STATUS_INVALID_PARAMETER;
+                                       check_quota = true;
                                }
                                break;
                        }
@@ -131,8 +131,7 @@ static NTSTATUS check_path_syntax_internal(char *path,
 
                                /* Are we at the start ? Can't go back further if so. */
                                if (d <= path) {
-                                       ret = NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
-                                       break;
+                                       return NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
                                }
                                /* Go back one level... */
                                /* We know this is safe as '/' cannot be part of a mb sequence. */
@@ -205,7 +204,13 @@ static NTSTATUS check_path_syntax_internal(char *path,
 
        *d = '\0';
 
-       return ret;
+       if (check_quota) {
+               if (StrCaseCmp(path, FAKE_FILE_NAME_QUOTA_UNIX) != 0) {
+                       return NT_STATUS_INVALID_PARAMETER;
+               }
+       }
+
+       return NT_STATUS_OK;
 }
 
 /****************************************************************************