From 4e8f539f158b9d3413d0b88ce2fb8f70733139d8 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Fri, 10 Sep 2010 14:53:44 +0000 Subject: * flock.cc (allow_others_to_sync): Define MAX_PROCESS_SD_SIZE. Use instead of ACL_DEFAULT_SIZE. * sec_acl.cc (setacl): Use TLS buffer to allow maximum ACL size. * security.h (ACL_DEFAULT_SIZE): Drop definition. (ACL_MAXIMUM_SIZE): Define. (SD_MAXIMUM_SIZE): Define. * security.cc (get_file_sd): Allocate security_decscriptor with size SD_MAXIMUM_SIZE. (alloc_sd): Use TLS buffer to allow maximum ACL size. --- winsup/cygwin/security.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'winsup/cygwin/security.cc') diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc index e88fcf2fc..1052f98c0 100644 --- a/winsup/cygwin/security.cc +++ b/winsup/cygwin/security.cc @@ -24,6 +24,7 @@ details. */ #include "cygheap.h" #include "ntdll.h" #include "pwdgrp.h" +#include "tls_pbuf.h" #include #define ALL_SECURITY_INFORMATION (DACL_SECURITY_INFORMATION \ @@ -68,7 +69,7 @@ get_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, else { NTSTATUS status; - ULONG len = 32768; + ULONG len = SD_MAXIMUM_SIZE; if (!sd.malloc (len)) { @@ -413,6 +414,7 @@ alloc_sd (path_conv &pc, __uid32_t uid, __gid32_t gid, int attribute, security_descriptor &sd_ret) { BOOL dummy; + tmp_pathbuf tp; /* NOTE: If the high bit of attribute is set, we have just created a file or directory. See below for an explanation. */ @@ -483,8 +485,8 @@ alloc_sd (path_conv &pc, __uid32_t uid, __gid32_t gid, int attribute, } /* Initialize local access control list. */ - PACL acl = (PACL) alloca (ACL_DEFAULT_SIZE); - if (!InitializeAcl (acl, ACL_DEFAULT_SIZE, ACL_REVISION)) + PACL acl = (PACL) tp.w_get (); + if (!InitializeAcl (acl, ACL_MAXIMUM_SIZE, ACL_REVISION)) { __seterrno (); return NULL; -- cgit v1.2.3