<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.dirteam.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tomek's DS World : Directory services</title><link>http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx</link><description>Tags: Directory services</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Groups and tokens</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2010/06/29/o-grupach-w-tokenach.aspx</link><pubDate>Mon, 28 Jun 2010 20:27:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:5094</guid><dc:creator>tomek</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/5094.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=5094</wfw:commentRss><description>&lt;P&gt;&lt;EM&gt;I'm done with an intensive month of sessions, delivered for different user groups and other communities online.&amp;nbsp;When you managed to attend &lt;A href="http://blogs.dirteam.com/blogs/tomek/archive/2010/05/31/speaking-in-june.aspx"&gt;my session about Kerberos&lt;/A&gt; I hope you liked it&amp;nbsp;;). Now it's time for some blogging activities. &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;A&amp;nbsp;friend &lt;A href="http://www.w-files.pl/terminale-dod-combo/"&gt;asked on his blog&lt;/A&gt; (PL only, sorry) a question how to quickly determine&amp;nbsp;the groups a computer account belongs to. Question was asked, time for answer, or at least: one of the possible answers :). Actually I was sure that I wrote about it here before but a quick search determined that I'm wrong (I'm sure I talked about it on last TEC in Berlin). If not ... time to do this now.&amp;nbsp; Starting with the basics. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Constructed attributes&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;First let me introduce the concept of constructed attributes in Active Directory: Active Directory (among other capabilities) can handle dynamically constructed attributes, which are calculated on the fly when a query is issued to get them. If one looks at the object using a standard LDAP client (like LDP.EXE) or other tool these attributes will not be present on the object. However,&amp;nbsp;when a&amp;nbsp;query&amp;nbsp;is issued to the directory to return them – magic happena and the value (if exists) will be calculated and returned. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.w2k.pl/img/construction.jpg"&gt; &lt;BR&gt;(&lt;A href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/A&gt;) &lt;A href="http://www.flickr.com/photos/tfrancis/2372398718/"&gt;Swansea Photographer&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;First example, which everybody&amp;nbsp;is familiar with, are back-link attributes. Back-link attributes are pair attributes with forward links, which are used to store information about references among the objects – think &lt;EM&gt;member –&amp;gt; memberOf&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;If we will take a look at user object properties using the new fancy attribute editor feature from Windows Server 2008 R2 Active Directory Users &amp;amp; Computers (ADUC)&amp;nbsp;we can't see memberOf attribute.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.w2k.pl/img/memberofnot.jpg"&gt;&lt;/P&gt;
&lt;P&gt;However if we issue a query for this attribute using ADFIND.EXE, we find:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;C:\ &amp;gt;adfind -b CN=tom.tom,ou=Accounting,DC=w2k,DC=pl -s base memberOF&lt;/P&gt;
&lt;P&gt;AdFind V01.42.00cpp Joe Richards (joe@joeware.net) April 2010&lt;/P&gt;
&lt;P&gt;Using server: FIMDC01.w2k.pl:389 &lt;BR&gt;Directory: Windows Server 2008 R2&lt;/P&gt;
&lt;P&gt;dn:CN=tom.tom,ou=Accounting,DC=w2k,DC=pl &lt;BR&gt;&amp;gt;memberOf: CN=Ksiegowosc,OU=FIMGroups,DC=w2k,DC=pl&lt;/P&gt;
&lt;P&gt;1 Objects returned &lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;We get a response ... magic &lt;img src="http://blogs.dirteam.com/emoticons/emotion-5.gif" alt="Wink" /&gt; &lt;/P&gt;
&lt;P&gt;All the magic is being done by the directory service which is calculating, on the fly, the&amp;nbsp;attribute value which was requested. There is more attributes which can be constructed by AD, and they all fall into one of three categories (at least based on available documentation):&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Attribute is marked as constructed in the schema using ATTR_IS_CONSTRUCTED bit in the&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/cc223141(v=PROT.13).aspx"&gt;systemFlags&lt;/A&gt; attribute value.&lt;/LI&gt;
&lt;LI&gt;Attribute is a back link. (as showed above)&lt;/LI&gt;
&lt;LI&gt;It is the&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/cc223254(v=PROT.13).aspx"&gt;rootDSE&lt;/A&gt; attribute.. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;A list of constructed attributes is &lt;A href="http://msdn.microsoft.com/en-us/library/cc223254(v=PROT.13).aspx"&gt;available on MSDN&lt;/A&gt; for anyone who is interested.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;tokenGroups&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;And here&amp;nbsp;is an answer (one of possible) to&amp;nbsp;the question how to determine group membership&amp;nbsp;for a workstation: One way is to query for &lt;A href="http://msdn.microsoft.com/en-us/library/cc223395(v=PROT.13).aspx"&gt;&lt;EM&gt;tokenGroups&lt;/EM&gt;&lt;/A&gt; attribute of a computer object. Attribute description is presented below:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;These two computed attributes return the set of SIDs from a transitive group membership expansion operation on a given object &lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So if we query AD for a security principal and we ask for the tokenGroups attribute we will get a list of SID identifiers of groups, to which this computer object belongs when it logs on. The computer object in a domain is a security principal as others, so the query can be issued to retrieve its attributes and retrieve computer attributes values.&lt;/P&gt;
&lt;P&gt;Once again using ADFIND.EXE:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;C:\ &amp;gt;adfind -b CN=STS,CN=Computers,DC=w2k,DC=pl -s base tokenGroups &lt;BR&gt;AdFind V01.42.00cpp Joe Richards (joe@joeware.net) April 2010&lt;/P&gt;
&lt;P&gt;Using server: FIMDC01.w2k.pl:389 &lt;BR&gt;Directory: Windows Server 2008 R2&lt;/P&gt;
&lt;P&gt;dn:CN=STS,CN=Computers,DC=w2k,DC=pl &lt;BR&gt;&amp;gt;tokenGroups: S-1-5-21-2045789631-2668715847-4178987103-1162 &lt;BR&gt;&amp;gt;tokenGroups: S-1-5-21-2045789631-2668715847-4178987103-515&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As you can see, we've got a list of SIDs corresponding to the groups. How to translate these SIDs to names? Use ADFIND.EXE with SID as query parameter:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;C:\ &amp;gt;adfind -b dc=w2k,dc=pl -s subtree -f "(&amp;amp;(objectSid=S-1-5-21-2045789631-2668715847-4178987103-1162))" name&lt;/P&gt;
&lt;P&gt;AdFind V01.42.00cpp Joe Richards (joe@joeware.net) April 2010&lt;/P&gt;
&lt;P&gt;Using server: FIMDC01.w2k.pl:389 &lt;BR&gt;Directory: Windows Server 2008 R2&lt;/P&gt;
&lt;P&gt;dn:CN=ADFS Servers,OU=FIMGroups,DC=w2k,DC=pl &lt;BR&gt;&amp;gt;name: ADFS Servers&lt;/P&gt;
&lt;P&gt;1 Objects returned &lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And that's all of the trickery for today ...&lt;/P&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=5094" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Tools+and+scripts/default.aspx">Tools and scripts</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>AD WS diagnostic logging</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2010/04/10/ad-ws-diagnostic-logging.aspx</link><pubDate>Sat, 10 Apr 2010 00:09:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4549</guid><dc:creator>tomek</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4549.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4549</wfw:commentRss><description>&lt;P&gt;I &lt;A href="http://blogs.dirteam.com/blogs/tomek/archive/2010/03/30/where-is-my-ad-web-service.aspx" mce_href="http://blogs.dirteam.com/blogs/tomek/archive/2010/03/30/where-is-my-ad-web-service.aspx"&gt;promised to get back to AD WS topic&lt;/A&gt; so here I am.&amp;nbsp; My last post was about the process of Active Directory Web Services (AD WS)&amp;nbsp;instance location from a client perspective. When a client locates the&amp;nbsp;service, in most cases, it is&amp;nbsp;with the&amp;nbsp;purpose to do something with it – query, update ... . But what if something goes wrong and we want to troubleshoot this? Of course there is always network traffic analysis, but there is also an AD WS debug logging mechanism which can be used for it. All you need to do is turn it on. How??&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.w2k.pl/img/adwsdiag.jpg" mce_src="http://www.w2k.pl/img/adwsdiag.jpg"&gt;&lt;/P&gt;
&lt;P&gt;(&lt;A href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/A&gt;) &lt;A href="http://www.flickr.com/photos/91499534@N00/2715342181/" mce_href="http://www.flickr.com/photos/91499534@N00/2715342181/"&gt;ehpien&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;AD WS is a web service written in WCF and installed on every Windows Server 2008 R2-based DC. It is also available&amp;nbsp;as&amp;nbsp;the AD Management Gateway option for Windows Server 2003 and Windows Server 2008. The service has its own configuration stored in a file named &lt;I&gt;Microsoft.ActiveDirectory.WebServices.exe.config, &lt;/I&gt;placed in the AD WS installation folder (%WINDIR%\ADWS by default).&lt;/P&gt;
&lt;P&gt;Configuration parameters are described on &lt;A href="http://technet.microsoft.com/en-us/library/dd391908%28WS.10%29.aspx" mce_href="http://technet.microsoft.com/en-us/library/dd391908%28WS.10%29.aspx"&gt;these TechNet pages&lt;/A&gt;, however information about the diagnostic logging option is missing there. To configure this mechanism, alter the configuration file and add in an &amp;lt;appSettings&amp;gt; section with the following entries:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: rgb(255,255,255)" color=#444444&gt;&amp;lt;add key="DebugLevel" Value="&amp;lt;log_level&amp;gt;" /&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;where &lt;I&gt;log_level&lt;/I&gt; might be one of following values: &lt;I&gt;&lt;B&gt;None&lt;/B&gt;&lt;/I&gt;, &lt;B&gt;&lt;I&gt;Error&lt;/I&gt;&lt;/B&gt;, &lt;B&gt;&lt;I&gt;Warn&lt;/I&gt;&lt;/B&gt; or &lt;B&gt;&lt;I&gt;Info&lt;/I&gt;&lt;/B&gt;. Info is the highest level of debug mode, which will log full debug info and also the communication exchange between clients and the service. To configure where the debug&amp;nbsp;information will be stored, add the following key to the config file:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: rgb(255,255,255)" color=#444444&gt;&amp;lt;add key="DebugLogFile" value="&amp;lt;path to log file&amp;gt;" /&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I think that options in this case are self explaining. Final configuration might look something like this:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: rgb(255,255,255)" color=#444444&gt;&amp;lt;add key="DebugLevel" Value="Info" /&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT style="BACKGROUND-COLOR: rgb(255,255,255)" color=#444444&gt;&amp;lt;add key="DebugLogFile" value="C:\ADWSLog\Adws_trace_log.txt" /&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After making these changes in the configuration file, restart the&amp;nbsp;service to make them take effect. &lt;/P&gt;
&lt;P&gt;This change has to be introduced into each instance configuration separately. But it might be only a file copy operation – it depends on your environment. &lt;/P&gt;
&lt;P&gt;One thing to remember – there is nothing like free debug operation – it always has some cost attached in performance. I don't know what this cost is in AD WS case but always consider it when you will decide to use it – especially in &lt;I&gt;&lt;STRONG&gt;Info&lt;/STRONG&gt;&lt;/I&gt; mode... &lt;/P&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4549" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Where is my (AD) web service?</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2010/03/30/where-is-my-ad-web-service.aspx</link><pubDate>Tue, 30 Mar 2010 09:27:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4536</guid><dc:creator>tomek</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4536.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4536</wfw:commentRss><description>&lt;P&gt;Windows Server 2008 R2, among other changes, brings a new interface to access directory services – the &lt;A href="http://technet.microsoft.com/en-us/library/dd391908%28WS.10%29.aspx" mce_href="http://technet.microsoft.com/en-us/library/dd391908%28WS.10%29.aspx"&gt;Active Directory Web Service (ADWS)&lt;/A&gt;. It is also available for older systems – Windows 2003 and 2008 – as &lt;A href="http://www.w2k.pl/active-directory-management-gateway-service/" mce_href="http://www.w2k.pl/active-directory-management-gateway-service/"&gt;Active Directory Management Gateway&lt;/A&gt; (available as separate download). &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.w2k.pl/img/gway.jpg" mce_src="http://www.w2k.pl/img/gway.jpg"&gt;&lt;/P&gt;
&lt;P&gt;(&lt;A href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/A&gt;) &lt;A href="http://www.flickr.com/photos/paprikaoptic/3176891707/" mce_href="http://www.flickr.com/photos/paprikaoptic/3176891707/"&gt;paprikaOptic&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ADWS I being used so far by a&amp;nbsp;few Windows 2008 R2 components like the new AD interface AD Administrative Center and Powershell module for AD (yes, this Powershell module uses Web Service, not LDAP). This Powershell module was a cause of e-mail I got from one of my friends (and customers also).&lt;/P&gt;
&lt;P&gt;When he tried to use Powershell module from workstation to connect to ADWS on a newly deployed Windows Server 2008 R2 box he got the following message:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Windows PowerShell&lt;BR&gt;Copyright (C) 2009 Microsoft Corporation. All rights reserved.&lt;BR&gt;WARNING: Error initializing default drive: 'Unable to find a default server&lt;BR&gt;with Active Directory Web Services running.'.&lt;BR&gt;PS C:\Windows&amp;gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now,&amp;nbsp;here comes the ultimate question: how does the client&amp;nbsp;locate the&amp;nbsp;ADWS instance? – in this case the client&amp;nbsp;being the Powershell module. &lt;/P&gt;
&lt;P&gt;The ultimate answer to this question is as always ... DC locator. DC Locator is a process which allows clients to locate an optimal domain controller. Optimal in the AD meaning of this word: closest to a client from a network perspective, where network is represented through sites and subnets in AD configuration. &lt;/P&gt;
&lt;P&gt;A client can also pass some additional requests to a DC locator process, which are being used to choose a DC with specific roles, required by the client in this moment. This might be a request for a writable DC or a DC acting as a GC. The Domain controller passes such information in &lt;A href="http://msdn.microsoft.com/en-us/library/cc223802%28PROT.10%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc223802(PROT.10).aspx"&gt;DS_FLAGS&lt;/A&gt; structure.&lt;/P&gt;
&lt;P&gt;To allow clients to located DCs with ADWS instances an&amp;nbsp;additional flag was added to the DS_FLAGS structure. Description of this new flag states as follows:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;DS_WS_FLAG, The Active Directory Web Service, as specified in &lt;/EM&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd304395%28PROT.10%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd304395(PROT.10).aspx"&gt;&lt;EM&gt;[MS-ADDM]&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;, is present on the server.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And this information can be used to locate a DC with ADWS instance, when a client will specify the additional &lt;A href="http://msdn.microsoft.com/en-us/library/ms675983%28VS.85%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms675983%28VS.85%29.aspx"&gt;DS_WEB_SERVICE_REQUIRED&lt;/A&gt; flag in the DC request. Same goes for DCs with ADMG installed. &lt;/P&gt;
&lt;P&gt;This might be the end of this post, but life isn't perfect and often we will have to deal with mixed environments with W2008R2 and other, older DCs in the same network. Problem is that 2003/2008 DCs doesn't understand this new flag. To correct this, an&amp;nbsp;additional hotfix has to be installed, &lt;A href="http://support.microsoft.com/kb/969429" mce_href="http://support.microsoft.com/kb/969429"&gt;KB969249&lt;/A&gt; (2003) or &lt;A href="http://support.microsoft.com/kb/967574" mce_href="http://support.microsoft.com/kb/967574"&gt;KB967574&lt;/A&gt; (2008).&lt;/P&gt;
&lt;P&gt;If you will plan to deploy W2008R2 and use Powershell module or other software which uses ADWS, especially in larger environments, remember to deploy enough ADWS instances to handle client traffic and to allow DC locator to locate DCs which host such service. This is especially important in environments with large number of DCs deployed. This way you won't be surprised if your newly created powershell script will fail to locate an ADWS instance.&lt;/P&gt;
&lt;P&gt;Enough for today ... but we will get back to ADWS soon...&lt;/P&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4536" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/My+day+job/default.aspx">My day job</category></item><item><title>Be careful what You promise … SYSVOL</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2010/03/09/be-careful-what-you-promise-sysvol.aspx</link><pubDate>Tue, 09 Mar 2010 12:43:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4502</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4502.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4502</wfw:commentRss><description>&lt;P&gt;... on my Polish blog a question was asked on Sunday evening if I can provide some description on the SYSVOL location process and the pitfalls which might wait there. I said ... '&lt;I&gt;Why not&lt;/I&gt;'&amp;nbsp; ... and then you have to keep your promise. So today it will be about SYSVOL volume. Recently it is common topic for me as I gave a talk for local communities in Warsaw about GPO mechanics, which also touches this topic. If you can read Polish and you are interested, the&amp;nbsp;slide deck is available on &lt;A href="http://www.w2k.pl/mwilem/" mce_href="http://www.w2k.pl/mwilem/"&gt;my Polish blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;So&amp;nbsp; ... regarding SYSVOL, everyone can see that it is there and it does a job ... until something bad happens. That's the short version. Its primary goal is to serve domain clients files on a DC, in particular to serve GPO templates which are the file based part of GPO. Remember:&amp;nbsp; a GPO consists of two parts – the GP container (GPC) in the directory and the GP Template (GPT)&amp;nbsp;in SYSVOL. Plus some extras like logon scripts etc.&amp;nbsp; If there is no SYSVOL or it is not up to date&amp;nbsp; because of FRS problems (sounds familiar?) there are no or outdated GPOs processed on a client side (actually if there is no SYSVOL share, a&amp;nbsp;DC will not do its job). &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.w2k.pl/img/volume.jpg" mce_src="http://www.w2k.pl/img/volume.jpg"&gt;&lt;/P&gt;
&lt;P&gt;(&lt;A href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/A&gt;) &lt;A href="http://www.flickr.com/photos/swingnut/302963025/" mce_href="http://www.flickr.com/photos/swingnut/302963025/"&gt;swingnut&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;From a&amp;nbsp;technical point of view,&amp;nbsp;SYSVOL is just a DFS domain based namespace which content is being replicated with FRS in pre-Windows 2008 operating systems and with DFS-R for Windows 2008 and higher if migration was done (if not ... what are you waiting for????). In fact, SYSVOL content can be replicated in any way, as long as you know how to keep it in sync (don't tell our PSS guys I wrote this ;) ). &lt;/P&gt;
&lt;P&gt;SYSVOL is present on every DC, it is a DFS namespace so ... how can&amp;nbsp;you tell which replica is our client using at&amp;nbsp;a given&amp;nbsp;time??? And here is&amp;nbsp;the problem we will be talking about today. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Theory … &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;As I &lt;A href="http://blogs.dirteam.com/blogs/tomek/archive/2009/10/06/one-subnet-to-catch-them-all.aspx" mce_href="http://blogs.dirteam.com/blogs/tomek/archive/2009/10/06/one-subnet-to-catch-them-all.aspx"&gt;wrote&lt;/A&gt; a few times on this blog (and &lt;A href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-1.aspx" mce_href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-1.aspx"&gt;Jorge wrote also about it&lt;/A&gt;&amp;nbsp; + he will give a talk about this &lt;A href="http://blogs.dirteam.com/blogs/jorge/archive/2010/03/08/speaking-at-tec-2010-usa-los-angeles.aspx" mce_href="http://blogs.dirteam.com/blogs/jorge/archive/2010/03/08/speaking-at-tec-2010-usa-los-angeles.aspx"&gt;on the upcoming TEC 2010&lt;/A&gt; – if you will be there, don't miss it – I will miss it ;) ) a client is locating DCs using DNS records and information about sites and subnets in what is called the DC location process. This way, DS client can (at least should) locate the closest (in terms of AD configuration) DC which can handle its requests. Problem is that this is not&amp;nbsp;the case with SYSVOL, as SYSVOL location process&amp;nbsp;does not&amp;nbsp;follow the same path as the DC location process. Many AD administrators have learned this in a more painful way, when they were trying to figure out why clients&amp;nbsp;are using SYSVOL replicas in some small village north of whatever country it was.&lt;/P&gt;
&lt;P&gt;A directory service client is receiving a list of SYSVOL replicas, divided into two lists:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;SYSVOL replicas in the same site&lt;/LI&gt;
&lt;LI&gt;SYSVOL replicas outside of the client site. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;By default, both lists are in random order and are not reflecting things like costs or location in which DCs&amp;nbsp;are located, except obvious information about local DCs. This behavior does not ensure that clients will use the same DCs for logon and SYSVOL within the same site,&amp;nbsp;when multiple DCs are in this site (the word &lt;I&gt;random&lt;/I&gt; is key).&lt;/P&gt;
&lt;P&gt;To ensure that the DC which handles logon request will be the one which will also be used for SYSVOL location some tweaks have to be performed. These tweaks (and update) are described in &lt;A href="http://support.microsoft.com/?id=831201" mce_href="http://support.microsoft.com/?id=831201"&gt;KB831201&lt;/A&gt;. After&amp;nbsp;applying the tweaks, the&amp;nbsp;DC which handles the request will return its own name as&amp;nbsp;the first DC on&amp;nbsp;the list of SYSVOL replicas returned to a client.&lt;/P&gt;
&lt;P&gt;However the problem remains if a client, for whatever reason, is using a SYSVOL replica outside of its site. The list of replicas in the second list, which is replicas located outside of clients site, is not ordered with taking into consideration the cost of getting to this site – it is random. So it might happen that the first DC on the list is in some place far north (or south if you prefer) of&amp;nbsp;the globe. With slow WAN links between them, affecting clients in terms of performance. It is also a common case I observe in customer networks, where customers&amp;nbsp;are not&amp;nbsp;able to access this replica anyway, because of firewall policies which are in place and are prohibiting network traffic between branches. &lt;/P&gt;
&lt;P&gt;How to deal with this? It can be easily resolved with additional configuration for DCs, which will enable calculation of the SYSVOL replicas list with taking cost of connection between client and replica into consideration. This option is available for Windows Server 2003-based DCs&amp;nbsp;by default (there is also a fix described in &lt;A href="http://support.microsoft.com/?id=823362" mce_href="http://support.microsoft.com/?id=823362"&gt;KB823362&lt;/A&gt; for Windows 2000 Server – remember , support for 2K ends on July this year) and it is called &lt;I&gt;SiteCostedRefferals. &lt;/I&gt;To enable this option configure this registry key:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dfs\Parameters &lt;BR&gt;Value Name: SiteCostedReferrals &lt;BR&gt;Data Type: REG_DWORD &lt;BR&gt;Value: 1&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;However, to make this work&amp;nbsp;you have to provide additional information through configuration at the directory level. This information is required for the directory service to calculate possible routes and this is information about which sites can be accessed by the client. To do this we can enable &lt;A href="http://technet.microsoft.com/en-us/library/cc738789%28WS.10%29.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc738789%28WS.10%29.aspx"&gt;&lt;I&gt;Bridge all site links (BASL)&lt;/I&gt;&lt;/A&gt; option, however this might not be&amp;nbsp;the preferred way to do this. Why? Because this will also disrupt the replication topology calculation process from KCC standpoint. But if we want to enable SYSVOL cost based replica list calculation while not disturbing KCC with BASL information we can choose to enable it for given sites, which will cause &lt;A href="http://blogs.technet.com/filecab/archive/2006/09/20/456318.aspx" mce_href="http://blogs.technet.com/filecab/archive/2006/09/20/456318.aspx"&gt;KCC to ignore information about site bridging during calculations&lt;/A&gt;, but still seeing it (bridged) for SYSVOL replica cost calculation. &lt;/P&gt;
&lt;P&gt;In theory you can think about it as maintaining site bridges manually as alternative to BASL however I don't know if this will work in a real world scenario (but with right people following right process ... it might). &lt;/P&gt;
&lt;P&gt;And with the information provided above, for those who were not aware of it so far, I hope life with SYSVOL is much simpler right now. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Toolkit … &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Here's some short information about tools&amp;nbsp;that can be used in information gathering or troubleshooting process. The basic tool to start with is &lt;B&gt;&lt;I&gt;dfsutil. Dfsutil&lt;/I&gt;&lt;/B&gt; allows you to see the list of replicas from the client point of view and see which one is active at given point in time. Two switches to remember:&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;DFSUTIL /SPCINFO &lt;BR&gt;DFSUTIL /PKTINFO&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In Windows Server 2008, these &amp;nbsp;switches have changed and have become:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;DFSUTIL CACHE DOMAIN&lt;BR&gt;DFSUTIL CACHE REFERRAL&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;To have access to DFSUTIL in Windows Server 2008 and later you will have to install DFS management tools using features.&lt;/P&gt;
&lt;P&gt;And that's all for now ... at least about SYSVOL.&lt;/P&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4502" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Tools+and+scripts/default.aspx">Tools and scripts</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Spot the difference</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2010/01/28/spot-the-difference.aspx</link><pubDate>Thu, 28 Jan 2010 12:59:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4432</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4432.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4432</wfw:commentRss><description>&lt;p&gt;Where is a question there is an answer (at least in most cases). This time question was “How to check schema extension introduces to a forest?” and it was asked on ActiveDir.org. There was even more than one answer … apparently some consultants are watching this list :). &lt;/p&gt;  &lt;p&gt;So how we can capture what was changed in schema since it was established together with our forest. &lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.w2k.pl/img/spotdif.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;(&lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/48089670@N00/418940268/"&gt;tobym&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;One of option is using Schema Analyzer tool which comes with AD LDS (ADAM) as it is described on &lt;a href="http://blogs.technet.com/askds/archive/2009/01/20/determine-applied-schema-extensions-with-ad-ds-lds-schema-analyzer.aspx"&gt;Ask DS Team&lt;/a&gt; blog. If we have AD LDS instance and LDFI file with schema we want to analyze it will allow us to get difference between target and base schema.&amp;#160; Easy but … &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;it requires access to AD LDS instance and LDIF file with schema &lt;/li&gt;    &lt;li&gt;sometimes it is a bit overhead to get LDI file with difference and we require something easier. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So next approach, also not perfect but a bit simpler and in some cases might be good enough. Just take a(dfind.exe)ny LDAP query tool and query all schema including &lt;a href="http://msdn.microsoft.com/en-us/library/ms680924%28VS.85%29.aspx"&gt;&lt;em&gt;whenCreated&lt;/em&gt;&lt;/a&gt; in output. This attribute is replicated among all DCs and we can track date of creation of object. Simple example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;adfind -schema -f &amp;quot;(|(objectClass=attributeSchema)(objectClass=attributeClass))&amp;quot; ldapDisplayName whenCreated –adcsv&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;now redirect output to file … open it in Excel, sort it on whencreated collumn and voile…&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.w2k.pl/img/schemadif.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;Of course it is not perfect. Still it requires tool like Excel and it gives You only overview when attributes where created. And what about modifications?&lt;/p&gt;  &lt;p&gt;In cases we need such information &lt;a href="http://www.jadonex.com/downloads/dec/DECscripts.zip"&gt;SchemaDiff.cmd script created by Dean Wells&amp;#160; &lt;/a&gt;(included in archive) comes handy. This tool is based on querying replication metadata and this will give You information about new and updated attributes. Let see how it works:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;C:\Temp&amp;gt;SchemaDiff.cmd w2k.pl&lt;/p&gt;    &lt;p&gt;SchemaDiff 1.1 / Dean Wells (dwells@msetechnology.com) - March 2006&lt;/p&gt;    &lt;p&gt;STATUS - Working [review title bar for progression] ...&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Forest/schema creation timestamp: 2009-08-23 @ 22:51:06      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - base-schema has been MODIFIED since Forest creation       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - counting classSchema and attributeSchema instances: 1438       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - querying schema ...&lt;/p&gt;    &lt;p&gt;*MOD: CN=Schema,CN=Configuration,DC=w2k,DC=pl      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - schemaInfo........................ {modified post-instantiation}&lt;/p&gt;    &lt;p&gt;*MOD: CN=User,CN=Schema,CN=Configuration,DC=w2k,DC=pl      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - auxiliaryClass.................... {modified post-instantiation}&lt;/p&gt;    &lt;p&gt;+NEW: CN=AstContext,CN=Schema,CN=Configuration,DC=w2k,DC=pl      &lt;br /&gt;+NEW: CN=AstExtension,CN=Schema,CN=Configuration,DC=w2k,DC=pl&lt;/p&gt;    &lt;p&gt;(…)&lt;/p&gt;    &lt;p&gt;Done - 57 schema object(s) added, 4 schema object(s) modified      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; in Forest &amp;quot;DC=w2k,DC=pl&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Quick, nice and easy … and no additional tools required (I don’t count repadmin.exe as an additional tool in AD environment).&lt;/p&gt;  &lt;p&gt;In general best way to answer such question is to have implemented schema governance process in your environment. It doesn’t have to be something very complicated, sometimes simple file with some procedures is enough … or WSS site in more advanced case. Key is to stick to it and follow it. Think about it … &lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4432" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Tools+and+scripts/default.aspx">Tools and scripts</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Where is my DC?</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2010/01/15/where-is-my-dc.aspx</link><pubDate>Fri, 15 Jan 2010 11:28:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4427</guid><dc:creator>tomek</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4427.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4427</wfw:commentRss><description>&lt;p&gt;It is common knowledge that in AD environment client (like workstation) will always (at least it should) try to connect to most optimal domain controller. Optimal from network and AD infrastructure configuration standpoint. This process is based on DNS queries and information stored in AD configuration and in perfect case should lead to situation when client has contacted most optimal DC at given moment.&lt;/p&gt;  &lt;p&gt;So we have all subnets defines, connected with appropriate sites and DCs placed in these sites or covered in other way. And suddenly some clients from some small location are starting to use some random DCs instead one we designated for them in our bright and shiny configuration.&amp;nbsp; In such case sys admin is entering his most favorite mode … &lt;i&gt;troubleshooting&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;img src="http://www.w2k.pl/img/trouble.jpg" mce_src="http://www.w2k.pl/img/trouble.jpg" height="333" width="500"&gt;&lt;/p&gt;  &lt;p&gt;(&lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/a&gt;) &lt;a href="http://www.flickr.com/photos/terriann/2538906829/" mce_href="http://www.flickr.com/photos/terriann/2538906829/"&gt;trriseesthings&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;AD configuration has been extensively reviewed and checked, network checked … event logs are not giving us a clue … what next (besides calling cavalry of some sort :) )?&lt;/p&gt;  &lt;p&gt;In such case we have at least one additional troubleshooting mechanism which might be extremely useful in this process, which is enabling debug logging for DC locator process. In each Windows version netlogon service comes with ability to log debug information. What has to be done is enabling this mechanisms through registry change and settings some flags … these flags are described in&amp;nbsp; &lt;a href="http://support.microsoft.com/kb/109626" mce_href="http://support.microsoft.com/kb/109626"&gt;KB 109626 Enabling debug logging for the Net Logon service&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;When this will be done netlogon service will start to log diagnostic data in &lt;b&gt;&lt;i&gt;%widir%\debug\netlogon.log&lt;/i&gt;. &lt;/b&gt;These information might be very useful in troubleshooting process or at least should give us idea what is going on during this process. Sample netlogon.log part (slightly modified for better reading) from my lab environment is presented below .&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[SITE] Setting site name to '(null)'      &lt;br&gt;[SESSION] \Device\NetBT_Tcpip_{33941FFA-DFED-4744-BF9A-972228BC6FF0}: Transport Added (192.168.1.10)       &lt;br&gt;[SESSION] Winsock Addrs: 192.168.1.10 (1) List used to be empty.       &lt;br&gt;[SESSION] V6 Winsock Addrs: (0)       &lt;br&gt;[CRITICAL] Address list changed since last boot. (Forget DynamicSiteName.)       &lt;br&gt;[SITE] Setting site name to '(null)'       &lt;br&gt;[DNS] Set DnsForestName to: w2k.pl       &lt;br&gt;[DOMAIN] W2K: Adding new domain       &lt;br&gt;[DOMAIN] Setting our computer name to wss wss       &lt;br&gt;[DOMAIN] Setting Netbios domain name to W2K       &lt;br&gt;[DOMAIN] Setting DNS domain name to w2k.pl.       &lt;br&gt;[DOMAIN] Setting Domain GUID to ce28b6f7-a26a-4e0f-9f39-0e63e525493e       &lt;br&gt;[MISC] Eventlog: 5516 (1) "wss" "W2K"       &lt;br&gt;[INIT] Replacing trusted domain list with one for newly joined W2K domain.       &lt;br&gt;[SITE] Setting site name to '(null)'       &lt;br&gt;[LOGON] NlSetForestTrustList: New trusted domain list:       &lt;br&gt;[LOGON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0: W2K w2k.pl (NT 5) (Forest Tree Root) (Primary Domain) (Native)       &lt;br&gt;[LOGON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dom Guid: ce28b6f7-a26a-4e0f-9f39-0e63e525493e       &lt;br&gt;[LOGON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dom Sid: S-1-5-21-1855823386-3643518527-1754427229       &lt;br&gt;[INIT] Starting RPC server.       &lt;br&gt;[SESSION] W2K: NlSessionSetup: Try Session setup       &lt;br&gt;[SESSION] W2K: NlDiscoverDc: Start Synchronous Discovery       &lt;br&gt;[MISC] NetpDcInitializeContext: DSGETDC_VALID_FLAGS is c00ffff1       &lt;br&gt;[INIT] Join DC: \\resfs.w2k.pl, Flags: 0xe00013fd       &lt;br&gt;[MISC] NetpDcInitializeContext: DSGETDC_VALID_FLAGS is c00ffff1       &lt;br&gt;[MAILSLOT] NetpDcPingListIp: w2k.pl.: Sent UDP ping to 192.168.1.1       &lt;br&gt;[MISC] NlPingDcNameWithContext: Sent 1/1 ldap pings to resfs.w2k.pl       &lt;br&gt;[MISC] NlPingDcNameWithContext: resfs.w2k.pl responded over IP.       &lt;br&gt;[MISC] W2K: NlPingDcName: W2K: w2k.pl.: Caching pinged DC info for resfs.w2k.pl       &lt;br&gt;[INIT] Join DC cached successfully       &lt;br&gt;[SITE] Setting site name to 'Default-First-Site-Name'       &lt;br&gt;[MISC] NetpDcGetName: w2k.pl. using cached information       &lt;br&gt;[PERF] NlAllocateClientSession: New Perf Instance (001E6688): "\\resfs.w2k.pl"       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientSession: 00237D58       &lt;br&gt;[SESSION] W2K: NlDiscoverDc: Found DC \\resfs.w2k.pl       &lt;br&gt;[SESSION] W2K: NlSetStatusClientSession: Set connection status to 0       &lt;br&gt;[DOMAIN] Setting LSA NetbiosDomain: W2K DnsDomain: w2k.pl. DnsTree: w2k.pl. DomainGuid:ce28b6f7-a26a-4e0f-9f39-0e63e525493e       &lt;br&gt;[LOGON] NlSetForestTrustList: New trusted domain list:       &lt;br&gt;[LOGON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0: W2K w2k.pl (NT 5) (Forest Tree Root) (Primary Domain) (Native)       &lt;br&gt;[LOGON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dom Guid: ce28b6f7-a26a-4e0f-9f39-0e63e525493e       &lt;br&gt;[LOGON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dom Sid: S-1-5-21-1855823386-3643518527-1754427229       &lt;br&gt;[SESSION] W2K: NlSetStatusClientSession: Set connection status to 0       &lt;br&gt;[SESSION] W2K: NlSessionSetup: Session setup Succeeded       &lt;br&gt;[INIT] Started successfully&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Does it look useful??? I think so … happy troubleshooting and don’t forget that Network Monitor or WireShark will tell&amp;nbsp; You the truth about what’s going on on a wire. And this is ultimate troubleshooting tool.&lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4427" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Kerberos and non-standard port number</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/12/20/kerberos-a-sprawa-portu.aspx</link><pubDate>Sun, 20 Dec 2009 11:52:14 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4418</guid><dc:creator>tomek</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4418.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4418</wfw:commentRss><description>&lt;p&gt;Kerberos in Windows Operating System is around for about 10 years and it is still causing problems and for many people it is like &lt;em&gt;black magic voodoo&lt;/em&gt;. In most cases organizations and people in it are not aware that it is now working until it problem will occur on a surface with some application not working or reports not being displayed on MOSS web page … &lt;/p&gt;  &lt;p&gt;… and when problem occurs some troubleshooting starts. To make this process a bit easier here is a short explanation of Kerberos, IE and and services running on non-standard port issue. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.w2k.pl/img/portinout.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;(&lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en"&gt;cc&lt;/a&gt;) &lt;a href="http://www.flickr.com/photos/c_x/2151571234/"&gt;TheCX&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This post is sponsored by letter A like Architect, because of our Architects inspired me to write it with his ranting about this problem. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Issue which is subject of this post is not related to Kerberos protocol itself, but to Internet Explorer and how IE handles such requests by default. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Never ending story,&amp;#160; SPNs … &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Short reminder what SPN is&amp;#160; … when client application is trying to get access to resources and is using Kerberos authentication it requests at some point Ticket Granting Service (TGS). To specify to service to which it is requesting access in TGS request client specifies Service Principal Name (SPN). SPN then is being used by KDC to find an account which is related to this service and to prepare tickets for it. This is in short words how it works … &lt;/p&gt;  &lt;p&gt;SPNs are just string values for &lt;em&gt;servicePrincipalName&lt;/em&gt; attribute in form which consist of service prefix, host name and optionally port number. &lt;/p&gt;  &lt;p&gt;For example for standard HTTP service running on &lt;a href="http://www.w2k.pl"&gt;www.w2k.pl&lt;/a&gt; host address SPN would be specified as &lt;strong&gt;&lt;em&gt;HTTP/www.w2k.pl&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;As I mentioned above there is also optional element of SPN which can be used to specify port on which service is running. In case of our HTTP service running on 8080 port SPN which will contain this port number will look like this &lt;strong&gt;&lt;em&gt;HTTP/www.w2k.pl:8080&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Simple … it is helpful if we have services running on different ports and using different accounts – like application pools running on separate accounts associated with web sites on two different ports. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;And here comes Internet Explorer … &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Problem with Internet Explorer is that when it is being used as client application to request access to Kerberos enabled service on non standard port by default it will not include port number in SPN sent in TGS request. In such case network traffic capture will look somewhat like this (click to enlarge):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w2k.pl/img/noportkerbreg.jpg"&gt;&lt;img alt="" src="http://www.w2k.pl/img/noportkerbreg_small.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As we can see in this traffic IE is trying to request access to web site running on port 8080 but in TGQ request it is not exposing this information and instead of &lt;strong&gt;HTTP/lhr2dc01.w2k.pl:8080&lt;/strong&gt; it sends request with &lt;strong&gt;HTTP/lhr2dc01.w2k.pl &lt;/strong&gt;as SPN value. &lt;/p&gt;  &lt;p&gt;This behavior was first fixed for IE 6 with &lt;a href="http://support.microsoft.com/kb/908209"&gt;KB 908209&lt;/a&gt;. For IE6 it required fix to be installed and additional registry entry being made.&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.w2k.pl/img/iefeature_port.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;This article is not mentioning this but same behavior is present in IE7 and IE8. To fix this it doesn’t require fix to be installed but still it has to be enabled through same registry entry specified in KB mentioned above. &lt;/p&gt;  &lt;p&gt;If this will be done same situation in network traffic looks as it is presented below (click to enlarge):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w2k.pl/img/kerb_port.jpg"&gt;&lt;img alt="" src="http://www.w2k.pl/img/kerb_port_small.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As it can be seen in this traffic analysis IE is requesting access to a web site with port specified in SPN and this allows authentication to be completed in this scenario. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;When this is useful&amp;#160; … &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Why bother???” &lt;/em&gt;This is required in scenarios when we have multiple services running on single host, different ports and under different security accounts. Good examples are multiple application pools on single IIS machine. &lt;/p&gt;  &lt;p&gt;Probably anyone who will deploy MOSS sites with multiple accounts will came across this scenario and will have to deal with it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why not make it default … &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Question is … why this is not enabled by default in IE 7 and 8? problem was fixed for IE6 but for later versions it might be included in a default configuration. &lt;/p&gt;  &lt;p&gt;I don’t know official answer but first thing which cross my mind is&amp;#160; - &lt;em&gt;backward compatibility &lt;/em&gt;(you can call it IE6 curse if You want it :) ).&amp;#160; Because IE6 worked in this way and many applications were configured to work in this way, which was allowed by IE6 problem turning it on by default in next versions would break all these applications. &lt;/p&gt;  &lt;p&gt;IE6 was not specifying a port in SPN request and if there was suitable account with only one SPN without port being specified, and there was another service running on the same host with different port number but under the same service account it just works. &lt;/p&gt;  &lt;p&gt;If You will enable this behavior applications running on different ports would break … registering additional SPN will fix it of course, but this would require some planning up front or quick troubleshooting (basic level of network traffic analysis required). &lt;/p&gt;  &lt;p&gt;What I would like to see is configuration option which would enable this behavior through GPO … feedback given :). &lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4418" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>userPassword</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/11/22/userpassword.aspx</link><pubDate>Sun, 22 Nov 2009 13:59:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4331</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4331.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4331</wfw:commentRss><description>&lt;p&gt;One of my friends PFE has asked me a question regarding &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms680851%28VS.85%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms680851%28VS.85%29.aspx"&gt;userPassword&lt;/a&gt;&lt;/i&gt; attribute in directory which was related to some behavior he was observing in customer environment. We had a little chat about it and then I thought that maybe other has such questions as well so … here’s a topic for a blog.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;Behavior my friend was observing was related to a fact, that after some operations performed in environment customer has noticed that on some objects affected by these operations this attribute contained user password in clear text … &lt;i&gt;now I can hear screams of all security guys :)&lt;/i&gt; … Yes, clear text and password has some connotations .. in most cases negative once.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.w2k.pl/img/clear.jpg" alt="" mce_src="http://www.w2k.pl/img/clear.jpg"&gt;&lt;/p&gt;  &lt;p&gt;(&lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_GB" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_GB"&gt;cc&lt;/a&gt;) &lt;a href="http://www.flickr.com/photos/somewhatfrank/2187217948" mce_href="http://www.flickr.com/photos/somewhatfrank/2187217948"&gt;Somewhat Frank&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Of course fact that this password was there didn’t mean that it was available for anyone willing to read it … some ACLs still apply in directory … however the fact was that &lt;b&gt;IT WAS THERE&lt;/b&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Matched DNs:      &lt;br&gt;Getting 1 entries:       &lt;br&gt;&amp;gt;&amp;gt; Dn: CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;gt; objectClass: top; person; organizationalPerson; user;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;gt; cn: jan Kowalski;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;gt; sn: Kowalski;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;gt; userPassword: &lt;a href="mailto:P@ssw0rd" mce_href="mailto:P@ssw0rd"&gt;P@ssw0rd&lt;/a&gt;!;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Whatever You thin at this point this is not a bug and there is no point in calling MSFT 112 number (if such exists at all :) ). It is expected and it is a result of &lt;i&gt;userPassword&lt;/i&gt; attribute behavior dualism in AD.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;   &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;userPassword … &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;userPassword&lt;/i&gt; is an attribute which can act differently when it is being written or read depending on directory configuration. Depending of directory settings it can be treated as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ordinary unicode attribute which can be written and read as any other unicode attribute in directory&lt;/li&gt;    &lt;li&gt;&lt;i&gt;shortcut&lt;/i&gt; to user password in directory which will allow password change operation to be performed over LDAP. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In first case, when domain is below Windows 2003 level or at this level specific value in &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms675656%28VS.85%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms675656%28VS.85%29.aspx"&gt;dsHeuristics&lt;/a&gt;&lt;/i&gt;, is not set this attribute is just an unicode attribute. We can write it and read it … let’s try:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;admod -b "CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl" userPassword::P@ssword!!1&lt;/p&gt;    &lt;p&gt;AdMod V01.10.00cpp Joe Richards (joe@joeware.net) February 2007&lt;/p&gt;    &lt;p&gt;DN Count: 1      &lt;br&gt;Using server: w2003r2base.w2k.pl:389       &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;Modifying specified objects...      &lt;br&gt;&amp;nbsp;&amp;nbsp; DN: CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl...&lt;/p&gt;    &lt;p&gt;The command completed successfully&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So we could modify this attribute … now let try to read it:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;adfind -b "CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl" -s base userPassword&lt;/p&gt;    &lt;p&gt;AdFind V01.40.00cpp Joe Richards (joe@joeware.net) February 2009&lt;/p&gt;    &lt;p&gt;Using server: w2003r2base.w2k.pl:389      &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;dn:CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl      &lt;br&gt;&amp;gt;userPassword: 5040 7373 776F 7264 2121 31&lt;/p&gt;    &lt;p&gt;1 Objects returned&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Success! So apparently we can write and read this attribute and if you will conduct this test on your own this will not affect user password in any way. We have just altered a text in a directory attribute.&lt;/p&gt;  &lt;p&gt;However the game rules changes if we will set 9’th char in &lt;a href="http://msdn.microsoft.com/en-us/library/ms675656%28VS.85%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms675656%28VS.85%29.aspx"&gt;&lt;i&gt;dsHeuristics&lt;/i&gt;&lt;/a&gt; to 1 (in fact according to documentation any character other than 0 or 2 should work) writes to this attribute will behave differently. After this modification &lt;i&gt;userPassword&lt;/i&gt; attribute is &lt;i&gt;write-only&lt;/i&gt; and we can’t read anymore.&amp;nbsp; But it will allow us to modify user password. Let see … &lt;/p&gt;  &lt;p&gt;First &lt;i&gt;dsHeuristics&lt;/i&gt; modification:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;admod -b "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuratio      &lt;br&gt;n,DC=w2k,DC=pl" dsHeuristics::000000001&lt;/p&gt;    &lt;p&gt;AdMod V01.10.00cpp Joe Richards (joe@joeware.net) February 2007&lt;/p&gt;    &lt;p&gt;DN Count: 1      &lt;br&gt;Using server: w2003r2base.w2k.pl:389       &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;Modifying specified objects...      &lt;br&gt;&amp;nbsp;&amp;nbsp; DN: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=w2k,DC       &lt;br&gt;=pl...&lt;/p&gt;    &lt;p&gt;The command completed successfully&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Done … now let’s try to do same modification as we did earlier:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;admod -b "CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl" userPassword::P@ssword!!1&lt;/p&gt;    &lt;p&gt;AdMod V01.10.00cpp Joe Richards (joe@joeware.net) February 2007&lt;/p&gt;    &lt;p&gt;DN Count: 1      &lt;br&gt;Using server: w2003r2base.w2k.pl:389       &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;Modifying specified objects...      &lt;br&gt;&amp;nbsp;&amp;nbsp; DN: CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl...: [w2003r2base.w2k.pl] Error 0x35       &lt;br&gt;(53) - Unwilling To Perform&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Wow … Error, ... but why? We’ve just tried to modify user’s password over LDAP protocol and in AD this is only allowed over SSL connection which was not specified in this case. So one more try using LDAPS this time:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;admod -b "CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl" userPassword::P@ssword!!1 -ssl -h w2003r2base.w2k.pl:636&lt;/p&gt;    &lt;p&gt;AdMod V01.10.00cpp Joe Richards (joe@joeware.net) February 2007&lt;/p&gt;    &lt;p&gt;DN Count: 1      &lt;br&gt;Using server: w2003r2base.w2k.pl:636       &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;Modifying specified objects...      &lt;br&gt;&amp;nbsp;&amp;nbsp; DN: CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl...&lt;/p&gt;    &lt;p&gt;The command completed successfully&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now it has succeed, and now read test:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;adfind -b "CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl" -s base userPassword&lt;/p&gt;    &lt;p&gt;AdFind V01.40.00cpp Joe Richards (joe@joeware.net) February 2009&lt;/p&gt;    &lt;p&gt;Using server: w2003r2base.w2k.pl:389      &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;dn:CN=jan Kowalski,OU=DRLab,DC=w2k,DC=pl&lt;/p&gt;    &lt;p&gt;1 Objects returned&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Nothing. This mean that we can use &lt;i&gt;userPassword&lt;/i&gt; attribute to modify user password but of course we can’t read it afterwards … which is somehow expected..&lt;/p&gt;  &lt;p&gt;&lt;b&gt;problem … &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Actual topic which started this conversation was KTPASS tool behavior which was observed in customer environment (KTPASS is a tool which allows keytab files to be created –&amp;gt; keytab are used with Unix boxes to allow authentication with Kerberos against AD … in short words). &lt;/p&gt;  &lt;p&gt;So … in cases when KTPASS was used for an account, in which none modification to &lt;i&gt;dsHeuristics&lt;/i&gt; was made password set for account with KTPASS was available for read with LDAP from appropriate directory object. Apparently KTPASS is trying to set a password using LDAP which leaves it in this attribute. Quick test shows that this is case. If we will try to generate new keytab for an account and specify a password:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ktpass -princ HOST/ubuntu.w2k.pl@W2K.PL -mapuser ubuntu$@W2K.PL -ptype KRB5_NT_SRV_HST -mapop set -pass P@ssw0rd1 -out ubuntu.keytab&lt;/p&gt;    &lt;p&gt;(…)&lt;/p&gt;    &lt;p&gt;Reset UBUNTU$'s password [y/n]?&amp;nbsp; y      &lt;br&gt;Key created.       &lt;br&gt;Output keytab to ubuntu.keytab:       &lt;br&gt;Keytab version: 0x502       &lt;br&gt;keysize 60 HOST/ubuntu.w2k.pl@W2K.PL ptype 3 (KRB5_NT_SRV_HST) vno 2 etype 0x17       &lt;br&gt;(RC4-HMAC) keylength 16 (0xae974876d974abd805a989ebead86846)&lt;/p&gt;    &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and then we will use ADFIND:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;adfind -b "CN=ubuntu,OU=DRLab,DC=w2k,DC=pl" -s base userPassword&lt;/p&gt;    &lt;p&gt;AdFind V01.40.00cpp Joe Richards (joe@joeware.net) February 2009&lt;/p&gt;    &lt;p&gt;Using server: w2003r2base.w2k.pl:389      &lt;br&gt;Directory: Windows Server 2003&lt;/p&gt;    &lt;p&gt;dn:CN=ubuntu,OU=DRLab,DC=w2k,DC=pl      &lt;br&gt;&amp;gt;userPassword: 5040 7373 7730 7264 31&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We will see that &lt;i&gt;userPassword&lt;/i&gt; gets populated and if you will check its value it will be password specified with KTPASS. The same will happen with any other tool which will try to use LDAP to change or reset user password in such setup. &lt;/p&gt;  &lt;p&gt;If we will modify this behavior with setting value on &lt;i&gt;dsHeuristics&lt;/i&gt; it will change directory behavior and userPassword will contain no trace of password data in readable form. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Solution … &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;I think that there is no need for special solution as we don’t have a problem. Best way is to know how it works and if we are concerned with that just use this knowledge to enforce correct behavior … either by establishing some policy around usage of tools which uses LDAP to modify password or through altering directory settings to allow password change through LDAP and thus stopping userPassword from being holding current user password just “by accident”. &lt;/p&gt;  &lt;p&gt;Of course ACLs still applies but one might be in hard position of explaining to some &lt;b&gt;&lt;i&gt;AUDITOR&lt;/i&gt;&lt;/b&gt; why &lt;b&gt;&lt;i&gt;THE PASSWORD IS THERE&lt;/i&gt;&lt;/b&gt;. In such case … you can redirect them to my blog or better … to MSDN pages. &lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4331" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Snapshot recovery tool strikes back</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/10/29/snapshot-recovery-tool-strikes-back.aspx</link><pubDate>Wed, 28 Oct 2009 15:16:38 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4274</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4274.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4274</wfw:commentRss><description>&lt;p&gt;Some time ago, when Windows 2008 was released I had some spare time (where are those days) and I wanted to master some of my .NET coding skills. What is better than find an idea to use them … and that’s how 1Identity &lt;strong&gt;&lt;em&gt;&lt;a href="http://blogs.dirteam.com/blogs/tomek/pages/snapshot-recover-tool.aspx"&gt;Snapshot Recovery Tool&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; was created. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="http://blogs.dirteam.com/blogs/tomek/pages/snapshot-recover-tool.aspx"&gt;Snapshot Recovery Tool&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; is command line tool which might be used to un-delete existing tombstone and later to populate all or some of attributes with data from directory services snapshot data. &lt;/p&gt;  &lt;p&gt;Snapshots is nice feature introduced in Windows 2008 which allows you to inspect Active Directory content at given point in time when snapshot was taken.&amp;#160; My opinion is that this was half-backed attempt to introduce something like Recycle Bin which is present now days in W2008R2. But hey .. it was there so I decided to use it. &lt;/p&gt;  &lt;p&gt;Using this tool and snapshot data one can recover all attributes including links as in memberOf attributes for a user and member for a group. &lt;/p&gt;  &lt;p&gt;It can recover single object or multiple objects based on GUID list or LDAP query. &lt;/p&gt;  &lt;p&gt;Few words about original place where this tool was published – &lt;strong&gt;&lt;em&gt;1Identiyt&lt;/em&gt;&lt;/strong&gt;. 1Identity was initiative of mine to build an independent network of directory services and identity experts which would build tools and documentation … it didn’t worked this time. Mostly because lack of time from my side. Maybe one day I will get back to this idea. &lt;/p&gt;  &lt;p&gt;In the meantime … snapshot recovery tool is &lt;a href="http://blogs.dirteam.com/blogs/tomek/pages/snapshot-recover-tool.aspx"&gt;back here on DirTeam.org&lt;/a&gt; and if You want it, and You can find use for it … feel free to use it. &lt;/p&gt;  &lt;p&gt;Comments, bug reports and suggestions welcomed here or on &lt;a href="mailto:t.onyszko@w2k.pl"&gt;t.onyszko@w2k.pl&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;P.S.#1 I want to say big THANK YOU here for Jorge who has tested this tool and provided very useful feedback regarding functionality and bugs. And showed this tool few times at some (DEC\TEC) occasions. &lt;/p&gt;  &lt;p&gt;P.S.#2 I also want to say Thank you to all of You who have tried this tool and liked it. I read some blog posts and comments about it and it was nice to read that my work has actually helped somebody. &lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4274" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Personal/default.aspx">Personal</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Downloads+info/default.aspx">Downloads info</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>One subnet to catch them all</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/10/06/one-subnet-to-catch-them-all.aspx</link><pubDate>Tue, 06 Oct 2009 10:08:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4234</guid><dc:creator>tomek</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4234.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4234</wfw:commentRss><description>&lt;P&gt;This post is probably first of TEC 2009 follow-up series, at least partially as I thought about covering it just before going to TEC. However Brian Desmond has touched this topic during his session so it is good reason to follow-up on it.&lt;/P&gt;
&lt;P&gt;This will be about usage of catch-all subnets in AD topology design. What catch-all subnet means?? Let start from definition. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.w2k.pl/img/coughtsnow.jpg" mce_src="http://www.w2k.pl/img/coughtsnow.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;(&lt;A href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_GB" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_GB"&gt;cc&lt;/A&gt;) &lt;A href="http://www.flickr.com/photos/f-l-e-x/2318806443/" mce_href="http://www.flickr.com/photos/f-l-e-x/2318806443/"&gt;f-l-e-x&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What’s this about …&lt;/B&gt; &lt;/P&gt;
&lt;P&gt;When client computer is trying to locate domain controller it is performing location process during which it will try to discover its site based on network subnet information which will be send to DC&amp;nbsp; (Jorge has put nice description of DC location this process in three parts – &lt;A href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-1.aspx" mce_href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-1.aspx"&gt;I&lt;/A&gt;, &lt;A href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-2.aspx" mce_href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-2.aspx"&gt;II&lt;/A&gt;, &lt;A href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-3.aspx" mce_href="http://blogs.dirteam.com/blogs/jorge/archive/2007/06/30/dc-locator-process-in-w2k-w2k3-r2-and-w2k8-part-3.aspx"&gt;III&lt;/A&gt;). If client will determine its site it will try then to locate DC in this site using DNS queries. Site location process fro Active Directory perspective is based on site and subnets defined in AD. If client network subnet matches subnet object defined in AD client is assigned to site to which this subnet was assigned at directory level.&lt;/P&gt;
&lt;P&gt;But there might be situation in which client is not able to determine it’s site because subnet object corresponding to client’s network subnet was not defined in Active Directory.&amp;nbsp; In such situation client will pick one of available DCs (I will cover what “available” means in this context later) it can reach and will use it for its operation. Problem is that this might be far from most optimal DC for this client to use – for example it might be DC in one of far and poor connected branch site. &lt;/P&gt;
&lt;P&gt;So what if we will create on subnet object (or few of them) which will span across multiple sites and will cover all of our subnets used in network. If these super subnets objects will be connected to some site our client will always be able to determine its site and at the end determine corresponding DCs. In worst case client will use not optimal DC but one in a site for which catch all subnet was configured. Done. Some explanation on this topic can be found in &lt;A href="http://technet.microsoft.com/en-us/magazine/2009.06.subnets.aspx" mce_href="http://technet.microsoft.com/en-us/magazine/2009.06.subnets.aspx"&gt;article in TechNET Magazine&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;So what’s the catch … &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Looks promising, but – can we do this in other way? Yes we can and I wrote about it earlier in my post &lt;A href="http://blogs.dirteam.com/blogs/tomek/archive/2009/04/08/how-to-cover-un-covered-the-case-of-missing-subnet.aspx" mce_href="http://blogs.dirteam.com/blogs/tomek/archive/2009/04/08/how-to-cover-un-covered-the-case-of-missing-subnet.aspx"&gt;How to cover un-covered – the case of missing subnet&lt;/A&gt;. In short words we can use DNS registration to control which site will be chosen by client in case it will not be able to determine exact site it belongs to. This can be achieved through proper registration of site and domain specific domain SRV records. If client will not be able to locate its own site it will pick one of DCs which registered domain specific records. &lt;/P&gt;
&lt;P&gt;And that’s it … is it better approach than catch-all subnet? Is this better approach than catch-all subnet?? Probably it is just a personal preference but I like to use DNS records over such subnets. It is more elegant solution for me and I think that it is easier to manage and troubleshoot in case of some problems. The choice is Yours … &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;When catch-all subnet can benefit … &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;However I can see scenarios in which catch-all subnet can have some benefit. Let’s take a look at topology which is not exactly hub-n-spoke but is something which sometimes is called &lt;I&gt;snow flake&lt;/I&gt;. In such topology we have central site (hub) and two or more tires of satellite sites.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.w2k.pl/img/snowflaketopology.jpg" mce_src="http://www.w2k.pl/img/snowflaketopology.jpg"&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;If we would want to gather traffic from all clients from 3’rd tier at the 2’nd tier level and even if they can’t find their site not re-direct them to one of DCs in a hub we can’t do this with DNS records. In such case we can use catch-all subnet for each region \ sub configured at 2’nd tier sites level to control behavior of clients and keep all clients attached to correct site at 2’nd tier of our topology as on this picture.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.w2k.pl/img/snowflakewithcatchall.jpg" mce_src="http://www.w2k.pl/img/snowflakewithcatchall.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Of course DNS records registration should also be correctly planned and configured for such design. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And that’s basically it – this just came out on Brian’s session on TEC and maybe it would not catch my ear\eye if I would not read this article on TechNET just before TEC.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what do you think about using catch-all subnets? Are You using them? Any other ideas or comments? Comments are open … so is contact form :).&lt;/P&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4234" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Random+thoughts/default.aspx">Random thoughts</category></item><item><title>(Web)Press review</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/09/17/web-press-review.aspx</link><pubDate>Thu, 17 Sep 2009 11:11:06 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4186</guid><dc:creator>tomek</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4186.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4186</wfw:commentRss><description>&lt;p&gt;During preparation to TEC sessions and during TEC I noted some topics to blog about in a future so I hope that I will find time to blog about them soon. I noted also some URLs to tools which are out there so today’s post is some kind of web press release. &lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.w2k.pl/img/info.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Patch management&lt;/strong&gt;. If you have ever wondered how to deploy updates maybe You will get &lt;a href="http://briandesmond.com/tools/simplepatch/"&gt;interested in script&lt;/a&gt; which was posted by&amp;#160; &lt;a href="http://briandesmond.com/"&gt;Brian Desmond&lt;/a&gt; on his blog. Pretty interesting if you will ask me. Worth to check.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Group nesting&lt;/strong&gt;. If you are managing AD environment and You have nothing against using W2008R2 Powershell you might take a look at &lt;a href="http://blogs.msdn.com/adpowershell/archive/2009/09/05/token-bloat-troubleshooting-by-analyzing-group-nesting-in-ad.aspx"&gt;script posted on AD Powershell team blogs site&lt;/a&gt;. It allows You to select group and analyze how it is nested in other groups and even present it in (sic!) tree form. Nice example how to utilize R2 Powershell capabilities. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Speaking about R2 Powershell&lt;/strong&gt;. As some of You may know these cmdlets are not utilizing LDAP but brand new AD Web Service which is also being shipped with R2. For down level DCs (look how quickly W2008 has become down level :) ) there is web download which delivers this service for Windows 2003 and 2008 DCs and ADAM \ AD LDS. It is called &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=008940c6-0296-4597-be3e-1d24c1cf0dda#tm"&gt;Active Directory Management Gateway&lt;/a&gt; and will allow You to manage these DCs with Powershell. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;At the end something from other area – file server&lt;/strong&gt;. New tool has hit Downloads web site – it is File Server Capacity Tool which comes in &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0b212272-1884-4af1-972d-42ef1db9f977#tm%20%2832-bit%29"&gt;32-bit&lt;/a&gt; i &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=b20db7f1-15fd-40ae-9f3a-514968c65643#tm%20%2864-bit%29"&gt;64-bit&lt;/a&gt; flavor. I think name of this tool is self explaining.&lt;/p&gt;  &lt;p&gt;So that’s all from web review for today …&lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4186" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Downloads+info/default.aspx">Downloads info</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Powershell/default.aspx">Powershell</category></item><item><title>Using multiple UPN suffixes for users in single directory</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/08/24/using-multiple-upn-suffixes-for-users-in-single-directory.aspx</link><pubDate>Mon, 24 Aug 2009 13:17:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4134</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4134.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4134</wfw:commentRss><description>&lt;p&gt;ActiveDir.org is always a source of all sorts of &lt;i&gt;directory related&lt;/i&gt; discussion. In most cases interesting once. I have to admit that I would like to have more time to catch up with ActiveDir.org and to be more active there (note to self) but with &lt;a href="http://blogs.dirteam.com/blogs/tomek/archive/2009/05/12/well-real-men-don-t-mind-son-as-well.aspx" mce_href="http://blogs.dirteam.com/blogs/tomek/archive/2009/05/12/well-real-men-don-t-mind-son-as-well.aspx"&gt;Wojtek&lt;/a&gt; @ home (he’s growing) it is getting even harder then before. &lt;/p&gt;  &lt;p&gt;&lt;i&gt;BTW – if you want to look for something AD related you can use &lt;a href="http://www.google.com/coop/cse?cx=001384121045793986947:g_pkgw8oc84" mce_href="http://www.google.com/coop/cse?cx=001384121045793986947:g_pkgw8oc84"&gt;custom search engine&lt;/a&gt; which was put together by Rick, one of ActiveDir.org members.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Today I was lurking through posts and I found discussion about using multiple UPN suffixes within a domain, and by multiple member who asked this question was meaning few thousands. This configuration was intended to allow some users (partners) to log on with their e-mail addresses to hosted directory. &lt;/p&gt;  &lt;p&gt;Few useful information were thrown in the thread. Quick summary:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GUI limits number of suffixes possible to be entered at forest level to 850 (Andrew Levicki), more can be added with scripts&lt;/li&gt;    &lt;li&gt;&lt;i&gt;more&lt;/i&gt; means ~1300 in Windows 2003 and later UPN suffixes which can be stored in upnSuffixes attribute on CN=Partitions,&amp;lt;configuration partition&amp;gt; and with script you can enter whatever you like for specific user (&lt;a href="http://blog.joeware.net/" mce_href="http://blog.joeware.net/"&gt;joe&lt;/a&gt;). It is UI which enforces forest wide suffixes on user object. And You have to be careful&amp;nbsp; if it is configuration with forest trust [1]. But for that number of users and suffixes probably GUI won’t be preferred tool.&lt;/li&gt;    &lt;li&gt;We have explicit and implicit types of UPNs (Rick S.). See also &lt;a href="http://support.microsoft.com/kb/929272" mce_href="http://support.microsoft.com/kb/929272"&gt;KB 929272&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;If you want to use GUI anyway you can &lt;a href="http://blogs.dirteam.com/blogs/jorge/archive/2007/09/11/determining-the-effective-pso-for-a-user.aspx" mce_href="http://blogs.dirteam.com/blogs/jorge/archive/2007/09/11/determining-the-effective-pso-for-a-user.aspx"&gt;easily extend context menu&lt;/a&gt; with some script which will allow you to set desired UPN suffix for a user (&lt;a href="http://blogs.dirteam.com/blogs/jorge/" mce_href="http://blogs.dirteam.com/blogs/jorge/"&gt;Jorge&lt;/a&gt;).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Last comment from Jorge about extending UI in this way my eye as there is a bit more comfortable option if you want to have option to set different UPN suffix for users in hosted (or similar environment) which is often omitted. This is setting upnSuffixes attribute on OU level. &lt;/p&gt;  &lt;p&gt;If users which will share common UPN suffix can be grouped in single OU structure (for example users from single partner company) one can set upnSuffixes attribute at OU level for desired value &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w2k.pl/img/upnou.jpg" mce_href="http://www.w2k.pl/img/upnou.jpg"&gt;&lt;img src="http://www.w2k.pl/img/upnou_small.jpg" mce_src="http://www.w2k.pl/img/upnou_small.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;  &lt;p&gt;This value will be later presented in GUI when new user will be created, among with other UPN suffixes configured for a forest. &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;img src="http://www.w2k.pl/img/upnaduc.jpg" mce_src="http://www.w2k.pl/img/upnaduc.jpg"&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Voile &lt;/i&gt;… and its done. Problem is that for another OU in this structure the same value (or different) will have to be set, as this information is not inherited from parent OU. &lt;/p&gt;  &lt;p&gt;But I will agree with joe – with that number of users probably GUI won’t be preferred tool. But anyway … it is good to know and maybe somebody will benefit from this knowledge. &lt;/p&gt;  &lt;p&gt;[1] - Using multiple UPN suffixes you have to remember that as long as these suffixes are only being used within single forest they are not so important. However with multiple forests UPN suffixes are being used to &lt;a href="http://technet.microsoft.com/en-us/library/cc784334%28WS.10%29.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc784334%28WS.10%29.aspx"&gt;route authentication requests&lt;/a&gt; so you don’t want to get it broken so plan for it before you will deploy it in production.&lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4134" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Tools+and+scripts/default.aspx">Tools and scripts</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Ex2007SP2 – step towards virtual directory … sort of</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/08/02/ex2007sp2-step-towards-virtual-directory-sort-of.aspx</link><pubDate>Sun, 02 Aug 2009 11:53:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4073</guid><dc:creator>tomek</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4073.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4073</wfw:commentRss><description>&lt;P&gt;There are number of things in which my &lt;A href="http://www.microsoft.com/" mce_href="http://www.microsoft.com"&gt;current employer&lt;/A&gt; managed to succeed. Among greatest success I think&amp;nbsp; one can count way in which Microsoft managed to scare people with Active Directory schema extension. Probably it has started somewhere down the road with Windows 2000 shipped, some communication, talks … but the fact is … people are scared to extend the schema in most part and some former communication from Microsoft has its part in this process.&lt;/P&gt;
&lt;P&gt;There are several different implications of a fact that organizations are not willing to extend or modify its directories schema. One part is that sometimes it keeps consultant like myself busy ;). Other side of this equation is that some changes instead of being made in schema definition are hard coded in OS (example – SIDHistory preserved on a tombstone introduced with SP1). &lt;/P&gt;
&lt;P&gt;After some discussion on my Polish blog we have extracted another problem with this attitude towards schema modification. Because customers are not very eager to extend the schema it slows down adoption of software which is doing this so developers are abandoning directory as a place where they can store data. Of course directory is not a dumpster and You should not keep all information in it but sometimes it does makes sense indeed. &lt;/P&gt;
&lt;P&gt;But getting back on track with title of this post. I had some thoughts about it when I read description of new feature which is being introduced in Exchange 2007 SP2 (and consequently in later Exchange editions). It is called &lt;EM&gt;&lt;STRONG&gt;Dynamic Active Directory Schema Update and Validation &lt;/STRONG&gt;&lt;/EM&gt;and described on &lt;A href="http://msexchangeteam.com/archive/2009/05/11/451281.aspx" mce_href="http://msexchangeteam.com/archive/2009/05/11/451281.aspx"&gt;Exchange Team blog&lt;/A&gt; in this way:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;The dynamic AD schema update and validation feature allows for future schema updates to be dynamic deployed as well as proactively preventing conflicts whenever a new property is added to the AD schema. Once this capability is deployed it will enable easier management of future schema updates and will prevent support issues when adding properties that don't exist in the AD schema&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.w2k.pl/img/virtdir.jpg" mce_src="http://www.w2k.pl/img/virtdir.jpg"&gt; &lt;/P&gt;
&lt;P&gt;(&lt;A href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_GB" mce_href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en_GB"&gt;cc&lt;/A&gt;) &lt;A href="http://www.flickr.com/photos/donshall/3510347216/" mce_href="http://www.flickr.com/photos/donshall/3510347216/"&gt;origamidon&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Rather short description but today I read some communication which put some more light on it and I thought I will share my understanding of this feature here. So it looks like this new Exchange feature will do as follows:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#444444&gt;it will enable Exchange with knowledge that particular attribute in Active Directory is “dynamic” which from logical point of view will be closer to “optional”&lt;/FONT&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#444444&gt;If Exchange will try to read such attribute from directory where schema was not extended with it, driver used to read data from AD will just provide information as this attribute would exist with no value set for given object (&amp;lt;not set&amp;gt;) &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;If Exchange will try to write to such attribute it will fail with some specific exception being returned. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;What does it mean (or at least can) in practice. Potentially it will allow Exchange team to develop new features, released in hot fixes or rollups which might require schema extension which will also be provided. But customer will have a choice of deploying these extensions or not. Without it being deployed the feature will be inactive or will behave for given user as it would have some “defaults” set. But it will not prevent organization from deploying such update if schema extension would be what would hold it. Potential win-win situation from Exchange team and customer. Customer will be able to enable this feature later after extending the schema and starting to use it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;If this will be used in this way&amp;nbsp; … will see, maybe Exchange team has other purpose for this feature in minds.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;From my perspective I think that this will increase a need for organization to take care about schema and its governance more carefully (what was deployed, what not etc). &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;But what this all has to do with virtual directory from this post title. Well not much, but this feature is very basic and simplified implementation of something which most of such virtual directories provides – dynamic schema extension. Of course virtual directories are not limited only to validation of schema upon reads and writes but this is something similar. I doubt that Exchange is about implementing such full blown solution but will see what will happen (at the end they have implemented &lt;A href="http://technet.microsoft.com/en-us/library/dd298183%28EXCHG.140%29.aspx" mce_href="http://technet.microsoft.com/en-us/library/dd298183%28EXCHG.140%29.aspx"&gt;RBAC for AD in Ex 2010&lt;/A&gt; in some limited scope).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;At the end it is not that bad. I would like to see such features to be developed and placed at directory service level or at least in &lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;A href="http://www.w2k.pl/active-directory-management-gateway-service/" mce_href="http://www.w2k.pl/active-directory-management-gateway-service/"&gt;Web Service for AD&lt;/A&gt;. This will be more coherent way of developing and deploying features around directory, but I’m not in charge to change this :). Will see in which direction such changes will go … one of my friends made a joke lately that soon we will have three OSs from Microsoft: Windows OS, Exchange OS and MOSS OS :).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;EM&gt;PS. I’m wondering how many of you have my dear readers have in your organizations some procedures \ regulations around schema governance for AD? Comments are open.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4073" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Microsoft IT (AD) Health Scanner</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/07/07/microsoft-it-ad-health-scanner.aspx</link><pubDate>Tue, 07 Jul 2009 12:16:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4041</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4041.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4041</wfw:commentRss><description>&lt;p&gt;Take a lot of work, add 7 week old son and serious flue (which strikes 2 days after You got back from travel which incorporates transfer on some heavy used airports – first thought – pork ;) ) and you will get some silence on a blog. I hope that while my son will get older silence periods will get shorter and shorter :). To day just quick download announcement.&lt;/p&gt;  &lt;p&gt;In my MS Downloads feed I came across a new tool called &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=dd7a00df-1a5b-4fb6-a8a6-657a7968bd11" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=dd7a00df-1a5b-4fb6-a8a6-657a7968bd11"&gt;Microsoft IT Health Scanner&lt;/a&gt; released by Essential Business Server team.&amp;nbsp; Later I found also blog entry on this tool on &lt;a href="http://blogs.technet.com/essentialbusinessserver/archive/2009/06/29/microsoft-it-health-scanner-released.aspx" mce_href="http://blogs.technet.com/essentialbusinessserver/archive/2009/06/29/microsoft-it-health-scanner-released.aspx"&gt;ESB team blog&lt;/a&gt;. I called it AD not IT in blog entry title as right now this is tool which is focused on running AD and AD related infrastructure tests for most common problems, as ESB team says based on most common issues solved by Microsoft support. Maybe in future it will run more tests as this tool has update mechanism included. &lt;/p&gt;  &lt;p&gt;IT Health scanner runs around 100 tests including (quoting ESB blog):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;(…)&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Configuration of sites and subnets in Active Directory &lt;/li&gt;      &lt;li&gt;Replication of Active Directory, the file system, and SYSVOL shared folders &lt;/li&gt;      &lt;li&gt;Name resolution by the Domain Name System (DNS) &lt;/li&gt;      &lt;li&gt;Configuration of the network adapters of all domain controllers, DNS servers, and e-mail servers running Microsoft Exchange Server &lt;/li&gt;      &lt;li&gt;Health of the domain controllers &lt;/li&gt;      &lt;li&gt;Configuration of the Network Time Protocol (NTP) for all domain controllers &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;(…)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;img src="http://blogs.dirteam.com/controlpanel/blogs/http;//www.w2k.pl/img/scan1_small.jpg" mce_src="http://blogs.dirteam.com/controlpanel/blogs/http;//www.w2k.pl/img/scan1_small.jpg"&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.w2k.pl/img/scan1.jpg" mce_href="http://www.w2k.pl/img/scan1.jpg"&gt;&lt;img src="http://www.w2k.pl/img/scan1_small.jpg" mce_src="http://www.w2k.pl/img/scan1_small.jpg" width="450" height="267"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Definitely looks interesting and my quick scan through result list (I will explain later why this was really quick scan) shows that these are really most common causes of problems in AD environments.&amp;nbsp; This tool is intended to let you find these problems and provide links to article which will allow these problems to be resolved. As tool description states it is targeted for small to medium networks (which of course is different in definition across the world):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: rgb(255, 255, 255);" color="#444444"&gt;(…) recommended up to 20 servers and up to 500 client computers (…)&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;(I think that mostly because it runs with WMI and this might be a bit expensive for larger networks) but it still might be very useful for many environments. &lt;/p&gt;  &lt;p&gt;Why my first touch with this tool was very quick … well as it states in its description it doesn’t support W2008R2 yet and all my virtual labs at this moment runs in full W2008R2 mode. Because of that my first approach to test it ended in discovery phase. But definitely I will build different lab and I will try to use it to analyze healthy AD and also directory with some issues. &lt;/p&gt;  &lt;p&gt;Anyway … worth to remember … worth to have it in a toolbox.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;PS. As it is a case in many automated scanning tools report should be read with understanding and caution ;) .&lt;/i&gt;&lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4041" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Downloads+info/default.aspx">Downloads info</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Tools+and+scripts/default.aspx">Tools and scripts</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>Where to put SSL certificate for LDAP …</title><link>http://blogs.dirteam.com/blogs/tomek/archive/2009/06/17/where-to-put-ssl-certificate-for-ldap.aspx</link><pubDate>Wed, 17 Jun 2009 12:06:00 GMT</pubDate><guid isPermaLink="false">4afa41f1-c118-406e-beda-ba054a9f6c33:4015</guid><dc:creator>tomek</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.dirteam.com/blogs/tomek/comments/4015.aspx</comments><wfw:commentRss>http://blogs.dirteam.com/blogs/tomek/commentrss.aspx?PostID=4015</wfw:commentRss><description>&lt;p&gt;Protecting LDAP traffic with SSL is a good idea, especially if in network environment some applications are (ab)using LDAP as authentication protocol. &lt;/p&gt;  &lt;p&gt;Some explanation of abusing word – LDAP never was designed as authentication protocol (like Kerberos is). Its name states it clear “DIRECTORY ACCESS PROTOCOL”. However because it is simple to use and effective it is often used as such. Because it wasn’t designed to be an authentication protocol it lacks features which would protect credentials etc. which might expose authentication data for different threats which are common for every important information sent in a clear text over a network. To say it in simple word – when you are doing simple LDAP bind over non secure connection you are just exposing your credentials to others. For proof see see screenshot from network trace below: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w2k.pl/img/ssl_ldp_connect.jpg" mce_href="http://www.w2k.pl/img/ssl_ldp_connect.jpg"&gt;&lt;img src="http://www.w2k.pl/img/ssl_ldp_connect_small.jpg" alt="" mce_src="http://www.w2k.pl/img/ssl_ldp_connect_small.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So I think this screenshot itself should be enough to start to think about securing LDAP traffic with SSL (convincing developers to use different protocol or to enforce SSL connection in an app might be on the other hand tough task).&lt;/p&gt;  &lt;p&gt;Getting back to the topic – good news is that Active Directory infrastructure makes it pretty easy to enable SSL on LDAP protocol. Just give DC proper certificate and it will start to accept LDAP over SSL connections. “Proper” means that it has to meet some criteria, one of them is that its purpose statement should contain&amp;nbsp; &lt;i&gt;Server Authentication (1.3.6.1.5.5.7.3.1)&lt;/i&gt; OID on a list.&lt;/p&gt;  &lt;p&gt;Deploying certificates in environment with Enterprise CA based on Windows Server integrated with AD is also easy – you can take advantage of auto enrollment feature and DCs will request and install certificates on their own. It is also possible to use third party certificates. Procedure for requesting and installing such certificates on DCs in described in &lt;a href="http://support.microsoft.com/kb/321051" mce_href="http://support.microsoft.com/kb/321051"&gt;KB321051&lt;/a&gt;. In both cases (auto enrollment and KB manual procedure) certificate is being installed in &lt;i&gt;Personal&lt;/i&gt; store of local system.&lt;/p&gt;  &lt;p&gt;This store has this disadvantage that it might contain many different certs installed by other services and applications if required. If it will contain many certificates meeting requirements for DC to use this cert to protect LDAP traffic it will just pick one. We don’t have real control which one. &lt;/p&gt;  &lt;p&gt;Since Windows 2008 there is a way to have more control on this behavior and select certificate which will be used to protect LDAP traffic. If certificate will be put in &lt;i&gt;NTDSA\Personal&lt;/i&gt;&amp;nbsp; store instead of default Local system store it will be picked up by directory service in first place and used for LDAP traffic protection. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w2k.pl/img/ssl_cert_ntdsa.jpg" mce_href="http://www.w2k.pl/img/ssl_cert_ntdsa.jpg"&gt;&lt;img src="http://www.w2k.pl/img/ssl_cert_ntdsa_small.jpg" alt="" mce_src="http://www.w2k.pl/img/ssl_cert_ntdsa_small.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If there will not be any of certificates in NTDSA\Personal store DC will fall back to old behavior and search for certificate in Local system store&lt;/p&gt;  &lt;p&gt;Looks easy … one problem I have with this solution is that I can’t find a way to use auto enrollment mechanism to enroll certificate for DC and put it directly in NTDSA store. If there is anyone who have idea how to do this … comments are open :). &lt;/p&gt;&lt;img src="http://blogs.dirteam.com/aggbug.aspx?PostID=4015" width="1" height="1"&gt;</description><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Directory+services/default.aspx">Directory services</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.dirteam.com/blogs/tomek/archive/tags/Active+Directory/default.aspx">Active Directory</category></item></channel></rss>