- Bugreported by Tonda Nebuzelsky.
- g_return_val_if_fail(acl!=NULL,NULL);
+ /* 'acl' may be NULL */
g_return_val_if_fail(src!=NULL,NULL);
g_return_val_if_fail(dest!=NULL,NULL);
g_return_val_if_fail(destdatap!=NULL,NULL);
g_return_val_if_fail(src!=NULL,NULL);
g_return_val_if_fail(dest!=NULL,NULL);
g_return_val_if_fail(destdatap!=NULL,NULL);
if (src->Control & SE_SELF_RELATIVE)
acl=(ACL *)(((ULONG)acl)+((ULONG)src));
if (!acl)
if (src->Control & SE_SELF_RELATIVE)
acl=(ACL *)(((ULONG)acl)+((ULONG)src));
if (!acl)
- return NULL;
-
- /* W32 undocumented: ReactOS uses '&0xFF' notation, I have seen value PAGE_SIZE.
- * W32 doc says it is a regular size.
- */
- size=acl->AclSize;
- g_assert(!(size&3)); /* sizeof(ULONG)-alignment */
- r=*destdatap;
- (*(char **)destdatap)+=size;
- memcpy(r,acl,size);
+ r=NULL;
+ else {
+ /* W32 undocumented: ReactOS uses '&0xFF' notation, I have seen value PAGE_SIZE.
+ * W32 doc says it is a regular size.
+ */
+ size=acl->AclSize;
+ g_assert(!(size&3)); /* sizeof(ULONG)-alignment */
+ r=*destdatap;
+ (*(char **)destdatap)+=size;
+ memcpy(r,acl,size);
+ }
if (dest->Control & SE_SELF_RELATIVE)
r=(ACL *)(((ULONG)r)-((ULONG)dest));
if (dest->Control & SE_SELF_RELATIVE)
r=(ACL *)(((ULONG)r)-((ULONG)dest));
dest->Owner=SID_dup(src->Owner,src,dest,&destdata);
dest->Group=SID_dup(src->Group,src,dest,&destdata);
if (src->Control & SE_SACL_PRESENT) {
dest->Owner=SID_dup(src->Owner,src,dest,&destdata);
dest->Group=SID_dup(src->Group,src,dest,&destdata);
if (src->Control & SE_SACL_PRESENT) {
- if (!(dest->Sacl=ACL_dup(src->Sacl,src,dest,&destdata)))
- dest->Control&=~SE_SACL_PRESENT;
+ /* 'SE_SACL_PRESENT' may be site while 'Sacl==NULL'.
+ * FIXME: How it differs from '!SE_SACL_PRESENT'?
+ */
+ dest->Sacl=ACL_dup(src->Sacl,src,dest,&destdata);
+ else
+ dest->Sacl=NULL;
if (src->Control & SE_DACL_PRESENT) {
if (src->Control & SE_DACL_PRESENT) {
- if (!(dest->Dacl=ACL_dup(src->Dacl,src,dest,&destdata)))
- dest->Control&=~SE_DACL_PRESENT;
+ /* 'SE_DACL_PRESENT' may be site while 'Dacl==NULL'.
+ * FIXME: How it differs from '!SE_DACL_PRESENT'?
+ */
+ dest->Dacl=ACL_dup(src->Dacl,src,dest,&destdata);
+ else
+ dest->Dacl=NULL;
g_assert(((char *)dest)+size==destdata);
g_assert(((char *)dest)+size==destdata);