r3836: - fixed the handling of NT_STATUS_BUFFER_TOO_SMALL in nttrans server
authorAndrew Tridgell <tridge@samba.org>
Thu, 18 Nov 2004 04:19:26 +0000 (04:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:58 +0000 (13:05 -0500)
- fixed revision number on default DACL

- fixed DACL_PRESENT bit in acl query

with these fixes cacls.exe and the GUI ACL editor in w2k both work
against pvfs. The GUI editor is slow as it times out looking up the
SID -> name mappings.
(This used to be commit 4468018cb63fd884920c2b0f5235bded50c6b5db)

source4/libcli/security/security_descriptor.c
source4/ntvfs/posix/pvfs_acl.c
source4/smb_server/nttrans.c

index 00857de1c6e813570a06c3cd116d6e103659b07b..5ed5ef5c76cac5352f5fd6962c39f7a79843e27e 100644 (file)
@@ -115,7 +115,7 @@ NTSTATUS security_descriptor_dacl_add(struct security_descriptor *sd,
                if (sd->dacl == NULL) {
                        return NT_STATUS_NO_MEMORY;
                }
-               sd->dacl->revision = SD_REVISION;
+               sd->dacl->revision = NT4_ACL_REVISION;
                sd->dacl->size     = 0;
                sd->dacl->num_aces = 0;
                sd->dacl->aces     = NULL;
index ba92cdc31c0f3997b7bdad0c2f970ed410a18a00..216c9b4a71067b76f8e165ee9794ed468c4e17ba 100644 (file)
@@ -52,6 +52,7 @@ static NTSTATUS pvfs_default_acl(struct pvfs_state *pvfs,
        if (token->num_sids > 1) {
                sd->group_sid = token->user_sids[1];
        }
+       sd->type |= SEC_DESC_DACL_PRESENT;
 
        for (i=0;i<token->num_sids;i++) {
                struct security_ace ace;
index d405af53d96f841dbd2ca9a91ebca8dcb27ba5c5..27fb4d22dbd3be2849aed865973b6b5dc258404d 100644 (file)
@@ -413,6 +413,19 @@ void reply_nttrans(struct smbsrv_request *req)
                return;
        }
 
+       if (trans.out.setup_count > trans.in.max_setup) {
+               req_reply_error(req, NT_STATUS_BUFFER_TOO_SMALL);
+               return;
+       }
+       if (trans.out.params.length > trans.in.max_param) {
+               status = NT_STATUS_BUFFER_TOO_SMALL;
+               trans.out.params.length = trans.in.max_param;
+       }
+       if (trans.out.data.length > trans.in.max_data) {
+               status = NT_STATUS_BUFFER_TOO_SMALL;
+               trans.out.data.length = trans.in.max_data;
+       }
+
        params_left = trans.out.params.length;
        data_left   = trans.out.data.length;
        params      = trans.out.params.data;