<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUQDQng9eyp7ImA9WhBaEUg.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734</id><updated>2013-05-21T09:22:53.663-07:00</updated><category term="Personal" /><category term="Windows XP" /><category term="Visual Studio" /><category term="Windows 2003" /><category term="Differencing Disk" /><category term="SQL Server" /><category term="AJAX" /><category term="Oracle" /><category term="ASP.NET" /><category term="OS X" /><category term="SMTP" /><category term="Chrome" /><category term="Safari" /><category term=".net" /><category term="Windows 2008" /><category term="Apache" /><category term="Virtualization" /><category term="SSIS" /><category term="Weird Errors" /><category term="Mail" /><category term="Sharepoint 2007" /><category term="XSLT" /><category term="CSS" /><category term="Excel 2007" /><category term="Subversion" /><category term="TextEditors" /><category term="Troubleshooting" /><category term="Health Analyzer" /><category term="OLE DB" /><category term="SharePoint" /><category term="SPMetal" /><category term="SharePoint 2010" /><category term="Search" /><category term="IIS" /><category term="Reporting Services" /><category term="ADO.NET" /><category term="Claims Based Authentication" /><category term="Learning" /><category term="Rants" /><category term="SharePoint Designer 2010" /><category term="SEO" /><category term="Active Directory" /><category term="Database" /><category term="Stong Name" /><category term="HTML" /><category term="Tools" /><category term="Commerce Server" /><category term="SMO" /><category term="JavaScript" /><category term="Linq To SharePoint" /><category term="FBA" /><category term="Utilities" /><title>System.What?</title><subtitle type="html">Technical problems brought out into the light. 
&lt;br&gt;
&lt;a href="http://blog.tylerholmes.com/feeds/posts/default" rel="alternate" title="Subscribe Now!"&gt;&lt;img src="http://homertbush.googlepages.com/feed-icon-128x128.gif" alt="Subscribe Now"&gt;&lt;/a&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.tylerholmes.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>123</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ItsInSystemDotWhat" /><feedburner:info uri="itsinsystemdotwhat" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>ItsInSystemDotWhat</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;CkYGQnkyfyp7ImA9WhVaGUs.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-7614227242897716298</id><published>2012-06-17T12:08:00.001-07:00</published><updated>2012-06-17T12:08:43.797-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-17T12:08:43.797-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Search" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Troubleshooting" /><title>Troubleshooting SharePoint 2010 Search</title><content type="html">&lt;h4&gt;You’ll Need a Logger For That&lt;/h4&gt;  &lt;p&gt;Although it’s a killer feature, Search is as awkward as ever to troubleshoot in&lt;a href="http://lh4.ggpht.com/-KJFKDhYwPJY/T94rNVC0sGI/AAAAAAAAAHM/iR0DsRPm358/s1600-h/Search5.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Search" border="0" alt="Search" align="right" src="http://lh5.ggpht.com/-gsVOtjZcPg0/T94rNg-gMDI/AAAAAAAAAHU/CqrzGpj3aCc/Search_thumb3.jpg?imgmax=800" width="169" height="176" /&gt;&lt;/a&gt; SharePoint 2010. The Event Viewer chatter is pretty meek for troubleshooting, and the Search Center crawler reports have couple minute lag which makes them awkward to work with. The ULS logs can be great, but some troubleshoots produce so much data it’s hard to get a feel for everything that’s happening reading static flat files.&lt;/p&gt;  &lt;p&gt;Case in point, other users on the web have gone so far as to &lt;a href="http://blogs.technet.com/b/speschka/archive/2011/04/30/troubleshooting-tip-for-debugging-crawl-issues-in-sharepoint-2010.aspx"&gt;set up fiddler as a reverse proxy&lt;/a&gt;, just to get a feel for what’s happening to with Search as it goes about its crawling business (it’s cool to watch btw).&lt;/p&gt;  &lt;p&gt;Enter the aptly named real time ULS log viewer “&lt;a href="http://sharepointlogviewer.codeplex.com/"&gt;SharePoint LogViewer&lt;/a&gt;”.&lt;/p&gt;  &lt;p&gt;It’s the most sane conversation you’ll ever have with this service. You’ll be able to see everything from the callbacks from the administration site to the noise the crawler itself makes, all in real time.&lt;/p&gt;  &lt;p&gt;You should recognize it all:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Listing Content Sources &lt;/li&gt;    &lt;li&gt;Authenticating with the individual web applications &lt;/li&gt;    &lt;li&gt;Web Service calls to actually get list items&lt;/li&gt;    &lt;li&gt;And a lot of other minutia you might be interested in…&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What’s more, you can set filters on the chatter to help spot pertinent info (see figure 1). It’s usually enough just to start the logger, begin real time logging (takes a couple seconds to connect to farm), and setting a filter (say “Search”) to get all the info you need to start discerning what’s going on with one of your search crawls.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-yJmEc1S_e8o/T94rOHXbB8I/AAAAAAAAAHc/L-iNVziYk0I/s1600-h/LogViewer4.png"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/-yJmEc1S_e8o/T94rOHXbB8I/AAAAAAAAAHk/d-leXomP6DA/s1600-h/LogViewer%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="LogViewer" border="0" alt="LogViewer" src="http://lh5.ggpht.com/-yBRdObAMAqg/T94rO5xPGiI/AAAAAAAAAHo/Vqt4OOGMsX0/LogViewer_thumb%25255B3%25255D.png?imgmax=800" width="537" height="319" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;: SharePoint ULS mid crawl&lt;/p&gt;  &lt;h4&gt;It’s Great When it Works&lt;/h4&gt;  &lt;p&gt;Search is one of the coolest features that comes with SharePoint. Its ability to index a wide array of files, provide security trimmed results, and scale to huge 100 million item index sets (just to name a few) have help set it apart from other search alternatives (like &lt;a href="http://msdn.microsoft.com/en-us/library/ms142571.aspx"&gt;Full Text Search&lt;/a&gt;, &lt;a href="http://lucene.apache.org/core/"&gt;Lucene&lt;/a&gt;, &lt;a href="http://www.google.com/intl/en_au/enterprise/search/mini.html"&gt;Google Minis&lt;/a&gt;, etc…). If you have buckets of money, there’s also a great roadmap into &lt;a href="http://sharepoint.microsoft.com/en-us/product/capabilities/search/Pages/Fast-Search.aspx"&gt;FAST Search&lt;/a&gt; which has it’s &lt;a href="http://www.intergen.co.nz/blog/bryce-telford/dates/2010/8/benefits-of-fast-search-compared-to-sharepoint-2010/"&gt;own impressive additions&lt;/a&gt; to help you support even more robust search needs.&lt;/p&gt;  &lt;p&gt;As the search space has matured, the SP 2010 Search itself has had to grow to keep up. For developer to continue to be able to troubleshoot/understand how these services are working, it’s also likely that your tool belt need to grow as well. A good real time log viewer is sure to make a great addition.&lt;/p&gt;  &lt;p&gt;My Best,    &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=bCva2BiA528:G7Xvw5XpLxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=bCva2BiA528:G7Xvw5XpLxw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=bCva2BiA528:G7Xvw5XpLxw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=bCva2BiA528:G7Xvw5XpLxw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=bCva2BiA528:G7Xvw5XpLxw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=bCva2BiA528:G7Xvw5XpLxw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=bCva2BiA528:G7Xvw5XpLxw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=bCva2BiA528:G7Xvw5XpLxw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/bCva2BiA528" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/7614227242897716298/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=7614227242897716298" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7614227242897716298?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7614227242897716298?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/bCva2BiA528/troubleshooting-sharepoint-2010-search.html" title="Troubleshooting SharePoint 2010 Search" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-gsVOtjZcPg0/T94rNg-gMDI/AAAAAAAAAHU/CqrzGpj3aCc/s72-c/Search_thumb3.jpg?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2012/06/troubleshooting-sharepoint-2010-search.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUFRX8-fSp7ImA9WhVXFUo.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-87210887854471488</id><published>2012-04-16T04:03:00.001-07:00</published><updated>2012-04-16T04:03:34.155-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-16T04:03:34.155-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Claims Based Authentication" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Active Directory" /><title>Extending the FedAuth / Claims Auth Ticket in SharePoint 2010</title><content type="html">&lt;h4&gt;
It’s Not Long Enough&lt;/h4&gt;
For those whom have serviced calls about authentication in SharePoint 2010, a portion of your last two years may have been spent learning the broad range of changes that have come with the &lt;a href="http://en.wikipedia.org/wiki/Federated_identity"&gt;Federated&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Claims-based_identity"&gt;Claims Based&lt;/a&gt; models that are now part of authentication in SharePoint 2010.&lt;br /&gt;
One common scenario, especially for Forms Based Authentication sites (implemented with CBA) is how to extend the login window.&lt;br /&gt;
&lt;h4&gt;
The Default – 10 Hours?&lt;/h4&gt;
Once you switch (or initially create) a web application over to CBA and implement a Forms Based Authentication provider you might start to notice that the cookie window has a peculiar lifetime…it’s 10 hours for both Windows &lt;em&gt;and&lt;/em&gt; Forms Based Authentication. &lt;br /&gt;
It’s worth noting that until you implement the FBA the cookie’s still behave similar to those in Classic authentication (expire at end of session).&lt;br /&gt;
The cookie is relatively easy to find (seen here with the Firefox Add-in &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/cookies-manager-plus/"&gt;Cookies Manager+&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-9N2_BwbhS_I/T4v74yrlk8I/AAAAAAAAAGc/b_OXreY8Zkc/s1600-h/FedAuthCookie%25255B4%25255D.png"&gt;&lt;img alt="Authentication Ticket from FBA Login" border="0" height="180" src="http://lh6.ggpht.com/-ouc9lcULmp0/T4v75ViZMXI/AAAAAAAAAGk/YAJFuJwNRBs/FedAuthCookie_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Example FedAuth Forms Based Authentication Cookie" width="543" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div align="center"&gt;
&lt;strong&gt;Figure 1&lt;/strong&gt;: Authentication Ticket from FBA Login&lt;/div&gt;
&lt;h4&gt;
How to Extend It&lt;/h4&gt;
It’s very likely there’s someone in your organization that either doesn’t like logging in, or isn’t very good at it. For these genre of users the new FBA behavior isn’t a boon and it’s only a matter of time before the conversation of extending the login windows comes up.&lt;br /&gt;
Strangely enough there’s not a ton of straightforward documentation (partly the reason for this post) or options to remedy this.&lt;br /&gt;
&lt;br /&gt;
One of the easiest ways to extend this is by altering the configuration of the Secure Token Service with PowerShell. To be fair, it has a pretty big impact (farm wide) and introduces some other concerns. One of these is the fact that the user won’t be tasked with authenticating for the duration of the new extended window. While this sounds obvious (that’s the point right?) the fact that users are authenticating less often means that other actions (say in Active Directory or at application levels) like invalidating users or hooking/processing events at authentication time won’t be firing.&lt;br /&gt;
&lt;br /&gt;
If you extend the window to say 30 days, it’s possible that users that you’re marking invalid may have access to systems who don’t check said flag (and focus simply on authorization…I mean that’s partly the raison d'être for CBA) for quite a bit longer than if you’d left it alone.&lt;br /&gt;
&lt;br /&gt;
For sites that we’ve been asked to do this, we usually implement an HttpModule to inspect the user for any properties that are normally screened at authentication time so that we know we’re dealing with a valid user. So far this has seemed to mitigate the effects.&lt;br /&gt;
&lt;br /&gt;
Ok, enough talk. You can see the existing farm level settings for the Secure Token Service with the following PowerShell command:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="code"&gt;
Get-SPSecurityTokenServiceConfig&lt;/div&gt;
&lt;p&gt;
That should yield the following output, notice that the Forms and Windows Token Lifetime are individual settings (both initially 10 hours) and can be set independently.&lt;/p&gt;
&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-VadAs9pyoJM/T4v75qR5y9I/AAAAAAAAAGs/t4ZZMdCOu2s/s1600-h/SecureTokenServiceSettings%25255B6%25255D.png"&gt;&lt;img alt="Secure Token Service Settings" border="0" height="375" src="http://lh4.ggpht.com/-3BU6i0abHdk/T4v7526NSEI/AAAAAAAAAG0/MezpXL19dh4/SecureTokenServiceSettings_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="The settings governing authentication in claims FBA scenarios." width="524" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div align="center"&gt;
&lt;strong&gt;Figure 2&lt;/strong&gt;: Secure Token Service Settings&lt;/div&gt;
You can change these settings by running the following commands for the Windows and Forms token lifetimes respectively:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="code"&gt;
Set-SPSecurityTokenServiceConfig –WindowsTokenLifetime [minutes]&lt;/div&gt;
&lt;br/&gt;
&lt;div class="code"&gt;
Set-SPSecurityTokenServiceConfig –FormsTokenLifetime [minutes]&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;
This is of course done with PowerShell, I haven’t seen a way to do so with the web.config for the service.&lt;br /&gt;
Once making the changes, they begin immediately (no need to recycle app pools or web servers). Your cookie should look like below (set to 30 hours as an example).&lt;/p&gt;
&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-HktAZ2Bwmww/T4v76B_lBxI/AAAAAAAAAG8/42SfImJget4/s1600-h/LongerFedAuthCookie%25255B4%25255D.png"&gt;&lt;img alt="LongerFedAuthCookie" border="0" height="178" src="http://lh4.ggpht.com/-UX06vLFRee0/T4v76uEGT3I/AAAAAAAAAHE/0UdqbT5KLsQ/LongerFedAuthCookie_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="LongerFedAuthCookie" width="543" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div align="center"&gt;
&lt;strong&gt;Figure 3&lt;/strong&gt;: Extended FedAuth Cookie&lt;/div&gt;
&lt;div align="center"&gt;
&lt;br /&gt;&lt;/div&gt;
I know it’s not ideal (has huge impact and raises other considerations), but it IS the most straightforward way of extending the cookie, and if it’s available, you should at least know about it.&lt;br /&gt;
Hope that helps,   &lt;br /&gt;Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=tKERucH-cUk:qNzcTcAUTi0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=tKERucH-cUk:qNzcTcAUTi0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=tKERucH-cUk:qNzcTcAUTi0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=tKERucH-cUk:qNzcTcAUTi0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=tKERucH-cUk:qNzcTcAUTi0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=tKERucH-cUk:qNzcTcAUTi0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=tKERucH-cUk:qNzcTcAUTi0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=tKERucH-cUk:qNzcTcAUTi0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/tKERucH-cUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/87210887854471488/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=87210887854471488" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/87210887854471488?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/87210887854471488?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/tKERucH-cUk/extending-fedauth-claims-auth-ticket-in.html" title="Extending the FedAuth / Claims Auth Ticket in SharePoint 2010" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-ouc9lcULmp0/T4v75ViZMXI/AAAAAAAAAGk/YAJFuJwNRBs/s72-c/FedAuthCookie_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2012/04/extending-fedauth-claims-auth-ticket-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFR3k_eSp7ImA9WhVSEUU.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-8289644454305576992</id><published>2012-03-07T22:46:00.002-08:00</published><updated>2012-03-07T22:46:56.741-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-07T22:46:56.741-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint 2007" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><title>No SharePoint 2007 Menu Flyouts/DropDowns in Chrome</title><content type="html">&lt;h4&gt;
Broken Navigation Menus&lt;/h4&gt;
As of Chrome 15 (we think) SharePoint 2007 sites started to behave a little funky. The stock SharePoint menu started to behave erratically, intermittently not showing navigation flyouts. To be clear, on every other page load the navigation would behave appropriately, but the other half of the time the menu wouldn’t do anything on hover, making it impossible to see sub navigation items under a given header.&lt;br /&gt;
This seems to affect all SP 2007 sites for Chrome version 15 and later. The error strangely enough seems to be more related to javascript than rendering behavior.&lt;br /&gt;
&lt;h4&gt;
The Fix&lt;/h4&gt;
I’ll save you the troubleshoot, we added a late loading script that tells the menu that flyouts are indeed kosher. For some reason this variable gets set incorrectly for newer versions of Chrome. There’s a good chance MS may not release a fix for this since Chrome isn’t a &lt;a href="http://technet.microsoft.com/en-us/library/cc263526(v=office.12).asp"&gt;supported browser for SharePoint 2007&lt;/a&gt;.&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&amp;lt;script type=&lt;span style="color: #006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;$(&lt;span style="color: blue;"&gt;function&lt;/span&gt;(){&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;    &lt;span style="color: green;"&gt;//Updates the stock SharePoint menu settings to allow flyouts,&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;    &lt;span style="color: green;"&gt;//seems to get intermittently improperly set on Chrome &amp;gt;= 15.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;    flyoutsAllowed = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;});&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
That’s it, pretty simple (especially if you already have some &lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CDcQFjAA&amp;amp;url=http%3A%2F%2Fjquery.com%2F&amp;amp;ei=zFRYT9rcEPPoiALt-ZGsCw&amp;amp;usg=AFQjCNFA7CZ5sWRDhHPuipmhL7zVksjC2A"&gt;jQuery&lt;/a&gt; running around). Otherwise you can get by having the script run really late in the document life cycle.&lt;br /&gt;
&lt;br /&gt;
Hope that Helps Someone, &lt;br /&gt;Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=y4SFWc5tyGI:OdS4eKofMsQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=y4SFWc5tyGI:OdS4eKofMsQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=y4SFWc5tyGI:OdS4eKofMsQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=y4SFWc5tyGI:OdS4eKofMsQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=y4SFWc5tyGI:OdS4eKofMsQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=y4SFWc5tyGI:OdS4eKofMsQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=y4SFWc5tyGI:OdS4eKofMsQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=y4SFWc5tyGI:OdS4eKofMsQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/y4SFWc5tyGI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/8289644454305576992/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=8289644454305576992" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/8289644454305576992?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/8289644454305576992?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/y4SFWc5tyGI/no-sharepoint-2007-menu.html" title="No SharePoint 2007 Menu Flyouts/DropDowns in Chrome" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2012/03/no-sharepoint-2007-menu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQXg5fip7ImA9WhVTFUQ.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-7735355766922745973</id><published>2012-02-29T23:22:00.000-08:00</published><updated>2012-03-01T01:28:00.626-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-01T01:28:00.626-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint 2007" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><title>How SharePoint Deals With Time And Time Zones</title><content type="html">&lt;h4&gt;



What’s Going On Here?&lt;/h4&gt;
It’s a little weird how hard it is to find some detailed descriptions on how SharePoint handles time, and time zones. So here’s a dump on a lot of things time and time zone related to better help you troubleshoot and predict behavior.&lt;a href="http://lh4.ggpht.com/-3tCGkozppWw/T08_xqjedkI/AAAAAAAAAFc/Wpj_8WiKaYA/s1600-h/TimeWarp8.jpg"&gt;&lt;img align="right" alt="TimeWarp" border="0" height="212" src="http://lh4.ggpht.com/-mAoy1MN0T60/T08_x7g5tEI/AAAAAAAAAFk/L553K-upv9c/TimeWarp_thumb6.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: right; margin: 10px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="TimeWarp" width="215" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h4&gt;



How Time Is Stored&lt;/h4&gt;
Fields like created/modified are stored will all other list item properties in the dbo.AllUserData table as tp_Modified and tp_Created. Like all list items, events are stored in this table as well.&lt;br /&gt;
&lt;h4&gt;



Time Calculation With Respect to Time Zones&lt;/h4&gt;
Time gets stored using the clock of the machine, this is not influenced by the time zone of the machine. If the clock on the server is off, the time stored is off by the amount of the clock skew. Changing the time zone of the server (OS) doesn’t affect how time is stored. This is true for most applications.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;WHY?&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
If a server is at 6pm PST (Pacific) and you change the time zone to EST (Eastern) sure the time looks like it changes from 6pm PST to 9pm EST, but those times are equivalent. 9pm EST is just another way of writing 6pm PST. Events taking place in California are really happening at the exact same time in New York, their citizens just happen to format time differently. Time zones are just another way of expressing (formatting) the current time. To be clear. There is only one time, there are many time formats…and there is no spoon.&lt;br /&gt;
&lt;span style="color: #333333;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #333333;"&gt;&lt;strong&gt;The Clock IS Important Though&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you &lt;em&gt;change the time &lt;/em&gt;on the server (OS) clock you’ll change how time will get stored (for new edits/additions). In this case you’ve actually had an impact on time. Namely because going from 6pm PST to 7pm PST means someone actually lost an hour they’ll never get back (not that fake ones you tell yourself about when you travel through different time zones). By changing the clock from 6pm PST to 7pm PST, you’ve effectively moved the server through time. As a result, this &lt;em&gt;will effect &lt;/em&gt;the times that items are recorded to be stored at.&lt;br /&gt;
&lt;h4&gt;


How Time Zones Get Set&lt;/h4&gt;
By default all your users see the time as it is formatted at the root site (SPWeb) level. These settings get set when the site collection is provisioned by the web application default time zone (Figure 1 shown below). These settings get copied down when new sub sites are provisioned under the root site. Finally, if any user doesn’t like the way dates and times are displayed, they can override how time is presented to them using their personal regional settings (Figure 2 also below). But most of the time its the root site settings time zone that users are complaining about.&lt;br /&gt;
&lt;h4&gt;

Default Site (SPWeb) Time Zones&lt;/h4&gt;
This setting dictates the formatting/time zone for all data in the site. By default these get copied down from the parent web at time of creation. You can view/change these settings (if you’re a Site Administrator) by going to:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Site Actions&lt;/strong&gt;-&amp;gt;&lt;strong&gt;Site Settings&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Regional Settings&lt;/strong&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;strong&gt;&lt;a href="http://lh3.ggpht.com/-foytYBtGN2g/T08_yPmj4WI/AAAAAAAAAFs/azPEkS1a2hQ/s1600-h/SiteCollectionTimeZone6.png"&gt;&lt;img alt="Site (SPWeb) Regional Settings including Time Zone" border="0" height="376" src="http://lh4.ggpht.com/-V0_NC4K6Q50/T08_yfb_YgI/AAAAAAAAAF0/RZx543adD8g/SiteCollectionTimeZone_thumb4.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Site Regional Settings" width="523" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div align="center"&gt;
&lt;strong&gt;Figure 1&lt;/strong&gt;. Site (SPWeb) Regional Settings&lt;/div&gt;
This setting is dictating how time is displayed to all users whom haven’t expressed a preference using their personal regional settings. At the root of the site collection (root site), you can also tell all sub sites to inherit the settings of the root web, resetting them to a single time zone.&lt;br /&gt;
Changing the Regional Settings time zone for a web programmatically looks like the code below. Time zone IDs come from a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spregionalsettings.timezones.aspx"&gt;list of known time zones&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite siteCollection = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&lt;span class="str"&gt;"http://localhost"&lt;/span&gt;))&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt;(SPWeb websiteRoot = siteCollection.RootWeb)&lt;/pre&gt;
&lt;pre&gt;    { &lt;/pre&gt;
&lt;pre class="alt"&gt;        SPRegionalSettings regionalSettings = websiteRoot.RegionalSettings; &lt;/pre&gt;
&lt;pre&gt;        SPTimeZone timeZoneIndianaEast = regionalSettings.TimeZones[15]; &lt;/pre&gt;
&lt;pre class="alt"&gt;        regionalSettings.TimeZone.ID = timeZoneIndianaEast.ID; &lt;/pre&gt;
&lt;pre&gt;        websiteRoot.Update();&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;h4&gt;


User Site Collection Time Zones&lt;/h4&gt;
We say user &lt;em&gt;site collection&lt;/em&gt; time zones settings because even though this is stored per user, these settings reset in across site collections. Just because you’ve set this in site collection A doesn’t have any impact on site collection B. It will follow you around across many sites (SPWeb) within a site collection though.&lt;br /&gt;
&lt;br /&gt;
You can override the default site time zone by going to:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Click on your username in the header and click on &lt;strong&gt;My Settings&lt;/strong&gt;.&lt;a href="http://lh4.ggpht.com/-Ph_41XwQn5E/T08_ypCaYaI/AAAAAAAAAF8/GSDUbdvQFQg/s1600-h/MySettings8.png"&gt;&lt;img alt="Click on My Settings to access Regional Settings" border="0" height="158" src="http://lh6.ggpht.com/-k0_5gDP5Z-w/T08_y6BLr7I/AAAAAAAAAGE/lDzGipuXPMg/MySettings_thumb6.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="User My Settings" width="150" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;My Regional Settings.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Uncheck &lt;strong&gt;Always follow web settings&lt;/strong&gt; and override the time zone with one of your preference for this site collection.&lt;/li&gt;
&lt;/ol&gt;
&lt;a href="http://lh5.ggpht.com/--9f4_8PlZMo/T08_y-iaJmI/AAAAAAAAAGM/jKzZS56sDMY/s1600-h/MyRegionalSettings4.png"&gt;&lt;img alt="User Site Collection Time Zone settings overriding the default time zone." border="0" height="393" src="http://lh6.ggpht.com/-CDgupqu1Pf0/T08_zIgyafI/AAAAAAAAAGU/Z9QAYKBcMvc/MyRegionalSettings_thumb2.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="User Regional Settings" width="487" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div align="center"&gt;
&lt;strong&gt;Figure 2&lt;/strong&gt;. User Site Collection Time Zone settings&amp;nbsp;&amp;nbsp; &lt;br /&gt;
overriding the default time zone&lt;/div&gt;
&lt;div align="center"&gt;
&lt;br /&gt;&lt;/div&gt;
After you click OK, time will be formatted for the time zone you dictate.&lt;br /&gt;
You can change this for a given user with the following code:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="rem"&gt;//Create a new regional settings based off of the current web.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;SPRegionalSettings regionalSettings = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPRegionalSettings(web, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="rem"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="rem"&gt;//Set some settings&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;SPTimeZone timeZoneIndiaEast = regionalSettings.TimeZones[15];&lt;/pre&gt;
&lt;pre&gt;regionalSettings.TimeZone.ID = timeZoneIndiaEast.ID;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span class="rem"&gt;//Assign to user and update.&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;user.RegionalSettings = regionalSettings;&lt;/pre&gt;
&lt;pre&gt;user.Update();&lt;/pre&gt;
&lt;/div&gt;
&lt;h4&gt;

Fallout&lt;/h4&gt;
There are some interesting effects of the time zone settings. For instance, if you ship a site collection to another time zone, it will still behave as if it’s in your original time zone with no difference at all so long as the clock at the host is the correct time.&lt;br /&gt;
&lt;br /&gt;
Different users can have very different time settings across different site collections. The good news is that they get the final say on how time is formatted.&lt;br /&gt;
&lt;br /&gt;
Both these settings can be manipulated programmatically. When these settings are set appropriately they can help users from very different time zones collaborate on data with time formatted in a way that make sense to them. This especially applies to event/calendar items.&lt;br /&gt;
&lt;br /&gt;
Hope that helps someone, regional settings can have a big impact on collaboration projects.&lt;br /&gt;
&lt;br /&gt;
My Best,&lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=ADFUUVJibJs:FUT2RoOZe6U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=ADFUUVJibJs:FUT2RoOZe6U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=ADFUUVJibJs:FUT2RoOZe6U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=ADFUUVJibJs:FUT2RoOZe6U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=ADFUUVJibJs:FUT2RoOZe6U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=ADFUUVJibJs:FUT2RoOZe6U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=ADFUUVJibJs:FUT2RoOZe6U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=ADFUUVJibJs:FUT2RoOZe6U:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/ADFUUVJibJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/7735355766922745973/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=7735355766922745973" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7735355766922745973?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7735355766922745973?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/ADFUUVJibJs/how-sharepoint-deals-with-time-and-time.html" title="How SharePoint Deals With Time And Time Zones" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-mAoy1MN0T60/T08_x7g5tEI/AAAAAAAAAFk/L553K-upv9c/s72-c/TimeWarp_thumb6.jpg?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2012/02/how-sharepoint-deals-with-time-and-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYEQ3o6fip7ImA9WhJRFEs.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-3545489823012819142</id><published>2012-02-12T19:07:00.000-08:00</published><updated>2012-07-16T11:41:42.416-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-16T11:41:42.416-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Utilities" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="SMTP" /><category scheme="http://www.blogger.com/atom/ns#" term="Troubleshooting" /><title>Troubleshooting The Windows SMTP Server</title><content type="html">&lt;h4&gt;
Why Isn’t My E-mail Getting There?&lt;/h4&gt;
&lt;a href="http://lh3.ggpht.com/-FS7k1NkX5yc/TzjhHsNQmZI/AAAAAAAAAEs/cFP4b9T4ZAI/s1600-h/email%25255B15%25255D.jpg"&gt;&lt;img align="right" alt="Email is a very common but hard feature to troubleshoot." border="0" height="226" src="http://lh5.ggpht.com/-H17tPCI71cs/TzjhH0uFJ7I/AAAAAAAAAE0/C_cshS4Wp3E/email_thumb%25255B13%25255D.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Email is everywhere these days." width="226" /&gt;&lt;/a&gt;&lt;br /&gt;
No one gets a hi-five for implementing an email feature. I’ve tried it before, it’s impressively devoid of gratitude. &lt;br /&gt;
Email is one of those features that’s just &lt;em&gt;supposed to work&lt;/em&gt; and very little thought is often given to how difficult it really is to get right. Even if users didn’t expect it to be instantaneous and scale to legendary sizes, they definitely wouldn’t hand out accolades for all the troubleshooting that email brings to your door.&lt;br /&gt;
Email &lt;a href="http://blog.tylerholmes.com/2008/10/make-sure-your-application-email-gets.html"&gt;is as complicated as ever&lt;/a&gt;, and requires a ton of different systems to be in sync just for a single message to get through. Components like:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Application Settings &lt;/li&gt;
&lt;li&gt;SMTP Server auth/relay settings &lt;/li&gt;
&lt;li&gt;DNS (appropriate &lt;a href="http://en.wikipedia.org/wiki/List_of_DNS_record_types"&gt;MX, A, and potentially PTR and SPF&lt;/a&gt;) both internally and externally &lt;/li&gt;
&lt;li&gt;Email client and Server server spam filtering (text processing, attachment blocking, black listing, etc…) &lt;/li&gt;
&lt;/ul&gt;
…just to name a few, often present issues and ensuring their correct often crosses multiple disciplines and sometimes organizations. The broad domain of knowledge required to diagnose email issues can often cause their troubleshoots to be prolonged. &lt;br /&gt;
&lt;h4&gt;
Troubleshooting&lt;/h4&gt;
Fortunately most troubleshoots usually fall into one of three categories:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Application/SMTP Server Issues&lt;/strong&gt; – These are problems between the application and the SMTP server, usually there’s a stack trace or some kind of very visible error code thrown for the application or in the Event Viewer/SMTP Log files. These are for things like:       &lt;ul&gt;
&lt;li&gt;Unable to authenticate &lt;/li&gt;
&lt;li&gt;Unable to relay &lt;/li&gt;
&lt;li&gt;Email is invalid (one of its fields breaks the RFC) &lt;/li&gt;
&lt;li&gt;etc…&lt;a href="http://www.answersthatwork.com/Download_Area/ATW_Library/Networking/Network__3-SMTP_Server_Status_Codes_and_SMTP_Error_Codes.pdf"&gt;there’s a bunch of them&lt;/a&gt;, but they they’re usually pretty easy to troubleshoot. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sending SMTP/The Internet/Destination SMTP &lt;/strong&gt;– This is where things get a little bananas. A lot of SMTP server’s aren’t great at logging (&lt;em&gt;ahem&lt;/em&gt;, all versions of IIS to date), and it’s hard to get feedback on where in all things are going sideways. &lt;/li&gt;
&lt;/ol&gt;
This is also where a lot of developers start to feel out of their element. Checking DNS records and relating them to email behavior has traditionally been reserved as a core IT task. This is where tools like &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=11393"&gt;SMTPDiag&lt;/a&gt; save the day. Weighing in at 79 KB this tool can be a life savor that stops you from needing to memorize telnet “ehlo” commands and other awkward SMTP command syntax.&lt;br /&gt;
SMTP Diag runs a variety of tests, like DNS lookups and then goes through the motions of sending (doesn’t actually send) an email for every server that has an MX record. This usually tests:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNS&lt;/strong&gt; – Both sending and receiving domains have MX records, have A records. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability&lt;/strong&gt; – Both the sending and receiving domains’ email servers are accessible. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessible&lt;/strong&gt; - Connects to SMTP servers and goes through the motions of sending an email from/to the given addresses. &lt;/li&gt;
&lt;/ul&gt;
Here’s an example of it running in verbose mode:&lt;br /&gt;
&lt;div class="code"&gt;
SmtpDiag.exe “fromAddress@hotmail.com” “toAddress@someDomain.com” /v&lt;/div&gt;
&lt;a href="http://lh4.ggpht.com/-ixpfi0-lQ-Q/Tzjhh0R4pII/AAAAAAAAAFM/5_2il8NX964/s1600-h/SMTPDiag%25255B6%25255D.png"&gt;&lt;img alt="SMTPDiag" border="0" height="327" src="http://lh5.ggpht.com/-hnsCuu8QrT0/TzjhiFBobAI/AAAAAAAAAFU/TLRfbeBVK_I/SMTPDiag_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SMTPDiag" width="524" /&gt;&lt;/a&gt;&lt;br /&gt;
Just today the utility helped me realize that some emails stuck in my Windows 2008 SMTP server queue were really stuck there not because my SMTP server was set up incorrectly, but because my ISP was stopping outgoing port 25 traffic. My only regret is not running the thing earlier in my troubleshoot (I started at my application and SMTP server).&lt;br /&gt;
&lt;blockquote&gt;
3. Assuming both of the above check out, then you most likely have something on the user’s email client or on the destination email server (read spam filtering). Which also means it’s officially not your fault.&lt;/blockquote&gt;
I hope the above helps someone, these troubleshoots can often be a nightmare and there’s nothing like a good tool to help you wake up.&lt;br /&gt;
Good Luck,   &lt;br /&gt;Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=dNbBim5l4XQ:SKZbJBQXwt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=dNbBim5l4XQ:SKZbJBQXwt0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=dNbBim5l4XQ:SKZbJBQXwt0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=dNbBim5l4XQ:SKZbJBQXwt0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=dNbBim5l4XQ:SKZbJBQXwt0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=dNbBim5l4XQ:SKZbJBQXwt0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=dNbBim5l4XQ:SKZbJBQXwt0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=dNbBim5l4XQ:SKZbJBQXwt0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/dNbBim5l4XQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/3545489823012819142/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=3545489823012819142" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/3545489823012819142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/3545489823012819142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/dNbBim5l4XQ/troubleshooting-windows-smtp-server.html" title="Troubleshooting The Windows SMTP Server" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-H17tPCI71cs/TzjhH0uFJ7I/AAAAAAAAAE0/C_cshS4Wp3E/s72-c/email_thumb%25255B13%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2012/02/troubleshooting-windows-smtp-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEERno5fip7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-1738295865927798318</id><published>2012-01-11T21:53:00.001-08:00</published><updated>2012-01-12T09:00:07.426-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T09:00:07.426-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint Designer 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><title>401 SharePoint Designer Connectivity Issues</title><content type="html">&lt;h4&gt;How Many Times Must I Log In!?&lt;/h4&gt;&lt;a href="http://sharepoint.microsoft.com/en-us/product/related-technologies/pages/sharepoint-designer.aspx"&gt;SharePoint Designer 2010&lt;/a&gt; is definitely a huge improvement over 2007. It’s free and has a ton of enhancements to make customizing a SharePoint install easier than ever.&lt;br /&gt;
It IS however, just as difficult to troubleshoot as the previous version when things go wrong. This is mainly because almost everything SharePoint Designer 2010 does happens over a web service. This means that a lot of the errors that you tend to get back (if you get any at all) are cryptic, and troubleshoots can be prolonged.&lt;br /&gt;
The other day one of our developers was trying to do some edits to a local SharePoint 2010 dev farm via SharePoint Designer 2010 and was having some issues logging in.&lt;br /&gt;
The user was a site collection administrator and every time they entered a correct credential, they were prompted to enter it in again (and again).&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-a6-ydvDnrhc/Tw51Z8IYTTI/AAAAAAAAAEM/-rqrSJO1cJQ/s1600-h/LoginIssus%25255B5%25255D.png"&gt;&lt;img alt="LoginIssus" height="312" src="http://lh4.ggpht.com/-8fsjFnix6CQ/Tw51aLdtZnI/AAAAAAAAAEQ/4TMkzVmSqYg/LoginIssus_thumb%25255B3%25255D.png?imgmax=800" style="display: block; float: none; margin: 0px auto;" title="LoginIssus" width="457" /&gt;&lt;/a&gt;&lt;br /&gt;
In addition when running &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CDYQFjAA&amp;amp;url=http%3A%2F%2Fwww.fiddler2.com%2F&amp;amp;ei=C3IOT_bLB8_aiQKoyNTZDQ&amp;amp;usg=AFQjCNGyVxcKeoiBFf3LsfsM8apoKVxKLQ"&gt;Fiddler&lt;/a&gt; to inspect the login traffic, the log was full of authentication attempts to the login service (/_vti_bin/shtml.dll/_vti_rpc) but all returned 401 http status codes (unauthorized). There were no relevant events in the Event Log or in the SharePoint logs (14 hive\Logs directory).&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-qPowAUIZlIQ/Tw51aRVxdOI/AAAAAAAAAEc/qF_tMnnjMYw/s1600-h/401s%25255B3%25255D.png"&gt;&lt;img alt="401s" border="0" height="113" src="http://lh5.ggpht.com/-xtaLD2brUVg/Tw51arz42UI/AAAAAAAAAEk/62l0cXf8JxQ/401s_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="401s" width="419" /&gt;&lt;/a&gt;&lt;br /&gt;
Normally (if accessing it via a host header), we’d assume this has to do with &lt;a href="http://blog.tylerholmes.com/2008/06/iis-6-host-headers-on-win2k3-yields.html"&gt;IIS loopback&lt;/a&gt; checks, but this wasn’t the case. After a lengthily troubleshoot we found out that the behavior actually had to do with a change we’d made to the web.config.&lt;br /&gt;
As it turns out, when you enable &lt;a href="http://msdn.microsoft.com/en-us/library/bb386420.aspx"&gt;ASP.NET tracing&lt;/a&gt;, you’ll no longer be able to login via SPD. We had the following line in our web.config.&lt;br /&gt;
&lt;div class="code"&gt;&amp;lt;configuration&amp;gt;    &lt;br /&gt;
&amp;nbsp; &amp;lt;system.web&amp;gt;     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;trace enabled="true" requestLimit="40" localOnly="false" /&amp;gt;     &lt;br /&gt;
&amp;nbsp; &amp;lt;/system.web&amp;gt;     &lt;br /&gt;
&amp;lt;/configuration&amp;gt;&lt;/div&gt;After we removed this line, we were able to login. We’re still digging around trying to discern how the two are related, but in the interim I’m hoping this saves someone out there some time.&lt;br /&gt;
HTH Someone,   &lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Yv8PYSKXXYc:09-W4W4HkSk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Yv8PYSKXXYc:09-W4W4HkSk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Yv8PYSKXXYc:09-W4W4HkSk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Yv8PYSKXXYc:09-W4W4HkSk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Yv8PYSKXXYc:09-W4W4HkSk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Yv8PYSKXXYc:09-W4W4HkSk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Yv8PYSKXXYc:09-W4W4HkSk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Yv8PYSKXXYc:09-W4W4HkSk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/Yv8PYSKXXYc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/1738295865927798318/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=1738295865927798318" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1738295865927798318?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1738295865927798318?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/Yv8PYSKXXYc/401-sharepoint-designer-connectivity.html" title="401 SharePoint Designer Connectivity Issues" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-8fsjFnix6CQ/Tw51aLdtZnI/AAAAAAAAAEQ/4TMkzVmSqYg/s72-c/LoginIssus_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2012/01/401-sharepoint-designer-connectivity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUICQXYzfSp7ImA9WhRXEUo.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-5053864907515261185</id><published>2011-11-30T23:56:00.000-08:00</published><updated>2011-12-17T19:06:00.885-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-17T19:06:00.885-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Claims Based Authentication" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="FBA" /><title>Being Ignored By the SQL Membership Provider</title><content type="html">&lt;h4&gt;SQL Membership Provider in SharePoint 2010 &lt;/h4&gt;Those of you who have worked on SharePoint 2010 sites that use Forms Based Authentication (under the umbrella of &lt;a href="http://blogs.technet.com/b/mahesm/archive/2010/04/07/configure-forms-based-authentication-fba-with-sharepoint-2010.aspx"&gt;Claims Based Authentication&lt;/a&gt;), won’t act surprised when I start talking about the &lt;a href="http://msdn.microsoft.com/en-us/library/89hwy0w9.aspx"&gt;SQL Membership Provider&lt;/a&gt;. It’s one of the most common providers that gets used in SharePoint 2010 FBA sites. The fact that it’s a free, &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider_properties.aspx"&gt;very flexible&lt;/a&gt;, and pretty straight forward way to set up FBA in SP 2010 have helped spur its popularity.&lt;br /&gt;
Those who have also worked with the SQL Membership Provider in environments where claims based authentication &lt;em&gt;wasn’t &lt;/em&gt;in play, may very well have noticed some changes in its behavior. While the code is of course the same, the additional complexity of a claims environment, means that some properties may not behave as they normally would.&lt;br /&gt;
&lt;h4&gt;The Computer Isn’t Listening to Me&lt;/h4&gt;On two separate occasions now we’ve had developers set properties on the SQL Membership Provider in the web.config expecting it to change the behavior of their SP 2010 site. In both these cases a lack of understanding in how claims authentication works has left them scratching their heads when the properties didn’t take effect.&lt;br /&gt;
An example of this might be:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Developer wants to change one of the &lt;em&gt;authentication&lt;/em&gt; options of the membership provider (say increase the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.maxinvalidpasswordattempts.aspx"&gt;MaxInvalidPasswordAttempts&lt;/a&gt; property), and does so in the web.config of the chosen web application. &lt;/li&gt;
&lt;li&gt;After the change to the provider settings, the developer notices that the web application behaves no differently than before. &lt;/li&gt;
&lt;li&gt;After a series of cuss words and IIS resets, developer starts aimlessly searching the internet (or an empty bottle) for the answer. &lt;/li&gt;
&lt;/ul&gt;It’s important to remember that once claims based authentication is introduced, the web application &lt;em&gt;doesn’t &lt;/em&gt;perform any of the authentication anymore. Even though those settings for the provider in the web.config speak to authentication behavior, in Sharepoint 2010 claims auth scenarios the actual authentication is most often performed by the SharePoint &lt;a href="http://technet.microsoft.com/en-us/library/ee806864.aspx"&gt;Secure Token Service&lt;/a&gt;. &lt;br /&gt;
Those web.config settings (in the web application) that don’t speak to authentication are still fair game and will behave as expected, but the properties that change auth behavior like &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.maxinvalidpasswordattempts.aspx"&gt;MaxInvalidPasswordAttempts&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.passwordattemptwindow.aspx"&gt;PasswordAttemptWindow&lt;/a&gt; won’t have any effect (unless their made in the Secure Token Service web.config).&lt;br /&gt;
To be clear, you need to make those changes to the web.config of the STS, normally hosed at: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\SecurityToken\web.config.&lt;br /&gt;
In most scenarios, the authentication exchange looks like the picture below (with steps 3-8 being performed by the STS).&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-DMBDbwbmEIk/TumpbaInSTI/AAAAAAAAAD8/0zbhoMlOii4/s1600-h/ClaimsAuth%25255B9%25255D.png"&gt;&lt;img alt="Claims Authentication Steps for Browser and Secure Token Service" height="305" src="http://lh5.ggpht.com/-8GK7ihup8AY/TumpbgNBoOI/AAAAAAAAAEA/EH8Ft6oLXSA/ClaimsAuth_thumb%25255B7%25255D.png?imgmax=800" style="display: inline;" title="Claims Authentication Steps for Browser and Secure Token Service" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;
Once the relationship between the user, the STS, and the web application become clear the reasoning behind this behavior starts to make a lot more sense.&lt;br /&gt;
Since knowing is half the battle, it’s probably worth keeping an eye on claims based authentication technologies and how they behave. With how many systems are now using shared/claims auth both in and outside the enterprise, these are troubleshoots that are going to become increasingly common in future years.&lt;br /&gt;
My Best,   &lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Vd6DNTPh7FI:Reo4WShP4Go:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Vd6DNTPh7FI:Reo4WShP4Go:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Vd6DNTPh7FI:Reo4WShP4Go:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Vd6DNTPh7FI:Reo4WShP4Go:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Vd6DNTPh7FI:Reo4WShP4Go:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Vd6DNTPh7FI:Reo4WShP4Go:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Vd6DNTPh7FI:Reo4WShP4Go:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Vd6DNTPh7FI:Reo4WShP4Go:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/Vd6DNTPh7FI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/5053864907515261185/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=5053864907515261185" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5053864907515261185?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5053864907515261185?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/Vd6DNTPh7FI/being-ignored-by-sql-membership.html" title="Being Ignored By the SQL Membership Provider" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-8GK7ihup8AY/TumpbgNBoOI/AAAAAAAAAEA/EH8Ft6oLXSA/s72-c/ClaimsAuth_thumb%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/11/being-ignored-by-sql-membership.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYDQnY8fip7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-1619565071455214859</id><published>2011-10-18T21:28:00.000-07:00</published><updated>2011-10-19T13:29:33.876-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T13:29:33.876-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint 2007" /><category scheme="http://www.blogger.com/atom/ns#" term="Active Directory" /><title>SharePoint People Picker Filters Strike Back</title><content type="html">&lt;h4&gt;Yay, Free Integration&lt;/h4&gt;  &lt;p&gt;One of the benefits of rolling out SharePoint in intranet environments is that it marries pretty well with Active Directory (and other LDAPs). An example of this is the People Picker. It allows you resolve (or look up) any user in the LDAP that you’re authenticating against.&lt;/p&gt;  &lt;p&gt;Since LDAPs often get pretty dated/polluted there’s often a need to filter out certain sections of the LDAP or a certain genre of results. These might be old employees who have left the company, or users from a section of the organization that just aren’t relevant to the web application at hand.&lt;/p&gt;  &lt;p&gt;An example of a filter at the Organizational Unit is below. The following filter ensures that the people pickers in the given web application only pull users from the &lt;em&gt;Employees&lt;/em&gt; organizational unit (OU).&lt;/p&gt;  &lt;p class="code"&gt;stsadm -o setsiteuseraccountdirectorypath -url &lt;a href="http://webApplicationUrl"&gt;http://webApplicationUrl&lt;/a&gt; -path &amp;quot;OU=Employees,DC=fullly,DC=quallified,DC=domain,DC=com&amp;quot;&lt;/p&gt;  &lt;p&gt;Should you change your mind later, the following removes the filter above. In general, no application pool recycle or IISReset is required.&lt;/p&gt;  &lt;p class="code"&gt;stsadm -o setsiteuseraccountdirectorypath -url &lt;a href="http://webApplicationUrl"&gt;http://webApplicationUrl&lt;/a&gt; -path &amp;quot;&amp;quot;&lt;/p&gt;  &lt;p&gt;It’s worth mentioning that these filters don’t affect existing accounts in the site collection that have already been added. They only stop &lt;em&gt;future&lt;/em&gt; users additions that would collide with the give filter.&lt;/p&gt;  &lt;p&gt;There are some pretty expressive filters available out there. Many can target specific LDAP properties like &lt;em&gt;title&lt;/em&gt;, &lt;em&gt;name&lt;/em&gt;, &lt;em&gt;organization&lt;/em&gt;, etc… or other fields. Examples can be found at:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.synergyonline.com/blog/blog-moss/Lists/Posts/Post.aspx?ID=5"&gt;http://www.synergyonline.com/blog/blog-moss/Lists/Posts/Post.aspx?ID=5&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://sharepointserver-2007.blogspot.com/2008/10/limiting-sharepoint-people-picker.html"&gt;http://sharepointserver-2007.blogspot.com/2008/10/limiting-sharepoint-people-picker.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-au/library/cc263328(office.12).aspx"&gt;http://technet.microsoft.com/en-au/library/cc263328(office.12).aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-au/library/cc263012(office.12).aspx"&gt;http://technet.microsoft.com/en-au/library/cc263012(office.12).aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;The Resulting Errors&lt;/h4&gt;  &lt;p&gt;The problem with these filters is that its easy to forget about them and remember that they’re still in play. Specifically when adding users to a group, administrators/site owners are sometimes greeted with:&lt;/p&gt;  &lt;p class="code"&gt;The user does not exist or is not unique. at Microsoft.SharePoint.Library.SPRequestInternalClass.UpdateMembers(String bstrUrl, Guid&amp;amp; pguidScopeId, Int32 lGroupID, Int32 lGroupOwnerId, Object&amp;amp; pvarArrayAdd, Object&amp;amp; pvarArrayAddIds, Object&amp;amp; pvarArrayLoginsRemove, Object&amp;amp; pvarArrayIdsRemove, Boolean bSendEmail) at Microsoft.SharePoint.Library.SPRequest.UpdateMembers(String bstrUrl, Guid&amp;amp; pguidScopeId, Int32 lGroupID, Int32 lGroupOwnerId, Object&amp;amp; pvarArrayAdd, Object&amp;amp; pvarArrayAddIds, Object&amp;amp; pvarArrayLoginsRemove, Object&amp;amp; pvarArrayIdsRemove, Boolean bSendEmail)&lt;/p&gt;  &lt;p&gt;Which is an awfully confusing error. When you get the above, make sure that there aren’t any filters in play that would normally preclude the given user from resolving as they can cause this error. &lt;/p&gt;  &lt;p&gt;You can check the existence of a directory path filter by running the following stsadm command:&lt;/p&gt;  &lt;p class="code"&gt;stsadm -o getsiteuseraccountdirectorypath -url https://webApplicationUrl&lt;/p&gt;  &lt;p&gt;If there are, remove them first and then try again. This is a step that should often be done before getting too far into a troubleshoot.&lt;/p&gt;  &lt;p&gt;Hope that helps.&lt;/p&gt;  &lt;p&gt;My Best,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=_FrY3LKAMyA:3uGqwe-uOIM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=_FrY3LKAMyA:3uGqwe-uOIM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=_FrY3LKAMyA:3uGqwe-uOIM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=_FrY3LKAMyA:3uGqwe-uOIM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=_FrY3LKAMyA:3uGqwe-uOIM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=_FrY3LKAMyA:3uGqwe-uOIM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=_FrY3LKAMyA:3uGqwe-uOIM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=_FrY3LKAMyA:3uGqwe-uOIM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/_FrY3LKAMyA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/1619565071455214859/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=1619565071455214859" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1619565071455214859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1619565071455214859?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/_FrY3LKAMyA/sharepoint-people-picker-filters-strike.html" title="SharePoint People Picker Filters Strike Back" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/10/sharepoint-people-picker-filters-strike.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcCRn0zfip7ImA9WhdbEE8.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-4451185857420127166</id><published>2011-10-07T15:16:00.001-07:00</published><updated>2011-10-07T15:21:07.386-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T15:21:07.386-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint 2007" /><title>Customizing SharePoint 2007 Welcome and Site Actions Menus</title><content type="html">&lt;h4&gt;Can We Trim That Down?&lt;/h4&gt;A good portion of a SharePoint branding implementation is discerning which out of the box features are working and those that need to be customized. Especially in branding engagements where we’re trying to write as little code as possible, being able to provide customizations w/out opening Visual Studio is a huge win.&lt;br /&gt;
Below are two very common modifications that can be done to both the Site Actions and the Welcome menu to restrict the options that appear.&lt;br /&gt;
&lt;h4&gt;Removing Options from the Site Actions Menu&lt;/h4&gt;There are two ways to declare a SiteActions menu, the very terse:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:SiteActions&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;Or the more verbose style like that found in the default.master:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom-color: silver; border-bottom-style: solid; border-bottom-width: 1px; border-left-color: silver; border-left-style: solid; border-left-width: 1px; border-right-color: silver; border-right-style: solid; border-right-width: 1px; border-top-color: silver; border-top-style: solid; border-top-width: 1px; cursor: text; direction: ltr; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 20px; max-height: 200px; overflow-x: auto; overflow-y: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', courier, monospace; font-size: 11px; line-height: 16px; white-space: pre;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:SiteActions&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin-bottom: 0em; margin-left: 0em; margin-right: 0em; margin-top: 0em; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: red;"&gt;AccessKey&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,tb_SiteActions_AK%&amp;gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="SiteActionsMenuMain"&lt;/span&gt;
&lt;span style="color: red;"&gt;PrefixHtml&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;amp;lt;div&amp;amp;gt;&amp;amp;lt;div&amp;amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;SuffixHtml&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;MenuNotVisibleHtml&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;amp;amp;nbsp;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:FeatureMenuTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;
&lt;span style="color: red;"&gt;FeatureScope&lt;/span&gt;&lt;span style="color: blue;"&gt;="Site"&lt;/span&gt;
&lt;span style="color: red;"&gt;Location&lt;/span&gt;&lt;span style="color: blue;"&gt;="Microsoft.SharePoint.StandardMenu"&lt;/span&gt;
&lt;span style="color: red;"&gt;GroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="SiteActions"&lt;/span&gt;
&lt;span style="color: red;"&gt;UseShortId&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:MenuItemTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="MenuItem_Create"&lt;/span&gt;                    
&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,viewlsts_pagetitle_create%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,siteactions_createdescription%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="/_layouts/images/Actionscreate.gif"&lt;/span&gt;
&lt;span style="color: red;"&gt;MenuGroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="100"&lt;/span&gt;
&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;="100"&lt;/span&gt;
&lt;span style="color: red;"&gt;UseShortId&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;
&lt;span style="color: red;"&gt;ClientOnClickNavigateUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="~site/_layouts/create.aspx"&lt;/span&gt;
&lt;span style="color: red;"&gt;PermissionsString&lt;/span&gt;&lt;span style="color: blue;"&gt;="ManageLists, ManageSubwebs"&lt;/span&gt;
&lt;span style="color: red;"&gt;PermissionMode&lt;/span&gt;&lt;span style="color: blue;"&gt;="Any"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:MenuItemTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="MenuItem_EditPage"&lt;/span&gt;
&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,siteactions_editpage%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,siteactions_editpagedescription%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="/_layouts/images/ActionsEditPage.gif"&lt;/span&gt;
&lt;span style="color: red;"&gt;MenuGroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="100"&lt;/span&gt;
&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;="200"&lt;/span&gt;
&lt;span style="color: red;"&gt;ClientOnClickNavigateUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="javascript:MSOLayout_ChangeLayoutMode(false);"&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:MenuItemTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="MenuItem_Settings"&lt;/span&gt;
&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,settings_pagetitle%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,siteactions_sitesettingsdescription%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="/_layouts/images/ActionsSettings.gif"&lt;/span&gt;
&lt;span style="color: red;"&gt;MenuGroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="100"&lt;/span&gt;
&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;="300"&lt;/span&gt;
&lt;span style="color: red;"&gt;UseShortId&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;
&lt;span style="color: red;"&gt;ClientOnClickNavigateUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="~site/_layouts/settings.aspx"&lt;/span&gt;
&lt;span style="color: red;"&gt;PermissionsString&lt;/span&gt;&lt;span style="color: blue;"&gt;="EnumeratePermissions,ManageWeb,ManageSubwebs,AddAndCustomizePages,ApplyThemeAndBorder,ManageAlerts,ManageLists,ViewUsageData"&lt;/span&gt;
&lt;span style="color: red;"&gt;PermissionMode&lt;/span&gt;&lt;span style="color: blue;"&gt;="Any"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:FeatureMenuTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:SiteActions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;Although there’s some testing that needs to be done, you can for the most part use either the PermissionsString/PermissionMode properties to conditionally hide menu items OR you can remove them in entire (by simply removing the menu item markup [above]).&lt;br /&gt;
&lt;br /&gt;
Even when we start to work with publishing sites, it’s worth mentioning that the PublishingSiteAction menu (like that found in blueband.master) is really just a control template which pretty much does the above but adds additional controls to the menu. You can find said control at:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="code"&gt;C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\CONTROLTEMPLATES\PublishingActionMenu.ascx.&lt;/div&gt;&lt;br /&gt;
See something you don’t like? Change it. Its worth mentioning that we typically don’t recommend altering any of the controls in the ControlTemplates folder themselves (since it has farm wide impact). If you can, either make your changes in the masterpage (using selective declarative markup like the above), or create a copy of an existing control, make your alterations in the copy and reference it from your master page.&lt;br /&gt;
&lt;br /&gt;
Either way, keep your footprint as small as possible.&lt;br /&gt;
&lt;h4&gt;Removing Options from the Welcome Menu&lt;/h4&gt;The welcome menu works in pretty much the same way. Typically it’s declared looking like:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;span class="Apple-style-span" style="background-color: yellow; white-space: pre;"&gt;&amp;lt;%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;...
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;wssuc:Welcome&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="IdWelcome"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;Notice that similar to the PublishingSiteAction menu (above) it simply references a control template found in:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="code"&gt;C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx&lt;/div&gt;&lt;br /&gt;
The easiest way to work with a reduced version of the welcome menu is to replace your existing welcome menu control (above) with the actual control markup/template, and then selectively remove what you don’t want (and test). An example of such a trimmed control (which only shows the “Sign In as a Different User” and “Logout” options) would look like:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:PersonalActions&lt;/span&gt; &lt;span style="color: red;"&gt;AccessKey&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,personalactions_menu_ak%&amp;gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,open_menu%&amp;gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="ExplicitLogout"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin-bottom: 0em; margin-left: 0em; margin-right: 0em; margin-top: 0em; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:FeatureMenuTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;
&lt;span style="color: red;"&gt;FeatureScope&lt;/span&gt;&lt;span style="color: blue;"&gt;="Site"&lt;/span&gt;
&lt;span style="color: red;"&gt;Location&lt;/span&gt;&lt;span style="color: blue;"&gt;="Microsoft.SharePoint.StandardMenu"&lt;/span&gt;
&lt;span style="color: red;"&gt;GroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="PersonalActions"&lt;/span&gt;
&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="ID_PersonalActionMenu"&lt;/span&gt;
&lt;span style="color: red;"&gt;UseShortId&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:MenuItemTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="ID_LoginAsDifferentUser"&lt;/span&gt;
&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,personalactions_loginasdifferentuser%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,personalactions_loginasdifferentuserdescription%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;MenuGroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="200"&lt;/span&gt;
&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;="100"&lt;/span&gt;
&lt;span style="color: red;"&gt;UseShortId&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:MenuItemTemplate&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="ID_Logout"&lt;/span&gt;
&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,personalactions_logout%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;Description&lt;/span&gt;&lt;span style="color: blue;"&gt;="&amp;lt;%$Resources:wss,personalactions_logoutdescription%&amp;gt;"&lt;/span&gt;
&lt;span style="color: red;"&gt;MenuGroupId&lt;/span&gt;&lt;span style="color: blue;"&gt;="200"&lt;/span&gt;
&lt;span style="color: red;"&gt;Sequence&lt;/span&gt;&lt;span style="color: blue;"&gt;="300"&lt;/span&gt;
&lt;span style="color: red;"&gt;UseShortId&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:FeatureMenuTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;SharePoint:PersonalActions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;And voila, this:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-fzI6NlPzAyY/To96IQQrkpI/AAAAAAAAADs/Lh-Sxg2lZVM/s1600-h/Welcome%252520Menu%25255B6%25255D.png"&gt;&lt;img alt="Original, unmodified welcome menu." border="0" height="181" src="http://lh3.ggpht.com/-HaAt2UgCK5w/To96Ir_pffI/AAAAAAAAADw/bQeYPoFcQZ0/Welcome%252520Menu_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Welcome Menu" width="255" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Becomes this:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-4BEl_Bh8nd4/To96I4Fp_1I/AAAAAAAAAD0/NtEYvTsvIyU/s1600-h/CustomWelcomeMenu%25255B6%25255D.png"&gt;&lt;img alt="Customized Welcome Menu w/out authoring a feature or changing any controls in the controltemplates folder." border="0" height="120" src="http://lh4.ggpht.com/-fF6T6u-yEC4/To96IyS14xI/AAAAAAAAAD4/0_NalH6iiO8/CustomWelcomeMenu_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Customized Welcome Menu" width="256" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This can sometimes be super helpful, not only can you selectively pick links (and still hide the whole control with a &amp;lt;Sharepoint:SPSecurityTrimmedControl/&amp;gt; if need be), but you also don’t have to author a feature to change the menu or start messing with controls in the ControlTemplates folder (which can have a farm wide impact).&lt;br /&gt;
&lt;br /&gt;
Hope this helps someone.&lt;br /&gt;
&lt;br /&gt;
My Best, &lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=SZUW9Snyl5M:T0r-pARbHnI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=SZUW9Snyl5M:T0r-pARbHnI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=SZUW9Snyl5M:T0r-pARbHnI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=SZUW9Snyl5M:T0r-pARbHnI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=SZUW9Snyl5M:T0r-pARbHnI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=SZUW9Snyl5M:T0r-pARbHnI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=SZUW9Snyl5M:T0r-pARbHnI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=SZUW9Snyl5M:T0r-pARbHnI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/SZUW9Snyl5M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/4451185857420127166/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=4451185857420127166" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/4451185857420127166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/4451185857420127166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/SZUW9Snyl5M/customizing-sharepoint-2007-welcome-and.html" title="Customizing SharePoint 2007 Welcome and Site Actions Menus" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-HaAt2UgCK5w/To96Ir_pffI/AAAAAAAAADw/bQeYPoFcQZ0/s72-c/Welcome%252520Menu_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/10/customizing-sharepoint-2007-welcome-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNRnY5eSp7ImA9WhdVFEQ.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-417793747719617158</id><published>2011-09-19T20:48:00.001-07:00</published><updated>2011-09-19T20:48:17.821-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-19T20:48:17.821-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint 2007" /><category scheme="http://www.blogger.com/atom/ns#" term="Troubleshooting" /><title>SharePoint 2007’s Most Common and Confusing Error</title><content type="html">&lt;h4&gt;That Seems Misleading&lt;/h4&gt;  &lt;p&gt;Today I ran into an error that I was positive I’d dealt with before. When we tried to visit any System pages (those that use the default.master) in a SharePoint 2007 application, we got the following error.&lt;/p&gt;  &lt;div class="code"&gt;The DataSourceID of 'TopNavigationMenu' must be the ID of a control of type IHierarchicalDataSource. A control with ID 'topSiteMap' could not be found.&lt;/div&gt;  &lt;p&gt;More formally, it looked like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-G854P6-1Alw/TngM-4Bf4lI/AAAAAAAAADc/oPU1J24HKio/s1600-h/Error1%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="The DataSourceID of &amp;#39;TopNavigationMenu&amp;#39; must be the ID of a control of type IHierarchicalDataSource. A control with ID &amp;#39;topSiteMap&amp;#39; could not be found." border="0" alt="Common SharePoint 2007 Error" src="http://lh5.ggpht.com/-T713AA5GTJ8/TngM_aq7MiI/AAAAAAAAADg/5VWUN8bcWw8/Error1_thumb%25255B2%25255D.png?imgmax=800" width="513" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When we tried to load other pages (where we were loading custom user controls from disk) we got another misleading error.&lt;/p&gt;  &lt;div class="code"&gt;An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. &lt;/div&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/--JgJG3-6chI/TngM_9SfGzI/AAAAAAAAADk/HB6eWLpgaEs/s1600-h/Error2%25255B8%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately." border="0" alt="Another symptom and misleading error message." src="http://lh4.ggpht.com/-tuHdq9KEPyg/TngNANnTddI/AAAAAAAAADo/Jct8nrMIctA/Error2_thumb%25255B6%25255D.png?imgmax=800" width="532" height="207" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Believe it or not, this is one of SharePoint 2007’s most well known red herrings. I post this in part because:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A lot of the existing content on the web doesn’t fully document this error and how to troubleshoot it (misleading). &lt;/li&gt;    &lt;li&gt;I’ve run into it enough times (and forgotten the solution) that I feel a need to document it somewhere that I can easily look it up. &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;The Solution&lt;/h4&gt;  &lt;p&gt;The first thing to know about this error is that it gets thrown for a &lt;strong&gt;wide variety of reasons&lt;/strong&gt;. While most often it has something to do with the web.config of a SharePoint 2007 web application, the root cause can get pretty tangential to a simple web.config parser error.&lt;/p&gt;  &lt;p&gt;The first step to troubleshooting this, is to get an error message that actually speaks to the error at hand (the two above don’t, so don’t try to troubleshoot off of them). This genre of error seldom puts helpful details into the event log and so you should:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open up the latest log file in the 12 hive (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\Logs). &lt;/li&gt;    &lt;li&gt;I usually go to the end of the file and search up for terms like “error” or “exception”. &lt;/li&gt;    &lt;li&gt;You should be able to find some error. These can be quite varied from type/assembly resolution errors to parsing in the web.config. &lt;/li&gt;    &lt;li&gt;From here troubleshoots typically go one of two routes.      &lt;ul&gt;       &lt;li&gt;Either the error itself will inform you of what to do (e.g. a file is missing somewhere). &lt;/li&gt;        &lt;li&gt;You still have no idea and need to manually merge back in a working web.config. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;If you can’t figure out what to do based on the error, 99% of the time you can repair the error by merging in (use a diff tool, don’t blindly stomp) a stock SharePoint web.config. To do this… &lt;/li&gt;    &lt;li&gt;Backup your failing web.config. &lt;/li&gt;    &lt;li&gt;Create a blank web application in some test farm. &lt;/li&gt;    &lt;li&gt;Diff in (we use &lt;a href="http://www.scootersoftware.com/index.php"&gt;Beyond Compare&lt;/a&gt;) the newly provisioned stock web.config into your failing one (preferably line by line to determine root cause). &lt;/li&gt;    &lt;li&gt;After you bring a line/section over feel free to save the file and refresh your browser. Every time you change the web.config (and save) the application pool should recycle, so don’t worry about needing to reset IIS. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This “baby steps” process has always yielded a quick troubleshoot down to root cause for us.&lt;/p&gt;  &lt;p&gt;Troubleshooting SharePoint errors is often the beginning of a frustrating afternoon, so hopefully this helps someone out there. &lt;/p&gt;  &lt;p&gt;My Best,    &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=EL3guowv9_k:EXdwuOVDQcw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=EL3guowv9_k:EXdwuOVDQcw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=EL3guowv9_k:EXdwuOVDQcw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=EL3guowv9_k:EXdwuOVDQcw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=EL3guowv9_k:EXdwuOVDQcw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=EL3guowv9_k:EXdwuOVDQcw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=EL3guowv9_k:EXdwuOVDQcw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=EL3guowv9_k:EXdwuOVDQcw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/EL3guowv9_k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/417793747719617158/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=417793747719617158" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/417793747719617158?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/417793747719617158?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/EL3guowv9_k/sharepoint-2007s-most-common-and.html" title="SharePoint 2007’s Most Common and Confusing Error" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-T713AA5GTJ8/TngM_aq7MiI/AAAAAAAAADg/5VWUN8bcWw8/s72-c/Error1_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/09/sharepoint-2007s-most-common-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEFQHo5fip7ImA9WhdXEUs.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-5257191753920717828</id><published>2011-08-23T23:45:00.001-07:00</published><updated>2011-08-23T23:50:11.426-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T23:50:11.426-07:00</app:edited><title>Convenient, Yet Confusing Elements of Windows Integrated Authentication</title><content type="html">&lt;h4&gt;Windows Integrated Authentication&lt;/h4&gt;If you’ve written an application the intranet, you’ve likely used &lt;a href="http://en.wikipedia.org/wiki/Integrated_Windows_Authentication"&gt;Windows Integrated Authentication&lt;/a&gt; at some point. When it works, it’s pretty slick. Not only is it flexible in the authentication protocols you can use, but users (if set up right) don’t even need to enter in their username/password. &lt;br /&gt;
Windows Integrated Authentication can use any of &lt;a href="http://en.wikipedia.org/wiki/NTLMSSP"&gt;NTLM&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Kerberos_%28protocol%29"&gt;Kerberos&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/SPNEGO"&gt;Negotiate&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Digest_access_authentication"&gt;Digest&lt;/a&gt;. So if you’re picky about your security protocols (performance, client availability, hack-ability) there’s probably something in that list that will float your boat.&lt;br /&gt;
For those that haven’t had the pleasure yet, WIA is a way for users to authenticate (establish an identity) with an application in a Windows environment. The identity they’re usually establishing is one from from Active Directory or a local Windows credential.&lt;br /&gt;
&lt;h4&gt;Why’s It Useful&lt;/h4&gt;As it turns out, people don’t like logging in. Most users don’t even like typing in general, and the rest can’t be bothered to remember their password. When WIA works well, the user doesn’t do anything. They simply access a resource, and in the background a challenge/response ballet establishes their identity. All they see is a page that knows who they are treats them accordingly.&lt;br /&gt;
The equivalent of this happening to you in real life would be people just (seemingly) &lt;i&gt;knowing who you are&lt;/i&gt; and treating you accordingly. If you were to arrive at a fancy restaurant (and you had reservations) you could just show up and be led to you table (no need to check in). &lt;br /&gt;
On the other side of things, if you showed up somewhere you weren’t supposed to be (no permissions) they’d immediately throw you into the street. The moral of the story here; regardless of how you get treated, you don’t need to type.&lt;br /&gt;
&lt;h4&gt;A Day In The Life&lt;/h4&gt;Here’s a look into what some WIA challenge/responses looks like in against a SharePoint 2007 site using NTLM and Internet Explorer 8 as a client. The important note here is that the user didn’t &lt;i&gt;do anything&lt;/i&gt; beyond visit the site. All this happens in the background when WIA behaves appropriately.&lt;br /&gt;
&lt;h5&gt;&lt;/h5&gt;&lt;h5&gt;Request/Response 1&lt;/h5&gt;&lt;a href="http://lh4.ggpht.com/-A6xNJEXVGTw/TlSd7clilqI/AAAAAAAAAC0/2oo514OjKwc/s1600-h/Request15.png"&gt;&lt;img align="right" alt="Request1" border="0" height="49" src="http://lh5.ggpht.com/-H_wRAJjN_yI/TlSd7tCWQGI/AAAAAAAAAC4/hJv6o_x7__8/Request1_thumb3.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Request1" width="218" /&gt;&lt;/a&gt;&lt;br /&gt;
This is the first of a series of requests and responses to a web server that requires the user to authenticate via WIA (in this case, NTLM).&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-idJ0qOgoKZQ/TlSd7x0eo-I/AAAAAAAAAC8/yMHkVbcJumE/s1600-h/RequestResponse15.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img align="right" alt="RequestResponse1" border="0" height="304" src="http://lh4.ggpht.com/-i-q7hJg-wWM/TlSd8Nv_MSI/AAAAAAAAADA/FDt8c7QOSkA/RequestResponse1_thumb3.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="RequestResponse1" width="219" /&gt;&lt;/a&gt;The user types in the address of an end point they’re trying to visit (say &lt;a href="http://server:81/"&gt;http://server:81&lt;/a&gt;) and the browser sends the first request with the following request headers (request and response headers courtesy of &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt;). &lt;br /&gt;
The server looks at the request, notices that there’s no cookie or any kind of identity sent with it, and kindly tells the browser (401) that not just anyone can visit this URL. In the response headers, the web server asks the browser to establish the users identity using the NTLM protocol.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;h5&gt;&lt;/h5&gt;&lt;h5&gt;Request Response 2&lt;/h5&gt;This is the second and final request/response in the WIA handshake. Its of note that the user still hasn’t done or seen anything, s/he’s still waiting on the screen to load…&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-McAb-ONo_oY/TlSd8YJ_rFI/AAAAAAAAADE/tzCszLaCQAg/s1600-h/Request25.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img align="right" alt="Request2" border="0" height="50" src="http://lh3.ggpht.com/-eA6Y8_p2kFo/TlSd8hhg5iI/AAAAAAAAADI/bfzWXL1bIQc/Request2_thumb3.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Request2" width="222" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-uHrC4gvHxHE/TlSd8-2MLPI/AAAAAAAAADM/US1bDoJRKQA/s1600-h/RequestResponse25.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img align="right" alt="RequestResponse2" border="0" height="296" src="http://lh5.ggpht.com/-0Tz7l5N_7dQ/TlSd832hAMI/AAAAAAAAADQ/BPNj-tpxV-I/RequestResponse2_thumb3.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="RequestResponse2" width="222" /&gt;&lt;/a&gt;&lt;br /&gt;
The browser sends a 2nd request with the identity of the user according to the &lt;a href="http://en.wikipedia.org/wiki/NTLM"&gt;NTLM protocol&lt;/a&gt;. The server inspects the request, processes the NTLM response and decides that this user is indeed who s/he claims to be.&lt;br /&gt;
The server issues a response with a token that the client can use to identify themselves. &lt;br /&gt;
&lt;h5&gt;Request Response 3 (Not Shown)&lt;/h5&gt;Finally, the client makes the last request using the token just obtained, to identify themselves. The server authenticates them and hands back a cookie associating the user with a logged in session. The client is finally authenticated.&lt;br /&gt;
Its worth mentioning that this handshake takes place extremely quickly and the user is often none the wiser. All the user truly notices (if anything at all) is that the page they just requested recognizes who they are.&lt;br /&gt;
As mentioned earlier, when it works it offers a great user experience, but there’s a couple things that can get in the way.&lt;br /&gt;
&lt;h4&gt;Internet Explorer&lt;/h4&gt;Internet Explorer is the only browser that works with WIA “out of the box”. Any browser that supports the required authentication protocol (&lt;a href="http://en.wikipedia.org/wiki/NTLMSSP"&gt;NTLM&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Kerberos_%28protocol%29"&gt;Kerberos&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/SPNEGO"&gt;Negotiate&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Digest_access_authentication"&gt;Digest&lt;/a&gt;) can authenticate against the server, but there are some special conditions that need to exist.&lt;br /&gt;
For IE to send an encrypted identity over the wire, WIA has to be enabled (it is by default). You can check to see whether WIA is enabled under &lt;b&gt;Tools&lt;/b&gt;-&amp;gt; &lt;b&gt;Internet Options&lt;/b&gt;-&amp;gt;&lt;b&gt;Advanced Tab.&lt;/b&gt; &lt;br /&gt;
In addition to WIA being enabled, one of the following needs exist:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The site needs to be in the “Intranet Zone”. IE has a &lt;a href="http://support.microsoft.com/kb/303650"&gt;pretty simple test&lt;/a&gt; to verify this. Effectively it looks to see if there’s any periods/dots in the host name. For instance, &lt;a href="http://someserver/"&gt;http://someserver&lt;/a&gt; is in the intranet zone, but &lt;a href="http://someserver.fullyqualified.com/"&gt;http://someserver.fullyqualified.com&lt;/a&gt; however is not (even thought they may both resolve to the same IP. As a result any IP address (e.g. 192.168.132.155) also won’t be in the intranet zone either. &lt;/li&gt;
&lt;li&gt;If the site isn’t in the intranet zone, it needs to be a trusted site for IE to send the user’s identity over the wire w/out prompting. You can see/manage trusted sites by going to: Tools-&amp;gt;Internet Options-&amp;gt;Security-&amp;gt;Trusted Sites &lt;/li&gt;
&lt;/ul&gt;Once the above is handled (either access to the server takes place with a “intranet” URL, or its put in a trusted zone) WIA usually behaves itself pretty well.&lt;br /&gt;
&lt;h4&gt;FireFox&lt;/h4&gt;Firefox has no ideas of intranet zones like IE. If you want FireFox to trust a site and send over the user’s identity, you need to enlist the site as a trusted NTLM site (and ensure that NTLM is a usable protocol for WIA in IIS).&lt;br /&gt;
You do this by:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Opening FireFox &lt;/li&gt;
&lt;li&gt;Type “about:config” into the address bar &lt;/li&gt;
&lt;li&gt;Edit the &lt;a href="http://kb.mozillazine.org/Network.automatic-ntlm-auth.trusted-uris"&gt;Network.automatic-ntlm-auth.trusted-uris&lt;/a&gt; property and add the URL of the site you’d like to trust. You can enter multiple URLs delimited by commas. &lt;/li&gt;
&lt;/ul&gt;&lt;a href="http://lh4.ggpht.com/-ZqVlVKvkCqY/TlSd9NyLgVI/AAAAAAAAADU/9frtA0lDZto/s1600-h/Firefox-NTLM%25255B3%25255D.png"&gt;&lt;img alt="Firefox-NTLM" border="0" height="279" src="http://lh3.ggpht.com/-kd4AWt_sSxc/TlSd9XYdLRI/AAAAAAAAADY/VSzxVD-S6TU/Firefox-NTLM_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Firefox-NTLM" width="399" /&gt;&lt;/a&gt;&lt;br /&gt;
This browser should now be able to authenticate via NTLM.&lt;br /&gt;
&lt;h4&gt;Chrome&lt;/h4&gt;At the time of writing, Chrome doesn’t have have a way to seamlessly integrate with WIA (the current browser does support NTLM though). Unfortunately for the time being, Chrome users will always need to enter in their credentials.&lt;br /&gt;
&lt;h4&gt;Summary&lt;/h4&gt;Windows Integrated Authentication can be pretty slick in certain environments. While some if its protocols aren’t rock solid security wise, and many are proprietary, it provides one of the cheapest solutions for authentication that balances both maintenance and ease of use for the user.&lt;br /&gt;
My Best,   &lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OCH-kDkbnR8:9NgfX8xIbZQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OCH-kDkbnR8:9NgfX8xIbZQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OCH-kDkbnR8:9NgfX8xIbZQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OCH-kDkbnR8:9NgfX8xIbZQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OCH-kDkbnR8:9NgfX8xIbZQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OCH-kDkbnR8:9NgfX8xIbZQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OCH-kDkbnR8:9NgfX8xIbZQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OCH-kDkbnR8:9NgfX8xIbZQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/OCH-kDkbnR8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/5257191753920717828/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=5257191753920717828" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5257191753920717828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5257191753920717828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/OCH-kDkbnR8/convenient-yet-confusing-elements-of.html" title="Convenient, Yet Confusing Elements of Windows Integrated Authentication" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-H_wRAJjN_yI/TlSd7tCWQGI/AAAAAAAAAC4/hJv6o_x7__8/s72-c/Request1_thumb3.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/08/convenient-yet-confusing-elements-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFRnc6cSp7ImA9WhZaFE0.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-7257873951020237580</id><published>2011-06-29T21:01:00.001-07:00</published><updated>2011-06-29T21:01:57.919-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-29T21:01:57.919-07:00</app:edited><title>Troubleshooting Blue Screens</title><content type="html">&lt;h4&gt;How is that supposed to be helpful?&lt;/h4&gt;  &lt;p&gt;Anyone who’s used Windows long enough has eventually ran into the quintessential Microsoft error, the &lt;a href="http://en.wikipedia.org/wiki/Blue_Screen_of_Death"&gt;Blue Screen of Death&lt;/a&gt; (BSoD). Not that other operating systems don’t have their own versions, those that have played with their share Unix flavors know all to well about &lt;a href="http://en.wikipedia.org/wiki/Kernel_panic"&gt;kernel panic&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Nevertheless, someone usually needs to troubleshoot these, especially if you own the machine. The tricky thing about BSoDs is that they:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Can be hard to reproduce &lt;/li&gt;    &lt;li&gt;The error messages are seldom helpful &lt;/li&gt;    &lt;li&gt;Can be driver related OR hardware related &lt;/li&gt;    &lt;li&gt;Don’t always wait for user feedback before disappearing (sometimes the machine will restart right away depending on OS settings). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I recently did a new build at home. Latest gear. Full of promise. That is, until the machine (running Windows Server 2008 x64) started to BSoD when restoring sizeable databases (8 GB) on SQL Server 2008 R2 x64.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-3pwCCrqqiJ0/Tgv1LF-njcI/AAAAAAAAACc/pqAOnxe7fDQ/s1600-h/Blue%252520Screen%252520of%252520Death%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Blue Screen of Death" border="0" alt="Picture of blue screen while restoring database." align="right" src="http://lh5.ggpht.com/-Ul01GSZE6OE/Tgv1LvdvKRI/AAAAAAAAACg/hiNaze3BYnY/Blue%252520Screen%252520of%252520Death_thumb%25255B4%25255D.png?imgmax=800" width="244" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Even though the error messages themselves are usually useless, it still helps to see them (even the appearance of a useless error messages is evidence of failure). This isn’t always the default behavior with system faults in all versions of Windows. So for many, the first step is to acquire/witness the blue screen itself (instead of your system sitting at a login prompt, when 30 min ago it was restoring a database).&lt;/p&gt;  &lt;h4&gt;Disabling Automatic Restart&lt;/h4&gt;  &lt;p&gt;First ensure that you’ve disabled the Automatic Restart checkbox in Startup and Recovery. This is typically found in:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;System Properties (&lt;strong&gt;Control Panel&lt;/strong&gt;-&amp;gt;&lt;strong&gt;System&lt;/strong&gt;) &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Advanced System Settings&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Click on the &lt;strong&gt;Advanced&lt;/strong&gt; tab. &lt;/li&gt;    &lt;li&gt;Click on &lt;strong&gt;Settings&lt;/strong&gt; under the Startup and Recovery section. &lt;/li&gt;    &lt;li&gt;Ensure that the &lt;strong&gt;Automatically restart&lt;/strong&gt; checkbox is unchecked and its usually not a bad idea to &lt;strong&gt;Write an event to the system log&lt;/strong&gt; (checked).&lt;a href="http://lh3.ggpht.com/-GYwM8mrBqVM/Tgv1MID3H8I/AAAAAAAAACk/lce31hm84Ik/s1600-h/Startup%252520and%252520Recovery%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Startup and Recovery" border="0" alt="Click on Settings under Startup and Recovery" align="left" src="http://lh4.ggpht.com/-R5SvyVAHV20/Tgv1MuHm8WI/AAAAAAAAACo/_m14c257SDU/Startup%252520and%252520Recovery_thumb%25255B1%25255D.png?imgmax=800" width="169" height="191" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/-QpIXJjNpOB0/Tgv1M31CxAI/AAAAAAAAACs/dhWWYVLSfWA/s1600-h/Automatically%252520Restart%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px auto 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Automatically Restart" border="0" alt="Automatically Restart" src="http://lh5.ggpht.com/-oSmagJfAhWM/Tgv1NJnJSMI/AAAAAAAAACw/YfKvZH31SD0/Automatically%252520Restart_thumb%25255B3%25255D.png?imgmax=800" width="152" height="190" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Reproducing the Error and Narrowing the Field&lt;/h4&gt;  &lt;p&gt;If you’re like 99% of users, you can’t infer what the problem is from a BSoD error or analyze a memory dump. If that’s the case, the next steps are reproducing the error, and trying to figure out root cause.&lt;/p&gt;  &lt;p&gt;If you can’t easily reproduce the error (or if it’s a new build), then all your components are suspect. It could be anything from hard drive, to your video card. If you’ve recently installed new hardware or drivers, those are likely the culprit.&lt;/p&gt;  &lt;p&gt;For testing many components at once I’d suggest a product like &lt;a href="http://www.passmark.com/products/bit.htm"&gt;PassMark’s Burn In Test&lt;/a&gt;, a tool we used to use back in my tech days. There are many similar products available (assuming you have a preference), essentially you just want to be able to selectively test many components at once and get either a:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;BSoD (in which case you reduce the number of components you’re testing until you isolate the culprit) &lt;/li&gt;    &lt;li&gt;A fail from the testing software which will usually tell you what component is causing the trouble &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The next step (once the component is identified) is either:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Replacing drivers for that component, or failing that &lt;/li&gt;    &lt;li&gt;Replacing the component all together (hopefully its not something that’s integrated into your motherboard) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Lather, rinse, repeat. That is, after you’ve identified (what you think is) the issue, and either swapped out a component or device driver, you need to run the tests again to see if you’ve actually improved anything. Once the errors start going away you can start to have some confidence in your fix.&lt;/p&gt;  &lt;h4&gt;Resolution &lt;/h4&gt;  &lt;p&gt;These take time. Running a full burn in test alone usually takes 20 min. In my case, my issue ended up being a faulty hot swap bay, which is unfortunate because its likely the last device you’d suspect. More often than not, its memory, a video card, or some other kind of removable component. Assuming you can’t narrow it down, power supplies can also be suspect.&lt;/p&gt;  &lt;p&gt;Hardware’s great, especially when it works. But with increasingly complex computers these days, DOA’s and semi faulty components seem to be more common. Ideally this saves someone some out there some time, or even better, a tech bill.&lt;/p&gt;  &lt;p&gt;My Best,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Pi-zCfeZ-hg:NoLI0ytpXD8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Pi-zCfeZ-hg:NoLI0ytpXD8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Pi-zCfeZ-hg:NoLI0ytpXD8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Pi-zCfeZ-hg:NoLI0ytpXD8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Pi-zCfeZ-hg:NoLI0ytpXD8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Pi-zCfeZ-hg:NoLI0ytpXD8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Pi-zCfeZ-hg:NoLI0ytpXD8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Pi-zCfeZ-hg:NoLI0ytpXD8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/Pi-zCfeZ-hg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/7257873951020237580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=7257873951020237580" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7257873951020237580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7257873951020237580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/Pi-zCfeZ-hg/troubleshooting-blue-screens.html" title="Troubleshooting Blue Screens" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Ul01GSZE6OE/Tgv1LvdvKRI/AAAAAAAAACg/hiNaze3BYnY/s72-c/Blue%252520Screen%252520of%252520Death_thumb%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/06/troubleshooting-blue-screens.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIGRX8zeyp7ImA9WhZWFU8.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-5911840842310415090</id><published>2011-05-15T23:32:00.001-07:00</published><updated>2011-05-15T23:32:04.183-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-15T23:32:04.183-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Health Analyzer" /><title>SharePoint Health Rules Modifying Your Web.Config</title><content type="html">&lt;h4&gt;Is That a Web.Config Ninja?&lt;/h4&gt;  &lt;p&gt;One of the new feature in SharePoint 2010 is the &lt;a href="http://msdn.microsoft.com/en-us/library/ee534957.aspx"&gt;Health Analyzer&lt;/a&gt;. At its core, it’s a set of rules that perform checks and/or repairs executed by timer jobs. When a rule executes, the output gets rolled up into a Health Analyzer Report that helps inform SharePoint Administrators about any potential issues with their farm configuration.&lt;/p&gt;  &lt;p&gt;Even if you don’t have any interest in Health Rules/Reports, its something you should know about. The rules (including those that ship out of the box) don’t all just harass you into maintaining a cleaner farm, some of them actually “correct” possible issues without asking first. Having a series of timer jobs that can modify your farm adds complexity, and you should know what possible modifications can be made while you’re off the clock.&lt;/p&gt;  &lt;p&gt;If you’re curious as to where these rules live, they can be found in the Central Administration site under &lt;strong&gt;Monitoring&lt;/strong&gt;-&amp;gt;&lt;strong&gt;Review Rule Definitions&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_1fgwbJk7Clg/TdDE3rZ0hrI/AAAAAAAAACM/rCDYDk3jrZY/s1600-h/Health%20Analyzer%5B6%5D.png"&gt;&lt;img style="display: inline" title="Health Analyzer Rule Definitions" alt="Central Administration Health Rule Definitions" src="http://lh5.ggpht.com/_1fgwbJk7Clg/TdDE38FZCFI/AAAAAAAAACQ/s4hrNTzyDIw/Health%20Analyzer_thumb%5B4%5D.png?imgmax=800" width="517" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Case In Point&lt;/h4&gt;  &lt;p&gt;In a recent engagement we were using the stock ASP.NET Membership Provider for user management (for FBA accounts) in a Claims Based Authentication site. It became important to be able to decrypt users password for retrieval which meant that we had to modify the encryption/decryption settings. For the stock provider, these are housed in the &amp;lt;machineKey&amp;gt; setting in the web.config.&lt;/p&gt;  &lt;p&gt;Then things got weird.&lt;/p&gt;  &lt;p&gt;Across many of our machines, the settings kept getting rolled back. Every night at 12:00am (midnight) parts of the web.config would get reverted to the old machine key settings. It got to the point where we were considering making the web.config read only.&lt;/p&gt;  &lt;p&gt;Then we did some snooping around and found out about a particular Health Rule that takes syncing web.config files pretty seriously. There’s one in particular called &lt;strong&gt;Web.config Files are not identical on all machines in the farm&lt;/strong&gt; which out of the box will &lt;strong&gt;repair automatically&lt;/strong&gt;. This can be a huge help if your web.config settings have unintentionally fallen out of sync, but if its rolling back intentional changes, then its downright troublesome.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1fgwbJk7Clg/TdDE4SIahjI/AAAAAAAAACU/4OuT3UZ8NrY/s1600-h/Web.Config%20Rule%5B4%5D.png"&gt;&lt;img style="display: inline" title="Web.config health check rule." alt="Web.config files are not identical on all machines in the farm." src="http://lh6.ggpht.com/_1fgwbJk7Clg/TdDE4wFaiYI/AAAAAAAAACY/C25J-IhOxNU/Web.Config%20Rule_thumb%5B2%5D.png?imgmax=800" width="529" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There’s nothing wrong with this rule per se, but if you ever find yourself having similar issues, I’d recommend unchecking the &lt;strong&gt;Repair Automatically&lt;/strong&gt; check box. This will hopefully help you both find closure, and move on to the next SharePoint woe in your life. Hope it helps someone.&lt;/p&gt;  &lt;p&gt;My Best,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=waQJaCz0Qjs:tLuC5NCpvr8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=waQJaCz0Qjs:tLuC5NCpvr8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=waQJaCz0Qjs:tLuC5NCpvr8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=waQJaCz0Qjs:tLuC5NCpvr8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=waQJaCz0Qjs:tLuC5NCpvr8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=waQJaCz0Qjs:tLuC5NCpvr8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=waQJaCz0Qjs:tLuC5NCpvr8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=waQJaCz0Qjs:tLuC5NCpvr8:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/waQJaCz0Qjs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/5911840842310415090/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=5911840842310415090" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5911840842310415090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5911840842310415090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/waQJaCz0Qjs/sharepoint-health-rules-modifying-your.html" title="SharePoint Health Rules Modifying Your Web.Config" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1fgwbJk7Clg/TdDE38FZCFI/AAAAAAAAACQ/s4hrNTzyDIw/s72-c/Health%20Analyzer_thumb%5B4%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/05/sharepoint-health-rules-modifying-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8DSXw-eSp7ImA9WhZQEEU.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-6059077227618471240</id><published>2011-04-17T16:49:00.001-07:00</published><updated>2011-04-17T17:01:18.251-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-17T17:01:18.251-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="SPMetal" /><category scheme="http://www.blogger.com/atom/ns#" term="Linq To SharePoint" /><title>Access Denied With Linq to SharePoint (SPMetal)</title><content type="html">&lt;h4&gt;Access Denied&lt;/h4&gt;SPMetal (Linq to SharePoint) is kind of a mixed bag. On one had it’s great addition to what used to be a very anemic toolset for SharePoint. On the other hand it has some pretty remarkable shortcomings that aren’t really advertised all that well in the documentation.&lt;br /&gt;
Two of the more notable ones:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No support for anonymous users (at least at the time of writing) &lt;/li&gt;
&lt;li&gt;No support for RunWithElevatedPrivileges &lt;/li&gt;
&lt;/ul&gt;These two shortcomings are actually very intimately related. If you’re using SPMetal (Linq to SharePoint) and you find that code in&lt;a href="http://lh3.ggpht.com/_1fgwbJk7Clg/Tat8h6PoA-I/AAAAAAAAAB8/OmE53ZcrAdo/s1600-h/AccessDenied%5B5%5D.png"&gt;&lt;img align="right" alt="Access Denied when trying to RunWithElevatedPrivileges" border="0" height="113" src="http://lh3.ggpht.com/_1fgwbJk7Clg/Tat8iO9DPVI/AAAAAAAAACA/NOe0FDjvJgc/AccessDenied_thumb%5B1%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Access Denied when trying to RunWithElevatedPrivileges" width="244" /&gt;&lt;/a&gt; RunWithElevatedPrivileges still yields Access Denied errors (or doesn’t seem to run in any kind of elevated context) you’ve potentially encountered a very awkward shortcoming of SPMetal.&lt;br /&gt;
The good news is that there are some very functional workarounds to these issues but for you to troubleshoot these (and discern where they’re appropriate) it helps to know why these errors happen.&lt;br /&gt;
&lt;h4&gt;What’s Going On?&lt;/h4&gt;For those who have worked with RunWithElevatedPrivileges before you know that certain “shapes” of code don’t work. An example of this would be running some code with RunWithElevatedPrivileges context but then using an object you’d previously created outside the elevated context. Here are two examples of RunRunWithElevatedPrivileges, one which still throws an Access Denied and another that works.&lt;br /&gt;
The astute observer will recognize that the below will throw an Access Denied error &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: green;"&gt;//Doesn't work, still yields access denied.&lt;/span&gt;
SPSecurity.RunWithElevatedPrivileges(&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;()
{
&lt;span style="color: blue;"&gt;  using&lt;/span&gt; (SPSite site = SPContext.Current.Site)
  {
&lt;span style="color: blue;"&gt;    using&lt;/span&gt; (SPWeb web = site.RootWeb)
    {
      web.AllowUnsafeUpdates = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;
      SPList list = web.Lists[&lt;span style="color: #006080;"&gt;"ListName"&lt;/span&gt;];
      SPListItem item = list.AddItem();
      item[&lt;span style="color: #006080;"&gt;"Property"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"Property Value"&lt;/span&gt;;
      item.Update();
    }
  }
});&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
The reason the above fails is that the SPContext.Current.Site gets created relatively early in the request lifecycle. By the time you call it from some page/webpart/etc… the SPSite object has long since been constructed, and at the time the SPSite WAS constructed, the application was NOT running in a RunWithElevatedPrivileges security context.&lt;br /&gt;
&lt;br /&gt;
The below DOES work since a new SPSite (and all other objects) are created in the RunWithElevatedPrivileges security context.&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: green;"&gt;//Works because the SPSite, SPWeb etc... are created in the new elevated security context.&lt;/span&gt;
SPSecurity.RunWithElevatedPrivileges(&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;()
{
&lt;span style="color: blue;"&gt;  using&lt;/span&gt; (SPSite site = &lt;span style="color: blue;"&gt;new&lt;/span&gt; SPSite(&lt;span style="color: #006080;"&gt;"http://servername"&lt;/span&gt;))
  {
&lt;span style="color: blue;"&gt;    using&lt;/span&gt; (SPWeb web = site.RootWeb)
    {
      web.AllowUnsafeUpdates = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;
      SPList list = web.Lists[&lt;span style="color: #006080;"&gt;"ListName"&lt;/span&gt;];
      SPListItem item = list.AddItem();
      item[&lt;span style="color: #006080;"&gt;"Property"&lt;/span&gt;] = &lt;span style="color: #006080;"&gt;"Property Value"&lt;/span&gt;;
      item.Update();
    }
  }
});&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
The moral of the story is that objects you’re working with need to be recreated within your RunWithElevatedPrivileges code block.&lt;br /&gt;
&lt;h4&gt;The Problem with SPMetal&lt;/h4&gt;The two problems we kicked off this post with:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No support for anonymous users (at least at the time of writing) &lt;/li&gt;
&lt;li&gt;No support for RunWithElevatedPrivileges &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Actually stem from the same class of problem as the incorrect “shape” of code shown in the RunWithElevatedPrivileges example above. When the Linq to SharePoint Provider goes to create a connection to the given SPSite/SPWeb, it’ll take the current SPSite object out of the SPContext.Current context. The problem with this is that there’s no (easy) way to have that SPSite object constructed with an elevated security context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here’s a look at the reflected code.&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_1fgwbJk7Clg/Tat8ilk3h3I/AAAAAAAAACE/yWFn7WKg1_g/s1600-h/SPServerDataConnection.png%5B16%5D.png"&gt;&lt;img alt="SPServerDataConnection.png" border="0" height="392" src="http://lh5.ggpht.com/_1fgwbJk7Clg/Tat8i3E-JtI/AAAAAAAAACI/buJ8Kym0qrs/SPServerDataConnection.png_thumb%5B14%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SPServerDataConnection.png" width="524" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The solution that &lt;a href="http://jcapka.blogspot.com/2010/05/making-linq-to-sharepoint-work-for.html"&gt;most people have taken for the anonymous access&lt;/a&gt; issues also works for the RunWithElevatedPrivileges issues.&lt;br /&gt;
&lt;br /&gt;
The trick is to set the HttpContext to null temporarily just prior to creating creating the DataContext in a RunWithElevatedPrivileges block. This bullies the Linq to SharePoint provider into creating a new SPSite, and this one is created with the correct context.&lt;br /&gt;
&lt;br /&gt;
Below is a helper method which follows the RunWithElevatdPrivileges pattern which allows you to create a DataContext that will indeed run with elevated privileges.&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: green;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Runs with elevated priviledges after setting the HttpContext temporarily to null prior to doing so. This allows linq to sql &lt;/span&gt;
&lt;span style="color: green;"&gt;/// to create a DataContextManager based on the RunWithElevatedCredential (farm account) instead of the current user.&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Otherwise the linq2sql DataContextManager would take its SPSite off of the SPContext.Current.Site which is already cached&lt;/span&gt;
&lt;span style="color: green;"&gt;/// with the priviledges of the current user.&lt;/span&gt;
&lt;span style="color: green;"&gt;/// &lt;/span&gt;
&lt;span style="color: green;"&gt;/// NOTE: This should ONLY BE CALLED by code creating Linq to SharePoint SharePointDataContexts. It's also of note that any&lt;/span&gt;
&lt;span style="color: green;"&gt;/// SharePointDataContext created using this code WILL BE ABLE TO DO ANYTHING the farm account can.&lt;/span&gt;
&lt;span style="color: green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RunWithElevatedPrivilegesAndContextSwitch(SPSecurity.CodeToRunElevated secureCode)
{
  HttpContext backupContext = HttpContext.Current;

  HttpContext.Current = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;
  SPSecurity.RunWithElevatedPrivileges(secureCode);

  HttpContext.Current = backupContext;
}&lt;/pre&gt;&lt;/div&gt;Usage might look something like the following:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;SharePointDataContext context = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;
&lt;span style="color: blue;"&gt;string&lt;/span&gt; url = SharePointHelper.WebApplicationRoot;

RunWithElevatedPrivilegesAndContextSwitch(&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;()
{
  context = &lt;span style="color: blue;"&gt;new&lt;/span&gt; SharePointDataContext(url);
});

&lt;span style="color: green;"&gt;//Do something you normally wouldn’t be able to with this elevated linq to SharePoint context.&lt;/span&gt;
List&amp;lt;ListName&amp;gt; items = context.ListName.ToList();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
It’s worth mentioning that if your data access is consolidated in to a formal data access layer you may need to centralize this kind of code so that it doesn’t get placed all over the site, but above is the central idea behind getting Linq to Sharepoint DataContexts to run with Farm Account privileged access.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I hope the above makes sense, and helps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My Best,&lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=DHFS2WwhRzA:Gi-doQm3kNg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=DHFS2WwhRzA:Gi-doQm3kNg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=DHFS2WwhRzA:Gi-doQm3kNg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=DHFS2WwhRzA:Gi-doQm3kNg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=DHFS2WwhRzA:Gi-doQm3kNg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=DHFS2WwhRzA:Gi-doQm3kNg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=DHFS2WwhRzA:Gi-doQm3kNg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=DHFS2WwhRzA:Gi-doQm3kNg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/DHFS2WwhRzA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/6059077227618471240/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=6059077227618471240" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6059077227618471240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6059077227618471240?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/DHFS2WwhRzA/access-denied-with-linq-to-sharepoint.html" title="Access Denied With Linq to SharePoint (SPMetal)" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_1fgwbJk7Clg/Tat8iO9DPVI/AAAAAAAAACA/NOe0FDjvJgc/s72-c/AccessDenied_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/04/access-denied-with-linq-to-sharepoint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcMQ3s8eCp7ImA9WhZTFE0.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-1625129878064295068</id><published>2011-03-16T00:25:00.000-07:00</published><updated>2011-03-17T15:48:02.570-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-17T15:48:02.570-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="FBA" /><title>Awkward Usernames Courtesy of Claims Authentication (FBA)</title><content type="html">&lt;h4&gt;Who’s i:0#.f|membership_providerName|userName?&lt;/h4&gt;If you’re one of the many people who have &lt;a href="http://blog.summitcloud.com/2009/11/forms-based-authentication-sharepoint-2010-fb/"&gt;set up Forms Based Authentication in SharePoint 2010&lt;/a&gt;, you’ve likely enjoyed dealing with the awkward usernames that can come with claims authentication and FBA (Forms Based Authentication).&lt;br /&gt;
In a recent engagement, we’d provisioned an ASP.NET Membership schema (aspnet_regsql.exe), populated it with a stock SQLMembershipProvider and then added the users to the site collection using the &lt;b&gt;Site Settings&lt;/b&gt;-&amp;gt;&lt;b&gt;People and Groups&lt;/b&gt; screens.&lt;br /&gt;
What we ended up with, were a lot of SPUsers with "unfriendly" SPUser.Name properties set. Since the Name field wasn’t assigned it ended up getting set to the equivalent of the SPUser.LoginName property which looks a lot like:&lt;br /&gt;
&lt;div class="code"&gt;i:0#.f|fba|administrator &lt;/div&gt;The problem with leaving these cryptic display names in their native format is that they can seep all over a farm. Not only will they show up in stock SharePoint controls that display user names, but those same display names will also start to show up in other service applications like search.&lt;br /&gt;
There's also the fact that your users will likely ask you to set them to something more sensible.&lt;br /&gt;
&lt;h4&gt;Resting the SPUser.DisplayName Property&lt;/h4&gt;Assuming you have some other name that you’d prefer instead of the awkward native claims format, you can explicitly set these display names by using either PowerShell or the stock SharePoint API.&lt;br /&gt;
Below are two examples, both involve you iterating over everyone in the authentication store (think SQL, LDAP, AD, etc…) and updating the SPUser.Display/Name property after fetching the SPUser out of the site collection. See below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;PowerShell&lt;/strong&gt;&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;$user = Get-SPUser -Web &lt;span style="color: #006080;"&gt;"http://wss2k10tholmes:81"&lt;/span&gt; -Identity &lt;span style="color: #006080;"&gt;"i:0#.f|providerName|userName"&lt;/span&gt;
$user.DisplayName = &lt;span style="color: #006080;"&gt;"FriendlyName"&lt;/span&gt;;
$user.Update();&lt;/pre&gt;&lt;/div&gt;&lt;strong&gt;C# (API)&lt;/strong&gt;&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;span class="Apple-style-span" style="color: green; white-space: pre;"&gt;//We use ensure so that the given user will be added if they don't exist. They need to be resolved&lt;/span&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin-bottom: 0em; margin-left: 0em; margin-right: 0em; margin-top: 0em; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: green;"&gt;//via their claims name.&lt;/span&gt;
SPUser spUser = web.EnsureUser(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080;"&gt;"i:0#.f|providerName|{0}"&lt;/span&gt;, fbaUser.UserName));
spUser.Name = &lt;span style="color: #006080;"&gt;"FriendlyName"&lt;/span&gt;;
spUser.Update();&lt;/pre&gt;&lt;/div&gt;&lt;h4&gt;Alternatives&lt;/h4&gt;You don’t necessarily need to go through the API or PowerShell, if you have a connection to an LDAP store or a BCS connection to your auth store. You can also map the properties yourself and leave it to the User Profile Synchronization service. That being said, if you’re&amp;nbsp;dependent&amp;nbsp;on BCS then you’ll also need to have SharePoint Enterprise Server license which isn’t available to all customers.&lt;br /&gt;
Once you’re done you should be&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_1fgwbJk7Clg/TYG3dH-22DI/AAAAAAAAABw/vy4i1ejNgpI/s1600-h/Administrator%20Claims%20FBA%20username%5B3%5D.png"&gt;&lt;img align="right" alt="Administrator Claims FBA username" border="0" height="64" src="http://lh3.ggpht.com/_1fgwbJk7Clg/TYG3dowP1kI/AAAAAAAAAB0/bhByGz5Lk_A/Administrator%20Claims%20FBA%20username_thumb%5B1%5D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Administrator Claims FBA username" width="260" /&gt;&lt;/a&gt; able to visit any of the users in your site collection and see their “Name” property set to something that is less likely to confuse your user base. Once the value is set, it helps to make sure that it doesn’t get&amp;nbsp;stomped&amp;nbsp;with any User Profile Synchronization (UPS) that may be in place in your farm.&lt;br /&gt;
&lt;br /&gt;
Hope that Helps,&lt;br /&gt;
&lt;br /&gt;
Tyler&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OpyTUzNwZRE:EjxVqeslBIw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OpyTUzNwZRE:EjxVqeslBIw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OpyTUzNwZRE:EjxVqeslBIw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OpyTUzNwZRE:EjxVqeslBIw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OpyTUzNwZRE:EjxVqeslBIw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OpyTUzNwZRE:EjxVqeslBIw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OpyTUzNwZRE:EjxVqeslBIw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OpyTUzNwZRE:EjxVqeslBIw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/OpyTUzNwZRE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/1625129878064295068/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=1625129878064295068" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1625129878064295068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1625129878064295068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/OpyTUzNwZRE/awkward-usernames-courtesy-of-claims.html" title="Awkward Usernames Courtesy of Claims Authentication (FBA)" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_1fgwbJk7Clg/TYG3dowP1kI/AAAAAAAAAB0/bhByGz5Lk_A/s72-c/Administrator%20Claims%20FBA%20username_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/03/awkward-usernames-courtesy-of-claims.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4MRno5eip7ImA9Wx9WF04.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-8429609999077888166</id><published>2011-01-22T13:48:00.001-08:00</published><updated>2011-01-22T13:49:47.422-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-22T13:49:47.422-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Stong Name" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><title>Getting a Public Key Blob From 3rd Party Assemblies</title><content type="html">&lt;h4&gt;The Return of Code Access Security&lt;/h4&gt;  &lt;p&gt;Working with SharePoint sometimes takes you to some pretty weird places. &lt;a href="http://lh3.ggpht.com/_1fgwbJk7Clg/TTtQzgVZ7yI/AAAAAAAAABk/1vICH1JPjyo/s1600-h/images%5B6%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Code Access Security" border="0" alt="Code Access Security" align="right" src="http://lh5.ggpht.com/_1fgwbJk7Clg/TTtQ0HFd40I/AAAAAAAAABo/0vYecYbl3tU/images_thumb%5B4%5D.jpg?imgmax=800" width="260" height="310" /&gt;&lt;/a&gt;There’s a lot of .NET’s surface area that I’m pretty sure I’d never have explored on my own if I hadn’t been tasked to do so via some SharePoint engagement.&lt;/p&gt;  &lt;p&gt;One of these explorations has involved authoring &lt;a href="http://blog.tylerholmes.com/2008/11/creating-custom-cas-policy-file-for.html"&gt;custom CAS policies&lt;/a&gt;, the &lt;a href="http://blog.tylerholmes.com/2008/10/don-set-your-sharepoint-app-to-full.html"&gt;reasons for which&lt;/a&gt; I’ve &lt;a href="http://blog.tylerholmes.com/2008/11/creating-custom-cas-policy-file-for.html"&gt;blogged about in the past&lt;/a&gt;. Granted with the advent of SharePoint 2010 and &lt;a href="http://msdn.microsoft.com/en-us/library/ee539083.aspx"&gt;sandboxed solutions&lt;/a&gt; it’s not as common a task these days, but it still comes up.&lt;/p&gt;  &lt;p&gt;When authoring a custom CAS policy you’re taxed with obtaining the Public Key Blob from a &lt;a href="http://en.wikipedia.org/wiki/Strong_key"&gt;Strong Name Key&lt;/a&gt;. This helps the .NET runtime identify assemblies (via their Strong Name) that you’d like to run with a particular &lt;a href="http://msdn.microsoft.com/en-us/library/930b76w0%28v=vs.71%29.aspx"&gt;code access security&lt;/a&gt; profile.&lt;/p&gt;  &lt;p&gt;Now obtaining a public key blob is pretty straight forward if you have the .snk, but it gets a little more awkward if all you have is some 3rd party assembly. This is often the case when you want 3rd parties assembly (for us it was a bunch of Telerik Controls) to run in full trust. After all you don’t have their key and they’re super unlikely to give it to you.&lt;/p&gt;  &lt;h4&gt;Getting a Public Key Blob from a 3rd Party Assembly&lt;/h4&gt;  &lt;p&gt;1) First open up the Visual Studio Command Prompt (or optionally any command prompt, but have access to sn.exe which is typically found in Visual Studio’s SDK-&amp;gt;BIN folder).&lt;/p&gt;  &lt;p&gt;2) Run the following command:&lt;/p&gt;  &lt;div class="code"&gt;sn -e [ThirdPartyAssembly.dll] publicKey.snk &lt;/div&gt;  &lt;p&gt;This extracts the public key (and public key blob) into a file.&lt;/p&gt;  &lt;p&gt;3) Then run:&lt;/p&gt;  &lt;div class="code"&gt;sn -tp publicKey.snk&lt;/div&gt;  &lt;p&gt;Which should display the public key blob and public key token (the blob is the long one).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1fgwbJk7Clg/TTtQjuMkqeI/AAAAAAAAABc/_87cM3Bbxto/s1600-h/PublicKeyBlob%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Public Key Blob" border="0" alt="Public Key Blob" src="http://lh4.ggpht.com/_1fgwbJk7Clg/TTtQj6r1KMI/AAAAAAAAABg/oLdpzaCxoAo/PublicKeyBlob_thumb%5B1%5D.png?imgmax=800" width="525" height="267" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point you can throw it in your &lt;a href="http://blog.tylerholmes.com/2008/11/creating-custom-cas-policy-file-for.html"&gt;own custom CAS file&lt;/a&gt; or resume whatever would make you seek out these awkward little strings in the first place.&lt;/p&gt;  &lt;p&gt;Hope that helps. Had stare at the sn.exe docs for a good 10 minutes to find this and the web wasn’t all that helpful.&lt;/p&gt;  &lt;p&gt;Happy CASing,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Z8yX5u654PE:GIREPh8WWKU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Z8yX5u654PE:GIREPh8WWKU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Z8yX5u654PE:GIREPh8WWKU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Z8yX5u654PE:GIREPh8WWKU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Z8yX5u654PE:GIREPh8WWKU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Z8yX5u654PE:GIREPh8WWKU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=Z8yX5u654PE:GIREPh8WWKU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=Z8yX5u654PE:GIREPh8WWKU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/Z8yX5u654PE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/8429609999077888166/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=8429609999077888166" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/8429609999077888166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/8429609999077888166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/Z8yX5u654PE/getting-public-key-blob-from-3rd-party.html" title="Getting a Public Key Blob From 3rd Party Assemblies" /><author><name>Tyler Holmes</name><uri>http://www.blogger.com/profile/17433652947830098796</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://4.bp.blogspot.com/_1fgwbJk7Clg/TLYBwzTYpLI/AAAAAAAAAAM/V36n7Dinl2s/S220/%5BMugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1fgwbJk7Clg/TTtQ0HFd40I/AAAAAAAAABo/0vYecYbl3tU/s72-c/images_thumb%5B4%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2011/01/getting-public-key-blob-from-3rd-party.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8GRHo-eyp7ImA9WxJXFU4.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-5308327162098234834</id><published>2009-06-09T00:33:00.001-07:00</published><updated>2009-06-09T00:33:45.453-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-09T00:33:45.453-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>Free Last Modified By/Date From SharePoint</title><content type="html">&lt;h4&gt;Who Responsible For This Edit!?&lt;/h4&gt;  &lt;p&gt;With the exception of politicians, most people are in favor of accountability. When it comes to web content management, I'd be the first to agree.&lt;/p&gt;  &lt;p&gt;In this post we're going to go over how to get free &lt;strong&gt;Last Modified By&lt;/strong&gt; and &lt;strong&gt;Last Modified Date &lt;/strong&gt;fields on content pages by modifying either select page layouts or master pages. The end product will look like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_x_KlQTLtnfI/Si4QVUM7_hI/AAAAAAAAA7I/mai-vFjs8Z8/s1600-h/2009-06-08%2023.19.16%5B3%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="108" alt="Last Modified By/Last Modified Date from SharePoint" src="http://lh6.ggpht.com/_x_KlQTLtnfI/Si4QVpNFi0I/AAAAAAAAA7M/bRJsriovFYI/2009-06-08%2023.19.16_thumb%5B1%5D.gif?imgmax=800" width="378" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;What We're Using&lt;/h4&gt;  &lt;p&gt;We'll be keying off two base fields (Modified, and Modified By) that you can expect to find on pretty much any list you'll ever work with. To prove to you I'm not making things up, feel free to look up the fields yourself (and a tonne of other useful fields) by using &lt;a href="http://blog.mondosoft.com/ontolica/archive/2007/02/15/SharePoint-Explorer-for-WSS3.aspx"&gt;SharePoint Explorer for WSS v3&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_x_KlQTLtnfI/Si4QV2zISwI/AAAAAAAAA7Q/Pi4B193ilt8/s1600-h/2009-06-08%2023.54.08%5B10%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="Modified and Modified By fields displayed in SharePoint Explorer." src="http://lh4.ggpht.com/_x_KlQTLtnfI/Si4QWHFBSKI/AAAAAAAAA7U/E5MUr9_EYNg/2009-06-08%2023.54.08_thumb%5B6%5D.gif?imgmax=800" width="528" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Easy Win&lt;/h4&gt;  &lt;p&gt;Once you find out the names of the fields and their type, the markup to get at these fields is pretty straight forward. We use out of the box SharePoint SPField controls to pull and format the field values. It's of note that we put the ControlMode property to &amp;quot;Display&amp;quot; since we never want these fields to be editable.&lt;/p&gt;  &lt;div class="code"&gt;Last modified at:    &lt;br /&gt;&amp;lt;%@ Register Tagprefix=&amp;quot;SharePointWebControls&amp;quot; Namespace=&amp;quot;Microsoft.SharePoint.WebControls&amp;quot; Assembly=&amp;quot;Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt;     &lt;br /&gt;...     &lt;br /&gt;&amp;lt;SharePointWebControls:DateTimeField FieldName=&amp;quot;Modified&amp;quot; runat=&amp;quot;server&amp;quot; ControlMode=&amp;quot;Display&amp;quot;/&amp;gt;by     &lt;br /&gt;&amp;lt;SharePointWebControls:UserField FieldName=&amp;quot;Modified By&amp;quot; runat=&amp;quot;server&amp;quot; ControlMode=&amp;quot;Display&amp;quot; /&amp;gt;&lt;/div&gt;  &lt;p&gt;That's pretty much it, throw the above markup into any page layout or master page and you're pretty much done.&lt;/p&gt;  &lt;h4&gt;But Wait There's More&lt;/h4&gt;  &lt;p&gt;I'd hate it if you left this post thinking all you'd learned about were two lousy fields and how to display them on a page. There's a tonne of fields that are worth exploring and could potentially add value to your next SharePoint related application. &lt;/p&gt;  &lt;p&gt;Example 1: ETL developers could make use of the &lt;strong&gt;Created/Created By/Modified/Modified By&lt;/strong&gt; fields to perform &lt;a href="http://en.wikipedia.org/wiki/Extract,_transform,_load"&gt;incremental loads&lt;/a&gt; when pulling data from the SharePoint object model.&lt;/p&gt;  &lt;p&gt;Example 2: UI Developers could use the &lt;strong&gt;Comments &lt;/strong&gt;and &lt;strong&gt;Version&lt;/strong&gt; fields to display the current version and any comments associated with the current version.&lt;/p&gt;  &lt;p&gt;The point is that there is yet another lever here to help you get the most functionality out of your next SharePoint related application. Best of all, it's dead simple and doesn't involve a single line of code.&lt;/p&gt;  &lt;p&gt;Best,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=29nu0ukmXA0:Zmz_e56BZ9c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=29nu0ukmXA0:Zmz_e56BZ9c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=29nu0ukmXA0:Zmz_e56BZ9c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=29nu0ukmXA0:Zmz_e56BZ9c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=29nu0ukmXA0:Zmz_e56BZ9c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=29nu0ukmXA0:Zmz_e56BZ9c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=29nu0ukmXA0:Zmz_e56BZ9c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=29nu0ukmXA0:Zmz_e56BZ9c:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/29nu0ukmXA0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/5308327162098234834/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=5308327162098234834" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5308327162098234834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/5308327162098234834?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/29nu0ukmXA0/free-last-modified-bydate-from.html" title="Free Last Modified By/Date From SharePoint" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_x_KlQTLtnfI/Si4QVpNFi0I/AAAAAAAAA7M/bRJsriovFYI/s72-c/2009-06-08%2023.19.16_thumb%5B1%5D.gif?imgmax=800" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/06/free-last-modified-bydate-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMNQ3s7eyp7ImA9WxVaGU8.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-4618077391504636643</id><published>2009-04-10T19:52:00.001-07:00</published><updated>2009-04-16T15:54:52.503-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-16T15:54:52.503-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><title>CSS Selector Collisions</title><content type="html">&lt;h4&gt;Thick Competition&lt;/h4&gt;&lt;p&gt;For those brave souls who actively try to make stock SharePoint UIs look user friendly, there's a gauntlet that first needs to be run. The challenge has to do with competing CSS rules and styles. Stock SharePoint will emit many style sheets who will often also be trying to style the same element that you are.&lt;/p&gt;&lt;p&gt;When it comes to deciding which rule wins, you should keep the following rules in mind. They'll very likely help you troubleshoot, especially when combined with tools like the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;displaylang=en"&gt;IE Developer Toolbar&lt;/a&gt; or the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Firefox Web Developer Tools&lt;/a&gt; extension.&lt;/p&gt;&lt;h4&gt;Specificity&lt;/h4&gt;&lt;p&gt;In general more &lt;em&gt;specific&lt;/em&gt; rules tend to win. Remember that CSS styles can come from four different places. Rules that are increasingly specific will trump those who come from more generalized sources. Below we list (from most general to most specific) the four most common sources of CSS for a given html document.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The browser's default styles. Believe it or not each browser has a stock set of styles that get applied to elements whether you've chosen to style them or not. You'll have to compete with these even if they're the easiest to best. &lt;/li&gt;&lt;li&gt;An external style sheet (referenced from within the &amp;lt;head&amp;gt; tag [below]). &lt;div class="code"&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="mystyle.css" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Internal style sheet (rules described in &amp;lt;style&amp;gt; tags within the HTML document itself). &lt;div class="code"&gt;&amp;lt;HEAD&amp;gt;&lt;br /&gt;&amp;lt;STYLE type="text/css"&amp;gt;&lt;br /&gt;H1 {border-width: 1;}&lt;br /&gt;&amp;lt;/STYLE&amp;gt;&lt;br /&gt;&amp;lt;/HEAD&amp;gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Inline styles (styles placed on individual elements themselves). &lt;div class="code"&gt;&amp;lt;P style="font-size: 12pt; color: fuchsia"&amp;gt;Some Text&amp;lt;/P&amp;gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;More specific rules (those further down the list) will win out over more general ones.&lt;/p&gt;&lt;h4&gt;Weight&lt;/h4&gt;&lt;p&gt;Certain selectors are a little stronger than others. More specifically, ID has more weight than Class which has more weight than Tag name.&lt;/p&gt;&lt;p&gt;In fact &lt;em&gt;weight &lt;/em&gt;of a selector is determined by taking the sum of (100 * [# IDs used] + 10 * [# Classes used] + [# Tags Used].&lt;/p&gt;&lt;p&gt;Here's an example:&lt;/p&gt;&lt;p class="code"&gt;#navigation div.container span a.footerLink&lt;/p&gt;&lt;p&gt;Has a weight of (123 since it has 1 ID, 2 classes, and 3 tags. It would be trumped by:&lt;/p&gt;&lt;p class="code"&gt;div#navigation div.container span.wrapper a.footerLink&lt;/p&gt;&lt;p&gt;Since the above has a weight of 134 (1 ID, 3 classes and 4 tags).&lt;/p&gt;&lt;h4&gt;Order&lt;/h4&gt;&lt;p&gt;If specificity and weight are the same then it comes down to who was emitted last. In general rules that were emitted later on in the document will win.&lt;/p&gt;&lt;h4&gt;The Ace In The Hole&lt;/h4&gt;&lt;p&gt;If you're too lazy to figure out the rest you can simply use the !important flag. &lt;p class="code"&gt;div&lt;br /&gt;{&lt;br /&gt;  color:red !important;&lt;br /&gt;}&lt;/p&gt;This should trump all other rules but is considered to be pretty poor form and may get you dirty looks around the water cooler. &lt;p&gt;&lt;/p&gt;&lt;p&gt;Hope that helps.&lt;/p&gt;&lt;p&gt;Best,&lt;br /&gt;Tyler&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OQoLXbjV5Bs:Ad1MaV0TLD4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OQoLXbjV5Bs:Ad1MaV0TLD4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OQoLXbjV5Bs:Ad1MaV0TLD4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OQoLXbjV5Bs:Ad1MaV0TLD4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OQoLXbjV5Bs:Ad1MaV0TLD4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=OQoLXbjV5Bs:Ad1MaV0TLD4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=OQoLXbjV5Bs:Ad1MaV0TLD4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/OQoLXbjV5Bs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/4618077391504636643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=4618077391504636643" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/4618077391504636643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/4618077391504636643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/OQoLXbjV5Bs/css-selector-collisions.html" title="CSS Selector Collisions" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/04/css-selector-collisions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IGRXs9eSp7ImA9WxVVFUU.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-7599197588159452631</id><published>2009-03-05T18:43:00.001-08:00</published><updated>2009-03-08T23:52:04.561-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-08T23:52:04.561-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SSIS" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 2003" /><title>Is It Really My Job To Fix That!?</title><content type="html">&lt;h4&gt;That's Not On My Resume&lt;/h4&gt;  &lt;p&gt;I have to tell you that working in a software services firm isn't always a picnic.  Being a vendor (read outsider), and responsible for delivering working solutions on other peoples infrastructure, in a foreign LAN is nothing but a brazen undertaking. It's akin to trying to construct a building in a war torn, 3rd world country that happens to be in the middle of ongoing natural disasters. The drama sometimes matches that of most reality TV series, and while it's rarely dull in some regards, there's easier ways in life to get a win.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_x_KlQTLtnfI/SbCN5jvO2KI/AAAAAAAAA7A/UCN3BcjIA5Y/s1600-h/problems%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 45px; border-right-width: 0px" height="341" alt="problems" src="http://lh3.ggpht.com/_x_KlQTLtnfI/SbCN6Q4xtaI/AAAAAAAAA7E/738WxiKNneI/problems_thumb%5B4%5D.jpg?imgmax=800" width="406" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When the hardware isn't changing and internal IT isn't ignoring you, it's most likely that you'll get bad OS builds, under powered VMs or fail to take note of the hidden agendas in a politically charged atmosphere. This is all in addition to regular project management woes. I'm just talking about delivery here, requirements and software lifecycle are another boat in entier.&lt;/p&gt;  &lt;p&gt;You need to be &lt;em&gt;really sharp&lt;/em&gt; to see all the possible ways you could fail, and even then it'll probably be something small that never even crossed your worried mind that will end threatening you and your project. Game on.&lt;/p&gt;  &lt;h4&gt;An Instance of Success&lt;/h4&gt;  &lt;p&gt;Today we came up with this interesting problem when installing some ETL on a BI server. The machine was running SSIS RTM on a Win2k3 x86 Service Pack 1. The ETL was taking a bunch of records from some source SQL Server database (SP2) and migrating them to another destination SQL Server database (SP2). The ETL would run for about 20ish minutes before consistently throwing the following exceptions:&lt;/p&gt;  &lt;p class="code"&gt;An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "Protocol error in TDS stream".   &lt;br /&gt;  &lt;br /&gt;An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "Communication link failure".    &lt;br /&gt;  &lt;br /&gt;An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "TCP Provider: An existing connection was forcibly closed by the remote host. ".&lt;/p&gt;  &lt;p&gt;Hmm...what to do. The ETL worked great in stage and in our own QA environment. After an exhaustive troubleshoot (on our client's machine) the fix ended up being...&lt;a href="http://support.microsoft.com/kb/945977" target="_blank"&gt;disabling TCP Chimney offloading&lt;/a&gt;. Not even on our BI server but on the destination SQL Server!&lt;/p&gt;  &lt;p&gt;What!? You say? Your problems with delivery weren't even vaguely related to the technologies you were developing!? Exactly, something not even vaguely related to ETL became a huge friction point between us and a client. The worse part is that there's &lt;em&gt;always&lt;/em&gt; a risk of this&lt;em&gt;.&lt;/em&gt; Vendors come in and constantly take it on the chin (or sometime just look incompetent) because a dependency they depend on isn't working. &lt;/p&gt;  &lt;p&gt;What makes it worse is you may have never even seen that machine in your life, and it's the one that just might bury you. Half the time you don't even have the necessary rights on the given machines to fix it let alone conduct a decent troubleshoot. All of this just might want to make a man take up farming.&lt;/p&gt;  &lt;p&gt;This time we did have the necessary rights on the machine. We got &lt;em&gt;lucky&lt;/em&gt; and there's even a chance that we might actually get paid for the troubleshoot...this time. Who knows what kind of circus fixes we'll be trying to pull off tomorrow. The good news is that after a while some partners actually start to trust you.&lt;/p&gt;  &lt;p&gt;Hope that fix helps some vendor somewhere, we sure could have used it.&lt;/p&gt;  &lt;p&gt;My Best,  &lt;br /&gt;Tyler&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=1tvtM4v_VrY:8Fn289KxiHA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=1tvtM4v_VrY:8Fn289KxiHA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=1tvtM4v_VrY:8Fn289KxiHA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=1tvtM4v_VrY:8Fn289KxiHA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=1tvtM4v_VrY:8Fn289KxiHA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?a=1tvtM4v_VrY:8Fn289KxiHA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ItsInSystemDotWhat?i=1tvtM4v_VrY:8Fn289KxiHA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/1tvtM4v_VrY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/7599197588159452631/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=7599197588159452631" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7599197588159452631?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/7599197588159452631?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/1tvtM4v_VrY/is-it-really-my-job-to-fix-that.html" title="Is It Really My Job To Fix That!?" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_x_KlQTLtnfI/SbCN6Q4xtaI/AAAAAAAAA7E/738WxiKNneI/s72-c/problems_thumb%5B4%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/03/is-it-really-my-job-to-fix-that.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08CQnk9cCp7ImA9WxVWEE0.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-4637345126554012052</id><published>2009-02-18T17:11:00.001-08:00</published><updated>2009-02-18T17:11:03.768-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-18T17:11:03.768-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>STSADM Properties</title><content type="html">&lt;h4&gt;Wait...There's Another Flag&lt;/h4&gt;  &lt;p&gt;If you've ever felt like the&lt;a href="http://lh3.ggpht.com/_x_KlQTLtnfI/SZyxppYQ_mI/AAAAAAAAA6o/Nx7okHWY5uI/s1600-h/NewTask%5B10%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="88" alt="NewTask" src="http://lh6.ggpht.com/_x_KlQTLtnfI/SZyxp_I-GcI/AAAAAAAAA6s/-vvRORD215c/NewTask_thumb%5B8%5D.gif?imgmax=800" width="342" align="right" border="0" /&gt;&lt;/a&gt; STSADM utility is taxed with doing more than &lt;a href="http://en.wikipedia.org/wiki/Emacs"&gt;Emacs&lt;/a&gt;, there's a good chance you're in the majority. I was recently trying to figure out what SharePoint settings affect the &amp;quot;New&amp;quot; icon when I stumbled upon the stsadm's getproperty and setproperty flags.&lt;/p&gt;  &lt;p&gt;Essentially there's a &lt;a href="http://technet.microsoft.com/en-us/library/cc263358.aspx"&gt;bunch of SharePoint settings&lt;/a&gt; (some of which there's no admin UI screen for) that can be manipulated using this utility. The new icon is one such property.&lt;/p&gt;  &lt;p&gt;It might be worth looking at some of these, they include both &lt;strong&gt;server &lt;/strong&gt;and &lt;strong&gt;web application&lt;/strong&gt; level properties.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Server Properties&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc261683.aspx" target="_blank"&gt;Antivirus properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc261905.aspx" target="_blank"&gt;Data Retrieval Services properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc261756.aspx" target="_blank"&gt;Information Rights Management properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc263074.aspx" target="_blank"&gt;Site use confirmation and automatic deletion properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc424966.aspx" target="_blank"&gt;Timer job properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc263478.aspx" target="_blank"&gt;Usage analysis properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc262633.aspx" target="_blank"&gt;Workflow management properties&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Web Application Properties&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc262629.aspx" target="_blank"&gt;Alerts properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc261905.aspx" target="_blank"&gt;Data Retrieval Services properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc262958.aspx" target="_blank"&gt;General properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc263074.aspx" target="_blank"&gt;Site use confirmation and automatic deletion properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc263509.aspx" target="_blank"&gt;Recycle Bin properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc263318.aspx" target="_blank"&gt;People Picker properties&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As it turns out the default value for &lt;a href="http://technet.microsoft.com/en-us/library/cc262903.aspx" target="_blank"&gt;the new icon&lt;/a&gt; is 2 days. You can show and change this property by using the following commands:&lt;/p&gt;  &lt;p class="code"&gt;stsadm -o setproperty -pn days-to-show-new-icon -pv 2 -url [WebAppUrl]&lt;/p&gt;  &lt;p class="code"&gt;stsadm -o getproperty -pn days-to-show-new-icon -url [WebAppUrl]&lt;/p&gt;  &lt;p&gt;This probably wont interest you in the least until you start to think about scripting and how this might help you ensure certain settings have been set when it comes time to deployment. &lt;/p&gt;  &lt;p&gt;While many of these settings might be alterable using the SharePoint API, there are still many types of changes that deserve to be versioned in some kind of script rather than C#.&lt;/p&gt;  &lt;p&gt;Best,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=btPE4Zr6"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=Gw1XyyEe"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=Gw1XyyEe" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=S2hKG1uz"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=S2hKG1uz" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=x6fBQMwv"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=x6fBQMwv" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/vV5Siw2BtMo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/4637345126554012052/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=4637345126554012052" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/4637345126554012052?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/4637345126554012052?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/vV5Siw2BtMo/stsadm-properties.html" title="STSADM Properties" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_x_KlQTLtnfI/SZyxp_I-GcI/AAAAAAAAA6s/-vvRORD215c/s72-c/NewTask_thumb%5B8%5D.gif?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/02/stsadm-properties.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYHRXo4cSp7ImA9WxVXF0s.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-6374362773931300709</id><published>2009-02-15T23:08:00.001-08:00</published><updated>2009-02-15T23:08:54.439-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-15T23:08:54.439-08:00</app:edited><title>Start Your April Fools Jokes Early</title><content type="html">&lt;h4&gt;Time Waits For No One&lt;/h4&gt;  &lt;p&gt;For some reason Valentines Day always reminds me that &lt;a href="http://en.wikipedia.org/wiki/April_Fools'_Day"&gt;April Fools&lt;/a&gt; is coming up. This most likely draws from the fact that I'm the youngest of two siblings, and it's become a personality trait to express my affection by irritating the crap out of an individual.&lt;/p&gt;  &lt;p&gt;Needless to say I have very few close friends.&lt;/p&gt;  &lt;p&gt;Since nothing says &amp;quot;I care about you&amp;quot; like a good practical joke, I'd like to take the time to &lt;strong&gt;remind you that April Fools day is a very short 32 business days away&lt;/strong&gt;, and depending on how deep your pranks run, you may need to get some infrastructure in place.&lt;/p&gt;  &lt;h4&gt;The Right Joke For The Right Bloke&lt;/h4&gt;  &lt;p&gt;A good practical joke is tailored to the&lt;a href="http://lh5.ggpht.com/_x_KlQTLtnfI/SZkRBMuzm5I/AAAAAAAAA6g/GfHAN5wLyLI/s1600-h/april-fool%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="260" alt="april-fool" src="http://lh4.ggpht.com/_x_KlQTLtnfI/SZkRBUhhrGI/AAAAAAAAA6k/f9ZMD6MBjxM/april-fool_thumb%5B2%5D.jpg?imgmax=800" width="223" align="right" border="0" /&gt;&lt;/a&gt; individual. Knowledge of their technical depth, their patience, any history of violence, and past convictions are key to finding just the right level of crazy.&lt;/p&gt;  &lt;p&gt;If you'd like to go shopping for ideas, I'd suggest &lt;a href="http://stackoverflow.com/questions/65116/whats-your-favorite-harmless-computer-practical-joke"&gt;starting here&lt;/a&gt;. My only advise is to be prepared for retaliation. Most pranks usually deserve another, and the minute your cover gets blow, it'll already be too late to start wearing a helmet.&lt;/p&gt;  &lt;h4&gt;Get Going&lt;/h4&gt;  &lt;p&gt;So get on it. Usually most April Fools jokes fall apart because people leave them to the last minute. DNS records may need to get updated, proxies may need to get provisioned, machines may need to get hacked. Don't risk leaving it to the last minute, start being devious and subversive today!&lt;/p&gt;  &lt;p&gt;I'll share this years war story on April 2nd.&lt;/p&gt;  &lt;p&gt;Best,    &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=A8Rxzf6K"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=8r8zR0zh"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=8r8zR0zh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=iPFtvq1X"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=iPFtvq1X" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=fOIZhlpQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=fOIZhlpQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/t9xusmuDwIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/6374362773931300709/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=6374362773931300709" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6374362773931300709?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6374362773931300709?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/t9xusmuDwIo/start-your-april-fools-jokes-early.html" title="Start Your April Fools Jokes Early" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_x_KlQTLtnfI/SZkRBUhhrGI/AAAAAAAAA6k/f9ZMD6MBjxM/s72-c/april-fool_thumb%5B2%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/02/start-your-april-fools-jokes-early.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYEQ3w-fSp7ImA9WxVXEUs.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-1870733531788329717</id><published>2009-02-09T00:02:00.001-08:00</published><updated>2009-02-09T00:28:22.255-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-09T00:28:22.255-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="IIS" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>How SharePoint Found Its Content Database</title><content type="html">&lt;h4&gt;Good Question&lt;/h4&gt;  &lt;p&gt;I was talking a client through a SharePoint web.config change a couple of weeks ago and he ended up asking a dynamite question.&lt;/p&gt;  &lt;p class="code"&gt;How does the web application know where its content database is at?&lt;/p&gt;  &lt;p&gt;You might say something like "it gets it from the config database", but that would beg another question, "how does it know where the config database is?". In reality, we're curious about how a web application orients itself to its environment when it comes time to respond to a request. &lt;/p&gt;  &lt;p&gt;You'll notice that SharePoint web.configs don't have any connectionString elements in them that point to a particular content or configuration database, and SharePoint installs don't make any changes to parent web.configs or machine.configs. So how does this web application orient itself at runtime?&lt;/p&gt;  &lt;h4&gt;Lets Reflect, Literally&lt;/h4&gt;  &lt;p&gt;If you think about it, there's a few clues to where this code "ought to be". Pretend for a minute that you were tasked with authoring some piece of functionality that let a web application figure out where its database was at runtime. There's some typical places you'd hook in (besides the web.config). You'd know that this piece of functionality would need to be populated in time to serve requests who would need to know where the content db is at. &lt;/p&gt;  &lt;p&gt;You might think about putting it in global.asax &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest%28VS.71%29.aspx"&gt;Application_OnStart&lt;/a&gt; or some http module event that's relatively early in the ASP.NET pipeline. &lt;/p&gt;  &lt;p&gt;Lets look at how a typical SharePoint request gets resolved and see if we can't flush out some details. This is the path I took to piece this answer together.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A request comes in and gets handled by IIS. The request matches either a port number or a host header on a web site in the web server. &lt;/li&gt;    &lt;li&gt;The matching SharePoint web site has &lt;em&gt;wild card ISAPI mappings&lt;/em&gt; that pass &lt;em&gt;all&lt;/em&gt; &lt;em&gt;request &lt;/em&gt;to ASP.NET. Remember that in a typical ASP.NET web site there mappings for known ASP.NET file extensions (.aspx, .asmx, .ascx, etc...) to the ASP.NET ISAPI filter. When IIS gets a request that ends with the given file extension, it knows that this is an ASP.NET request and hands it off to the aspnet_isapi.dll ISAPI. In a SharePoint IIS web site, we pass &lt;em&gt;everything&lt;/em&gt; to ASP.NET. This includes .gifs, .jpegs, .PSDs etc... SharePoint gets a chance to fulfill every requests that gets picked up by the site. Below is a screen cap the wild card mapping present in all SharePoint sites. This is created for you automatically when you provision a new web application. If you were to remove it, your SharePoint instance would no longer be able to serve non ASP.NET files out of the content database.  &lt;a href="http://lh4.ggpht.com/_x_KlQTLtnfI/SY_i_fkD2lI/AAAAAAAAA6Q/ktE7X0jfLZU/s1600-h/2009020821.26.304.gif"&gt;&lt;img style="border-width: 0px;" alt="Wildcard mapping that sends ALL requests to the .NET frameowrk and eventually to our SharePoint web application." src="http://lh4.ggpht.com/_x_KlQTLtnfI/SY_i_5VN4uI/AAAAAAAAA6U/CsA5LPH9e7Y/2009020821.26.30_thumb2.gif?imgmax=800" width="428" border="0" height="468" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Once the request gets handed to ASP.NET, its fair game for the web application to start doing some magic. In fact, it had better figure it out soon cause odds are this request is going to want something from the content database before the page life cycle hits. Because we're talking about the &lt;a href="http://msdn.microsoft.com/en-us/library/aa302376.aspx#secnetap04_topic2"&gt;ASP.NET request pipeline&lt;/a&gt; (and &lt;em&gt;early in it&lt;/em&gt;), it's a reasonable guess to assume an http module could be in play. If we look in the web.config under the &amp;lt;httpModules&amp;gt; section we find that SharePoint has registered an HttpModule named "SPRequest", it's fulfilled by code found in the Microsoft.SharePoint.ApplicationRuntime namespace by a class called SPRequestModule.&lt;a href="http://lh5.ggpht.com/_x_KlQTLtnfI/SY_jAAWx-ZI/AAAAAAAAA6Y/oW0mn1VIynY/s1600-h/2009-02-08%2023.27.50%5B4%5D.gif"&gt;&lt;img style="border-width: 0px;" alt="The SPRequest HttpModule." src="http://lh3.ggpht.com/_x_KlQTLtnfI/SY_jAOpvWdI/AAAAAAAAA6c/5bHdaLFO7js/2009-02-08%2023.27.50_thumb%5B2%5D.gif?imgmax=800" width="495" border="0" height="86" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;If you reflect on SPRequestModule and look into BeginRequestHandler (one of the earlier events in the ASP.NET pipeline), it's obfuscated, but you can &lt;a href="http://blog.tylerholmes.com/2009/02/when-reflector-tells-you-to-hit-road.html"&gt;read it anyway&lt;/a&gt;. BeginRequestHandler makes a call to SPFarm.Local which ends up calling SPFarm.FindLocal in an effort to find the farm that this machine belongs to. &lt;/li&gt;    &lt;li&gt;SPFindLocal finally calls into SPConfigurationDatabase.Local &lt;em&gt;which runs to the registry&lt;/em&gt; looking for &lt;strong&gt;HKLM\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\Secure\ConfigDB&lt;/strong&gt;. This is where your "connection string" for the current farm lives. &lt;/li&gt;    &lt;li&gt;This is also how SharePoint finds the config database, from there it simply takes the current request and uses it to find the content database (if any) associated with the given request. After all this has been figured out, a lot of it gets cached. &lt;/li&gt;    &lt;li&gt;Finally BeginRequestHandler starts through the complex task of mapping your request to a bunch of content in the web applications content database. The regular &lt;a href="http://msdn.microsoft.com/en-us/library/ms178472.aspx"&gt;Page Life Cycle&lt;/a&gt; kicks off and at the end of the day we end up with an HttpResponse built up by SharePoint. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Thought that someone else might enjoy the answer. This is kind of a neat piece of functionality too, it allows the psconfig tool to move this machine from farm to farm without changing any web.config files, so long as you can tell it where it should remap the registry key to. And with that, there's a little less magic in the world.&lt;/p&gt;  &lt;p&gt;Best,  &lt;br /&gt;Tyler&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=akh89AUq"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=v4LpRVT1"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=v4LpRVT1" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=cJksb32w"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=cJksb32w" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=XF3ZUv2W"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=XF3ZUv2W" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/FfXy7gvnskY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/1870733531788329717/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=1870733531788329717" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1870733531788329717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/1870733531788329717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/FfXy7gvnskY/how-sharepoint-found-its-content.html" title="How SharePoint Found Its Content Database" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_x_KlQTLtnfI/SY_i_5VN4uI/AAAAAAAAA6U/CsA5LPH9e7Y/s72-c/2009020821.26.30_thumb2.gif?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/02/how-sharepoint-found-its-content.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08NQXg_cSp7ImA9WxVQGUw.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-6804233059308020053</id><published>2009-02-06T01:18:00.001-08:00</published><updated>2009-02-06T01:18:10.649-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-06T01:18:10.649-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><title>When the Reflector Tells You To Hit The Road</title><content type="html">&lt;h4&gt;Seeing Obfuscated Code&lt;/h4&gt;  &lt;p&gt;Like every other .NET developer out here, I'm a big fan of the &lt;a href="http://www.red-gate.com/products/reflector/"&gt;.NET Reflector&lt;/a&gt;. It was originally written by Lutz Roeder but is now maintained by the kind gentleman at Red Gate. One of the elements that make the tool stand out (in addition to the ease at which it lets you navigate/disassembling code), is the ton of &lt;a href="http://www.codeplex.com/reflectoraddins"&gt;add ins on CodePlex&lt;/a&gt; that extend the base functionality. If you haven't already, you should explore them some time.&lt;/p&gt;  &lt;p&gt;I mostly use the .NET Reflector when it comes to things that I don't quite understand and I can't seem to find an adequate answer on the web. Ninety percent of the time, this tool will usually make it easy for you to look underneath the hood and you can find your own answers.&lt;/p&gt;  &lt;p&gt;Every now and then when you're reflecting on code that someone doesn't thing you should see, you'll get the following message from the tool.&lt;/p&gt;  &lt;p class="code"&gt;This item is obfuscated and can not be translated. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_x_KlQTLtnfI/SYwATlXGZDI/AAAAAAAAA54/0pdNQSgcWTw/s1600-h/2009-02-06%2000.52.32%5B4%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="83" alt="This item is obfuscated and can not be translated." src="http://lh4.ggpht.com/_x_KlQTLtnfI/SYwATkuVpmI/AAAAAAAAA58/glqlCvSDiCg/2009-02-06%2000.52.32_thumb%5B2%5D.gif?imgmax=800" width="362" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If your stubborn like most rural mules or have never heard of &amp;quot;no means no&amp;quot;, you can carry onward by going to &lt;strong&gt;View&lt;/strong&gt;-&amp;gt;&lt;strong&gt;Options&lt;/strong&gt;-&amp;gt;Click &lt;strong&gt;Dissassembler &lt;/strong&gt;and set the language to IL.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_x_KlQTLtnfI/SYwAT1q4fOI/AAAAAAAAA6A/R8DjaKpMwH0/s1600-h/2009-02-06%2000.59.14%5B3%5D.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="329" alt="Changing the language to IL in reflector will let you see obfuscated code." src="http://lh5.ggpht.com/_x_KlQTLtnfI/SYwAUGIAeiI/AAAAAAAAA6E/p4QQflO7jPo/2009-02-06%2000.59.14_thumb%5B1%5D.gif?imgmax=800" width="411" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you're simply asking for the IL, Reflector will gladly show you the contents of the function (if you can make any sense out of it). Intermediate Language is even harder to read than disassembled MISL that's mapped to C# or VB.NET (which unreadable for another variety of reasons).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_x_KlQTLtnfI/SYwAUR6Ol9I/AAAAAAAAA6I/pKM4_VSj0a4/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="222" alt="Code that was previously obfuscated." src="http://lh6.ggpht.com/_x_KlQTLtnfI/SYwAUVmQb5I/AAAAAAAAA6M/xJvBxVdJU7k/image_thumb%5B3%5D.png?imgmax=800" width="540" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In fact if you're just going to be looking at IL, you can actually skip the .NET Reflector in the first place and use the MSIL Disassembler (ildasm.exe) that comes with the .NET framework. May not look as pretty, but you're guaranteed to have it on any machine which as the .NET SDK.&lt;/p&gt;  &lt;p&gt;Here's a disclaimer.&lt;/p&gt;  &lt;p&gt;It's also worth mentioning that by reverse engineering code you could be violating an EULA, and I'm hear to tell you that you should never do that. In fact, if you're ever given a piece of code that doesn't function correctly, you should never try to fix it or do anything to further your understand what's going wrong. Often the most legally sound action, is to turn off the computer and go home.&lt;/p&gt;  &lt;p&gt;Hope that helps someone find an answer.&lt;/p&gt;  &lt;p&gt;Best,   &lt;br /&gt;Tyler&lt;/p&gt;  &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=WkVnSIHI"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=t8rVHQBS"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=t8rVHQBS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=RQFCY8XY"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=RQFCY8XY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=ucgtaBm5"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=ucgtaBm5" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/sAruGkp8llc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/6804233059308020053/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=6804233059308020053" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6804233059308020053?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6804233059308020053?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/sAruGkp8llc/when-reflector-tells-you-to-hit-road.html" title="When the Reflector Tells You To Hit The Road" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_x_KlQTLtnfI/SYwATkuVpmI/AAAAAAAAA58/glqlCvSDiCg/s72-c/2009-02-06%2000.52.32_thumb%5B2%5D.gif?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/02/when-reflector-tells-you-to-hit-road.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUINRn0zeip7ImA9WxVQE00.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-6247322107870773471</id><published>2009-01-30T00:14:00.001-08:00</published><updated>2009-01-30T00:19:57.382-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T00:19:57.382-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Stong Name" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><title>Quick Deploys And Assembly Resolution</title><content type="html">&lt;h4&gt;The Error&lt;/h4&gt;  &lt;p&gt;We recently ran into the most bizarre error on a clients machine that hosts the central administration web site. Every 15 minutes on the dot we'd get the following error for many different assemblies. The error looked a lot like:&lt;/p&gt;  &lt;p class="code"&gt;Event Type:    Error  &lt;br /&gt;Event Source:    Windows SharePoint Services 3   &lt;br /&gt;Event Category:    Runtime   &lt;br /&gt;Event ID:    6611   &lt;br /&gt;Date:        1/15/2009   &lt;br /&gt;Time:        1:11:26 PM   &lt;br /&gt;User:        N/A   &lt;br /&gt;Computer:    [MACHINE NAME]&lt;br /&gt;Description:   &lt;br /&gt;Error: Failure in loading assembly: [AssemblyName], Version=1.0.0.0, Culture=neutral, PublicKeyToken=e376b6bc65267f90 &lt;/p&gt;  &lt;p&gt;It's worth mentioning that these errors mentioned the names of assemblies that were used in multiple sites (even though they were deployed into bin folders). The sites that used these assemblies were customized, and their Master Pages and Page Layouts referenced the assemblies that supposedly couldn't be loaded (as far as the error was concerned. Some of these dependencies were strong named and others were not. None of them lived in the GAC (all bin folder deployed).&lt;/p&gt;  &lt;h4&gt;The Solution&lt;/h4&gt;  &lt;p&gt;We used the fact that the errors occurred every 15 minutes to link them to Quick Deploy jobs. When we changed the quick deployments to every 10 minutes, the errors followed suit reoccurring at the same interval.&lt;/p&gt;  &lt;p&gt;At this point we were convinced that the SharePoint Timer (OWSTimer.exe) was trying to load these assemblies but&lt;a href="http://lh6.ggpht.com/_x_KlQTLtnfI/SYK2zRS203I/AAAAAAAAA5o/Nvi_2TtHXC4/s1600-h/Essential.NET3.jpg"&gt;&lt;img style="border-width: 0px;" alt="Essential .NET Volume 1" src="http://lh5.ggpht.com/_x_KlQTLtnfI/SYK2zm70fMI/AAAAAAAAA5s/6tyfxk2FUU4/Essential.NET_thumb1.jpg?imgmax=800" align="right" border="0" height="164" width="132" /&gt;&lt;/a&gt; couldn't find them. So how does assembly resolution happen in the .NET framework? We were saved by an an excerpt from &lt;a href="http://www.amazon.com/gp/product/0201734117?ie=UTF8&amp;amp;tag=itsinsywh-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0201734117"&gt;Essential .NET, Volume 1: The Common Language Runtime&lt;/a&gt;, a book by Don Box and Chris Sells. Essentially it works like this. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;When the assembly loader goes to load an assembly, it first looks to whether the assembly is strong named. If it IS, then the loader first looks in the GAC (not the bin folder). &lt;/li&gt;    &lt;li&gt;If it can't find the assembly in the GAC, the loader will then look for &lt;a href="http://msdn.microsoft.com/en-us/library/efs781xb%28VS.71%29.aspx"&gt;&amp;lt;codeBase&amp;gt;&lt;/a&gt; hints in the applications configuration file. Remember that these settings inherit down from machine.config to app.config/web.config. &lt;/li&gt;    &lt;li&gt;If there's no &amp;lt;codeBase&amp;gt; hints then the loader will resort to probing as a last ditch effort to find the assembly. This includes bin folders and any other location dictated by &amp;lt;probing&amp;gt; elements. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If the above seems confusing, consider the following flow chart.&lt;a href="http://lh5.ggpht.com/_x_KlQTLtnfI/SYK20DvaQjI/AAAAAAAAA5w/uwbd5eL0A0U/s1600-h/AssemblyResolution4.gif"&gt;&lt;img style="border-width: 0px;" alt="Flow chart speaking to assembly resolution." src="http://lh6.ggpht.com/_x_KlQTLtnfI/SYK20urRUvI/AAAAAAAAA50/ST7vZYeZpeU/AssemblyResolution_thumb2.gif?imgmax=800" border="0" height="602" width="475" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We first tried putting hints in the local web.configs, but because the OWSTimer has nothing to do with the our applications, the settings were being ignored. We finally helped the timer out by making the following modifications to the machine.config. To ensure that we didn't remap ALL lookups for the given assembly to the specific location, we had any other application who used the same assembly name override these settings below with a similar one in their own web.config. The overridden setting listed a location that made more sense for the particular web application (ie. web applications should go hunting for .dll's in their own bin folder, not some other applications). &lt;/p&gt;  &lt;p&gt;The machine.config was changed to read:&lt;/p&gt;  &lt;pre class="prettyprint" style="overflow: auto;"&gt;&amp;lt;runtime&amp;gt;  &lt;br /&gt; &amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;   &lt;br /&gt;   &amp;lt;dependentAssembly&amp;gt;   &lt;br /&gt;     &amp;lt;assemblyIdentity name="[NameOfAssembly]" publicKeyToken="9871993fa258bc6" culture="neutral" /&amp;gt;   &lt;br /&gt;     &amp;lt;codeBase version="1.0.0.0" href="file://C:/folder/directory/bin/[NameOfAssembly].dll" /&amp;gt;   &lt;br /&gt;   &amp;lt;/dependentAssembly&amp;gt;   &lt;br /&gt; &amp;lt;/assemblyBinding&amp;gt;   &lt;br /&gt;&amp;lt;/runtime&amp;gt;&lt;/pre&gt;  &lt;p&gt;The web.config was changed to read:&lt;/p&gt;  &lt;pre class="prettyprint" style="overflow: auto;"&gt;&amp;lt;runtime&amp;gt;  &lt;br /&gt; &amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;   &lt;br /&gt;   &amp;lt;dependentAssembly&amp;gt;   &lt;br /&gt;     &amp;lt;assemblyIdentity name="[NameOfAssembly]" publicKeyToken="9871993fa258bc6" culture="neutral" /&amp;gt;   &lt;br /&gt;     &amp;lt;codeBase version="1.0.0.0" href="file://C:/webapplicationLocation/bin/[NameOfAssembly].dll" /&amp;gt;   &lt;br /&gt;   &amp;lt;/dependentAssembly&amp;gt;   &lt;br /&gt; &amp;lt;/assemblyBinding&amp;gt;   &lt;br /&gt;&amp;lt;/runtime&amp;gt;&lt;/pre&gt;  &lt;p&gt;You can also provide &amp;lt;codeBase&amp;gt; hints for assemblies that aren't strongly named, you just need to omit the the optional publicKeyToken and culture attributes. Another tip is that you can also use the &lt;a href="http://msdn.microsoft.com/en-us/library/823z9h8w.aspx"&gt;&amp;lt;probing&amp;gt;&lt;/a&gt; element if you want to probe folders other than the bin folder.&lt;/p&gt;  &lt;p&gt;We then restarted IIS, followed by the timer service. Low and behold, our random error went away. This toast goes out to the highly configurable .NET framework, and the expressiveness of app/web/machine.config files.&lt;/p&gt;  &lt;p&gt;Best,  &lt;br /&gt;Tyler&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=7qXx8QKV"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=SDkNqkVa"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=SDkNqkVa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=L0Zl9ebL"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=L0Zl9ebL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=W30adEpM"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=W30adEpM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/MRMEb3mpA8I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/6247322107870773471/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=6247322107870773471" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6247322107870773471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/6247322107870773471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/MRMEb3mpA8I/quick-deploys-and-assembly-resolution.html" title="Quick Deploys And Assembly Resolution" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_x_KlQTLtnfI/SYK2zm70fMI/AAAAAAAAA5s/6tyfxk2FUU4/s72-c/Essential.NET_thumb1.jpg?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/01/quick-deploys-and-assembly-resolution.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIHQXs4fip7ImA9WxVQE00.&quot;"><id>tag:blogger.com,1999:blog-8451123064758809734.post-507054270537908192</id><published>2009-01-27T21:03:00.000-08:00</published><updated>2009-01-30T00:18:50.536-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T00:18:50.536-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>TroubleShooting The JQuery Accordion</title><content type="html">&lt;h4&gt;JQuery and the Accordion&lt;/h4&gt;  &lt;p&gt;I've been getting more and more into &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt; recently. It's light, free (as in freedom), and has a vibrant community. Sweetening the deal is the ever growing list of &lt;a href="http://plugins.jquery.com/"&gt;animated controls&lt;/a&gt; that effortlessly plug into the framework.&lt;/p&gt;  &lt;p&gt;We've been using JQuery for quite a few of our clients who have expressed a desire for more interactive SharePoint sites. I've been so impressed with the framework of late that I've started to &lt;a href="http://blog.tylerholmes.com/2008/12/put-down-that-ajax-control-toolkit.html"&gt;advocate it over heavier tools&lt;/a&gt; that try to achieve similar results.&lt;/p&gt;  &lt;h4&gt;The Problem&lt;/h4&gt;  &lt;p&gt;Just today I ran into a pretty interesting problem with the &lt;a href="http://plugins.jquery.com/project/accordion"&gt;JQuery Accordion&lt;/a&gt;. I'm throwing up this fix because I couldn't find a solution on the web. We had the accordion binding off of a SiteMapDataSource in a SharePoint master page, everything looked great in Chrome, FireFox, and Safari...but IE 6 and 7 were giving us a really hard time.&lt;/p&gt;  &lt;p&gt;What made this even more frustrating is that it worked fine in at least three other SharePoint sites with exceedingly similar master pages.&lt;/p&gt;  &lt;p&gt;The accordion would flicker at the end of the animation every time the user would expand or collapse a sub menu. We tried removing all the CSS, but the page still yielded the same behavior. The menu would briefly flash the entire contents of a sub menu whenever a a new section was collapsed/expanded. The only way we could stop this was by turning the animation off in entire.&lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;The Troubleshoot&lt;/h4&gt;  &lt;p&gt;At first I tried &lt;a href="http://blog.tylerholmes.com/2008/09/debug-any-javascript-in-your-browser.html"&gt;debugging the JavaScript&lt;/a&gt; for JQuery and the accordion, but the source quickly became difficult to follow. The guys who wrote this stuff have mad JavaScript skills, they're head over heels better JavaScript developers than I am.&lt;/p&gt;  &lt;p&gt;So I ended up doing what I normally do when I don't understand what's going on. I started to make things simpler. I opened up SharePoint Designer and started removing sizeable sections of the page, block by block, seeing if I could get the problem to go away. I ended up with a ridiculously small html document that basically had the the accordion menu markup and a couple of other html tags.&lt;/p&gt;  &lt;p&gt;It was only when the document was about forty lines long that the problem became apparent.&lt;/p&gt;  &lt;p&gt;There was &lt;strong&gt;no doc type on the html document&lt;/strong&gt;. I've written about &lt;a href="http://blog.tylerholmes.com/2008/08/quirks-mode-strikes-again.html"&gt;Quirks Mode&lt;/a&gt; before, so I was a little embarrassed that I hadn't noticed it earlier. If you're not familiar, or are too lazy to click on the link above, in a nutshell quirks mode is a special rending mode that browsers go to when you either don't specify the doc type or use html that deviates from the declared &lt;a href="http://www.alistapart.com/stories/doctype/"&gt;doc type&lt;/a&gt;. The rules for what justifies quirks mode rendering changes from browser to browser. For IE, not declaring a doc type will cause it to render the page in quirks mode.&lt;/p&gt;  &lt;p&gt;Quirks mode changes the way that the browser handles CSS rules. When we failed to declare a doc type, IE started rendering the menu in quirks mode. This changed the way that the browser handled the in line CSS that the JQuery accordion was tacking onto menu list markup. Hence the odd behavior.&lt;/p&gt;  &lt;p&gt;I added my favorite and most relaxed doc type:&lt;/p&gt;  &lt;div class="code" style="overflow: auto;"&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;/div&gt;  &lt;p&gt;Low and behold, the animation issue went away. Quirks mode strikes again. I guess the lesson here is that before you get to involved in a markup troubleshoot, &lt;strong&gt;ensure the document isn't being rendered in quirks mode!&lt;/strong&gt; You can figure out how to detect quirks mode by &lt;a href="http://blog.tylerholmes.com/2008/08/quirks-mode-strikes-again.html"&gt;reading this&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Fool Me Twice,   &lt;br /&gt;Tyler&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=Oq0VAMuE"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=0HFrQ7yF"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=0HFrQ7yF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=AJlgBPyd"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=AJlgBPyd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?a=BF1FFt34"&gt;&lt;img src="http://feeds.feedburner.com/~f/ItsInSystemDotWhat?i=BF1FFt34" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItsInSystemDotWhat/~4/Bu3zrITopR4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.tylerholmes.com/feeds/507054270537908192/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8451123064758809734&amp;postID=507054270537908192" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/507054270537908192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8451123064758809734/posts/default/507054270537908192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItsInSystemDotWhat/~3/Bu3zrITopR4/troubleshooting-jquery-accordion.html" title="TroubleShooting The JQuery Accordion" /><author><name>Tyler Holmes</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://bp1.blogger.com/_x_KlQTLtnfI/R6e9dSjX4AI/AAAAAAAAAUo/tYqjiMPzf4s/S220/MugShot-Cropped.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.tylerholmes.com/2009/01/troubleshooting-jquery-accordion.html</feedburner:origLink></entry></feed>
