<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:Consolas;}
span.CodeChar
        {mso-style-name:"Code Char\,c Char";
        mso-style-link:"Code\,c";
        font-family:"Courier New";
        color:black;}
p.Code, li.Code, div.Code
        {mso-style-name:"Code\,c";
        mso-style-link:"Code Char\,c Char";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:1.0pt;
        margin-left:.15in;
        font-size:11.0pt;
        font-family:"Courier New";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoPlainText>Hi Nadezhda,<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>We have completed investigation of your request. The
MS-ADTS document will be updated to address defaulting rules related to
defaultSecurityDescriptor when assigning security descriptors to AD objects.
Our revised response for your inquiry is as follows. <o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><b><span style='color:#1F497D'>Condition 1 : Parent contains
inheritable ACEs<o:p></o:p></span></b></p>

<p class=MsoListParagraph><span style='color:#1F497D'>Step 1. &nbsp;If the
control flags on the client allow inheritance then the inheritable ACEs from
the parent form the newly created object&#8217;s initial DACL and SACL <o:p></o:p></span></p>

<p class=MsoListParagraph><span style='color:#1F497D'>Step 2. &nbsp;If the
control flags on the client do not allow inheritance &nbsp;set initial DACL and
SACL to NULL<o:p></o:p></span></p>

<p class=MsoListParagraph><span style='color:#1F497D'>Step 3. &nbsp;If an
explicit security descriptor is provided by the client, that is merged with the
initial DACL and SACL.<o:p></o:p></span></p>

<p class=MsoListParagraph><span style='color:#1F497D'>Step 4. &nbsp;If an
explicit security descriptor is not provided by the client then the DACL and SACL
from the defaultSecurityDescriptor are merged with the initial DACL and SACL.
Method ComputeInheritedACLFromParent [MS-DTYP] section 2.5.2.6 should be called
passing DACL and SACL from the defaultSecurityDescriptor as the parameters. <o:p></o:p></span></p>

<p class=MsoListParagraph><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoListParagraph><span style='color:#1F497D'>In ComputeACL method
[MS-DTYP] section 2.5.2.4 a call to ComputeInheritedACLFromParent should to be
made in the highlighted area :<o:p></o:p></span></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>Set ComputedACL to NULL<o:p></o:p></p>

<p class=Code>Set ComputedControl to NULL<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>CALL ContainsInheritableACEs WITH ParentACL RETURNING result<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>IF result = TRUE THEN<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp; // ParentACL contains inheritable ACEs<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp; <span style='color:windowtext'>IF(CreatorACL
is not present) OR<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
((CreatorACL is present) AND<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(AutoInheritFlags contains DEFAULT_DESCRIPTOR))<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp; THEN<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// Use only the inherited ACEs from the parent<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CALL ComputeInheritedACLFromParent WITH<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ParentACL, IsContainerObject, ObjectTypes<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
RETURNING NextACL<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CALL PostProcessACL WITH<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;NextACL, Owner, Group, GenericMapping<o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
RETURNING FinalACL<o:p></o:p></span></p>

<p class=Code><span style='font-size:12.0pt;font-family:"Calibri","sans-serif";
color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span
style='background:yellow;mso-highlight:yellow'>Here
ComputeInheritedACLFromParent should be called passing
defaultSecurityDescriptor. The ACLs obtained via this call should be merged
with the FinalACL above. That will be the new resultant FinalACL</span><o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set
ComputedACL to FinalACL</span><span style='font-size:8.0pt;color:windowtext'><o:p></o:p></span></p>

<p class=Code><span style='color:windowtext'>&nbsp;&nbsp;&nbsp; ENDIF<o:p></o:p></span></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp; IF ((CreatorACL is present) AND<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (AutoInheritFlags does not contain
DEFAULT_DESCRIPTOR))<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp; THEN<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL
PreProcessACLFromCreator WITH CreatorACL<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETURNING PreACL<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL
ComputeInheritedACLFromCreator WITH<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreACL,
IsContainerObject, ObjectTypes<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETURNING TmpACL<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF((ComputeType =
DACL_COMPUTE) AND<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(CreatorControl does not contain DACL_PROTECTED) AND<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(AutoInheritFlags contains DACL_AUTO_INHERIT flag))<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; THEN<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// Compute the inherited ACEs from the parent<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CALL ComputeInheritedACLFromParent WITH<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ParentACL, IsContainerObject, ObjectTypes<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
RETURNING ParentACL<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Append ParentACL.ACEs to TmpACL.ACEs<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Add DACL_AUTO_INHERITED to ComputedControl<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE <o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
IF ((ComputeType = SACL_COMPUTE) AND<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(CreatorControl does not contain SACL_PROTECTED) AND<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(AutoInheritFlags contains SACL_AUTO_INHERIT flag))<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
THEN<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// Compute the inherited ACEs from the parent<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CALL ComputeInheritedACLFromParent WITH<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParentACL,
IsContainerObject, ObjectTypes<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
RETURNING ParentACL<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Append ParentACL.ACEs to TmpACL.ACEs<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Add SACL_AUTO_INHERITED to ComputedControl<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ENDIF<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp; ENDIF<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code><span style='font-size:12.0pt;font-family:"Calibri","sans-serif"'>&nbsp;&nbsp;&nbsp;
<span style='background:yellow;mso-highlight:yellow'>If (CREATORACL is absent)<o:p></o:p></span></span></p>

<p class=Code><span style='font-size:12.0pt;font-family:"Calibri","sans-serif";
background:yellow;mso-highlight:yellow'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Here ACLs should be obtained from the parent and be merged with those from the
defaultSecurityDescriptor. Both via calls to
ComputeInheritedACLFromParent.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p>

<p class=Code><span style='font-size:12.0pt;font-family:"Calibri","sans-serif";
background:yellow;mso-highlight:yellow'>&nbsp;&nbsp;&nbsp; ENDIF</span><span
style='font-size:12.0pt;font-family:"Calibri","sans-serif"'><o:p></o:p></span></p>

<p class=Code><span style='font-size:8.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=Code>&nbsp;&nbsp;&nbsp; CALL PostProcessACL WITH<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TmpACL, Owner, Group,
GenericMapping<o:p></o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp; RETURNING ProcessedACL<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>&nbsp;&nbsp;&nbsp; Set ComputedACL to ProcessedACL<o:p></o:p></p>

<p class=Code><o:p>&nbsp;</o:p></p>

<p class=Code>ELSE // ParentACL does not contain inheritable ACEs<o:p></o:p></p>

<p class=MsoListParagraph><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoListParagraph><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b><span style='color:#1F497D'>Condition 2 : Parent does not
contain inheritable ACEs<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
If the parentACL does not contain inheritable ACEs then check to see if a
defaultSecurityDescriptor for the objectClass under consideration is present. <o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>If
defaultSecurityDescriptor is <b>present</b> then call
ComputeInheritedACLFromParent by passing (<b>ACL from defaultSecurityDescriptor</b>)
in place of <b>ParentACL</b>. That is the following part in the ComputeACL
method [MS-DTYP] section 2.5.2.4.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='color:#548DD4'>&nbsp; </span><span
style='font-family:"Calibri","sans-serif";color:#548DD4'>CALL
ComputeInheritedACLFromParent WITH<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>ParentACL</b>,
IsContainerObject, ObjectTypes<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp; RETURNING NextACL<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp; CALL PostProcessACL WITH<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NextACL,
Owner, Group, GenericMapping<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;RETURNING FinalACL<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ComputedACL to FinalACL<o:p></o:p></span></p>

<p class=Code><span style='font-family:"Calibri","sans-serif";color:#548DD4'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>In this case the security
information in the token need not be used. </span><span style='color:#1F497D'><o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b><span style='color:#1F497D'>Condition 3 : Parent does not
contain inheritable ACEs AND defaultSecurityDescriptor for the particular
object is absent<o:p></o:p></span></b></p>

<p class=MsoNormal><span style='color:#1F497D'>If the defaultSecurityDescriptor
of the particular objectClass under consideration is <b>absent</b> then make
use of Token as described in the ComputeACL method.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>ELSE // ParentACL does not contain inheritable ACEs<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>IF CreatorACL = NULL THEN<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // No ACL supplied
for the object<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF (ComputeType =
DACL_COMPUTE) THEN<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Set ComputedACL to Token.DefaultDACL<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// No default for SACL; left as NULL<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF<o:p></o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'><o:p>&nbsp;</o:p></span></p>

<p class=Code style='margin-left:.5in'><span style='font-family:"Calibri","sans-serif";
color:#548DD4'>&nbsp;&nbsp;&nbsp; ELSE<o:p></o:p></span></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>Let us know if you need further assistance on this topic.
<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>Best regards,<o:p></o:p></p>

<p class=MsoPlainText>Edgar<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>-----Original Message-----<br>
From: Nadezhda Ivanova [mailto:nadezhda.ivanova@postpath.com] <br>
Sent: Friday, July 31, 2009 6:53 AM<br>
To: Edgar Olougouna<br>
Cc: pfif@tridgell.net; cifs-protocol@samba.org<br>
Subject: RE: Information needed about security token default ACL<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>Hi Edgar,<o:p></o:p></p>

<p class=MsoPlainText>Thank you for your explanation. It answered a lot of
questions, but also raised some more, see below:<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; -----Original Message-----<o:p></o:p></p>

<p class=MsoPlainText>&gt; From: Edgar Olougouna [mailto:edgaro@microsoft.com]<o:p></o:p></p>

<p class=MsoPlainText>&gt; Sent: Thursday, July 30, 2009 5:37 PM<o:p></o:p></p>

<p class=MsoPlainText>&gt; To: Nadezhda Ivanova<o:p></o:p></p>

<p class=MsoPlainText>&gt; Cc: 'pfif@tridgell.net'; 'cifs-protocol@samba.org'<o:p></o:p></p>

<p class=MsoPlainText>&gt; Subject: RE: Information needed about security token
default ACL<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Hi Nadezhda,<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; This response relates to the portion of your inquiry
regarding the<o:p></o:p></p>

<p class=MsoPlainText>&gt; CreateSecurityDescriptor algorithm. I hope the
following information will<o:p></o:p></p>

<p class=MsoPlainText>&gt; clarify how CreatorDescriptor and
defaultSecuritiDescriptor relate to the<o:p></o:p></p>

<p class=MsoPlainText>&gt; CreateSecurityDescriptor procedure.<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; The CreatorDescriptor (optional) is a security
descriptor explicitly<o:p></o:p></p>

<p class=MsoPlainText>&gt; provided by the creator of the object. The creator
of the object is the<o:p></o:p></p>

<p class=MsoPlainText>&gt; subject that is creating the object. A subject is a
thread executing in<o:p></o:p></p>

<p class=MsoPlainText>&gt; the security context provided by an access token.<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; [MS-ADTS] Section 7 provides additional information
that may help on your<o:p></o:p></p>

<p class=MsoPlainText>&gt; topic. Section &quot;7.1.3 Security Descriptor
Requirements&quot; details the<o:p></o:p></p>

<p class=MsoPlainText>&gt; parameters used by the CreateSecurityDescriptor
algorithm to compute the<o:p></o:p></p>

<p class=MsoPlainText>&gt; resultant security descriptor value of an AD object,
for instance<o:p></o:p></p>

<p class=MsoPlainText>&gt; AutoInheritFlags: DACL_AUTO_INHERIT |
SACL_AUTO_INHERIT.<o:p></o:p></p>

<p class=MsoPlainText>&gt; Note these key points when an ACL is built for an AD
object compared to<o:p></o:p></p>

<p class=MsoPlainText>&gt; other types of objects:<o:p></o:p></p>

<p class=MsoPlainText>&gt; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generic inheritable ACEs apply to all types
of child objects.<o:p></o:p></p>

<p class=MsoPlainText>&gt; Object-specific inheritable ACEs apply only to a
specific type of child<o:p></o:p></p>

<p class=MsoPlainText>&gt; object.<o:p></o:p></p>

<p class=MsoPlainText>&gt; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If there is no supplied security descriptor,
no parent-inheritable<o:p></o:p></p>

<p class=MsoPlainText>&gt; ACEs, the operating system uses the ACL from the
defaultSecurityDescriptor<o:p></o:p></p>

<p class=MsoPlainText>&gt; in the classSchema object.<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Based on the CreateSecurityDescriptor procedure from
[MS-DTYP] 2.5.2.3,<o:p></o:p></p>

<p class=MsoPlainText>&gt; you can apply the following rules to ACL assignment
for a new AD object:<o:p></o:p></p>

<p class=MsoPlainText>&gt; If an explicit security descriptor
(CreatorDescriptor) is provided by the<o:p></o:p></p>

<p class=MsoPlainText>&gt; client, then that forms the object's initial DACL
and SACL. If the<o:p></o:p></p>

<p class=MsoPlainText>&gt; client's controls allow inheritance then the
inheritable ACEs from the<o:p></o:p></p>

<p class=MsoPlainText>&gt; parent are merged into the object's initial DACL and
SACL.<o:p></o:p></p>

<p class=MsoPlainText>&gt; If the client does not provide an explicit security
descriptor then the<o:p></o:p></p>

<p class=MsoPlainText>&gt; inheritable ACEs from the parent are merged into the
new object's DACL and<o:p></o:p></p>

<p class=MsoPlainText>&gt; SACL. For details please refer to [MS-DTYP] section
2.5.2.4 ComputeACL<o:p></o:p></p>

<p class=MsoPlainText>&gt; method. If the parent contains object-specific
inheritable ACEs then the<o:p></o:p></p>

<p class=MsoPlainText>&gt; defaultSecurityDescriptor is not used during the
security descriptor<o:p></o:p></p>

<p class=MsoPlainText>&gt; creation process for the newly added object.<o:p></o:p></p>

<p class=MsoPlainText>[Nadezhda Ivanova]<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>Above you state that defaultSecurityDescriptor is used if
there are NO&nbsp; inheritable ACE's, here you say it's used if there are no
Object-Specific Inheritable ACE's... If there are non-object specific
inheritable ACE's , do we merge them in with the ace's from the
defaultSecurityDescriptor?<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; If the parent does not contain object-specific
inheritable ACEs then the<o:p></o:p></p>

<p class=MsoPlainText>&gt; defaultSecurityDescriptor from the Active Directory
schema for the object<o:p></o:p></p>

<p class=MsoPlainText>&gt; type is used. Following the definition of method
ComputeACL in [MS-DTYP]<o:p></o:p></p>

<p class=MsoPlainText>&gt; 2.5.2.4, method ComputeInheritedACLFromParent
[MS-DTYP] section 2.5.2.6<o:p></o:p></p>

<p class=MsoPlainText>&gt; can be called by passing ACLs from the
defaultSecurityDescriptor as the<o:p></o:p></p>

<p class=MsoPlainText>&gt; parameters.<o:p></o:p></p>

<p class=MsoPlainText>[Nadezhda Ivanova]<o:p></o:p></p>

<p class=MsoPlainText>I need clarification here. By definition
ComputeInheritedACLFromParent accepts the Parent's descriptor and returns the
set of ACE's to be inherited by the new object. How exactly do you use it with
defaultSecurityDescriptor's ACE?<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>I assume you mean the following part of computeACL:<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>IF result = TRUE<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; THEN // ParentACL contains inheritable ACEs<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF(CreatorACL is not present) OR ((CreatorACL is
present)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND(AutoInheritFlags contains
DEFAULT_DESCRIPTOR))<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;THEN // Use only the inherited ACEs from the
parent<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL ComputeInheritedACLFromParent WITH
ParentACL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsContainerObject, ObjectTypes<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETURNING NextACL<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL PostProcessACL WITH NextACL, Owner, Group,
GenericMapping&nbsp; RETURNING FinalACL<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set ComputedACL to FinalACL<o:p></o:p></p>

<p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDIF<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>Here is the description of DEFAULT_DESCRIPTOR:<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>DEFAULT_DESCRIPTOR_FOR_OBJECT: Selects the
CreatorDescriptor as the default security descriptor provided that no object
type specific ACEs are inherited from the parent. If such ACEs do get
inherited, CreatorDescriptor is ignored.<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>So, it appears that the defaultSecurityDescriptor is
passed on as CreatorDescriptor, and the DEFAULT_DESCRIPTOR_FOR_OBJECT flag is
raised in this case. How does that connect with calling
ComputeInheritedACLFromParent with defaultSecurityDescriptors ACE's.<o:p></o:p></p>

<p class=MsoPlainText><o:p></o:p></p>

<p class=MsoPlainText>Also, the above portion of the algorithm appears to
always disregard CreatorACL if the flag is raised, and not if the flag is
raised AND the parent contains Object-Specific inheritable ACES, as the flag's
description and your answer state. So, what am I missing here?<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; If the Active Directory schema does not specify a<o:p></o:p></p>

<p class=MsoPlainText>&gt; defaultSecurityDescriptor for the object type then
the security<o:p></o:p></p>

<p class=MsoPlainText>&gt; information in the requestor's token is used. For
details about the usage<o:p></o:p></p>

<p class=MsoPlainText>&gt; of the requestor's token please refer [MS-DTYP]
Section 2.5.2.4<o:p></o:p></p>

<p class=MsoPlainText>&gt; ComputeACL.<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Please let me know if you need further assistance on
this topic.<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Best regards,<o:p></o:p></p>

<p class=MsoPlainText>&gt; Edgar<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; -----Original Message-----<o:p></o:p></p>

<p class=MsoPlainText>&gt; From: Nadezhda Ivanova
[mailto:nadezhda.ivanova@postpath.com]<o:p></o:p></p>

<p class=MsoPlainText>&gt; Sent: Friday, July 17, 2009 7:46 AM<o:p></o:p></p>

<p class=MsoPlainText>&gt; To: Interoperability Documentation Help<o:p></o:p></p>

<p class=MsoPlainText>&gt; Cc: pfif@tridgell.net; cifs-protocol@samba.org<o:p></o:p></p>

<p class=MsoPlainText>&gt; Subject: Information needed about security token
default ACL<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Hi,<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; In the course of my work in implementing security
descriptor inheritance<o:p></o:p></p>

<p class=MsoPlainText>&gt; in Directory service of Samba 4, I came across the
following statement in<o:p></o:p></p>

<p class=MsoPlainText>&gt; MS-DTYP, 2.5.2<o:p></o:p></p>

<p class=MsoPlainText>&gt; &quot;The token also contains an ACL, Token.DefaultDACL,
that serves as the<o:p></o:p></p>

<p class=MsoPlainText>&gt; DACL assigned by default to any objects created by
the user. &quot;<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; So, am I right to understand that this DACL is used
when no<o:p></o:p></p>

<p class=MsoPlainText>&gt; nTSecurityDescriptor is provided by the incoming
LDAP add request, and<o:p></o:p></p>

<p class=MsoPlainText>&gt; there is no defaultSecurityDescriptor for the
objectClass.<o:p></o:p></p>

<p class=MsoPlainText>&gt; If so, how is the Token.DefaultDACL constructed and
when? Is this based on<o:p></o:p></p>

<p class=MsoPlainText>&gt; the user's credentials and how?<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; In addition, I have a question about the security
descriptor creation<o:p></o:p></p>

<p class=MsoPlainText>&gt; algorithm described in MS-DTYP 2.5.2.3<o:p></o:p></p>

<p class=MsoPlainText>&gt; One of the arguments of CreateSecurityDescriptor is:<o:p></o:p></p>

<p class=MsoPlainText>&gt; CreatorDescriptor: Security descriptor for the new
object provided by the<o:p></o:p></p>

<p class=MsoPlainText>&gt; creator of the object. Caller can pass NULL.<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Am I right in understanding that this is either the
nTSecurityDescriptor<o:p></o:p></p>

<p class=MsoPlainText>&gt; attribute provided by the user, or, in the lack
thereof, the<o:p></o:p></p>

<p class=MsoPlainText>&gt; defaultSecurityDescriptor of the object class?<o:p></o:p></p>

<p class=MsoPlainText>&gt;<o:p>&nbsp;</o:p></p>

<p class=MsoPlainText>&gt; Best Regards,<o:p></o:p></p>

<p class=MsoPlainText>&gt; Nadezhda Ivanova<o:p></o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

<p class=MsoPlainText><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>