<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CleverWorkarounds &#187; Networking</title>
	<atom:link href="http://www.cleverworkarounds.com/category/infrastructure/networking/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cleverworkarounds.com</link>
	<description>After much frustration, it seems DEFAULT is the way to go...</description>
	<lastBuildDate>Thu, 02 Feb 2012 09:39:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The cloud is not the problem-Part 4: Industry shakeout and playing with the big kids&#8230;</title>
		<link>http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/</link>
		<comments>http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 14:31:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Cloud compouting]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Globalisation]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[IAAS]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[IPSEC]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Office365]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Strategy]]></category>
		<category><![CDATA[VPC]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/?p=2837</guid>
		<description><![CDATA[Hi all Welcome to the fourth post about the adaptive change that cloud computing is going to have on practitioners, paradigms and organisations. The previous two posts took a look at some of the dodgier side of two of the industries biggest players, Microsoft and Amazon. While I have highlighted some dumb issues with both, [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p>Hi all</p>
<p>Welcome to the fourth post about the adaptive change that cloud computing is going to have on practitioners, paradigms and organisations. The previous two posts took a look at some of the dodgier side of two of the industries biggest players, <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/">Microsoft</a> and <a href="http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/">Amazon</a>. While I have highlighted some dumb issues with both, I nevertheless have to acknowledge their resourcing, scalability, and ability to execute. On that point of ability to execute, in this post we are going to expand a little towards the cloud industry more broadly and the inevitable consolidation that is, and will continue to take place.</p>
<p>Now to set the scene, a lot of people know that in the early twentieth century, there were a lot of US car manufacturers. I wonder if you can take a guess at the number of defunct car manufacturers there have been before and after that time. </p>
<p>…Fifty? </p>
<p>…One Hundred? </p>
<p>Not even close… </p>
<p>What if I told you that there were <a href="http://en.wikipedia.org/wiki/List_of_defunct_United_States_automobile_manufacturers">over 1700</a>! </p>
<p>Here is another interesting stat. The table below shows the years where manufacturers went bankrupt or ceased operations. Below that I have put the average shelf life of each company for that decade.</p>
<table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" width="1001">
<colgroup>
<col style="width: 48pt" width="64" /></colgroup>
<tbody>
<tr style="height: 15pt" height="20">
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" height="20" width="85" align="right"><strong>Year</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="49" align="right"><strong>1870’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="48" align="right"><strong>1880’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1890’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1900’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1910’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1920’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1930’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1940’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1950’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1960’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1970’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1980’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>1990’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="63" align="right"><strong>2000’s</strong></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="61" align="right"><strong>2010’s</strong></td>
</tr>
<tr style="height: 15pt" height="20">
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" height="20" width="85" align="right"><font size="2"><strong># defunct</strong></font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="51" align="right"><font size="2">4</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="50" align="right"><font size="2">2</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">5</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">88</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">660</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">610</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">276</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">42</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">13</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">33</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">11</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">5</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">5</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">3</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="61" align="right"><font size="2">5</font></td>
</tr>
<tr style="height: 15pt" height="20">
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" height="20" width="85" align="right"><font size="2"><strong>avg years in operation</strong></font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="52" align="right"><font size="2">5</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="51" align="right"><font size="2">1</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">1</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">3</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">3</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">4</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">5</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">7</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">14</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">10</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">19</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">37</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">16</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="62" align="right"><font size="2">49</font></td>
<td style="padding-left: 1px; padding-right: 1px; vertical-align: bottom; padding-top: 1px" width="61" align="right"><font size="2">42</font></td>
</tr>
</tbody>
</table>
<p>Now, you would expect that the bulk of closures would be depression era, but note that the depression did not start until the late 1920’s and during the boom times that preceded it, 660 manufactures went to the wall – a worse result! </p>
<h2>The pattern of consolidation</h2>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2012/01/image.png"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2012/01/image_thumb.png" width="414" height="259" /></a></p>
<p>What I think the above table shows is the classic pattern of industry consolidation after an initial phase of innovation and expansion, where over time, the many are gobbled by the few. As the number of players consolidate, those who remain grow bigger, with more resources and economies of scale. This in turn creates barriers to entry for new participants. Accordingly, the rate of attrition slows down, but that is more due to the fact that there are fewer players in the industry. Those that are left continue to fight their battles, but now those battles take longer. Nevertheless, as time goes on, the number of players consolidate further.</p>
<p>If we applied a cloud/web hosting paradigm to the above table, I would equate the dotcom bust of 2000 with the depression era of the 1920’s and 1930’s. I actually think with cloud computing, we are in the 1960’s and on right now. The largest of the large players have how made big bets on the cloud and have entered the market in a big, big way. For more than a decade, other companies hosted Microsoft technology, with Microsoft showing little interest beyond selling licenses via them. Now Microsoft themselves are also the hosting provider. Does that mean most the hosting providers will have the fate of Netscape? Or will they manage to survive the dance with Goliath like Citrix or VMWare have?</p>
<h2>For those who are not Microsoft or Amazon…</h2>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2012/01/image1.png"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2012/01/image_thumb1.png" width="239" height="372" /></a></p>
<p>Imagine you have been hosting SharePoint solutions for a number of years. Depending on your size, you probably own racks or a cage in some-one else’s data centre, or you own a small data centre yourself. You have some high end VMWare gear to underpin your hosting offerings and you do both managed SharePoint (i.e. offer a basic site collection subscription with no custom stuff – ala Office 365) and you offer dedicated virtual machines for those who want more control (ala Amazon). You have dutifully paid your <a href="http://www.microsoft.com/hosting/en/us/licensing/splabenefits.aspx">service provider licensing</a> to Microsoft, have IT engineers on staff, some SharePoint specialists, a helpdesk and some dodgy sales guys &#8211; all standard stuff and life is good. You had a crack at implementing SharePoint multi tenancy, but found it all a bit too fiddly and complex.</p>
<p>Then Amazon comes along and shakes things up with their <a href="http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/">IaaS offerings</a>. They are cost competitive, have more data centres in more regions, a higher capacity, more fault tolerance, a wider variety of services and can scale more than you can. Their ability to execute in terms of offering new services is impossible to keep up with. In short, they slowly but relentlessly take a chunk of the market and continue to grow. So, you naturally counter by pushing the legitimate line that you specialise in SharePoint, and as a result customers are in much more trusted hands than Amazon, when investing on such a complex tool as SharePoint. </p>
<p>But suddenly the game changes again. The very vendor who you provide cloud-based SharePoint services for, now bundles it with Exchange, Lync and offers Active Directory integration (yeah, yeah, I know there was <a href="http://www.microsoft.com/online/business-productivity.aspx">BPOS</a> but no-one actually heard of that). Suddenly the argument that you are a safer option than Amazon is shot down by the fact that Microsoft themselves now offer what you do. So whose hands are safer? The small hosting provider with limited resources or the multinational with billions of dollars in the bank who develops the product? Furthermore, given Microsoft’s advantage in being able to mobilise its knowledge resources with deep product knowledge, they have a richer managed service offering than you can offer (i.e. they offer multi tenancy <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>This puts you in a bit of a bind as you are getting assailed at both ends. Amazon trumps you in the capabilities at the IaaS end and is encroaching in your space and Microsoft is assailing the <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/">SaaS</a> end. How does a small fish survive in a pond with the big ones? In my opinion, the mid-tier SharePoint cloud providers will have to reinvent themselves.</p>
<h2>The adaptive change…</h2>
<p>So for the mid-tier SharePoint cloud provider grappling with the fact that their play area is reduced because of the big kids encroaching, there is only one option. They have to be really, really good in areas the big kids are <em>not </em>good at. In SharePoint terms, this means they have to go to places many don’t really want to go: <strong>they need to bolster their support offerings and move up the SharePoint stack</strong>. </p>
<p>You see, traditionally a SharePoint hosting provider tends to take two approaches. They provide a managed service where the customer cannot mess with it too much (i.e. Site collection admin access only). For those who need more than that, they will offer a virtual machine and wipe their hands of any maintenance or governance, beyond ensuring that&#160; the infrastructure is fast and backed up. Until now, cloud providers could get away with this and the reason they take this approach should be obvious to anyone who has implemented SharePoint. If you don’t maintain operational governance controls, things can rapidly get out of hand. Who wants to deal with all that “people crap”? Besides, that&#8217;s a different skill set to typical skills required to run and maintain cloud services at the infrastructure layer. </p>
<p>So some cloud providers will kick and scream about this, and delude themselves into thinking that hosting and cloud services are their core business. For those who think this, I have news for you. The big boys think these are their core business too and they are going to do it better than you. This is now commodity stuff and a by-product of commoditisation is that many <strong>SharePoint consultancies</strong> <strong>are now cloud providers anyway!</strong> They sign up to Microsoft or Amazon and are able to provide a highly scalable SharePoint cloud service with all the value added services further up the SharePoint stack. In short, they combine their SharePoint expertise with Microsoft/Amazon’s scale. </p>
<p>Now on the issue of support, Amazon has no specific SharePoint skills and they never will. They are first and foremost a compelling IaaS offering. Microsoft’s support? … go and <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/">re-read part 2</a> if you want to see that. It seems that no matter the big multinational, level 1 tech support is always level 1 tech support. </p>
<p>So what strategies can a mid-tier provider take to stay competitive in this rapidly commoditising space. I think one is to go premium and go niche.</p>
<ul>
<li>Provide brilliant support. If I call you, day or night, I expect to speak to a SharePoint person straight away. I want to get to know them on a first name basis and I do not want to fight the defence mechanism of the support hierarchy. </li>
<li>Partner with SharePoint consultancies or acquire consulting resources. The latter allows you to do some vertical integration yourself and broaden your market and offerings. A potential KPI for any SharePoint cloud provider should be that no support person ever says “sorry that’s outside the scope of what we offer.” </li>
<li>Develop skills in the tools and systems that surround SharePoint or invest in SharePoint areas where skills are lacking. Examples include Project Server, PerformancePoint, integration with GIS, Records management and ERP systems. Not only will you develop competencies that few others have, but you can target particular vertical market segments who use these tools. </li>
<li>(Controversial?) Dump your infrastructure and use Amazon in conjunction with another IaaS provider. You just can’t compete with their scale and price point. If you use them you will likely save costs, when combined with a second provider you can play the resiliency card and best of all … you can offer <a href="http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/">VPC</a> <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </li>
</ul>
<h2>Conclusion</h2>
<p>In the last two posts we looked at some of the areas where both <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/">Microsoft</a> and <a href="http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/">Amazon</a> sometimes struggle to come to grips with the SharePoint cloud paradigm. In this post, we took a look at other cloud providers having to come to grips with the SharePoint cloud paradigm of having to compete with these two giants, who are clearly looking to eke out as much value as they can from the cloud pie. Whether you agree with my suggested strategy (<a href="http://www.rackspace.com/whyrackspace/support/">Rackspace appears to</a>), the pattern of the auto industry serves as an interesting parallel to the cloud computing marketplace. Is the relentless consolidation a good thing? Probably not in the long term (we will tackle that issue in the last post in this series). In the next post, we are going to shift our focus away from the cloud providers themselves, and turn our gaze to the internal IT departments – who until now, have had it pretty good. As you will see, a big chunk of the irrational side of cloud computing comes from this area.</p>
<p>&#160;</p>
<p>Thanks for reading</p>
<p>Paul Culmsee</p>
<p><a href="http://www.sevensigma.com.au">www.sevensigma.com.au</a></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/&title=The+cloud+is+not+the+problem-Part+4%3A+Industry+shakeout+and+playing+with+the+big+kids%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/&title=The+cloud+is+not+the+problem-Part+4%3A+Industry+shakeout+and+playing+with+the+big+kids%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/&title=The+cloud+is+not+the+problem-Part+4%3A+Industry+shakeout+and+playing+with+the+big+kids%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/&title=The+cloud+is+not+the+problem-Part+4%3A+Industry+shakeout+and+playing+with+the+big+kids%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2012/01/13/the-cloud-is-not-the-problem-part-4-industry-shakeout-and-playing-with-the-big-kids/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The cloud is not the problem&#8211;Part 3: When silos strike back&#8230;</title>
		<link>http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/</link>
		<comments>http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 04:27:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Cloud compouting]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[IAAS]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[VPC]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/?p=2775</guid>
		<description><![CDATA[What can Ikea fails tell us about cloud computing? My next door neighbour is a builder. When he moved next door, the house was an old piece of crap. Within 6 months, he completely renovated it himself, adding in two bedrooms, an underground garage and all sorts of cool stuff. On the other hand, I [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 10px; display: inline; float: left; padding-top: 5px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:06924454-ca3d-437c-9c64-28e91834b14a" class="wlWriterEditableSmartContent">
<div><object width="448" height="336"><param name="movie" value="http://www.youtube.com/v/WugVu2b-y0s?hl=en&amp;hd=1"></param><embed src="http://www.youtube.com/v/WugVu2b-y0s?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="336"></embed></object></div>
<div style="width:448px;clear:both;font-size:.8em">What can Ikea fails tell us about cloud computing?</div>
</div>
<p> My next door neighbour is a builder. When he moved next door, the house was an old piece of crap. Within 6 months, he completely renovated it himself, adding in two bedrooms, an underground garage and all sorts of cool stuff. On the other hand, I bought my house because it was a good location, someone had already renovated it and all we had to do was move in. The reason for this was simple: I had a new baby and more importantly, me and power tools do not mix. I just don’t have the skills, nor the time to do what my neighbour did.
<p>You can probably imagine what would happen if I tried to renovate my house the way my neighbour did. It would turn out like the Ikea fails in the video. Similarly, many SharePoint installs tend to look similar to the video too. Moral of the story? Sometimes it is better to get something pre-packaged than to do it yourself.</p>
<p>In the <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/" target="_blank">last post</a>, we <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/" target="_blank">examined</a> the<strong> “Software as a Service” (SaaS)</strong> model of cloud computing in the form of Office 365. Other popular SaaS providers include <a href="http://www.slideshare.net/">SlideShare</a>, <a href="http://www.salesforce.com/au/?ir=1">Salesforce</a>, <a href="http://basecamphq.com/">Basecamp</a> and <a href="http://www.tomsplanner.com/">Tom’s Planner</a> to name a few. Most SaaS applications are browser based and not as feature rich or complex as their on-premise competition. Therefore the SaaS model is that its a bit like buying a kit home. In SaaS, no user of these services ever touches the underlying cloud infrastructure used to provide the solution, nor do they have a full mandate to tweak and customise to their hearts content. SaaS is basically predicated on the notion that someone else will do a better set-up job than you and the old 80/20 rule about what features for an application are actually used.</p>
<p>Some people may regard the restrictions of SaaS as a <em>good thing </em>– particularly if they have dealt with the consequences of one too many unproductive customization efforts previously. As many SharePointer’s know, the more you customise SharePoint, the less resilient it gets. Thus restricting what sort of customisations can be done in many circumstances might be a wise thing to do. </p>
<p>Nevertheless, this actually goes against the genetic traits of pretty much every Australian male walking the planet. The reason is simple: no matter how much our skills are lacking or however inappropriate tools or training, we nevertheless always want to do it ourselves. This brings me onto our next cloud provider: Amazon, and their Infrastructure as a Service (IaaS) model of cloud based services. This is the ultimate DIY solution for those of us that find SaaS to cramping our style. Let’s take a closer look shall we?</p>
<h2>Amazon in a nutshell</h2>
<p>Okay, I have to admit that as an infrastructure guy, I am genetically predisposed to liking Amazon’s cloud offerings. Why? well as an infrastructure guy, I am like my neighbour who renovated his own house. I’d rather do it all myself because I have acquired the skills to do so. So for any server-hugging infrastructure people out there who are wondering what they have been missing out on? Read on… you might like what you see. </p>
<p>Now first up, its easy for new players to get a bit intimidated by Amazon’s bewildering array of offerings with brand names that make no sense to anybody but Amazon&#8230; EC2, VPC, S3, ECU, EBS, RDS, AMI’s, Availability Zones – sheesh! So I am going to ignore all of their confusing brand names and just hope that you have heard of <a href="http://en.wikipedia.org/wiki/Virtual_machine">virtual machines</a> and will assume that you or your tech geeks know all about VMware. The simplest way to describe Amazon is VMWare on steroids. Amazon’s service essentially allows you to create Virtual Machines within Amazon’s “cloud” of large data centres around the world. As I stated earlier, the official cloud terminology that Amazon is traditionally associated is called <strong>Infrastructure as a Service (IaaS). </strong>This is where, instead of providing ready-made applications like SaaS, a cloud vendor provides lower level IT infrastructure for rent. This consists of stuff like virtualised servers, storage and networking. </p>
<p>Put simply, utilising Amazon, one can deploy virtual servers with my choice of operating system, applications, memory, CPU and disk configuration. Like any good “all you can eat” buffet, one is spoilt for choice. One simply chooses an <em>Amazon Machine Image</em> (AMI) to use as a base for creating a virtual server. You can choose one of Amazon’s pre-built AMI’s (Base installs of Windows Server or Linux) or you can choose an image from the <strong>community contributed list of over 8000 base images</strong>. Pretty much any vendor out there who sells a turn-key solution (such as those all-in-one virus scanning/security solutions) has likely created an AMI. Microsoft have also <a href="http://aws.amazon.com/amis/Microsoft?browse=1">gotten in on the Amazon act</a> and <a href="http://aws.amazon.com/amis/Microsoft?browse=1">created AMI’s</a> for you, optimised by their product teams. Want SQL 2008 the way Microsoft would install it? Choose the <a href="http://aws.amazon.com/amis/Microsoft/6258880392999312">Microsoft Optimized Base SQL Server 2008R2</a> AMI&#160; which “contains scripts to install and optimize SQL Server 2008R2 and accompanying services including SQL Server Analysis services, SQL Server Reporting services, and SQL Server Integration services to your environment based on Microsoft best practices.”</p>
<p>The series of screen shots below shows the basic idea. After signing up, use the “Request instance wizard” to create a new virtual server by choosing an AMI first. In the example below, I have shown the default Amazon AMI’s under “Quick start” as well as the community AMI’s.</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td valign="top" width="200"><a href="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image61.png" target="_blank"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image61_thumb.png" width="527" height="260" /></a>           <br /><strong><font size="2" face="Arial">Amazons default AMI’s</font></strong></td>
<td valign="top" width="200"><a href="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image31.png" target="_blank"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image3_thumb.png" width="529" height="260" /></a>           <br /><strong><font size="2" face="Arial">Community contributed AMI’s</font></strong> </td>
</tr>
</tbody>
</table>
<p>From the list above, I have chosen Microsoft’s “Optimized SQL Server 2008 R2 SP1” from the community AMI’s and clicked “Select”. Now I can choose the CPU and memory configurations. Hmm how does a 16 core server sound with 60 gig of RAM? That ought to do it… <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image13.png"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image13_thumb.png" width="535" height="327" /></a></p>
<p>Now I won’t go through the full description of commissioning virtual servers, but suffice to say that you can choose which geographic location this server will reside within Amazon’s cloud and after 15 minutes or so, your virtual server will be ready to use. It can be assigned a public IP address, firewall restricted and then remotely managed as per any other server. This can all be done programmatically too. You can talk to Amazon via web services start, monitor, terminate, etc. as many virtual machines as you want, which allows you to scale your infrastructure on the fly and very quickly. There are no long procurement times and you then only pay for what servers are currently running. If you shut them down, you stop paying.</p>
<h2>But what makes it cool…</h2>
<p>Now I am sure that some of you might be thinking “big deal…any virtual machine hoster can do that.” I agree – and when I first saw this capability I just saw it as a larger scale VMWare/Xen type deployment. But when really made me sit up and take notice was Amazon’s <a href="http://aws.amazon.com/vpc/">Virtual Private Cloud</a> (VPC) functionality. The super-duper short version of VPC is that it allows you <em>extend your corporate network </em>into the Amazon cloud. It does this by allowing you to define your own private network and connecting to it via site-to-site VPN technology. To describe how it works, diagrammatically check out the image below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image10.png"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image_thumb9.png" width="713" height="257" /></a></p>
<p>Let’s use an example to understand the basic idea. Let’s say your internal IP address range at your office is 10.10.10.0 to 10.10.10.255 (a /24 for the geeks). With VPC you tell Amazon “I’d like a new IP address range of 10.10.11.0 to 10.10.11.255” . You are then prompted to tell Amazon the public IP address of your internet router. The screenshots below shows what happens next: </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image11.png" target="_blank"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image_thumb10.png" width="270" height="190" /></a>&#160; </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image62.png" target="_blank"><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="image" border="0" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2011/12/image6_thumb.png" width="449" height="423" /></a></p>
<p>The first screenshot asks you to choose what type of router is at your end. Available choices are Cisco, Juniper, Yamaha, Astaro and generic. The second screenshot shows you a sample configuration that is downloaded. Now any Cisco trained person reading this will recognise what is going on here. This is the automatically generated configuration to be added to an organisations edge router to create an IPSEC tunnel. In other words, we have extended our corporate network itself into the cloud. Any service can be run on such a network – not just SharePoint. For smaller organisations wanting the benefits of off-site redundancy without the costs of a separate datacenter, this is a very cost effective option indeed.</p>
<p><em>For the Cisco geeks, the actual configuration is two GRE tunnels that are IPSEC encrypted. BGP is used for route table exchange, so Amazon can learn what routes to tunnel back to your on-premise network. Furthermore Amazon allows you to manage firewall settings at the Amazon end too, so you have an additional layer of defence past your IPSEC router. </em></p>
<p>This is called Virtual Private Cloud (VPC) and when configured properly is very powerful. Note the “P” is for private. No server deployed to this subnet is internet accessible unless you choose it to be. This allows you to extend your internal network into the cloud and gain all the provisioning, redundancy and scalability benefits without exposure to the internet directly. As an example, I did a hosted SharePoint extranet where we use <a href="http://msdn.microsoft.com/en-us/library/ms187103.aspx">SQL log shipping</a> of the extranet content databases back to the a DMZ network for redundancy. Try doing that on Office365!</p>
<p>This sort of functionality shows that Amazon is a mature, highly scalable and flexible IaaS offering. They have been in the business for a long time and it shows because their full suite of offerings is much more expansive than what I can possibly cover here. Accordingly my Amazon experiences will be the subject of a more in-depth blog post or two in future. But for now I will force myself to stop so the non-technical readers don’t get too bored. <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>So what went wrong?</h2>
<p>So after telling you how impressive Amazon’s offering is, what could possibly go wrong? Like the <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/" target="_blank">Office365 issue covered in part 2</a>, absolutely nothing with the technology. To understand why, I need to explain Amazon’s pricing model.</p>
<p>Amazon offer a couple of ways to pay for servers (called <em>instances </em>in Amazon speak). An <strong>on-demand instance </strong>is calculated based on a per-hour price while the server is running. The more powerful the server is in terms of CPU, memory and disk, the more you pay. To give you an idea, Amazon’s <a href="http://aws.amazon.com/ec2/pricing/" target="_blank">pricing</a> for a Windows box with 8CPU’s and 16GB of RAM, running in Amazon’s “US east” region will set you back $0.96 per hour (as of 27/12/11).&#160; If you do the basic math for that, it equates to around $8409 per year, or <strong>$25228</strong> over three years. (Yeah I agree that’s high – even when you consider that you get all the trappings of a highly scalable and fault tolerant datacentre).</p>
<p>On the other hand, a <strong>reserved instance </strong>involves making a one-time payment and in turn, receive a significant discount on the hourly charge for that instance. Essentially if you are going to run an Amazon server on a 24*7 basis for more than 18 months or so, a reserved instance makes sense as it reduces considerable cost over the long term. The same server would only cost you $0.40 per hour if you pay an up-front $2800 for a 3 year term. Total cost: $13312 over three years – much better.</p>
<p>So with that scene set, consider this scenario: Back at the start of 2011, a client of mine consolidated all of their SharePoint cloud services to Amazon from a variety of other another hosting providers. They did this for a number of reasons, but it basically boiled down to the fact they had 1) outgrown the SaaS model and 2) had a growing number of clients. As a result, requirements from clients were getting more complicated and beyond that which most of the hosting providers could cater for. They also received irregular and inconsistent support from their existing providers, as well as some unexpected downtime that reduced confidence. In short, they needed to consolidate their cloud offering and manage their own servers. They were developing custom SharePoint solutions, needed to support federated claims authentication and required disaster recovery assurance to mitigate the risk of going 100% cloud. Amazon’s VPC offering in particular seemed ideal, because it allowed full control of the servers in a secure way. </p>
<p>Now making this change was not something we undertook lightly. We spent considerable time researching Amazon’s offerings, trying to understand all the acronyms as well as their fine print. (For what its worth I used IBIS as the basis to develop an assessment and the <a href="http://www.cleverworkarounds.com/maps/amazon/Amazon_1011111302746104307.html" target="_blank">map of my notes can be found here</a>). As you are about to see though, we did not check well enough. </p>
<p>Back when we initially evaluated the VPC offering, it was only available in very few Amazon sites (two locations in the USA only) and the service was still in beta. This caused us a bit of a dilemma at the time because of the risk of relying on a beta service. But we were assured when Amazon confirmed that VPC would eventually be available in all of of their datacentres. We also stress tested the service for a few weeks, it remained stable and we developed and tested a disaster recovery strategy involving SQL log shipping and a standby farm. We also <em>purchased reserved instances </em>from Amazon since these servers were going to be there for the long haul, so we pre-paid to reduce the hourly rates. Quite a complex configuration was provisioned in only two days and we were amazed by how easy it all was. </p>
<p>Things hummed along for 9 months in this fashion and the world was a happy place. We were delighted when Amazon notified us that VPC had come out of beta and was now available in any of Amazon’s datacentres around the world. We only used the US datacentre because it was the only location available at the time. Now we wanted to transfer the services to Singapore. My client contacted Amazon about some finer points on such a move and was informed that they would have to pay for their <strong>reserved instances all over again!</strong> </p>
<p>What the? </p>
<p>It turns out, <strong>reserved instances are not transferrable</strong>! Essentially, Amazon were telling us that although we paid for a three year reserved instance, and only used it for 9 months, to move the servers to a new region would mean we have to <strong>pay all over again for another 3 year reserve</strong>. According to Amazon’s documentation, each reserved instance is associated with a specific region, which is fixed for the lifetime of the reserved instance and cannot be changed.</p>
<p>“Okay,” we answer, “we can understand that in circumstances where people move to another cloud provider. But in our case we were not.” We had used around 1/3rd of the reserved instance. So surely Amazon should pro-rata the unused amount, and offer that as a credit when we re-purchase reserved instances in Singapore? I mean, we will still be hosting with Amazon, so overall, they will not be losing any revenue al all. On the contrary, we will be paying them more, because we will have to sign up for an additional 3 years of reserve when we move the services. </p>
<p>So we ask Amazon whether that can be done. “Nope,&quot; comes back the answer from amazons not so friendly billing team with one of those trite and grossly insulting “Sorry for any inconvenience this causes” ending sentences. After more discussions, it seems that internally within Amazon, each region or datacentre within each region is its own profit centre. Therefore in typical silo fashion, the US datacentre does not want to pay money to the Singapore operation as that would mean the revenue we paid would no longer recognised against them. </p>
<p>Result? Customer is screwed all because the Amazon fiefdoms don’t like sharing the contents of the till. But hey – the regional managers get their bonuses right? <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.cleverworkarounds.com/wp-content/uploads/2012/01/wlEmoticon-sadsmile.png" /></p>
<h2>Conclusion</h2>
<p>Like <a href="http://www.cleverworkarounds.com/2011/12/19/the-cloud-isnt-the-problempart-2-when-complex-technology-meets-process/" target="_blank">part 2</a> of this cloud computing series, this is not a technical issue. Amazon’s cloud service in our experience has been reliable and performed well. In this case, we are turned off by the fact that their internal accounting procedures create a situation that is not great for customers who wish to remain loyal to them. In a post about the <a href="http://www.cleverworkarounds.com/2011/05/22/whatever-you-do-do-not-ignore-legacy/" target="_blank">danger of short termism and ignoring legacy</a>, I gave the example of how dumb it is for organisations to think they are measuring success based on how long it takes to close a helpdesk call. When such a KPI is used, those in support roles have little choice but to try and artificially close calls when users problems have not been solved because that’s how they are deemed to be performing well. The reality though is rather than measure happy customers, this KPI simply rewards which helpdesk operators have managed to game the system by getting callers off the phone as soon as they can. </p>
<p>I feel that Amazon are treating this is an internal accounting issue, irrespective of client outcomes. Amazon will lose the business of my client because of this since they have enough servers hosted where the financial impost of paying all over again is much more than transferring to a different cloud provider. While VPC and automated provisioning of virtual servers is cool and all, at the end of the day many hosting providers can offer this if you ask them. Although it might not be as slick with fancy as Amazon’s automated configuration, it nonetheless is very doable and the other providers are playing catch-up. Like Apple, Amazon are enjoying the benefits of being first to market with their service, but as competition heats up, others will rapidly bridge the gap. </p>
<p>Thanks for reading</p>
<p>Paul Culmsee</p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/&title=The+cloud+is+not+the+problem%26ndash%3BPart+3%3A+When+silos+strike+back%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/&title=The+cloud+is+not+the+problem%26ndash%3BPart+3%3A+When+silos+strike+back%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/&title=The+cloud+is+not+the+problem%26ndash%3BPart+3%3A+When+silos+strike+back%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/&title=The+cloud+is+not+the+problem%26ndash%3BPart+3%3A+When+silos+strike+back%26hellip%3B" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2012/01/03/the-cloud-is-not-the-problempart-3-when-silos-strike-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why do SharePoint Projects Fail &#8211; Part 3</title>
		<link>http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/</link>
		<comments>http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 12:19:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Finance]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Wicked Problems]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/</guid>
		<description><![CDATA[This third post in the &#8220;Who do SharePoint Projects Fail&#8221; series has been hard to write, not because I am struggling with ideas, but because I have too many! It is hard to put all the reasons why SharePoint projects go wrong into a coherent chain of logic. In the first two posts in this [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
google_ad_client = "pub-6551570212921028";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel = "";
google_ui_features = "rc:6";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p>This third post in the &#8220;Who do SharePoint Projects Fail&#8221; series has been hard to write, not because I am struggling with ideas, but because I have too many! It is hard to put all the reasons why SharePoint projects go wrong into a coherent chain of logic. </p>
<p>In the first two posts in this series, we did a basic examination of wicked problem theory. </p>
<p><a href="http://www.cleverworkarounds.com/2008/04/11/why-do-sharepoint-projects-fail-part-1/">Part 1</a> introduced you to tequila slammers, as well as the pioneering work by Horst Rittel and the concept of wicked problems.</p>
<p><a href="http://www.cleverworkarounds.com/2008/04/15/why-do-sharepoint-projects-fail-part-2/">Part 2</a> also delved into the murky depths of academic history to demonstrate that even back in the seventies when ABBA stole the hearts and minds of teenyboppers around the world, at least some people had time to look at wicked problems in relation to building IT systems. </p>
<p>If you take away anything from part 1 and 2, it is this. </p>
<ul>
<li>Too many tequila slammers hurt  </li>
<li>Before you blame the product, the project manager, the stakeholders, the nerds, the methodology or anything else in vicinity, go back to the problem you are solving and determine its &#8216;wickedness&#8217; </li>
</ul>
<p>Now we will finally look at this large, complex, scary beast known as SharePoint. I have no means to quantify how much of a percentage of project problems arise from issues related to &#8220;the product&#8221;, but it definitely happens. Unsurprisingly enough, it is easy to argue that some of the areas that I highlight below are people issues, but we still get to indulge in Microsoft bashing &#8211; and who doesn&#8217;t enjoy a bit of that eh?</p>
<p><span id="more-738"></span></p>
<h2>The Microsoft Effect &#8211; Good enough&#8230;</h2>
<p>Microsoft in some ways remind me of Brittany Spears*. Both crash things, both can be abusive, both get themselves into trouble with the law, both have ignored legal judgements, both have loyal fans who love them no matter what and detractors that will never accept they can do anything right, both get caught with their pants down on occasion, and both have produced some pretty ordinary crap in their time. Despite this, they sell squillions of copies and make a ton of money. </p>
<p><em>*Just in case you read this article at some future point where Brittany is long forgotten, substitute whichever starlet is in rehab</em></p>
<p>But Microsoft is *big*, Microsoft are *safe*. We already use Microsoft in the organisation now and thus Microsoft products *integrate well*. </p>
<p>So what is it about SharePoint that makes it such a magnet for a wicked project? Put quite simply, with SharePoint they have taken integration to another level. Microsoft have done their homework and created a product/platform that has a combination of the right kind of capabilities that *together* can be extremely compelling. Each component, judged individually as a point solution would not necessarily compete against dedicated products in the space. But Microsoft long ago learned that a combination of tight integration and the old 80/20 rule usually wins.</p>
<p>There have been document management systems and web content management for years. I&#8217;ve previously been involved with a large Hummingbird deployment. As soon as I saw MOSS 2007 I know it was going to massive, not because it was as good as Hummingbird, because it wasn&#8217;t. But it was *good enough* and it was made by Microsoft. Market success therefore was assured.</p>
<h2>Easy to Impress &#8211; A Mythical Example</h2>
<p>To demonstrate how effective this combination of features can be as a sales tool, consider this mythical conversation between a somewhat green, yet enthusiastic Microsoft evangelist named <strong>Bill Gates</strong>, who is discussing MOSS with key stakeholders at the company GOOSUNACLE. Their names are Scott McNealy, Sergei Brin, Steve Jobs and Larry Ellison. </p>
<p><em>(1 point for each in-joke you spot)</em></p>
<p><strong>Scott McNealy (Infrastructure Manager)</strong>: Okay Bill, here&#8217;s our key problem. We can&#8217;t find anything and our knowledge sharing is abysmal. We waste so much time trying to work out where stuff should be, and nobody follows the standards. People reinvent the wheel constantly and we keep making the same mistakes over and over again. Our file system really sucks with so much duplication and complexity. It has so much history there, that nobody wants to own it or fix it up. This has cost us market share and our bottom line is suffering. What can you do to help?</p>
<p><strong>Bill Gates</strong>: Well Scotty, (do you mind if I call you Scotty?), I am glad you asked. SharePoint represents a new way to manage your enterprise documents. It can help you with built in version control, check-in/out, metadata classification and a recycle bin. Additionally, it is web based, making it much more accessible to your staff. It is also tightly integrated with Microsoft Office, particularly the 2007 version. We also have document format conversion features and records management too.</p>
<p><strong>Sergei Brin (Knowledge Manager) </strong>: &#8220;Sweet!. Kind of makes the whole notion of a separate intranet and file system start to look &#8216;old school&#8217;. What about search? I feel very strongly that a good search engine is worth its weight in gold.</p>
<p><strong>Bill Gates</strong>: That&#8217;s a great point you make Sergei, but I think it is best you leave search to us experts at Microsoft. Now in relation to your question, search is vitally important and SharePoint has a very powerful, scalable, customisable search engine that allows you to index all sorts of data sources.&nbsp; </p>
<p><strong>Larry Ellison (Database Administrator).</strong> Okay, so you can classify and search your files and other content. But I&#8217;m a database kind of guy. What about our line of business data in our databases? Can we improve its visibility to a larger audience?</p>
<p><strong>Bill Gates</strong>: You certainly can Larry. We have several features that facilitate this, but specifically, we have the business data catalogue feature, which allows you to connect to 3rd party data sources for search, business intelligence and reporting. That way, you do not need to train your users in your line of business applications. They can simply visit the SharePoint portal, and view their dashboards and key performance indicators, so gain visibility into the business. In addition we integrate with SQL Reporting Services and can easily surface enterprise reports into the portal. Excel services is another feature that falls into this area. Imagine being able to publish your complex Excel sheets to the portal and users can interact with then without requiring excel on their desktops.</p>
<p><strong>Scott McNealy: </strong>That is all very interesting indeed, document management, business intelligence and reporting in the one product. The other big issue we have is ensuring that people do things consistently. Larry and Steve in particular, keep releasing marketing slogans without formal approval. The &#8220;unbreakable&#8221; and &#8220;sooper dooper secure&#8221;&nbsp; campaigns kind of backfired on us, and it would have been much better we had a more rigorous review process.</p>
<p><strong>Bill Gates:</strong> Ah yes Scotty my lad, that is an excellent example. SharePoint contains a powerful workflow engine under the hood, that allows us to automate business process. So for example, at Microsoft when staff members leave the company, as part of our exit process we automatically create a task for the ever popular &#8220;throw the chair sendoff&#8221;. Supporting the workflow, is the document management features that I described earlier, as well as business forms via infopath and forms server.</p>
<p><strong>Steve Jobs (Communications and Branding Manager). </strong>What about the GUI? It has to look good for people to engage with it. Additionally, I&#8217;d like the content to be available via mobile devices too. </p>
<p><strong>Bill Gates: </strong>SharePoint has a powerful web content management foundation as well. It is built upon ASP.NET, which uses a templating system known as master pages, page layouts and web parts. But rather than me get into the detail here, I&#8217;ll recommend you visit my all time favourite blog called CleverWorkArounds and read the <a href="http://www.cleverworkarounds.com/2007/10/08/sharepoint-branding-how-css-works-with-master-pages-part-1/" target="_blank">branding series</a>. It should answer all of your questions. In relation to mobile devices, content can be displayed on these devices with no additional conversion. Suffice to say that it takes advantage of some of the workflow and document management features to facilitate content editorial approval, scheduled publication, and the like. </p>
<p><strong>Steve Jobs:</strong> We are sold, Sergei, pass me the chequebook.</p>
<h2>The downsides of versatility</h2>
<p>So, Bill has sold Steve, Larry, Sergei and Scott on the possibilities of SharePoint. All of their respective buttons have been pushed and that can see it solving particular problems in the business. At a high level, they can see the value of re-use and efficiencies gained from using the same platform.</p>
<p>But which problem are we solving? If you asked them individually at this point, they would give you different answers. Its clear that Steve likes the WCM features, while Larry digs Business Intelligence. Sergey loves search and Scott wants to sort out document management. </p>
<p>Already, there is a wicked problem in the making, because it is easy to fall into the trap of &#8220;a tool looking for a problem&#8221; and nobody yet has the same definition of the problem. (one of Rittel&#8217;s key wicked problem warning signs that we covered in part 1) </p>
<h2>The panacea effect</h2>
<p>With so many features in SharePoint, combined in just the right way, it is the panacea you have been looking for. So you have found your cure, lets use it for everything right? The panacea solution often costs more, or is overkill for an initial problem, so to justify it requires you to sell it&#8217;s potential to solve other, bigger problems.</p>
<p>If you have read the first two articles in this series, you will realise pretty quickly that this is very high risk approach and can get out of hand pretty quickly. Just because a tool is versatile and has the potential to solve multiple problems does not mean it will necessarily be the best option to solve your <strong>particular </strong>problem.</p>
<p><em>Add the Microsoft effect to the panacea effect and the combination is more lethal!</em>&nbsp;</p>
<p><a href="http://www.cleverworkarounds.com/2008/02/17/selling-moss-a-choose-your-own-adventure-story/"><img style="margin: 0px 15px 0px 0px" height="324" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb34.png" width="202" align="left" border="0"/></a>IT departments are particularly guilty of going down the panacea road and the reason this happens is also unsurprising when you think about it. IT are conditioned to <strong>think</strong> in terms of &#8216;tools and services&#8217;. By that I mean that, they exist to <strong>support and manage </strong>the organisations <strong>IT services</strong>. All business divisions have a desire to consolidate, streamline and reduce wastage and the IT department is no exception. In terms of an IT Department perspective, consolidating the number of &#8220;IT services&#8221; is attractive as there is tangible cost in managing many disparate systems. </p>
<p>So on the surface of it, SharePoint brings the IT department the potential tangible advantage of a common platform to support and manage.</p>
<p>I won&#8217;t belabour this point any further, because I have written about this issue on a couple of occasions, the best example being my <a href="http://www.cleverworkarounds.com/2008/02/17/selling-moss-a-choose-your-own-adventure-story/" target="_blank">choose your own adventure</a> post and more specifically, its <a href="http://www.cleverworkarounds.com/2008/02/22/selling-moss-the-moral-of-the-story/" target="_blank">follow up</a>. To the left is the book cover I did for the choose your own adventure. Sometimes pictures speak a thousand words. <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>It is also not fair to pick on IT either. I&#8217;ve gone out to many sites where the &#8216;SharePoint champion&#8217; is not an IT person at all. But there is a consistent theme there. They want to use it because they have seen <strong>the potential</strong> for it to solve problems. Seeing the potential to solve a problem is not a problem statement. Therefore, by deploying this tool into the organisation, what problem are you solving and how do you determine if it has been effectively solved?</p>
<p>As a result of the panacea effect, we end up at another great debate of IT projects.</p>
<h2>Point solution vs platform solution</h2>
<p>I believe that as far as web content management products go, there are better point solutions around than the features SharePoint supply. <a href="http://wordpress.org/">WordPress</a> for me is a much better blog system than SharePoint, <a href="http://www.drupal.org/">Drupal</a> as a pure WCM offers similar features to SharePoint for a fraction of the cost. <a href="http://www.documentum.com/">Documentum</a> is a better records management system by far and <a href="http://www.cognos.com/">Cognos</a> is going to trump SharePoint in the business intelligence stakes. Closer to home, in my <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">SharePoint for Cisco nerds</a> series, I had a <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/#comments">comment</a> that suggested that <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/#comments">RANCID</a> was a much better choice than SharePoint for Cisco configuration backups. He is absolutely right too, it is much better. But he is equally wrong too, depending on what the problem is and the point of view of the individual. (to find out why you have to read the whole series and judge for yourself)</p>
<p>This debate is essentially a version of the &#8220;Off the Shelf&#8221; vs &#8220;Custom Designed Software&#8221; chestnut. A point solution will meet your core requirements, however it may require you to change your business processes to work around it. Custom designed solutions can integrate nicely with your business process as they are to your exact specification. But the time and cost to develop can be significantly more and requirements can be fluid or prone to creep. (and you know how project managers <strong>hate</strong> that!)</p>
<p>Ah, but of course, being a point solution, the advantage of those products are diluted as your requirements broaden. You need multiple point solutions, those point solutions need to play nice with each other. The integration and support costs start to increase.</p>
<p>Although I see SharePoint as a platform solution in general, it actually has the best and worst elements of both off the shelf <strong>and</strong> custom designed software. It can cost you a lot of dollars and it all depends on your problem being solved. For example, it can be used purely as an application development platform, where a custom solution can take advantage of SharePoint features to underpin their own application, saving development time as you do not have to write certain functionality yourself. In this scenario it was always going to be a custom development job anyway, and SharePoint actually saves you money. </p>
<p>However, some problems are best fixed with a point solution and some are not. Where you can get into trouble is investing a lot of time and effort into a platform, because of the adherence to the panacea effect. The goal behind the platform may well be legitimate and well intentioned, but at the end of day, you are potentially talking a high development cost to get it exactly the way you want when a point solution may be a fraction of the cost. </p>
<p>I previously blogged a 6 part series on <a href="http://www.cleverworkarounds.com/2007/11/17/learn-to-talk-to-your-cfo-in-their-language-part-1/">SharePoint ROI considerations</a>, and although I haven&#8217;t blogged about it yet, there are financial modelling techniques available to consider some of the esoteric considerations like &#8216;opportunity cost&#8217; of point vs platform. I will blog on this topic in the future, but for now, if you take anything away from this section, it is not to underestimate the value of the point solution when looking at your problem being solved.</p>
<h2>Conclusion</h2>
<p>*pauses for a big sigh*</p>
<p>That was a tough article to write, and the next one is probably going to be tougher, as I will no doubt have an urge to go back and edit this article. But I&#8217;ll resist that temptation as otherwise I&#8217;d never get these articles out. </p>
<p>But I hope that what you take away from this post is a deeper understanding of some of the reasons why a SharePoint project in particular can get out of hand and become wicked in nature. The quicker you spot them, the quicker you can head off the potential pain and suffering that will follow.</p>
<p>In the <a href="http://www.cleverworkarounds.com/2008/04/24/why-do-sharepoint-projects-fail-part-4/">next post</a> we will keep digging around SharePoint&#8217;s dirty little secrets and then look into some techniques that we can use to try and mitigate some of these issues.</p>
<p>cheers</p>
<p>Paul</p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/&title=Why+do+SharePoint+Projects+Fail+%26%238211%3B+Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/04/19/why-do-sharepoint-projects-fail-part-3/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco FanBoys (final housekeeping) &#8211; Part 6</title>
		<link>http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/</link>
		<comments>http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 13:30:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/</guid>
		<description><![CDATA[Hey there! Sorry it has taken me a while to get back to the Cisco articles. The &#8220;choose your own adventure&#8221; post took longer than I thought it would and I also was side tracked blogging about annoying programming issues with XML and Javascript. This is the last of the Cisco fanboy series of articles [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>Hey there!  </p>
<p>Sorry it has taken me a while to get back to the Cisco articles. The &#8220;<a href="http://www.cleverworkarounds.com/2008/02/17/selling-moss-a-choose-your-own-adventure-story/">choose your own adventure</a>&#8221; post took longer than I thought it would and I also was side tracked blogging about annoying programming issues with <a href="http://www.cleverworkarounds.com/2008/02/06/form-services-and-spd-workflows/">XML</a> and <a href="http://www.cleverworkarounds.com/2008/02/07/more-sharepoint-branding-customisation-using-javascript-part-1/">Javascript</a>.  </p>
<p>This is the last of the Cisco fanboy series of articles and really its more a tidying up of loose ends. To call this last article a Cisco fanboy article is a bit of a stretch actually, since we are now moving to a broader level of governance and accountability, and is therefore not really about Cisco, so I&#8217;ll start a new series more appropriately titled and continue from where this article leaves off.&nbsp; </p>
<p>I started the series with the intent of starting with a seemingly innocuous scenario (Cisco TFTP backups), demonstrating how SharePoint can be leveraged as an okay point solution. I then tried to slowly expand the scope to the broader issues of complex infrastructure management management, while sticking to a Cisco/IP network oriented theme in an attempt to get technical thinkers (like Cisco guys) to think beyond nuts and bolts. This also demonstrated how thinking past &#8216;the point solution&#8217; can being more substantive benefits.&nbsp; </p>
<p><span id="more-592"></span></p>
<p>&nbsp; </p>
<p>Here is the quick recap on what we have covered so far:
<ul>
<li><a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">Part 1</a> illustrated how it it possible to use SNMP to tell a Cisco IOS device to dump its configuration to TFTP. We talked about the version control feature of SharePoint and why it makes sense to TFTP your configs to a SharePoint document library. We covered the WEBDAV network provider supplied with XP and Win2003 and finished off with a basic example using the TFTP server TFTPD32.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">Part 2</a> went into more detail about the issues you can face when using the WEBDAV network provider. It also went into more detail on 3 TFTP server products (<a href="http://www.tftp-server.com/">WinAgents TFTP</a>, <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> and <a href="http://tftpd32.jounin.net/">TFTPD32</a> and why TFTPD32 ended up being the best choice for this purpose.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">Part 3</a> then looked at a wonderful open source TFTP server written in C# called <a href="http://sourceforge.net/projects/tftputil">TFTPUtil</a>. We modified the source code of this TFTP server to use the SharePoint SDK and upload files to a SharePoint document library.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/">Part 4</a> continued the examination of the TFTPUtil server and another modification of it to use SharePoint web services to upload files. We then summarised the merits of each of the methods.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/">Part 5</a> switched tack and introduced a real world applicable scenario of combining Cisco configuration backups along with diagrams, documentation, asset information and site/support information into a one-stop-shop integrated portal, utilising lists, libraries and workflow to integrate it all neatly.</li>
</ul>
<p>As I said in my introduction, I intend to get into some more high level strategic stuff in relation to IT operations/infrastructure management in a forthcoming series of articles. So in this last set of articles, I will cover off one major remaining question that I think my technically minded readers would want to see addressed.</p>
<h2>&#8220;But what if SharePoint dies&#8221;?</h2>
<p>This is a very common query/issue I get. (Luckily, I have an answer that has satisfied all so far &#8230; touch wood&nbsp; <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>Although I have been able to convince even some of the most fervent anti-Micro$oft, anti-portal people the power that SharePoint can offer for knowledge management and collaboration, people quite rightly get a little nervous about the notion of all of your critical information sitting in a single application like SharePoint. </p>
<p>Certainly, SharePoint&nbsp; is a damn complex suite of applications, meaning that it&#8217;s own backup and recovery is more complex than most applications. It requires forward planning, user and IT staff training, lots of governance, a relatively process mature IT department and a heck of a lot of other effort. <em>&#8220;and after all of that you still want me to store all of our critical information there?&#8221;</em></p>
<p>I believe absolutely that it is well worth this effort, and a cheap tool released by the guys at Colligo make the whole question somewhat redundant with the release of their cheap (but excellent) &#8220;Colligo Reader&#8221;.</p>
<p>Colligo Reader is free for personal use and cheap for corporate use. It allows a one way replication of SharePoint portals for offline access. &#8220;Yeah but Outlook and Groove can do this&#8221;, I hear you say. but this product synchronises libraries, lists, forms, all the while preserving their views. Sweet!</p>
<p>Imagine the possibilities here. Your network administrators could run a continual sync of your Cisco infrastructure portal on their laptops. In the event of a major catastrophic fault where all IT services are unavailable (including SharePoint), you have an the most up to date copy of your documentation, support information and most recent network configuration.</p>
<h2>Colligo Demonstrated</h2>
<p>So let&#8217;s install the product and synchronise the <a href="http://tidemo/tftp">http://tidemo/tftp</a> site that we used in the previous articles to illustrate how useful Colligo is.</p>
<p>Starting Colligo reader for the first time presents you with a basic GUI as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image34.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="279" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb35.png" width="604" border="0"/></a> </p>
<p>The first thing to do is to choose a SharePoint site to synchronise. Click the site drop down and choose to download a site. Enter the URL of the SharePoint site to download.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image35.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="134" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb36.png" width="235" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image36.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="233" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb37.png" width="301" border="0"/></a> </p>
<p>Colligo Reader will now perform an initial sync of the site. Depending on how much content is stored on the site, this may take some time.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image37.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="166" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb38.png" width="386" border="0"/></a> </p>
<p>One the initial sync has completed, you see the main Colligo Reader screen, except this time we can see the site listed and the documents and lists that have been synchronised.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image38.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="300" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb39.png" width="459" border="0"/></a> </p>
<p>Now let&#8217;s examine some of the lists and document libraries created in <a href="http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/">part 5</a>, that have been synchronised.</p>
<h3>IT Asset Documentation</h3>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image40.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="261" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb40.png" width="644" border="0"/></a> </p>
<p>Note that this looks somewhat like a SharePoint document library. We have our views on the top right, and we can also see the documents and the metadata columns that were created for this library. (&#8220;Related Device&#8221; and &#8220;Document Type&#8221;). Below is the same document library, illustrating the &#8220;By Document Type&#8221; view.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image50.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="302" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb41.png" width="644" border="0"/></a> </p>
<p>For reference, here is the original SharePoint view to compare.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image51.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb42.png" width="644" border="0"/></a> </p>
<h3>&#8220;Client Sites&#8221; List</h3>
<p>Below is the synchronised &#8220;Client Sites&#8221; list. Like the document library example above, all columns and views are fully synchronised.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image52.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="218" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb43.png" width="644" border="0"/></a> </p>
<h3></h3>
<h2>Caveats</h2>
<p>There are only three issues that spring to mind when using Colligo Reader. All three could be addressed by Colligo is they felt so inclined.</p>
<p>The first caveat is that only the latest version of library/list data is replicated. So those 291 versions of myfile.txt I had in my <a href="http://tidemo/tftp">http://tidemo/tftp</a> site (see below <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ), only the latest one is replicated to Colligo.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image53.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="182" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/02/image-thumb44.png" width="410" border="0"/></a></p>
<p>I don&#8217;t see this as a major issue, as the whole point here is disaster recovery for when SharePoint is not available. </p>
<p>The second caveat is when a site is replicated, sub-sites are not replicated unless you explicitly add them to be downloaded. It would be great if you could tick a box that says to replicate the current site and all sub-sites.</p>
<p>The final caveat is the major one. I really wish that Colligo offered to password protect synchronised sites (on a site by site basis). While it is great to be able to have an up to date, offline copy of your critical infrastructure information, but some will then point to the obvious security implications of laptops containing this goldmine of sensitive information all nicely laid out for unauthorised parties to access.</p>
<p>My technical answer to this is to look at Vista/<a href="http://en.wikipedia.org/wiki/BitLocker_Drive_Encryption">bitlocker</a> (or 3rd party equivalent) encryption at an operating system level, since Colligo content isn&#8217;t necessarily the only sensitive content on a notebook or PC. </p>
<p>My non technical answer is that this is a typical risk vs reward scenario and the applicability of this solution is really dependent on your security posture. </p>
<h2>Conclusion</h2>
<p>Colligo Reader is an exceptionally useful tool for the offline synchronisation of certain types of SharePoint portals, in particular IT infrastructure and managed services portals make excellent candidates. Our example above shows that we now have VPN details, customer contacts, documentation, configuration backups and support contract details all readily available without requiring SharePoint being available. </p>
<p>So, when step back and look at all we have covered here (particularly the last two articles), we have managed to kick a few significant goals. What makes this really interesting is that we are using tools and techniques that is applicable not just for Cisco gear, but pretty much any other IT infrastructure, whether it is line of business applications, complex hardware or a combination of both. </p>
<p>Whatsmore, while not replacing the need for and value of a Business Impact Analysis and Disaster Recovery Plan, you have still in a significantly improved position if something bad was to occur.</p>
<p>As I said earlier, I&#8217;ll be revisiting this again, now more broadly, looking at this topic from the point of view of an IT Operations Manager who has compliance requirements. They are not interested in Cisco per se, but about the whole enchilada!</p>
<p>until then&#8230;</p>
<p>regards</p>
<p>Paul</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/&title=SharePoint+for+Cisco+FanBoys+%28final+housekeeping%29+%26%238211%3B+Part+6" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/02/19/sharepoint-for-cisco-fanboys-final-housekeeping-part-6/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sharepoint for Cisco Fanboys (beyond TFTP) &#8211; Part 5</title>
		<link>http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 15:31:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/</guid>
		<description><![CDATA[Greetings SharePoint fans and Cisco people who are soon to be SharePoint fans! I&#8217;m back with part 5 of this series on leveraging features of MOSS 2007 and WSS 3.0 to help manage Cisco infrastructure. For those of you who hate programming topics and have no interest in TFTP issues, we may well have finally [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--Adsense-->
<p>Greetings SharePoint fans and Cisco people who are soon to be SharePoint fans! I&#8217;m back with part 5 of this series on leveraging features of MOSS 2007 and WSS 3.0 to help manage Cisco infrastructure.</p>
<p>For those of you who hate programming topics and have no interest in TFTP issues, we may well have finally gotten to a topic that you are interested in! For the rest of you, who have read the first four articles, we now shift our focus from getting Cisco configurations into SharePoint, to doing something useful with them once we have done so.</p>
<p>In this post, we will examine the out of the box capabilities of workflow in SharePoint and delve a little deeper into document libraries and content management. So this is more aimed at Cisco people than it is at SharePoint Pros. SharePoint people, much of the topics I cover in this article you may have seen before. </p>
<p>I personally don&#8217;t think this post has a high coffee requirement rating in terms of complexity of concepts, compared to the last two anyhow. However be prepared: it is a long read.</p>
<p>CleverWorkArounds Coffee requirement rating: <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a></p>
<p><span id="more-472"></span></p>
<p>Here is the quick recap on what we have covered so far:
<ul>
<li><a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">Part 1</a> illustrated how it it possible to use SNMP to tell a Cisco IOS device to dump its configuration to TFTP. We talked about the version control feature of SharePoint and why it makes sense to TFTP your configs to a SharePoint document library. We covered the WEBDAV network provider supplied with XP and Win2003 and finished off with a basic example using the TFTP server TFTPD32.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">Part 2</a> went into more detail about the issues you can face when using the WEBDAV network provider. It also went into more detail on 3 TFTP server products (<a href="http://www.tftp-server.com/">WinAgents TFTP</a>, <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> and <a href="http://tftpd32.jounin.net/">TFTPD32</a> and why TFTPD32 ended up being the best choice for this purpose.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">Part 3</a> then looked at a wonderful open source TFTP server written in C# called <a href="http://sourceforge.net/projects/tftputil">TFTPUtil</a>. We modified the source code of this TFTP server to use the SharePoint SDK and upload files to a SharePoint document library.  </li>
<li>Part 4 continued the examination of the TFTPUtil server and another modification of it to use SharePoint web services to upload files. </li>
</ul>
<p>I think the best way to get stuck into part 5 is via a real-world Cisco scenario. For this scenario, I will (loosely) use one of my roles from a few years back. It was not the biggest or most complex network I&#8217;ve managed, but it was quite varied due to the nature of the business they were in.</p>
<h2>The scenario</h2>
<p>Our scenario company is called CleverWorkArounds Corp and it is a products and services company. This business is involved in <a href="http://en.wikipedia.org/wiki/Digital_signage">digital signage</a> primarily (you know all those LCD screens spamming you with information and advertisements in shopping malls, train stations, cinemas, fancy hotel lobbies, casinos, etc). </p>
<p>Below is an example of large scale digital signage. Look closely&#8230;is that a windows error I see? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image46.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="334" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb46.png" width="444" border="0"/></a> </p>
<p>There are many installations of the product all over the world. Some locations include countries with encryption restrictions or government firewalls. Many of the installations are contracted to be monitored in real-time and in many installs the day to day management is provided by CleverWorkArounds Corp as a managed service.</p>
<p>Including head office in the USA, CleverWorkArounds Corp has 5 offices around the world where the installations are put together and tested before being shipped to site.</p>
<h2>The Network</h2>
<p>The network infrastructure employed by CleverWorkArounds Corp is Cisco based. The most complex part about it is the VPN connectivity to office and client sites. There is a lot of variation. &#8220;Managed Service&#8221; type installations typically use CleverWorkArounds Corp supplied network gear on site, in a segmented or isolated network. However many installations are hosted on the client&#8217;s infrastructure, often not Cisco, and all CleverWorkArounds Corp has is a VPN connection to the site.</p>
<p>CleverWorkArounds Corp has implemented VLAN&#8217;s, <a href="http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/">wireless</a> and multicast networking at many sites. The security set-up and configuration varies from site to site, as it depends on who owns the infrastructure, security posture of the client and the level of local support on the ground at that site.</p>
<p>Finally, even the VPN technology varies. Most sites are <a href="http://www.cleverworkarounds.com/2007/10/08/an-annotated-ipsec-example/">point-to-point IPSEC</a>, but some require CleverWorkArounds Corp to use PPTP or SSL VPN via <a href="http://openvpn.net/">OpenVPN</a> when firewalls/government restrictions get in the way.</p>
<h2>The Issues</h2>
<p>The most critical issue with this type of network is security. Not only does CleverWorkArounds Corp have to protect itself from it&#8217;s clients, since many client sites are VPN connected with varying levels of security posture, CleverWorkArounds Corp also has to protect client&#8217;s from each-other. A relatively complex set of access lists are maintained and authentication to all CleverWorkArounds Corp network devices is via RADIUS and central authentication.</p>
<p>Aside from security, the CleverWorkArounds Corp corporate offices are connected to each-other via GRE tunnels over IPSEC, which allows multicast traffic and as a side effect, dynamic routing protocols. EIGRP is the protocol used. Many &#8216;lab&#8217; VLAN&#8217;s are running at any given time, while new installations are being put together. </p>
<p>On the VPN side, on top of the variation in underlying technology, some Network Address translation is performed where IP address ranges overlap, as many clients like to use the 10.0.0.0 network with a /8 subnet mask (255.0.0.0) and don&#8217;t realise how restrictive this can be when doing b2b connectivity. </p>
<h2>So What Are We Interested In Here?</h2>
<p>From the point of view of the business, all of this has to be up and running, humming along with no service disruption as downtime = lost $. No doubt you have taken out SMARTnet maintenance contracts right? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . </p>
<p>So you need to have all the tools and critical information on hand to recover as quickly as possible.</p>
<p>In my career, I&#8217;ve been dumped into the deep end a few times, inheriting pathetically maintained/managed infrastructure that is undocumented and a ticking time-bomb. Is this picture familiar? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <a href="http://www.flickr.com/photos/rabsda/174060325/"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 15px 10px 0px; border-right-width: 0px" height="379" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image47.png" width="254" align="left" border="0"/></a> </p>
<p>Thus I always like to leave a site or infrastructure well documented. However my philosophy here is not to rewrite the manual. I do make some assumptions, including the assumption that the next person taking over at least has some semblance of previous experience and understanding of the products making up the infrastructure.</p>
<p>Therefore I do not attempt to rewrite product manuals. I will write a general network SOE document to go with a layer 2 and layer 3 network diagram. The SOE will cover implementation details of the network design including RADIUS, SNMP, EIGRP, Spanning tree, VPN, VLAN&#8217;s, IP Telephony, etc. But the SOE will not explain what each of these technologies are and what they do &#8211; that is assumed information.</p>
<p>That document is around 40-60 pages usually and once written, it is fairly easy to maintain because it is not filled with constantly changing operation information. That is kept separately. For example I&#8217;ll maintain lists of each client site, including the IP range used, details and serial numbers of devices on site, maintenance agreement numbers, client contact details, passwords, VPN details such as the certificate or shared key. I&#8217;ll document what each VLAN is for, SNMP community string, etc.</p>
<p>Finally, in case you did not know already <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , I implement my perl script to back up the configurations of all of the IOS devices to TFTP. (And that perl script is well documented in the network SOE I described earlier).</p>
<p>So this is all very nice and standard practice, and we can do this <strong>without </strong>SharePoint just fine, but let&#8217;s go through an simple example of maintaining this information in SharePoint and see the benefits.</p>
<h2>SharePoint Revisited</h2>
<p>First up, let&#8217;s now modify the SharePoint site (<a href="http://tidemo/tftp">http://tidemo/tftp</a>) we were using for the TFTP experimentation. We will add some additional columns and lists. This will allow us to track much more interesting information than just the backups of router configs. </p>
<p>CleverWorkArounds caveat: This is an example and does not reflect reality! It purely serves to illustrate SharePoint&#8217;s capabilities. In addition, this is not meant as a complete newbie SharePoint tutorial or this post would get far too big &#8211; I have skipped some details here. </p>
<h2>&#8220;Clients&#8221; list</h2>
<p>First up, we have a number of clients and remote sites. So let&#8217;s create a contact list to store client and key contact details. From &#8220;Site Actions&#8221;, choose &#8220;Create&#8221; and from the list of choices, create a new Contacts list.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image48.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="102" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb47.png" width="211" border="0"/></a> </p>
<p>We will call this list &#8220;Clients&#8221; and add some clients in.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image49.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb48.png" width="554" border="0"/></a> </p>
<h2>&#8220;Client Sites&#8221; list</h2>
<p>Next up, each client can have one or more sites. For each site, we are interested in not only its physical location, but also the IP Address range used at that site, the VPN type and detail. For this we will create a <strong>custom list</strong> called &#8220;Client Sites&#8221; with the following columns</p>
<table cellspacing="0" cellpadding="2" width="590" border="1">
<tbody>
<tr>
<td valign="top" width="114">Name</td>
<td valign="top" width="100">Type</td>
<td valign="top" width="97">Scope</td>
<td valign="top" width="277">Other Information</td>
</tr>
<tr>
<td valign="top" width="114">Client</td>
<td valign="top" width="100">Lookup (Clients)</td>
<td valign="top" width="97">Site Column</td>
<td valign="top" width="277">Get information from: Clients<br />In this column: Company </td>
</tr>
<tr>
<td valign="top" width="114">Site Name</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">(renamed &#8220;Title&#8221; column)</td>
</tr>
<tr>
<td valign="top" width="114">Address</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">Site Column</td>
<td valign="top" width="277">Column already exists by default</td>
</tr>
<tr>
<td valign="top" width="114">IP Address Range</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">VPN Type</td>
<td valign="top" width="100">Choice</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">Values: IPSEC, PPTP and SSL</td>
</tr>
<tr>
<td valign="top" width="114">VPN Password/key</td>
<td valign="top" width="100">Multi Line Text</td>
<td valign="top" width="99">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Now we add some sites and assign them to the aforementioned clients. Note that in our example, ABC Incorporated has two sites. Since the Client column is a lookup against the Clients list we previously created, the &#8220;Client&#8221; column below is linked to its associated entry in the &#8220;Clients&#8221; list.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image50.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="141" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb49.png" width="644" border="0"/></a> </p>
<h2>&#8220;IT Assets&#8221; List</h2>
<p>Right! We have site information with some basic information about VPN details.How about we now create an IT Asset/Device list where we record the details about our equipment at these sites. In this list, we are interested in the type of device, its IP Address, serial number, purchase date and warranty.</p>
<table cellspacing="0" cellpadding="2" width="590" border="1">
<tbody>
<tr>
<td valign="top" width="114">Name</td>
<td valign="top" width="100">Type</td>
<td valign="top" width="97">Scope</td>
<td valign="top" width="277">Other Information</td>
</tr>
<tr>
<td valign="top" width="114">Site</td>
<td valign="top" width="100">Lookup (Client Sites)</td>
<td valign="top" width="97">Site Column</td>
<td valign="top" width="277">Get information from: Client Sites<br />In this column: Site Name</td>
</tr>
<tr>
<td valign="top" width="114">Device Name</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">(renamed &#8220;Title&#8221; column)</td>
</tr>
<tr>
<td valign="top" width="114">IP Address</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">Serial Number</td>
<td valign="top" width="100">Text</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">Purchase Date</td>
<td valign="top" width="100">Date/Time</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="114">Device Type</td>
<td valign="top" width="100">Choice</td>
<td valign="top" width="99">List</td>
<td valign="top" width="277">Choice list includes different network equipment type. Router, Switch and Wireless Access Point</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Below is the configured list and some sample data</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image51.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="128" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb50.png" width="644" border="0"/></a> </p>
<h2>Examining the list relationships</h2>
<p>So we now have three lists containing contact information, site information and device information. Any column that is of type &#8220;lookup&#8221; is automatically linked to the source of the lookup. So in the sample above of the device list, clicking on &#8220;Milton Keynes&#8221;, takes you to the entry in the &#8220;Client Sites&#8221; list as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image52.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="226" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb51.png" width="504" border="0"/></a> </p>
<p>From here, we can example the details of the client for this site, &#8220;ABC Incorporated&#8221;. Clicking on the client reveals our contact details for that client.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image53.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="212" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb52.png" width="504" border="0"/></a> </p>
<p>So what have we achieved so far? We have taken some useful information that would usually be stored in different locations (and potentially formats/systems) and linked it together. Being web based, the information is accessible from anywhere on the network. <em>Remember, SharePoint also has a built in recycle bin and full version history if you wish to use it.</em></p>
<p>That is all well and good, but we have not linked this yet to our Cisco backups. In addition, we want to add our SOE documentation to be part of this also. So let&#8217;s create a new document library called &#8220;IT Asset Documentation&#8221;, and relate this to the devices.</p>
<h2>IT Asset Documentation Library</h2>
<p>So this time, we create a document library instead of a list. Here are our columns</p>
<table cellspacing="0" cellpadding="2" width="590" border="1">
<tbody>
<tr>
<td valign="top" width="114">Name</td>
<td valign="top" width="100">Type</td>
<td valign="top" width="97">Scope</td>
<td valign="top" width="277">Other Information</td>
</tr>
<tr>
<td valign="top" width="114">Related Device</td>
<td valign="top" width="100">Lookup (IT Assets)</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">Get information from: IT Assets<br />In this column: Device Name<br />Allow Multiple values: TRUE</td>
</tr>
<tr>
<td valign="top" width="114">Document Type</td>
<td valign="top" width="100">Choice</td>
<td valign="top" width="97">List</td>
<td valign="top" width="277">Values: SOE, Network Diagram, Maintenance Agreement, Configuration Backup</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>So, now we create or upload our SOE, Network Diagrams and Maintenance Agreements so this document library as shown below. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image54.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb53.png" width="604" border="0"/></a> </p>
<p>In case you haven&#8217;t seen it before, Office 2007 is aware that you are using a SharePoint document library and allows you to set the values of these columns from within the application itself as shown below. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image55.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="316" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb54.png" width="504" border="0"/></a> </p>
<p>By creating the &#8220;Related Device&#8221; field, we now have a direct link to the three lists created earlier in this post. In addition, we have the ability to sort, filter and group documents in this library based on the columns we have added. So for example, here is another view of the document library grouped by document type.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image56.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb55.png" width="604" border="0"/></a></p>
<p>For Cisco people reading this, notice how this view now looks a little like folders based on the document type? The importance and usefulness of views should not be underestimated. Unlike folders, views allow you to sort/manage your files much more flexibly than a static, folder structure. A single document library or list can have many views!</p>
<h2>Finally, the configuration backups!</h2>
<p>So if you were observant earlier, you would have noticed that I created a fourth document type called &#8220;Configuration Backup&#8221;, that we have not yet used. Let&#8217;s now integrate the TFTP server into this new library. </p>
<p>The simplest way that requires no customisation is to set the <strong>default</strong> document type to be &#8220;Configuration Backup&#8221;. That way, any file that is TFTP dumped into this library will be assigned that document type. So let&#8217;s modify the &#8220;Document Type&#8221; column and make this change.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image57.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="339" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb56.png" width="338" border="0"/></a> </p>
<p>It doesn&#8217;t really matter which TFTP method you use, so long as it is configured to drop files into this document library. If you use one of the TFTP servers used in part 2, then in this example the WEBDAV UNC version is:</p>
<ul>
<li>\\tidemo\tftp\IT Asset Documentation</li>
</ul>
<p>And the URL for the web service/sdk method (as described in <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">part 3</a> and <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/">part 4</a>) is:</p>
<ul>
<li>http://tidemo/tftp/IT%20Asset%20Documentation/</li>
</ul>
<p>I used the TFTPUtil method with web services and uploaded a file. Below is the document library with the new file. Note the document type!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image58.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="249" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb57.png" width="604" border="0"/></a> </p>
<h2>Improving Integration with Workflow</h2>
<p>Let&#8217;s now do a really simple workflow example to make this a little slicker. How about when a new configuration file has been TFTP&#8217;d into this library we perform these steps:</p>
<ol>
<li>Check if the &#8216;related device&#8217; field is empty  </li>
<li>If it is empty, create a task for the network administrator to add the device details to the &#8220;IT Asset&#8221; list and link it to the uploaded file.</li>
</ol>
<p>Since we have version control enabled in this library, the first time a file is uploaded the workflow will fire, and set this task for the network administrator. Once the related item is set, subsequent uploads will trigger the workflow, but it will do nothing because the related device has already been set.</p>
<p>I&#8217;ll create this workflow using SharePoint Designer. SharePoint designer workflows are by no means the answer to global warming but they are a great method for rapid workflow development with no programming expertise required.</p>
<p>In SharePoint designer we open our site and create a new workflow from the File Menu&#8230;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image59.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="221" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb58.png" width="465" border="0"/></a> </p>
<p>Name the workflow &#8220;Check Related-Device Field&#8221; or something similar and attach the workflow to the list &#8220;IT Asset Documentation&#8221;. Make sure the box to &#8220;Automatically start this workflow when a new item is created&#8221; is ticked.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image60.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb59.png" width="481" border="0"/></a> </p>
<p>Click NEXT and we add our first and only workflow step. The first thing to do is add a condition. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image61.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb60.png" width="244" border="0"/></a> </p>
<p>The first condition is always to compare the value of a field in the list the workflow is assigned to &#8220;IT Asset Documentation&#8221;. Click it, and choose the &#8220;Related Devices&#8221; field for the &#8220;field&#8221; parameter. Click the &#8220;equals&#8221; parameter and choose &#8220;is empty&#8221;.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image62.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="44" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb61.png" width="294" border="0"/></a> </p>
<p>Now we will create our action to assign the task to the network administrator. Click the &#8220;Actions&#8221; button and choose &#8220;Assign a To-do Item&#8221;.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image63.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="139" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb62.png" width="220" border="0"/></a> </p>
<p>Now in the newly created action, click &#8220;a to-do item&#8221; and on the next screen create a task name called &#8220;Update Cisco Config Documentation&#8221; and give it an appropriate description. Then Click &#8220;Finish&#8221;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image64.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="265" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb63.png" width="354" border="0"/></a> </p>
<p>Finally, we assign this to-do to the network administrator by clicking the &#8220;these users&#8221; link and finding the network administrator in the address book (Active Directory).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image65.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb64.png" width="384" border="0"/></a> </p>
<p>So here is the completed action.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image66.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="40" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb65.png" width="384" border="0"/></a> </p>
<p>Click &#8220;Finish&#8221; and we are all set!</p>
<h2>Testing it out</h2>
<p>So, let&#8217;s test by uploading a new file.</p>
<p><font face="Courier">C:\&gt;tftp 192.168.134.129 put c:\myfile.txt ABCRTR03<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font>  </p>
<p>And the document library&#8230;</p>
<p>WOHOO! You can see a new column has been created to track our workflow status.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image67.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="120" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb66.png" width="604" border="0"/></a> </p>
<p>The status is &#8220;In Progress&#8221;, because it is waiting for a task to be completed. If we examine our SharePoint site, we have a new list, called &#8230; wait for it &#8230; &#8220;Tasks&#8221;!!</p>
<p>Let&#8217;s take a look at it!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image68.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="92" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb67.png" width="604" border="0"/></a>  </p>
<p>If you click on this task (which also can be viewed and edited in Outlook), we can view this exciting task.  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image69.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="233" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb68.png" width="604" border="0"/></a>  </p>
<p>So our network administrator has received this task and has dutifully created a new entry for this router in the &#8220;IT Asset&#8221; list. They have then updated the &#8220;Related Device&#8221; column in the &#8220;IT Asset Documentation&#8221; as shown below  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image70.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb69.png" width="264" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image71.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb70.png" width="294" border="0"/></a>  </p>
<p>So now our intrepid network admin can edit this task and mark it as complete! Click da button!!  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image72.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="96" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb71.png" width="604" border="0"/></a>  </p>
<p>Now that the task has been completed, the workflow has completed and this is reflected in the &#8220;IT Asset Documentation&#8221; library as shown below. Note the workflow status is &#8220;completed&#8221;. Cool!  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image73.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="89" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb72.png" width="604" border="0"/></a><br />
<h2>Conclusion</h2>
</p>
<p>So what have we achieved here? This is a really basic example of improving configuration management, streamlining a process, improving the quality of documentation and enforcing accountability because we now have an audit trail of the task being assigned and completed. </p>
<p>We really are scratching the surface though. We have the tools here to implement much more that just making sure that something is documented.&nbsp; In the next post, we will expand on this site and incorporate a change control mechanism using forms services. We will also start to look at this sort of stuff from a higher level, strategic viewpoint in the context of the &#8216;greater&#8217; IT infrastructure management.</p>
<p>In conclusion, I hope that you Cisco guys found this post useful and look out for part 6 of this series in the near future.</p>
<p>Cheers</p>
<p>Paul</p>
<p><!--Adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/&title=Sharepoint+for+Cisco+Fanboys+%28beyond+TFTP%29+%26%238211%3B+Part+5" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/31/sharepoint-for-cisco-fanboys-beyond-tftp-part-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys (and more developers) &#8211; Part 4</title>
		<link>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/#comments</comments>
		<pubDate>Sat, 26 Jan 2008 11:38:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/</guid>
		<description><![CDATA[Welcome to part 4 of my series on demonstrating SharePoint&#8217;s usefulness for storing Cisco configuration backups. What a hard slog it&#8217;s been! The last article (part 3) of this series focused on how to modify an open source C# TFTP server to upload files into a SharePoint document library using the SharePoint SDK. Here is [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--Adsense--></p>
<p>Welcome to part 4 of my series on demonstrating SharePoint&#8217;s usefulness for storing Cisco configuration backups. What a hard slog it&#8217;s been! The last article (<a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">part 3</a>) of this series focused on how to modify an open source C# TFTP server to upload files into a SharePoint document library using the SharePoint SDK.</p>
<p>Here is the quick recap on what we have covered so far</p>
<ul>
<li><a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">Part 1</a> illustrated how it it possible to use SNMP to tell a Cisco IOS device to dump its configuration to TFTP. We talked about the version control feature of SharePoint and why it makes sense to TFTP your configs to a SharePoint document library. We covered the WEBDAV network provider supplied with XP and Win2003 and finished off with a basic example using the TFTP server TFTPD32.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">Part 2</a> went into more detail about the issues you can face when using the WEBDAV network provider. It also went into more detail on 3 TFTP server products (<a href="http://www.tftp-server.com/">WinAgents TFTP</a>, <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> and <a href="http://tftpd32.jounin.net/">TFTPD32</a> and why TFTPD32 ended up being the best choice for this purpose.  </li>
<li><a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">Part 3</a> then looked at a wonderful open source TFTP server written in C# called <a href="http://sourceforge.net/projects/tftputil">TFTPUtil</a>. We modified the source code of this TFTP server to use the SharePoint SDK and upload files to a SharePoint document library. </li>
</ul>
<p>Now both the WEBDAV and SDK methods had some issues. The WEBDAV method was obviously easy to set up because pretty much any application (theoretically anyway) can be made to work with it. I, however, had reliability issues with this method as <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">part 2</a> detailed. The SDK method was much more reliable, but had its own problems. Many people would be uncomfortable with having to perform custom modification of an existing open source TFTP server, but more importantly, there are security implications with this method too.</p>
<p>So we have one remaining method that we can explore. This method is still based around modifications to the TFTPUtil source code but instead of using the SharePoint SDK, we instead use the SharePoint web services.</p>
<p><span id="more-416"></span></p>
<h2>SharePoint 2007 Web Services</h2>
<p>SharePoint can be remotely interacted with via Web Services. Out of the box, a number of web services are provided and shown below (along with the URL of the service based around my sample SharePoint server used in this series).</p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774865.aspx">Administration Web Service</a> (http://tidemo/_vti_adm/Admin.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774411.aspx">Alerts Web Service</a> (http://tidemo/_vti_bin/Alerts.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/aa979750.aspx">Authentication Web Service</a> (http://tidemo/_vti_bin/Authentication.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774619.aspx">Copy Web Service</a> (http://tidemo/_vti_bin/Copy.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774834.aspx">Document Workspace Web Service</a> (http://tidemo/_vti_bin/Dws.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772564.aspx">Forms Web Service</a> (http://tidemo/_vti_bin/Forms.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774467.aspx">Imaging Web Service</a> (http://tidemo/_vti_bin/Imaging.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774413.aspx">List Data Retrieval Web Service</a> (http://tidemo/_vti_bin/DspSts.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774654.aspx">Lists Web Service</a> (http://tidemo/_vti_bin/Lists.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774629.aspx">Meetings Web Service</a> (http://tidemo/_vti_bin/Meetings.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772618.aspx">People Web Service</a> (http://tidemo/_vti_bin/People.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms773592.aspx">Permissions Web Service</a> (http://tidemo/_vti_bin/Permissions.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms457703.aspx">SharePoint Directory Management Web Service</a> (  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774821.aspx">Site Data Web Service</a> (http://tidemo/_vti_bin/SiteData.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774847.aspx">Sites Web Service</a> (http://tidemo/_vti_bin/Sites.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774707.aspx">Search Web Service</a> (http://tidemo/_vti_bin/spsearch.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772647.aspx">Users and Groups Web Service</a> (http://tidemo/_vti_bin/usergroup.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772545.aspx">Versions Web Service</a> (http://tidemo/_vti_bin/Versions.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774725.aspx">Views Web Service</a> (http://tidemo/_vti_bin/Views.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms774569.aspx">Web Part Pages Web Service</a> (http://tidemo/_vti_bin/WebPartPages.asmx)  </li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms772553.aspx">Webs Web Service</a> (<a href="http://tidemo/_vti_bin/Webs.asmx">http://tidemo/_vti_bin/Webs.asmx</a>) </li>
</ul>
<p>So let&#8217;s go back to our TFTPutil project in Visual Studio and use Web Services instead of the SDK</p>
<h2>Modification Example #2 Web Services</h2>
<p>Initially I thought that I was going to have to write my own web service to upload a file to SharePoint, but like TFTPUtil, it didn&#8217;t take much googling to find that the hard work had already been done.</p>
<p>In this case, it was the excellent <a href="http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html">work</a> by <a href="http://www.blogger.com/profile/07046898420109468604">txs8311</a>. He had written some articles on how to upload into SharePoint via methods provided by the out of the box web services. We will incorporate his work into TFTPUtil and see how it goes!</p>
<p>Out of respect for txs8311, I will not re-paste his code here, but I will show how I have incorporated it into TFTPUtil.</p>
<p>If you check his <a href="http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html">blog post</a>, he has created a class called DocLibHelper. We will add this as a class to TFTPUtil and then call it from the TFTPServerProcess class that we modified in my <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">last post</a>.</p>
<p>So let&#8217;s go back to our TFTPUtil project in Visual Studio and add a new item to the project. Add a class and call it DocLibHelper.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image40.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="66" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb40.png" width="347" border="0"/></a></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image41.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="392" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb41.png" width="644" border="0"/></a> \</p>
<p>Once added, paste the content of the DocLibHelper class from txs8311&#8242;s site. Do not forget to add the references to the libraries used by the code.</p>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Text;
<span class="kwrd">using</span> System.Net;
<span class="kwrd">using</span> System.IO;
<span class="kwrd">using</span> System.Xml;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Finally, the code interacts with the Lists web service (lists.asmx) and we need to add a reference to a SharePoint web service so we can compile and test the code against the lists web service. From the &#8220;Project&#8221; menu, choose &#8220;Add Web Reference&#8221;. In the URL, connect to the lists service for your SharePoint server (in my case <a href="http://tidemo/_vti_bin/Lists.asmx">http://tidemo/_vti_bin/Lists.asmx</a>)</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image42.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="454" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb42.png" width="644" border="0"/></a></p>
<p>You MUST name this Web Reference <strong>ListsService </strong>as txs8311&#8242;s code expects it to be this name.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image43.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="349" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb43.png" width="644" border="0"/></a></p>
<p>That&#8217;s it for the webservice code! Now let&#8217;s modify the TFTPServerProcess class to use it! (I go into detail on modifying this class in the <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">previous post</a>).</p>
<pre class="csharpcode">State.Close();
<span class="kwrd">if</span> (IsSharePoint){
    <span class="rem">// Now we add this newly downloaded file to the document library</span>
    <span class="kwrd">try</span>
    {
        DocLibHelper docLibHelper = <span class="kwrd">new</span> DocLibHelper();
        Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt; properties = <span class="kwrd">new</span> Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;();
        properties.Add(<span class="str">"Title"</span>, State.Filename);
        <span class="kwrd">string</span> uploadURL = TempPath + <span class="str">@"/"</span> + State.Filename;
        <span class="rem">//Create or overwrite text file test.txt in 'Docs' document library creating folder 'Test Folder' as required.</span>
        docLibHelper.Upload(uploadURL, System.Text.Encoding.ASCII.GetBytes(FullPath + <span class="str">@"/"</span> + State.Filename), properties);

        <span class="rem">// clean up temp file</span>
        File.Delete(FullPath + <span class="str">@"/"</span> + State.Filename);
    }
    <span class="kwrd">catch</span> (Exception ex)
    {
        AddMsg(Level.Verbose, <span class="str">"Problem opening SharePoint site"</span> + TempPath);
        AddMsg(Level.Debug, <span class="str">"Exception: "</span> + ex.Message + <span class="str">"\n"</span> + ex.StackTrace);
    }
}
<span class="rem">// This is the last block so go ahead and setup to delete stateStopListener(); </span>
StopListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>So let&#8217;s have a closer look at this code. Now we are invoking an object based on txs8311&#8242;s the DocLibHelper class, rather than the SharePoint SDK classes. After creating an instance of DocLibHelper, we create a <a href="http://msdn2.microsoft.com/en-us/library/xfhwa508.aspx">dictionary</a> object to hold the properties of the file. We will write the name of the file to the &#8220;Title&#8221; column (the result of which you will see later).
</p>
<p>We then call the Upload method, passing in the URL, a reference to the file to be uploaded and the properties dictionary.</p>
<h2>One little gotcha!</h2>
<p>One minor thing that I have to mention here, as I got caught by it. Web Services are case-sensitive! The invocation code on the console application was the following:</p>
<pre class="csharpcode">TFTPServer myTFTP = <span class="kwrd">new</span> TFTPServer();
myTFTP.AllowWRQ = <span class="kwrd">true</span>;
myTFTP.AllowWRQOverwrite = <span class="kwrd">true</span>;
myTFTP.Path = <span class="str">@"http://tidemo/tftp/backups"</span>;
myTFTP.StartListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>But in SharePoint the document library is actually called &#8220;Backups&#8221;. See the problem? I kept getting exception errors telling me &#8220;List not found&#8221;, and it took me a while to twig to the fact that I had to fix up line 4 of the above code.</p>
<pre class="csharpcode">myTFTP.Path = <span class="str">@"http://tidemo/tftp/Backups"</span>;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Now that oughta do it! Let&#8217;s test!</p>
<p>Now we attempt an upload.</p>
<p><font face="courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s </font></p>
<p>Sweet!</p>
<p>Let&#8217;s check the document library. First up view properties so we can see the title field. Very good.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image44.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb44.png" width="368" border="0"/></a></p>
<p>Okay now let&#8217;s do a few more TFTP PUT&#8217;s.</p>
<p><font face="courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="courier">[snip]</font></p>
<p><font face="courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>So let&#8217;s look at the version history. What do you see now? SharePoint will report changes to properties (column values) in the version history. Version 285 of myfile.txt was the version where I updated the title property.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image45.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="285" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb45.png" width="644" border="0"/></a></p>
<p>This method works nicely. The only problem I encountered was a delay after the first running of the program. To connect to the lists webservice, authenticate and call the necessary methods a little while on the first attempt. But subsequent attempts were fine. Since I did this on a VM on a heavily loaded laptop, it may not be noticeable in a prod environment at all.</p>
<h2>Modification Example #3, FrontPage Extensions and RPC</h2>
<p>txs8311 also wrote a <a href="http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html">second part</a> to his posts on uploading files into SharePoint. In this post he rewrote his DocLibHelper class to use FrontPage extensions and RPC. I did not try this, as I was satisfied with the modification Example #2. But all you should need to do, is replace the code in the DocLibHelper class with the code from his page.</p>
<p>If you are more keen than me, feel free to give it a shot and let me know how you go!</p>
<h2>Summary of Upload Methods</h2>
<p>So let&#8217;s recap on the three TFTP upload methods that we have used and summarise the advantages and disadvantages of each.</p>
<table cellspacing="0" cellpadding="2" width="728" border="1">
<tbody>
<tr>
<td valign="top" width="165"><strong>Method</strong></td>
<td valign="top" width="279"><strong>Advantages</strong></td>
<td valign="top" width="279"><strong>Disadvantages</strong></td>
</tr>
<tr>
<td valign="top" width="165">WEBDAV</td>
<td valign="top" width="279">Compatible (in theory) with most applications<br />Choice of TFTP Servers<br />TFTP Application does not need to run on the SharePoint server</td>
<td valign="top" width="278">Stability/Reliability issues<br />Cannot update metadata/document library columns</td>
</tr>
<tr>
<td valign="top" width="165">SharePoint SDK</td>
<td valign="top" width="279">No stability/reliability issues<br />Ability to update metadata/document library columns</td>
<td valign="top" width="278">Applications need to explicitly support this method<br />Custom TFTP Server needed to be modified<br />Application must run on a SharePoint farm server<br />Application requires administrative privileges on the server it runs from, has to be a farm administrator and requires read/write access to the Sharepoint SQL databases</td>
</tr>
<tr>
<td valign="top" width="165">SharePoint Web Services</td>
<td valign="top" width="279">No stability/reliability issues<br />Ability to update metadata/document library columns<br />TFTP Application does not need to run on the SharePoint server</td>
<td valign="top" width="278">Applications need to explicitly support this method<br />Custom TFTP Server needed to be modified</td>
</tr>
</tbody>
</table>
<p><strong>CleverWorkArounds Rating: Rock on SharePoint Web Services!</strong></p>
<h2></h2>
<h2>Additional Coolness</h2>
<p>Since we have modified this TFTP Server to our requirements, you are pretty much free to add SharePoint specific features to make integration even nicer. One feature that springs to mind is setting more metadata properties when the files are uploaded. Here is an example. Let&#8217;s assume that we have a list of Cisco IP addresses and the MODEL and TYPE of device on that address. E.g 6509 Switch, 3725 Router or Aironet 350 Wireless Access Point.</p>
<p>It would be pretty easy to modify our TFTP server to be able to <strong>examine </strong>this list when receiving a file and based on the IP of the sender of the file, write the <strong>type of device </strong>to a &#8220;Device Type&#8221; column in our configuration backups library.</p>
<p>Better still, it would then be very cool if that list of IP&#8217;s and device types <strong>already exist in SharePoint. </strong>Imagine this list exists in the form of an IP address register or better still, an IT device asset register (along with serial numbers, maintenance contract information and the like). It would be easy for staff to maintain this information and the list would have version control just like our &#8220;Backups&#8221; document library. But for me what would be really nice about this method is the organisational efficiency that would be gained.</p>
<p>That gain is this: The person that updates the asset register list isn&#8217;t necessarily the Cisco engineer that sets up the device. Critical device information is entered ONCE and leveraged from then on. The next post in this series will expand on these benefits.</p>
<h2>Conclusion</h2>
<p>Right! We are <strong>DONE </strong>with getting files into SharePoint and about damn time too!</p>
<p>The next posts in this series will move away from application development and infrastructure issues and move into some higher level governance issues. The aim here is to show Cisco and IT infrastructure people what you can do with SharePoint once you get the data into SharePoint. I hope if I do a decent job of writing it, that it will be easy to see just how this can be re-used for any IT infrastructure management.</p>
<p>But for now, I bid you adieu until then&#8230;.</p>
<p><!--Adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/&title=SharePoint+for+Cisco+Fanboys+%28and+more+developers%29+%26%238211%3B+Part+4" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-more-developers-part-4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys (and developers) -Part 3</title>
		<link>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 23:59:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WEBDAV]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/</guid>
		<description><![CDATA[As I write this series, it is getting less and less about Cisco and more and more about SharePoint. This article is definitely developer centric, but since Cisco guys tend to be interested in the guts of the detail, I decided to keep going . If you read my articles I tend to take the [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p>As I write this series, it is getting less and less about Cisco and more and more about SharePoint. This article is definitely developer centric, but since Cisco guys tend to be interested in the guts of the detail, I decided to keep going <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>If you read my articles I tend to take the piss out of IT role stereotypes just to make it more entertaining reading. Sales guys and IT Managers tend to cop it the most, but I also like to have a dig at the expense of the nerds too. Cisco nerds on the whole are a great bunch, but I have to say, the scariest nerd I have ever met drank Cisco kool-aid in jumbo size!</p>
<p>If you have gotten to this article after reading the first two and you are scoffing at my audacity to suggest you TFTP your configs into SharePoint, chances are most people think you&#8217;re scary! If you are hitting this series of articles for the first time, go back and read <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">part 1</a> and <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">part 2</a> before being scary!</p>
<p>Seriously now, I thought that this would be a 2 part set of articles, but I got all bogged down in the methods of getting files into SharePoint. The WEBDAV based methods described in the previous article is easy to do, but ultimately is not the recommended method. So now, we will look at the &#8216;proper&#8217; ways to do it and see if they are worth the effort. They work okay, but are more complex and I&#8217;m not convinced that the governance issues are necessarily worth it for many readers.</p>
<p>Degree of difficulty for this article is varied.</p>
<p>CleverWorkArounds Coffee requirement rating (for an application developer): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a>&nbsp;</p>
<p>CleverWorkArounds Coffee requirement rating (for a non developer): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb8.png" width="25" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image9.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb9.png" width="25" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image10.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb10.png" width="25" border="0"/></a>&nbsp;<a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb8.png" width="25" border="0"/></a></p>
<p><span id="more-403"></span></p>
<h2>How can we we *not* use WEBDAV?</h2>
<p>If we are using methods other than WEBDAV, then how are our existing applications supposed to work? I mean, all they know is the windows networking API. So, unless the other methods are implemented as a redirector (as described in more detail in the &#8220;WEBDAV Interlude&#8221; section of my <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">first article</a>), how can they use any other API?</p>
<p>The answer is, they can&#8217;t! So we are leaving the world of freeware and cheap TFTP servers and writing our own one!</p>
<p>&#8220;What? I&#8217;m no coder&#8221;, you say? That&#8217;s okay, nor am I&#8230; but stick with me anyway. </p>
<p>Okay, how about we modify someone else&#8217;s open source TFTP Server to work with SharePoint via non WEBDAV methods? </p>
<p>Fortunately for us, such a TFTP server does exist. In addition to being conveniently modifiable (got to love open source), it is multithreaded, very well written and easy to understand and extend.&nbsp; Kudos to the author. If you write a few scripts here and there, it should be enough for this article.</p>
<p>So let&#8217;s take a closer look. If you already know visual studio you can skip the next section and move to the section entitled &#8220;Examining the Code&#8221;. Otherwise let&#8217;s keep going getting this TFTP Server compiled!</p>
<h2>Getting TFTPUTIL compiled</h2>
<p>Head on over to <a title="http://sourceforge.net/projects/tftputil" href="http://sourceforge.net/projects/tftputil">http://sourceforge.net/projects/tftputil</a> and <a href="http://sourceforge.net/project/showfiles.php?group_id=154247&amp;package_id=171337&amp;release_id=466365">download</a> the latest release. Crank out Visual Studio 2005 and take a look at it.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image30.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb30.png" width="222" border="0"/></a> </p>
<p>This server is implemented as a class, so you have to write your own little program to make use of this class by creating a TFTP server object. You do by adding a new project to your Visual Studio workspace. But before we do that, how about we deal with a pre-requisite component.</p>
<p>The TFTPUtil class makes use of a library of useful functions called <a href="http://sourceforge.net/projects/nspring">NSpring</a>. You will want to download this. Grab the nspring.dll, and then tell Visual Studio how to find it by choose &#8220;Add Reference&#8221; from the &#8220;Project&#8221; menu, . At the resulting dialog box, go to the &#8220;Browse&#8221; tab and navigate to where you downloaded nspring.dll. (Best to put into C:\WINDOWS\SYSTEM32 or use the same folder where the TFTPutil code lives).</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image31.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="378" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb31.png" width="468" border="0"/></a> </p>
<p>Right, we are all set! You could compile and build TFTPUtil.DLL right now, but it would not do you a lot of good because it&#8217;s a class and does not run on its own. It needs to be *invoked*. This means we need to create a little application that creates an *instance* of the TFTPUtil class. Right click on the project and choose &#8220;Add New project&#8221; as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image32.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb32.png" width="244" border="0"/></a> </p>
<p>For our purposes, we create a new &#8220;Console Application&#8221; project and call it myTFTPServer or something meaningful to you. This will be a small EXE file that uses the TFTPUtil class to create a TFTP server.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image33.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="413" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb33.png" width="644" border="0"/></a> </p>
<p>Now, right click on the newly created project and choose &#8220;Set up Startup Project&#8221;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image34.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="99" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb34.png" width="217" border="0"/></a> </p>
<p>Next step, we need to tell this new console application project how to find the TFTPUtil class. From the Project menu, choose &#8220;Add Reference&#8221;. At the resulting dialog box, go to the &#8220;Project&#8221; tab and you will see the open TFTPUtil project. </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image35.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb35.png" width="384" border="0"/></a> </p>
<p>Right, that should be it! Your Visual studio should look something similar to this</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image36.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="382" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb36.png" width="217" border="0"/></a> </p>
<h2>Creating a basic TFTP server</h2>
<p>This is a well written TFTP server. Everything is very nicely modular and easy to understand without getting into too much complexity.</p>
<p>So first up, here is the 5 lines of code of your console application to get the TFTP server working. Add this to the code section of the <strong>static void Main(string[] args)</strong> method.</p>
<pre class="csharpcode"><span class="kwrd">using</span> TFTPUtil;

TFTPServer myTFTP = <span class="kwrd">new</span> TFTPServer();
myTFTP.Path= <span class="str">"C:\TEMP"</span>;
myTFTP.AllowWRQ = <span class="kwrd">true</span>;
myTFTP.AllowWRQOverwrite = <span class="kwrd">true</span>;
myTFTP.StartListener(); 
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Those 5 lines create a new TFTP server object, set the destination folder, allow it to receive files, overwrite received files and start the TFTP server. If you now compile and build this solution you will end up with the files TFTPutil.DLL and myTFTPServer.EXE.</p>
<p>You should be able to test it now. (By default, files will be uploaded to the folder the EXE is run from unless you specify a path).</p>
<h2>Examining the code</h2>
<p>Now let&#8217;s look at the area of the TFTP server where we need to add some code. It is in TFTPServerProcess.css in a method called &#8220;ProcessDataGram&#8221;</p>
<p>If you examine this method, you will see the following code (just search for it):</p>
<pre class="csharpcode" style="width: 656px; height: 93px">AddMsg(Level.Info, <span class="str">"Successfully received file "</span> + State.Filename + <span class="str">" ("</span> + State.Filesize.ToString() + <span class="str">" bytes) from "</span> + State.RemoteIPAddress + <span class="str">" in "</span> + TotalTime.ToString() + <span class="str">" seconds ("</span> + (Rate).ToString() + <span class="str">" bytes/sec)."</span>);
<span class="rem">//This is the last block so go ahead and setup to delete state</span>
State.Close(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>We will make some fairly basic modifications to the server in this section, so that the file is uploaded to SharePoint.
</p>
<p>There are several methods that can be used to get files into SharePoint. We will do this first by using the most obvious way: The SharePoint SDK.</p>
<p>&nbsp;</p>
<p><iframe style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none" border="0" marginwidth="0" marginheight="0" src="http://rcm.amazon.com/e/cm?t=cleverwo-20&amp;o=1&amp;p=48&amp;l=st1&amp;mode=books&amp;search=sharepoint%20development&amp;fc1=000000&amp;lt1=&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" width="99%" scrolling="no" height="90"></iframe></p>
<h2>&nbsp;</h2>
<h2>Modification example #1 &#8211; The SharePoint SDK</h2>
<p>The SharePoint SDK is definitely the easiest way to upload a file, but there are several caveats:</p>
<ul>
<li>The TFTP server MUST run on a server that is a member of the SharePoint farm
</li>
<li>The TFTP service account MUST have administrative privileges on the server and SQL access</li>
</ul>
<p>That second requirement in particular just plain sucks. After going to the trouble in part 1 to set up low privileged account &#8220;tftp service&#8221; with &#8220;contribute&#8221; access to a document library, we now find that we need to grant the account significantly more privileges than before. My security nazi Cisco readers will read that and say &#8220;no way will I do that&#8221;, and I would concur. But fortunately for my readers (and unfortunately for me) I only discovered that caveat AFTER I had gotten it working. So I will show you the code changes anyway.</p>
<p>So, first up I will tell you what we will do. The aforementioned ProcessDataGram uses a class called <strong>State</strong> that is used to write the file to the file system. Then later the method Close() closes the file that has been uploaded.</p>
<p>So what we will do, is upload the file to SharePoint just after State.Close(). This means the file is still downloaded to the local file system and then <strong>copied</strong> to SharePoint. Therefore, the local file system is now simply a temporary place for the file to be stored, prior to it be uploaded to SharePoint.</p>
<p>To do this, we will change how TFTPUTIL handles the PATH property. Recall in my basic TFTP console application example code I could set the path via: </p>
<pre class="csharpcode">myTFTP.Path = <span class="str">"C:\TEMP"</span>;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>So let&#8217;s change this behaviour so that if Path contains the string &#8220;http://&#8221;, we assume it is a SharePoint path, rather than a file system path. Therefore we set the internal file path to %TEMP% so we can still capture the file, but then we will upload it to the http:// specified SharePoint site.</p>
<p>Path is a property of the TFTPUtil class that is defined in TFTPServer.cs. We will make a minor change to the Path property, because it performs a check that will always fail when a SharePoint URL is supplied.</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">string</span> Path
{
    get
    {
        <span class="kwrd">return</span> FullPath;
    }
    set
    <strong>{
        <span class="kwrd">if</span> (<span class="kwrd">value</span>.Contains(<span class="str">"http://"</span>)) {
            FullPath = <span class="kwrd">value</span>;
        } <span class="kwrd">else</span>
        {</strong>
        <span class="kwrd">if</span> (System.IO.Directory.Exists(<span class="kwrd">value</span>))
            FullPath = <span class="kwrd">value</span>;
        <strong>}</strong>
    }
} </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Now we turn our attention to the TFTPServerProcess.cs file where we have to modify the TFTPServerProcess class. We will add two more properties to the TFTPServerProcess class. Find the declaration for FullPath and then add the two lines in bold below it.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">string</span> FullPath = System.IO.Directory.GetCurrentDirectory();
<strong><span class="kwrd">private</span> <span class="kwrd">string</span> TempPath = System.IO.Directory.GetCurrentDirectory();
<span class="kwrd">private</span> <span class="kwrd">bool</span> IsSharePoint = <span class="kwrd">false</span>; // If <span class="kwrd">this</span> <span class="kwrd">is</span> a sharepoint site</strong> </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Also while we are here, add a reference to the SharePoint dll.</p>
<pre class="csharpcode"><span class="kwrd">using</span> Microsoft.SharePoint; </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>You will find the Microsoft.SharePoint.DLL in C:\Program Files\Common Files\Microsoft Shared\web server extensions on most installations.
</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image37.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="262" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb37.png" width="328" border="0"/></a> </p>
<p>Next, we need to add some basic logic to the code where the TFTPServerProcess class is initialised. It is an overloaded class so it is declared twice. To keep it simple, I have added the code to each declaration. If this is a Sharepoint path, it copies the supplied path to a variable called TempPath, and then puts the path of %TEMP% into the FullPath. This is deliberately done so that minimal code changes elsewhere are required (ie the rest of the class expects a variable called FullPath to point to a filesystem, not SharePoint).</p>
<p>Thus, it looks like this (bold):</p>
<p>Declaration 1:</p>
<pre class="csharpcode"><span class="kwrd">public</span> TFTPServerProcess() 

<strong><span class="kwrd">if</span> (FullPath.Contains(<span class="str">"http://"</span>))
{
    IsSharePoint = <span class="kwrd">true</span>;
    TempPath = FullPath;
    FullPath = Path.GetTempPath();
}
</strong>
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Declaration 2:</p>
<pre class="csharpcode"><span class="kwrd">public</span> TFTPServerProcess(<span class="kwrd">string</span> FilePath,
    Level LoggingLevel,
    Level DisplayLevel,
    <span class="kwrd">bool</span> AllowRRQ,
    <span class="kwrd">bool</span> AllowWRQ,
    <span class="kwrd">bool</span> AllowWRQOverwrite,
    <span class="kwrd">bool</span> AllowTFTPOptions,
    <span class="kwrd">bool</span> CheckReadWriteState,
    <span class="kwrd">int</span> ResendInterval,
    <span class="kwrd">int</span> TimeoutInterval,
    Logger logger,
    IPAddress srvaddr)
{ 

    <strong><span class="kwrd">if</span> (FilePath.Contains(<span class="str">"http://"</span>))
    {
        IsSharePoint = <span class="kwrd">true</span>;
        TempPath = FilePath;
        FullPath = Path.GetTempPath();
    }
    <span class="kwrd">else</span>
    {
        FullPath = FilePath;
    }
</strong>
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Finally, we add some code just after the State.Close() method as shown earlier. This takes the downloaded file from %TEMP%, uploads it to SharePoint and then deletes the file from %TEMP%.</p>
<pre class="csharpcode">State.Close();
<span class="kwrd">if</span> (IsSharePoint)
{
    <span class="rem">// Now we add this newly downloaded file to the document library</span>
    <span class="kwrd">try</span>
    {
        SPSite DestSite = <span class="kwrd">new</span> SPSite(TempPath);
        SPWeb DestWeb = DestSite.OpenWeb();
        DestWeb.AllowUnsafeUpdates = <span class="kwrd">true</span>;
        SPFileCollection files = DestWeb.Files;
        FileStream destFile = File.OpenRead(FullPath + <span class="str">@"/"</span> + State.Filename);
        <span class="kwrd">string</span> destFileURL = TempPath + <span class="str">"/"</span> + State.Filename;
        Hashtable MetaDataTable = <span class="kwrd">new</span> Hashtable();
        SPFile destSPFile = files.Add(destFileURL, destFile, MetaDataTable, <span class="kwrd">true</span>);
        destFile.Close();
        <span class="rem">// clean up temp file</span>
        File.Delete(FullPath + <span class="str">@"/"</span> + State.Filename);
    }
    <span class="kwrd">catch</span> (Exception ex)
    {
        AddMsg(Level.Verbose, <span class="str">"Problem opening SharePoint site"</span> + TempPath);
        AddMsg(Level.Debug, <span class="str">"Exception: "</span> + ex.Message + <span class="str">"\n"</span> + ex.StackTrace);
    }
}
<span class="rem">//This is the last block so go ahead and setup to delete state</span>
StopListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Note the HashTable MetaDataTable line. Even though we are not setting any metadata values, I have left in HashTable code because it illustrates how this method allows you to code in the setting of metadata columns in a document library. For example, imagine that the SharePoint document library has a column called &#8220;DeviceType&#8221;. Your code could say, write the string &#8220;Cisco&#8221; or &#8220;Linksys&#8221; to the DeviceType column when the file is uploaded.
</p>
<p>So let&#8217;s try it out shall we?</p>
<p>Modify your console application to fix the path variable to a SharePoint doc library and then build the solution.&nbsp; </p>
<pre class="csharpcode">TFTPServer myTFTP = <span class="kwrd">new</span> TFTPServer();
myTFTP.AllowWRQ = <span class="kwrd">true</span>;
myTFTP.AllowWRQOverwrite = <span class="kwrd">true</span>;
myTFTP.Path = <span class="str">"http://tidemo/tftp/backups"</span>;
myTFTP.StartListener(); </pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Test the solution and you get a fairly unexciting console window.
</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image38.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb38.png" width="644" border="0"/></a> </p>
<p>Now we attempt an upload.</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s </font>
</p>
<p><font face="Courier">[snip it all working swimmingly]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 put c:\myfile.txt<br />Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image39.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="266" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb39.png" width="644" border="0"/></a> </p>
<p>Also, this time around, none of the locking/access errors <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">seen</a> with the WEBDAV based methods &#8211; WOHOO!. Running this as a service also works fine, using the same freeware utility I used in the last post (<a href="http://www.kcmultimedia.com/smaster/">ServiceInstaller</a> ). Just compile the solution and then use ServiceInstaller as I described for TFTPD32 in the <a href="http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/">previous post</a>.</p>
<p>Remember what I said before though, the &#8220;tftp service&#8221; account MUST have the following privileges on the server: </p>
<ul>
<li>The user is a server farm administrator.
</li>
<li>The user has Read and Write permissions on the content database.
</li>
<li>The user is a site collection administrator.
</li>
<li>The user has permissions to access the Windows SharePoint Services site or the SharePoint Server 2007 site through which the code iterates.</li>
</ul>
<p>Read more at KB Article <a href="http://support.microsoft.com/kb/935751">935751</a>, but the fundamental issue is that we are not running this code as the IIS process, but rather a separate user account. <em>&#8220;If code is executed from a custom Windows-based application or from a custom console application, the code path does not use the Web context that is hosted by the Microsoft Internet Information Services (IIS) application pool. Therefore, specific user permissions are required in SharePoint Server 2007 and in the back-end data source&#8221;</em></p>
<h2>Conclusion</h2>
<p>The requirement for administrator level privileges sucks. It is not a showstopper, but it sucks nonetheless. So the next post, we will turn our attention to the Webservices methods of uploading data and see if they are any better. Then (finally!) we will get onto more interesting topics like making use of workflow and integrating it with other useful information.</p>
<p>If you are wondering whether you can download my changes and test for yourself, not yet <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . I&#8217;m going to contact the author of the TFTPUtil project first, and I have to perform more debugging <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . So right now you will have to do it yourself.</p>
<p>Thanks for reading.</p>
<p>Paul</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/&title=SharePoint+for+Cisco+Fanboys+%28and+developers%29+-Part+3" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys (darn WEBDAV) &#8211; Part 2</title>
		<link>http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 15:03:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WEBDAV]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/</guid>
		<description><![CDATA[Here I am back again, illustrating some of the interesting possibilities that SharePoint offers for Cisco people. To recap my last post, I showed you a little perl script I wrote to get an IOS router or switch to dump its current configuration to a TFTP server. I then used one of several freeware TFTP [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image11.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 20px 15px 0px; border-right-width: 0px" height="244" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb11.png" width="76" align="left" border="0"/></a>Here I am back again, illustrating some of the interesting possibilities that SharePoint offers for Cisco people.</p>
<p>To recap my <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">last post</a>, I showed you a little perl script I wrote to get an IOS router or switch to dump its current configuration to a TFTP server. I then used one of several freeware TFTP servers to show how you can have a TFTP server save the captured file into a version enabled document library.</p>
<p>I then hit a snag in relation to using a Windows Service to do this task. In this article we will delve into this issue in more detail. In addition, I ended up delving much deeper than I intended. So, like my branding series, this is going to turn into a multi-part series too, covering some application development, configuration, security and governance issues. How many parts it will end up being is anybody&#8217;s guess!</p>
<p>This is a technically oriented series of articles for the most part, so for you people who like the <a href="http://www.cleverworkarounds.com/2007/11/25/learn-to-talk-to-your-cfo-in-their-language-part-2/">governance</a> and <a href="http://www.cleverworkarounds.com/2007/11/17/learn-to-talk-to-your-cfo-in-their-language-part-1/">finance</a> stuff, you may not get too much out of this one. Although this article (part 2) focuses on my issues and observations with the Windows WEBDAV client, if you are one of these people who have &#8216;special&#8217; feelings when you see those pretty blue Cisco boxes like the image above, then you may find some useful content here. <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>SharePoint developers and architects may also find this of interest.</p>
<p><span id="more-382"></span></p>
<p>Now I previously mentioned that I tried three TFTP servers in writing this article and had some problems. They were:</p>
<ul>
<li><a href="http://www.tftp-server.com/">WinAgents TFTP</a> (Commercial)  </li>
<li><a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds TFTP Server</a> (Freeware &#8211; Registration required)  </li>
<li><a href="http://tftpd32.jounin.net/">TFTPD32 TFTP Server</a> (Freeware)</li>
</ul>
<p>And let&#8217;s not forget good old <a href="http://kin.klever.net/pumpkin/">PUMPKIN</a>, just to make one of my CCIE friends, who read the first post and suggested I use it as an alternative, happy (although he forgets that years ago I was the one who told him about Pumpkin in the first place <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>Let&#8217;s review their capabilities and cover the issues encountered with each. As we go, we will get to see the uglier side of WEBDAV.</p>
<h2>WinAgents TFTP</h2>
<p>I&#8217;ve used this product several times in the past. At the time it was pretty much the only product that would natively run as a Windows service. It is not free, but buying it won&#8217;t exactly break the bank. It has a nice GUI, good logging and the ability to set up virtual folders to different underlying locations. Below is the main configuration screen and the screen where multiple locations can be configured.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image12.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="337" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb12.png" width="404" border="0"/></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image13.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="202" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb13.png" width="397" border="0"/></a> </p>
<p>You would think that the above ability to virtualise folders would make this product an obvious choice for front-ending to SharePoint, because it could co-exist with native filesystem, <a href="http://www.microsoft.com/windowsserver2003/technologies/storage/dfs/default.mspx">DFS</a> and 3rd party SMB based resources like those provided by <a href="http://us1.samba.org/samba/">samba</a>.</p>
<p>You would be right, but the latest version is let down by one stupid design flaw. When you send a file to a WinAgents TFTP server that already exists, it will <strong>delete </strong>the original file and then copy the new file to the virtual folder. It may on the surface seem no different to simply overwriting a file &#8211; but there is a big difference in a SharePoint site. </p>
<p>All files in a SharePoint document library have a unique ID. It is a built-in column and can be made visible by modifying a document library view as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image14.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="105" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb14.png" width="244" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image15.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="173" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb15.png" width="244" border="0"/></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image16.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="103" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb16.png" width="644" border="0"/></a> </p>
<p>By deleting the file in SharePoint, that file is now put into the recycle bin. When you upload a file of the same name, SharePoint treats it as a <strong>new file</strong> and allocates it a <strong>new ID</strong>. Therefore, there is no version history at all. Each upload is deleting the previous version and uploading a new file.</p>
<p>This obviously blows away any potential to use WinAgents TFTP as a SharePoint integrated TFTP server <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> .</p>
<p><strong>CleverWorkarounds Rating: They probably thought it was a good idea at the time.</strong></p>
<h2>Solarwinds</h2>
<p>So instead, let&#8217;s now turn our attention to the SolarWinds TFTP product. This one is free and also very easy to use. Like the WinAgents product, it can be run as a service out of the box, but it is not as comprehensive as its commercial competitor in terms of logging, granular security filtering and folder virtualisation. </p>
<p>Unlike its commercial cousin, however, it does not delete files before uploading, and therefore plays nice with SharePoint version control. That, combined with natively running as a windows service, makes it the obvious contender to be the SharePoint TFTP server of choice.</p>
<p>The GUI is basic yet functional. There is a status screen and a configuration screen that allows you to set the TFTP Root directory as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image17.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="198" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb17.png" width="484" border="0"/></a>&nbsp;</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image18.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="252" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb18.png" width="354" border="0"/></a> </p>
<p>In the screen-shot above, you will notice that the TFTP Server root directory is <a href="file://\\tidemo\tftp\backups">\\tidemo\tftp\backups</a>. As I explained in the first post, this is the WEBDAV UNC equivalent of the SharePoint site <a href="http://tidemo/tftp">http://tidemo/tftp</a> and the document library called backups.</p>
<p>If you recall in the <a href="http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/">first post</a>, we created a user account called &#8216;tftp service&#8217;. This account has been granted access to the <a href="http://tidemo/tftp/backups">http://tidemo/tftp/backups</a> library. So, we need to set the credentials of the WinAgents TFTP service to run as that user. Therefore, when files are received by TFTP clients, the server will be able to write to the library. Below is my screen capture of my configured TFTP server.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image19.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="395" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb19.png" width="354" border="0"/></a>&nbsp;</p>
<p>There was one other task I also had to do to test this setup. SolarWinds is a little bit naughty in that it logs to its installation folder. (&#8216;tsk &#8216;tsk will never get a designed for XP gold logo). Being good practitioners of IT security, the &#8216;tftp service&#8217; account is a domain user with no system privileges, and only has READ access to this folder by default. Changing configuration parameters (such as the UNC TFTP root) also would not be saved, because the TFTP server would not be able to write to its own configuration file when running as the &#8216;tftp service&#8217; account..</p>
<p>So the permissions of the SolarWinds installation folder has been modified so that the &#8216;tftp service&#8217; account has WRITE access as shown below.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image20.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="319" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb20.png" width="454" border="0"/></a>&nbsp; </p>
<p>So I started the service fine, and ran a test! Wohoo we have our file!!</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font>  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image5.png"><img height="145" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb5.png" width="700" border="0"/></a>  </p>
<p>So I tried it again a few times and hit a snag after some successful retries&#8230;  </p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many successful reattempts]</font></p>
<p><font face="Courier">C:\TFTP 192.168.134.129 put myfile.txt<br />Error on server : The process cannot access the file &#8216;\\tidemo\tftp\backups\myfile.txt&#8217; because it is being used by another process.<br />Connect request failed </font> </p>
<p>This was odd. Suddenly I was unable to copy a new version of the file to TFTP. I was running many repeat tests, so perhaps there was some sort of temporary file lock causing a problem? So I waited for a bit and then was able to transfer successfully again as shown below.  </p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>But it wasn&#8217;t long before I got another and more severe error.  </p>
<p><font face="Courier">C:\TFTP 192.168.134.129 put c:\myfile.txt<br />Error on server : The network path was not found. </font> </p>
<p><font face="Courier">Connect request failed </font> </p>
<p>The TFTP server log showed this error and ominous stack trace&#8230;  </p>
<p><font face="Courier">2008-01-23 21:49:53,102 [6] WARN&nbsp; TFTPServer.Service.TransmissionPut &#8211; Exception caught while trying to open file for reading.<br />System.IO.IOException: The network path was not found. </font> </p>
<p><font face="Courier">&nbsp;&nbsp; at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)<br />&nbsp;&nbsp; at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)<br />&nbsp;&nbsp; at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)<br />&nbsp;&nbsp; at TFTPServer.Service.TransmissionPut.Begin(RequestPacket firstPacket)</font>  </p>
<p>Network path not found? What the hell was going on here? It worked a minute ago!  </p>
<p>Eventlogs came up blank, and I tried an IISRESET. Still no-go. Restarted the TFTP service and I was able to transfer again. However, it didn&#8217;t take long for the problem to re-appear.  </p>
<p>I tried all of the suggestions on Mark Muller&#8217;s <a href="http://blogs.tamtam.nl/mart/SharepointExplorerViewProblems.aspx">blog article</a> with no success.  </p>
<p>I found two sites of interest and one seemed close to this issue. The first was <a href="http://www.codeprof.com/dev-archive/184/328-1203-1847682.shtm">here</a>, where a developer was having the identical problem, and a Microsoft employee suggested not to rely on WEBDAV &#8220;especially when using services&#8221;. The second one was a confidence building quote from Microsoft themselves. They made an admission in their <a href="http://www.microsoft.com/downloads/details.aspx?familyid=c523ac7a-5724-48be-b973-641e805588f4&amp;displaylang=en">WEBDAV Whitepaper</a> regarding the Web Client service. &#8220;The Web Client Service in Windows XP and Windows Server 2003 does not function correctly if you stop it then start it again without restarting the computer. <strong>Although a bug has been opened on this problem, the changes required to fix it are too large for a hotfix or a service pack and have therefore been delayed until a future major release of Windows&#8221;</strong>  </p>
<p>Are you freakin SERIOUS!?!  </p>
<p>Anyway, I decided that before I go off on a Microsoft bashing rant, I&#8217;d better double check that this problem was with SolarWinds TFTP or the obviously rock solid and stable WEBDAV client.  </p>
<p><strong>CleverWorkAround Rating (SolarWinds TFTP) &#8211; Judgement reserved till later</strong><br />
<h2>TFTPD32 TFTP Server</h2>
</p>
<p>TFTPD32 is more than just a TFTP server. It also provides DHCP, Syslog and SNTP services as part of the deal. Unlike the previous two TFTP servers, it does not run as a windows service out of the box, but it can be easily made to.</p>
<p>Cisco have also decided that this is their recommended TFTP server as well, not a bad endorsement, eh!</p>
<p>If we focus on the TFTP server functionality only, it is basically the same as SolarWinds <strong>without</strong> the windows service bit. So WinAgents still wins for overall ease of use and granularity but as discussed it was a waste of time with SharePoint.</p>
<p>Once again there is a main status screen, showing you current activity, as well as a configuration screen where you set the TFTP server root UNC path.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image21.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="294" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb21.png" width="354" border="0"/></a> </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image22.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb22.png" width="343" border="0"/></a>  </p>
<p>So given that we had all of the WEBDAV stability problems with SolarWinds, this TFTP server allows us to test two scenarios. Since it can be run as standalone, we can run it interactively as our &#8216;tftp service&#8217; account and test it. Then, we can use a 3rd party tool to make it run as a Windows Service, and compare notes.  </p>
<p>So first up, let&#8217;s run it interactively as rtftp service&#8217; account. This is achieved by RIGHT clicking on the TFTPD32.EXE file and choosing RUN-AS from the menu options. When prompted, enter the credentials of the &#8216;tftp service&#8217; account.  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image23.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb23.png" width="244" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image24.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb24.png" width="244" border="0"/></a>  </p>
<p>If you want absolute assurance that TFTPD32.EXE is being run by the &#8216;tftp user&#8217; then look for the process in &#8220;task manager&#8221; and check the &#8220;User Name&#8221; column.  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image25.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="272" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb25.png" width="498" border="0"/></a>  </p>
<p>So, here we go!  </p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many successful reattempts]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>Now occasionally I received the error below, but unlike when using SolarWinds, running as a windows service using &#8216;ttp service&#8217; user credentials, it would always happen once and subsequent attempts would be fine.  </p>
<p><font face="Courier">C:\TFTP 192.168.134.129 put myfile.txt<br />Error on server : Access violation<br />Connect request failed</font>  </p>
<p>Just to prove that it was much more reliable, we now look at the version history in SharePoint for the file myfile.txt  </p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image26.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="289" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb26.png" width="545" border="0"/></a>  </p>
<p><strong>CleverWorkArounds Rating: Not flawless, but reliable</strong>  </p>
<p>So we have ascertained that running TFTPD32 works pretty well when run interactively as &#8216;tftp service&#8217; . Now we have to run TFTPD32 as a service and compare <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<h3></h3>
<h2>TFTPD32 as a windows service</h2>
</p>
<p>There are many utilities out there to run a regular EXE file as a Windows Service. One of the most popular ones is SVRANY from the Windows 200x resource kit. However I used the freeware <a href="http://www.kcmultimedia.com/smaster/">ServiceInstaller</a> because it had a nice GUI <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Using it is mind numbingly simple. Run the application and fill in the form as shown below and click the &#8216;Install&#8217; button. Once installed, you can then change the service credentials to &#8216;tftp service&#8217; the same way we did it for SolarWinds.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image27.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb27.png" width="244" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image28.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="152" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb28.png" width="304" border="0"/></a></p>
<p>Start the service, and check in Task manager that TFTPD32.EXE is running. (When running as a service you will not see the status screen).</p>
<h2>The moment of Truth!</h2>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many successful reattempts]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font>  </p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>Like when running interactively, I still received the occasional&nbsp; &#8216;Access Violation&#8217; error but always recovered. Again to prove that I ran lots of TFTP commands, the version history is now up to 204 <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image29.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="234" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb29.png" width="483" border="0"/></a>  </p>
<p><strong>CleverWorkArounds Ratings (TFTPD32 as a service) &#8211; The best of the WEBDAV TFTP bunch</strong>  </p>
<p><strong>CleverWorkArounds Ratings (SolarWInds) &#8211; Looks like it might be part your fault after all!</strong>  </p>
<p><strong>CleverWorkArounds Ratings (WEBDAV) &#8211; It&#8217;s definitely your fault!</strong>  </p>
<p><strong></strong>&nbsp;<br />
<h2>Conclusion</h2>
</p>
<p>So after these tests, it seems that running TFTPD32 as a Windows Service is no less reliable than running it interactively. Perhaps then there is an issue with the way that SolarWinds use the windows networking API&#8217;s to write files. SolarWinds is a .NET application and TFTPD32 isn&#8217;t. Therefore, they may well be using different API&#8217;s under the hood.</p>
<p>I wasn&#8217;t satisfied with all of this though. Although we have achieved our goal of TFTP to a version controlled document library, the whole unreliable WEBDAV thing left me with a bad taste and I decided to go down a different path. What more could I do, you ask? How about write my own TFTP server? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The <a href="http://www.cleverworkarounds.com/2008/01/26/sharepoint-for-cisco-fanboys-and-developers-part-3/">next</a> 2 posts in this series will cover getting TFTP files into SharePoint via *non* WEBDAV methods. We will examine their reliability and examine a little of SharePoint web services and the SDK. </p>
<p>The fifth article will leave the issues of getting the files *into* SharePoint, and instead focus on what we can do with them once they are there! (Workflows, metadata and the like). </p>
<p>The final article (I suspect it will be the final anyway but i won&#8217;t know &#8217;til I write the next two), will tie it all together in terms of governance. Thus, it will be a little similar to the branding series where the last article was largely non technical in focus and audience.</p>
<p>I hope you&#8217;ve enjoyed this little journey and didn&#8217;t find it too pointless <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/&title=SharePoint+for+Cisco+Fanboys+%28darn+WEBDAV%29+%26%238211%3B+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/24/sharepoint-for-cisco-fanboys-darn-webdav-part-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SharePoint for Cisco Fanboys &#8211; Part 1</title>
		<link>http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/</link>
		<comments>http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 00:15:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[WEBDAV]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/</guid>
		<description><![CDATA[Cisco nerds! This series is just for you! I know that you think you&#8217;re way too cool for collaborative portals, especially a Microsoft one at that. Instead you are more interested in delving into the IOS command line, to perform arcane arts such as debugging that OSPF route redistribution into BGP or getting off on [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><iframe style="border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none" border="0" marginwidth="0" marginheight="0" src="http://rcm.amazon.com/e/cm?t=cleverwo-20&amp;o=1&amp;p=13&amp;l=st1&amp;mode=books&amp;search=cisco&amp;fc1=000000&amp;lt1=&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" width="468" scrolling="no" height="60"></iframe></p>
<p>Cisco nerds! This series is just for you! I know that you think you&#8217;re way too cool for collaborative portals, especially a Microsoft one at that. Instead you are more interested in delving into the IOS command line, to perform arcane arts such as debugging that <a href="http://en.wikipedia.org/wiki/Open_Shortest_Path_First">OSPF</a> route redistribution into <a href="http://en.wikipedia.org/wiki/Border_gateway_protocol">BGP</a> or getting off on planning and implementing a large scale <a href="http://en.wikipedia.org/wiki/Dmvpn">DMVPN</a> solution. Maybe you&#8217;re into <a href="http://en.wikipedia.org/wiki/Quality_of_service">QOS</a> and VOIP and simply dig all of those <a href="http://en.wikipedia.org/wiki/Differentiated_services">DSCP-COS</a> mappings, class and policy maps and the like.</p>
<p>Although packets, cells and frames are your world, *nix is cool, <a href="http://www.nagios.org/">Nagios</a> is your idea of a portal and anything remotely connected to Microsoft fills you with contempt and is beneath you right? <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Well if this is you, I do understand your point of view because I was you once, but after some therapy, I&#8217;m now out of rehab and doing just fine!</p>
<p>Having Cisco/general networking expertise will help you with this article, so depending on who you are, the amount of caffeine required to follow this will vary:</p>
<p>CleverWorkArounds Coffee requirement rating (for a CCNP or CCIE): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image7.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb7.png" width="25" border="0"/></a>&nbsp;</p>
<p>CleverWorkArounds Coffee requirement rating (for a non Cisco person or CCNA <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ): <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb8.png" width="25" border="0"/></a>&nbsp; <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image9.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb9.png" width="25" border="0"/></a> <a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image10.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb10.png" width="25" border="0"/></a></p>
</p>
<p><span id="more-335"></span></p>
<p>Okay Cisco gurus, if there is anything about SharePoint that you guys need to know about, it is the power of the document library.</p>
<p>Unlike a regular file system, a SharePoint document library has a powerful version control mechanism that can make your life easier, as well as play nice with the rest of your colleagues (whom you despise because they don&#8217;t understand or appreciate you <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>So I am first going to show you an example of how you can leverage SharePoint to do something quite useful with Cisco gear, and then in the next post of this series I will expand further into general IT infrastructure admin benefits.</p>
<h2>The Cisco bit..</h2>
<p>(Non Cisco people, your eyes will glaze over &#8211; but try anyway!)</p>
<p>Back around 2000/2001 when I was a full time network manager, I wrote a perl script that used <a href="http://en.wikipedia.org/wiki/SNMP">SNMP</a> to instruct a router to dump its configuration to a TFTP server. I had a <a href="http://en.wikipedia.org/wiki/Cron">cron</a> job that ran this script daily, and it would tell all of our switches and routers to write their current configuration to TFTP. It was nothing special &#8211; many Cisco network professionals do the same thing.</p>
<p>(Before you ask, I *know* there are tools and new methods to do this nowadays, but back then the choices were more limited)</p>
<p>Anyway, here is a snippet of the script in question. I know it&#8217;s not great but it did the job&#8230;</p>
<p><font face="Courier">use Net::SNMP; </font></p>
<p><font face="Courier">($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;<br />@Days = (&#8220;Sunday&#8221;, &#8220;Monday&#8221;, &#8220;Tuesday&#8221;, &#8220;Wednesday&#8221;, &#8220;Thursday&#8221;, &#8220;Friday&#8221;, &#8220;Saturday&#8221;);<br />$day = $Days[$wday];</font></p>
<p><font face="Courier"># Now call the procedure to do the deed!<br />&amp;backup_configs(&#8220;192.168.16.1&#8243;,&#8221;RWSNMPcommunity&#8221;);<br />&amp;backup_configs(&#8220;192.168.16.2&#8243;,&#8221;RWSNMPcommunity&#8221;);</font></p>
<p>The above code simply grabbed the date and then called the main function, passing the IP of the router and the SNMP community string for Read/Write access. The routine below, used SNMP SET commands to tell the router the location of the TFTP server, the name of the configuration file being written, and then told the device to execute the request.</p>
<p><font face="Courier">sub backup_configs {<br />&nbsp;&nbsp;&nbsp; ($ipaddr, $cs) = @_;<br />&nbsp;&nbsp;&nbsp; ($s, $error) = Net::SNMP-&gt;session( -hostname&nbsp; =&gt; $ipaddr,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -community =&gt; $cs,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -debug =&gt; &#8217;1&#8242; ); </font></p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $hnh = $s-&gt;get_request(&#8220;.1.3.6.1.2.1.1.5.0&#8243;);<br />&nbsp;&nbsp;&nbsp; $hostname = $hnh-&gt;{&#8220;.1.3.6.1.2.1.1.5.0&#8243;}; </font></p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $filename = &#8220;\\router-configs\\&#8221; . $day . &#8220;\\&#8221; . $hostname . &#8220;.cfg&#8221;;<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.2.667&#8243;, INTEGER, 1);<br />&nbsp;&nbsp;&nbsp; # Set the source to startup-config<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.3.667&#8243;, INTEGER, 4);<br />&nbsp;&nbsp;&nbsp; # Set the destination to tftp<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.4.667&#8243;, INTEGER, 1);<br />&nbsp;&nbsp;&nbsp; # Set TFTP IP Address<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.5.667&#8243;, IPADDRESS,&#8221;192.168.18.5&#8243;);<br />&nbsp;&nbsp;&nbsp; # Set destination file name<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1x.1.6.667&#8243;, OCTET_STRING,&#8221;$filename&#8221;);<br />&nbsp;&nbsp;&nbsp; # Set it off!<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.14.667&#8243;, INTEGER, 1);<br />&nbsp;&nbsp;&nbsp; $done = false;<br />&nbsp;&nbsp;&nbsp; $counter = 0;<br />&nbsp;&nbsp;&nbsp; while ($done eq false) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $check = $s-&gt;get_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.10.667&#8243;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($check-&gt;{&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.10.667&#8243;} == 3) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $done = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $counter++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($counter &gt; 500) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $done = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; if ($counter &gt; 500) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8220;$date:A problem occured &#8211; it looks like the attempt failed\n&#8221;;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; # Clear the config!\n&#8221;;<br />&nbsp;&nbsp;&nbsp; $s-&gt;set_request(&#8220;.1.3.6.1.4.1.9.9.96.1.1.1.1.14.667&#8243;, INTEGER, 6);<br />&nbsp;&nbsp;&nbsp; #close the snmp session<br />&nbsp;&nbsp;&nbsp; $s-&gt;close; </font></p>
<p><font face="Courier">}</font></p>
<p>Now, I know there is a lot of ugly SNMP stuff in my above code and many readers are thinking, WTF!? You can safely ignore most of the code. However there is one bit that I do want to bring your attention to.</p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $hostname = $hnh-&gt;{&#8220;.1.3.6.1.2.1.1.5.0&#8243;}; </font></p>
<p><font face="Courier">&nbsp;&nbsp;&nbsp; $filename = &#8220;\\router-configs\\&#8221; . $day . &#8220;\\&#8221; . $hostname . &#8220;.cfg&#8221;;<br /></font></p>
<h6><font face="Courier"></font></h6>
<p>Looking closely at this, you can see that I am setting the filename based around the name of the Cisco device (retrieved from SNMP) and the day of the week the script is run ($day). This is because when I backed up the configuration of the router, I wanted to keep multiple versions. For simplicity, I opted to keep 7 days worth of configuration dumps. So by using the day of the week in the file path, I ended up with config backups like this.</p>
<ul>
<li>router-configs/monday/mycorerouter.cfg  </li>
<li>router-configs/monday/myedgerouter.cfg  </li>
<li>router-configs/tuesday/mycorerouter.cfg  </li>
<li>router-configs/tuesday/myedgerouter.cfg </li>
</ul>
<p>So, provided the path router-configs/&lt;day of the week&gt; exists on my TFTP box, I end up with a single file for each cisco device in each day of the week directory.</p>
<p>Neat, eh?</p>
<p>&nbsp;</p>
<h2>Yeah it&#8217;s neat, so why integrate TFTP with SharePoint?</h2>
<p>Version control and workflow, my skeptical Cisco friends, that&#8217;s why! The easiest way to explain is to dive right into an example. So let&#8217;s do that right now!</p>
<p>There are a few TFTP servers out there for Windows (yeah we are using Windows &#8211; get over it). I <strong>used</strong> to use <a href="http://www.tftp-server.com/">WinAgents</a> TFTP server. Unfortunately though in writing this article, the most recent version of WinAgents TFTP does not work with SharePoint the way I want it to (if you run an older version it is fine). I also tried using <a href="http://www.solarwinds.com/products/freetools/free_tftp_server.aspx">SolarWinds</a> freeware (registration required) TFTP server as it runs as a windows service. Unfortunately, I had some stability problems with WEBDAV when running as a service (not SolarWinds fault) which I will explain in the next post, so I ended up using <a href="http://tftpd32.jounin.net/">TFTPD32</a> with a few modifications. (TFTPD32 is <a href="http://www.cisco.com/en/US/products/hw/routers/ps133/products_tech_note09186a00801f7735.shtml">recommended by Cisco</a> anyway).</p>
<p>What we will do is the relatively simple process of telling the TFTP server to drop files into a SharePoint document library via WEBDAV.</p>
<p><em>For reference, the TFTP server does not have to be on the same server as SharePoint when using the WEBDAV method. </em></p>
<p>The TFTPD32 Server Installation is straightforward. Once installed however, there are three additional steps that you need to perform:</p>
<ul>
<li>Create or nominate a user account to run the TFTP Service.  </li>
<li>Modify TFTP32 to run as a WIndows Service &#8211; using the credentials of a user account that has permissions to the document library that the TFTP server will dump the files to.  </li>
<li>Set the TFTP root directory to the UNC path of the SharePoint document library </li>
</ul>
<p>I am assuming that you already have a SharePoint or WSS server. On the SharePoint side, we need to create a site and a document library to hold our configuration backups, grant the TFTP server permission to it and then enable version control on that document library.</p>
<p>So in my example, the user account that is going to upload files to SharePoint is called &#8220;<strong>tftp service</strong>&#8220;. I will refer to this account frequently in the rest of this post.</p>
<p>Also in this example, the SharePoint site is <strong>http://tidemo/tftp</strong> and the document library is called &#8220;<strong>backups</strong>&#8220;</p>
<p><strong><a href="http://tidemo/tftp/backups">http://tidemo/tftp/backups</a></strong></p>
<p><strong></strong>&nbsp;</p>
<h2>Configuring SharePoint</h2>
<p>&nbsp;</p>
<p>(SharePoint people, I am covering the basics here &#8211; skip if you know it already).</p>
<p>In SharePoint, create a new, blank site to host the TFTP server files. Being a bastion of originality, in the example below I have named the site TFTP.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0025.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="351" alt="clip_image002[5]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0025-thumb.jpg" width="351" border="0"/></a></p>
<p>&nbsp;</p>
<p>Now that the site has been created, we create a document library to store the files for the TFTP server. I have called it &#8220;Backups&#8221; and chosen not to use a default document template.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0027.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="410" alt="clip_image002[7]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0027-thumb.jpg" width="355" border="0"/></a></p>
<p>&nbsp;</p>
<p>The next step, having created this document library, is to turn on version control. This is performed by choosing &#8220;document library settings&#8221; from the &#8220;Actions&#8221; menu.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0029.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="clip_image002[9]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image0029-thumb.jpg" width="244" border="0"/></a><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00211.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="clip_image002[11]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00211-thumb.jpg" width="360" border="0"/></a></p>
<p>&nbsp;</p>
<p>In the version settings screen, choose to create major versions.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00213.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="241" alt="clip_image002[13]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00213-thumb.jpg" width="367" border="0"/></a></p>
<p>&nbsp;</p>
<p>Finally, we need to grant our user &#8220;tftp service&#8221; write access to this new document library. The simplest way to do this is add &#8220;tftp service&#8221; to the members&#8217; group of the SharePoint site. This will grant them &#8216;contribute&#8217; access to the &#8220;Backups&#8221; document library. (This permission setting is just for demonstration purposes. Adjust permissions according to your specific requirements)</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb2.png" width="387" border="0"/></a>&nbsp;</p>
<p>&nbsp;</p>
<p>Right! Our doc library is ready! If at this point you open the document library via Windows Explorer as shown below, you will see that the UNC equivalent path for this example document library is <a href="file://\\TIDEMO\TFTP\BACKUPS">\\TIDEMO\TFTP\BACKUPS</a></p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00215.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="clip_image002[15]" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image00215-thumb.jpg" width="244" border="0"/></a></p>
<p>&nbsp;</p>
<p>If you do not see your standard windows explorer window here and a UNC path, stop here! We need to troubleshoot the windows WEBDAV service. It might pay for you to skip to the &#8220;WEBDAV interlude section coming up)</p>
<p>One thing that people often overlook with SharePoint is that document libraries have this &#8220;windows explorer&#8221; view. What is so significant about this, you ask? It is the fact that you can reach <strong>any </strong>SharePoint document library via a UNC path. You can even map a drive to a SharePoint library too. Thus the following document library:</p>
<p><strong>http://tidemo/tftp/backups</strong></p>
<p>is accessible via</p>
<p><strong>\\tidemo\tftp\backups</strong></p>
<p>As a result of this functionality, pretty much any application that deals with UNC and mapped drives (such as ROBOCOPY) can happily copy files from your PC to a SharePoint library (with a large caveat I will explain later).</p>
<p>For educational purposes, let&#8217;s look at how windows explorer view is done. (If you are not interested, skip to the next heading where we configure SolarWinds TFTP.)</p>
<h2>How is this done? A WEBDAV interlude</h2>
<p>Now SharePoint does not actually provide support for <a href="http://en.wikipedia.org/wiki/Server_message_block">SMB</a> which is what &#8216;regular&#8217; shared file systems use. The protocol that SharePoint supports is <a href="http://www.webdav.org/specs/rfc4918.html">WEBDAV</a> which stands for &#8220;Web-based Distributed Authoring and Versioning&#8221;. So, how is it that we can use Windows explorer, mapped drives and UNC paths to get to SharePoint files?</p>
<p>In Windows XP and above, Microsoft supplied a new network provider called the Windows WebDav client. (Yes, XP and above &#8211; Windows 2000 is not going to work this way for you). <em>Also, Samba people who are reading this and thinking &#8220;ooh I can use smbfs to mount a SharePoint library to *nix&#8221;, sorry it ain&#8217;t gonna work because it is not SMB.</em></p>
<p>By creating the Web Client Service as one of the built-in network providers, it is automatically queried whenever you make connection attempt to a network resource (i.e. opening Windows explorer and navigating to a mapped drive or UNC path). You can see the provider by following these steps:</p>
<ul>
<li>On the <b>Start</b> menu, right-click <b>My Network Places</b> and then click <b>Properties</b>.  </li>
<li>On the top menu bar, click <b>Advanced</b> and then click <b>Advanced Settings</b>.  </li>
<li>Click the <b>Provider Order</b> tab. </li>
</ul>
<p>You will see a dialog box with your provider order listed. Note that the Web Client Network (WebDAV) is last in the list by default.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image002.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="459" alt="clip_image002" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/clip-image002-thumb.jpg" width="408" border="0"/></a></p>
<p>&nbsp;</p>
<p>Microsoft have a detailed <a href="http://www.microsoft.com/downloads/thankyou.aspx?familyId=c523ac7a-5724-48be-b973-641e805588f4&amp;displayLang=en">whitepaper</a> on how Windows Explorer view is implemented, and it is well worth a read. (I&#8217;ve previously <a href="http://www.cleverworkarounds.com/2007/10/15/poor-windows-explorer-view-performance-in-sharepoint/">blogged</a> on quirks with it before.)</p>
<p>&nbsp;</p>
<h2>TFTP to SharePoint</h2>
<p>So, now we know that on XP and above, any application that uses the windows networking API (interpret that as refer to a mapped drive or UNC path), can get data into and out of SharePoint. So let&#8217;s run the TFTPD32 and set it to use our document library.</p>
<p>&nbsp;</p>
<h3>Configuring TFTPD32</h3>
<p>First up, grab TFTP32 and install it onto your chosen server. After successful installation run TFTP32.EXE from the installation directory.</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image3.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="341" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb3.png" width="405" border="0"/></a></p>
<p>&nbsp;</p>
<p>Click OPTIONS and now set the path to the Windows explorer view path (UNC) of your site and document library</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image4.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="110" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb4.png" width="368" border="0"/></a></p>
<p>&nbsp;</p>
<p>That is pretty much it! Now let&#8217;s test it!</p>
<p>Unfortunately, I don&#8217;t have any spare Cisco gear handy as Uncle Ebay helped me dispose of them once I stopped doing networking. So instead, I will use the built in TFTP.EXE utility built into Windows. This proves that a file can be saved to SharePoint via TFTP.</p>
<p>It works like this.</p>
<p>TFTP &lt;hostname or IP&gt; GET|PUT &lt;filename&gt;</p>
<p>eg</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font></p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>&nbsp;</p>
<p>The output of the above command shows &#8220;transfer successful&#8221;. So let&#8217;s go and have a peek in our document library!</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image5.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb5.png" width="775" border="0"/></a></p>
<p>Sweeeet, we have a file called &#8220;myfile&#8221;.</p>
<p>So let&#8217;s go back to TFTP and re-run the command a few times.</p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font></p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p><font face="Courier">[snip many re-executes]</font></p>
<p><font face="Courier">C:\&gt;TFTP 192.168.134.129 PUT myfile.txt</font></p>
<p><font face="Courier">Transfer successful: 43552 bytes in 1 second, 43552 bytes/s</font></p>
<p>&nbsp;</p>
<p>Now let&#8217;s take another gander in the document library. Still the one file there. However, let&#8217;s now examine the version history for the file and see if there are multiple versions?</p>
<p><a href="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image6.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="307" alt="image" src="http://www.cleverworkarounds.com/wp-content/uploads/2008/01/image-thumb6.png" width="614" border="0"/></a></p>
<p>Sweeet, we now see that there are 7 versions stored for this file!</p>
<p>&nbsp;</p>
<h2>Conclusion (and the catch&#8230;)</h2>
<p>So imagine that every day, you use the perl script example above to instruct your networking gear to copy their configuration to TFTP. Now you can simply use a standard file name convention (such as &lt;hostname&gt;-config.txt) do not need to worry about folder structure or dates within filename to ensure that multiple versions are maintained. You can go into the version history for a particular router configuration file and retrieve the one that you need.</p>
<p>Of course, all of your other important documents such as your network diagrams, SOE documentation, maintenance and support agreement details can also be placed into SharePoint document libraries and many other benefits are derived in addition to version history, such as search, workflow and easy offline storage.</p>
<p>But that is for the next post <img src='http://www.cleverworkarounds.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Now for the catch &#8230; and it&#8217;s a biggie!</p>
<p>We of course, want to run our TFTP server as a windows service, so that the TFTP server does not have to be manually invoked.</p>
<p>Try as I might, I was unable to get a reliable TFTP service writing to SharePoint document library, when the TFTP server is running as a Windows Service! This majorly sucked and I was an unhappy camper!!</p>
<p>I have concluded that the WEBDAV client in WIn2003 is flakey. In the next post of this series, I will outline the problems that I had and how I eventually was able to come up with a semi-clever workaround to make it all work.</p>
<p>Bye for now!</p>
<p>Paul</p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/&title=SharePoint+for+Cisco+Fanboys+%26%238211%3B+Part+1" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2008/01/21/sharepoint-for-cisco-fanboys-part-1/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>WIFI Security: Background, Risks and Mitigation Part 2</title>
		<link>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/</link>
		<comments>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 00:24:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WIFI]]></category>

		<guid isPermaLink="false">http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/</guid>
		<description><![CDATA[Like my posts on IT governance standards, I produced this training material some time back when I was doing a lot of IT security work. I&#8217;ve since moved onto other IT disciplines, but I hope that this article is of some use to those looking for an introduction to WIFI security. I have divided the [...]<p class="tags">No Tags</p>]]></description>
			<content:encoded><![CDATA[<p><!--adsense-->   <br />Like my posts on IT governance standards, I produced this training material some time back when I was doing a lot of IT security work. I&#8217;ve since moved onto other IT disciplines, but I hope that this article is of some use to those looking for an introduction to WIFI security. I have divided the material into two parts. The first half is <a href="http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-1/">background and theory</a>, and this post illustrates a practical example.</p>
<p>First up, let&#8217;s finish off a little theory to go with the first post.</p>
<p><span id="more-152"></span></p>
<h2>Other WIFI Security Measures</h2>
<p>WEP and the much improved WPA should not be considered alone. Security in general requires a holistic approach to determine what functionality the business requires, what techniques can be used to provide that functionality and then assurance of the security of those features. Below are two additional techniques regularly used in conjunction with WEP or WPA to improve the security of a WLAN.</p>
<h3>MAC Address Filtering</h3>
<p>A common feature available with wireless access devices is the means to restrict access to only wireless devices that have their network (MAC) address configured in a filter list. Therefore, any device that tries to authenticate with a MAC address not matching the list will be rejected.</p>
<p>This method is not foolproof. If traffic can be decrypted then a valid MAC address could be determined and used to access the network.</p>
<h3>Separate VLAN/DMZ for Wireless LAN</h3>
<p>Most medium to large networks utilise virtual LAN&#8217;s (VLAN&#8217;s) to separate IP networks into logical groupings for security, performance and management reasons. Most good quality layer 3 switches provide VLAN&#8217;s that allow you to define firewall rules or access lists to restrict what resources on the network that wireless networks clients can access.</p>
<p>For more protection, the wireless network can be placed behind a fully featured stateful firewall rather than a VLAN alone.</p>
<h2>WPA Wireless Clients Sample Implementation</h2>
<p>This section shows an example of implementing WPA Enterprise with PEAP. Three components are required.</p>
<ul>
<li>The supplicant (the WIFI client), </li>
<li>The Authenticator (the Access Point) and; </li>
<li>An Authentication Server (A Radius server such as Microsoft IAS Server). </li>
</ul>
<p>In this example the Access Point is a Cisco Aironet 1310 Series Outdoor Access Point/Bridge1 running IOS 12.3(7)JA.</p>
<p>In addition, since we are using PEAP, we need a suitable certificate server and we have used Microsoft Certificate Services.</p>
<p>Since we are using Microsoft IAS for Radius, which integrates with Active Directory, we have created 2 new Active Directory groups called &quot;Wireless Users&quot; and &quot;Wireless Computers&quot; respectively. These groups will be used to determine what computers and users are allowed access to the WIFI network. This ensures a high level of granularity for IT staff to manage access.</p>
<h3>Configuring IAS (RADIUS)</h3>
<p>IAS is a free component that is supplied with Win2k/Win2003 but is not installed by default. It can be installed via the Control Panel-&gt;Add/Remove Programs/Windows Components applet.</p>
<p>Both IAS and the authenticating access point need to be configured to perform Radius authentication. Firstly, you need to register IAS in Active Directory, so that IAS policies can be used on Active Directory users and computers to govern access.</p>
<p>In the left hand pane of the IAS management console, select Internet Authentication Service (Local) and right click to select the Register Server in Active Directory option.</p>
<p>If the server is already registered in active directory, this message will be shown</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit1.png" /><span style="font-family: tahoma">     <br /></span></p>
<h3>Adding the Access Point as a Radius Client</h3>
<p>In IAS, you create a new RADIUS client and enter a shared secret.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit2.png" /></p>
<h3>Adding the IAS Server as a Radius Server on the Access Point</h3>
<p>On the access point, the detail of the IAS server is entered.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit3.png" /></p>
<p>Next we need to configure the Access Point to accept WPA clients and authenticate them to Radius. To do this, we first set encryption to WPA/TKIP.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit4.png" /></p>
<p>Next we set the SSID to use Open Authentication <em>and</em> Network/EAP authentication. Network EAP is the better of the two, but Cisco have <a href="http://www.cisco.com/en/US/products/ps5861/products_configuration_guide_chapter09186a00804ed735.html">noted</a> that &#8216;Some non-Cisco Aironet client adapters do not perform 802.1x authentication to the access point/bridge unless you configure Open authentication with EAP.&#8217;</p>
<p>We have already configured the RADIUS server, so we just use the default list. Under Key Management, we set it to mandatory and choose WPA. Accounting can also be enabled, and log on and log off events will be sent to the RADIUS server.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit5.png" /></p>
<h3>Configuring a Digital Certificate for the IAS Server.</h3>
<p>If the server running IAS is already part of Active Directory, and there is a Certificate Server on the Active Directory Domain, the IAS server will already have a computer certificate installed. This can be verified using the Certificate Services MMC Span-In.</p>
<p>Open the Local Computer certificate store, choose Personal/Certificates and you should find a certificate matching the name of this computer. For example:</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit6.png" /></p>
<p>If you do not have a computer certificate, you need to obtain one via a certificate authority. This is not covered in this document.</p>
<h3>Configuring IAS Wireless Policy</h3>
<p>At this point we now need to configure the policy on the Radius server so that when a wireless device connects, the conditions that allow it to join the network are defined. The policies set will be to ensure the computer and user id supplied are members of the &quot;Wireless Users&quot; and &quot;Wireless Computers&quot; active directory groups.</p>
<p><strong>User Access     <br /></strong></p>
<p>The first policy to be created is for the user accounts that will be connecting to the wireless network. The wireless connection type will be defined and then the appropriate active directory security group will be specified.</p>
<p>In IAS Management console, create a new Remote Access Policy, select &quot;Set up a custom policy&quot; and enter &quot;WFIC Wireless User Access&quot; as the Policy name.</p>
<p>Now we add the conditions required for this remote access policy</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit7.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select Client-IP-Address, Add the IP address of the Wireless Access Point and click Ok</p>
<p>Select Windows-Groups and then click Add. Enter the wireless user groups &quot;Wireless Users&quot; and &quot;Wireless Computers&quot; as described earlier and click OK</p>
<p>Now we have completed the conditions for using this wireless policy. Click Next and grant remote access permission.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit8.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Now we have to specify the PEAP settings. Click Profile</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit9.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select the Advanced tab, highlight the Framed-Protocol (RADIUS Standard PPP) attribute and click Remove</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit10.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select the Encryption tab</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit11.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Select the Encryption tab and remove all tick boxes, leaving only the Strongest Encryption (MPPE 128-bit) option ticked</p>
<p>Select the Authentication tab</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit12.png" /></p>
<p>Select the Authentication tab and click EAP Methods</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit13.png" /></p>
<p>Click Add to add an EAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit14.png" /></p>
<p>Select PEAP and click OK. Now Click Edit to modify the PEAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit15.png" /></p>
<p>Ensure that the certificate is the correct and ensure that MSCHAP is set as the EAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit16.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Back on the Authentication tab remove all other tick box options then click OK</p>
<p>You may see a message asking if you would like to view the online help to follow and configure dial-in settings</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit17.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Click No and Next to continue. The wizard will now tell you the profile is complete and summarise the conditions and profile settings.</p>
<p><strong>Computer Policy     <br /></strong></p>
<p>Another policy can optionally be created for Domain Computers. The policy steps are identical to the steps outlined in the user policy except during the setting of policy conditions, you use the Active Directory group that the wireless computers are a member of.</p>
<p><strong>Granting Active Directory Rights     <br /></strong></p>
<p>The last step is to ensure that the user and computer accounts in Active Directory have rights to &#8216;dial in&#8217; &#8211; which is Microsoft&#8217;s term for using Radius Authentication.</p>
<p>A user account needs &quot;Control Access through Remote Access Policy&quot; set.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit18.png" /></p>
<p>A computer account needs the same setting.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit19.png" /></p>
<h3>Wireless Client Configuration Settings</h3>
<p>This section only deals with the configuration of Windows XP Clients</p>
<p><strong>Digital Certificate     <br /></strong></p>
<p>Using PEAP, the WIFI <strong>clients</strong> do not need to use a digital certificate. Only the server uses one to identify itself to the client. However, the clients need to <em>trust the certificate authority (CA) that issued the server certificate</em>. To do this, the certificate of the CA needs to be added to the trusted certificate list on the client.</p>
<p>If the computer is a member of the Active Directory Domain, the CA certificate is likely already installed. This can be checked using the same steps defined in the section &quot;Configuring a Digital Certificate for the IAS Server&quot; except you go to the &quot;Trusted Root Certification Authorities&quot; store to find the CA certificate.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit20.png" /></p>
<p>If the certificate is not installed and if the CA certificate Using Microsoft Certificate Services, it is easy to obtain and install it. The certificate can be installed by double clicking on the certificate file stored on a shared folder, floppy or USB device. Alternatively, the client can request the CA certificate from the CA website.</p>
<p><strong>Wireless Networking Configuration     <br /></strong></p>
<p>In the properties of the wireless network adapter, add a new wireless network, specifying WPA and TKIP</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit21.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>On the authentication tab, choose PEAP as the EAP type</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit22.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>Click Properties and tick &#8216;validate server certificate&#8217; and ensure the CA that issued the server certificate is selected.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit23.png" /><span style="font-family: tahoma">     <br /></span></p>
<p>If the certificate authority is not listed above, than this machine does not trust it and it needs to be added to the trust list as per section titled &quot;Digital Certificate&quot;</p>
<p>Ensure ERP-MSCHAPv2 is selected at the &#8216;select authentication method&#8217; list and click &#8216;properties&#8217;.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit24.png" /></p>
<p>This dialog box allows you to select if XP will attempt user authentication based on the currently logged in user, or prompt for credentials to be entered. If this workstation is a member of the domain, and the user logs into it via a domain account, this should be ticked.</p>
<p>Click OK and OK again to return to the Wireless network properties screen.</p>
<p><img src="http://www.cleverworkarounds.com/wp-content/uploads/2007/10/101007-0024-wifisecurit25.png" /></p>
<p>If a computer authentication policy has been chosen as per section entitled &quot;Computer Policy&quot;, tick the &quot;Authenticate as computer when computer information is available&quot;.</p>
<p>At this point the wireless client should be able to connect to the wireless network if the user and computer credentials are valid. The event logs on the IAS server now will show detailed records of all wireless network authentication attempts including username, date/time, IAS policy used and whether access was granted or denied.</p>
<p>Below is a sample IAS log entry from an access point using the IP address 192.168.100.26 and an IAS policy called &quot;AP Test&quot;.</p>
<p><span style="font-family: courier new">Event Type:&#160;&#160;&#160; Information     <br /></span></p>
<p><span style="font-family: courier new">Event Source:&#160;&#160;&#160; IAS     <br /></span></p>
<p><span style="font-family: courier new">Event Category:&#160;&#160;&#160; None     <br /></span></p>
<p><span style="font-family: courier new">Event ID:&#160;&#160;&#160; 1     <br /></span></p>
<p><span style="font-family: courier new">Date:&#160;&#160;&#160;&#160;&#160;&#160;&#160; 20/01/2006     <br /></span></p>
<p><span style="font-family: courier new">Time:&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4:45:07 PM     <br /></span></p>
<p><span style="font-family: courier new">User:&#160;&#160;&#160;&#160;&#160;&#160;&#160; N/A     <br /></span></p>
<p><span style="font-family: courier new">Computer:&#160;&#160;&#160; MYSERVER     <br /></span></p>
<p><span style="font-family: courier new">Description:     <br /></span></p>
<p><span style="font-family: courier new">User DOMAIN\some guy was granted access.     <br /></span></p>
<p><span style="font-family: courier new">Fully-Qualified-User-Name = domain.net/MY Company/DOMAIN/Some Guy     <br /></span></p>
<p><span style="font-family: courier new">NAS-IP-Address = 192.168.100.26     <br /></span></p>
<p><span style="font-family: courier new">NAS-Identifier = bridge     <br /></span></p>
<p><span style="font-family: courier new">Client-Friendly-Name = AP Test     <br /></span></p>
<p><span style="font-family: courier new">Client-IP-Address = 192.168.100.26     <br /></span></p>
<p><span style="font-family: courier new">Calling-Station-Identifier = 0013.ff10.427c     <br /></span></p>
<p><span style="font-family: courier new">NAS-Port-Type = Wireless &#8211; IEEE 802.11     <br /></span></p>
<p><span style="font-family: courier new">NAS-Port = 282     <br /></span></p>
<p><span style="font-family: courier new">Proxy-Policy-Name = Default Connection     <br /></span></p>
<p><span style="font-family: courier new">Authentication-Provider = Windows     <br /></span></p>
<p><span style="font-family: courier new">Authentication-Server = &lt;undetermined&gt;     <br /></span></p>
<p><span style="font-family: courier new">Policy-Name = Test &#8211; Wireless     <br /></span></p>
<p><span style="font-family: courier new">Authentication-Type = PEAP     <br /></span></p>
<p><span style="font-family: courier new">EAP-Type = Secured password (EAP-MSCHAP v2)     <br /></span></p>
<p style="margin-left: 36pt"><span style="font-size: 8pt">     <br /></span>&#160; <br /><!--adsense--></p>
<div id="spreadx">&nbsp;<a href="http://digg.com/submit?phase=2&url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/digg.gif" alt="Digg" border="0" /></a>&nbsp;&nbsp;<a href="http://www.facebook.com/share.php?u=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/facebook.gif" alt="Facebook" border="0" /></a>&nbsp;&nbsp;<a href="http://www.stumbleupon.com/submit?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/stumble.gif" alt="StumbleUpon" border="0" /></a>&nbsp;&nbsp;<a href="http://technorati.com/faves?add=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/technorati.gif" alt="Technorati" border="0" /></a>&nbsp;&nbsp;<a href="http://del.icio.us/post?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/delicious.gif" alt="Deli.cio.us" border="0" /></a>&nbsp;&nbsp;<a href="http://slashdot.org/submit.pl?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/slashdot.gif" alt="Slashdot" border="0" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/home?status=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/twitter.gif" alt="Twitter" border="0" /></a>&nbsp;&nbsp;<a href="http://www.sphinn.com/submit.php?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/sphinn.gif" alt="Sphinn" border="0" /></a>&nbsp;&nbsp;<a href="http://www.mixx.com/submit?page_url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/mixx.gif" alt="Mixx" border="0" /></a>&nbsp;&nbsp;<a href="http://www.google.com/bookmarks/mark?op=edit&bkmk=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/google.gif" alt="Google" border="0" /></a>&nbsp;&nbsp;<a href="http://www.dzone.com/links/add.html?url=http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/&title=WIFI+Security%3A+Background%2C+Risks+and+Mitigation+Part+2" target="_new"><img src="http://www.cleverworkarounds.com/wp-content/plugins/spreadx/images/dzone.gif" alt="DZone" border="0" /></a>&nbsp;</div><p class="tags">No Tags</p>]]></content:encoded>
			<wfw:commentRss>http://www.cleverworkarounds.com/2007/10/10/wifi-security-background-risks-and-mitigation-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

