<?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>Mostly Software Engineering &#187; SQUID</title>
	<atom:link href="http://www.advansen.com/tag/squid/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.advansen.com</link>
	<description>Gabriel Gonzalez&#039;s notebook</description>
	<lastBuildDate>Thu, 22 Jul 2010 13:47:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQUID + Active Directory</title>
		<link>http://www.advansen.com/2009/09/21/squid-active-directory/</link>
		<comments>http://www.advansen.com/2009/09/21/squid-active-directory/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 10:59:54 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQUID]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=114</guid>
		<description><![CDATA[A few post ago I wrote about integrating SQUID and Active Directory in order to allow/deny users to access specific webpages depeding on the groups a user belongs.
The windows package of Squid comes with several external programs which can be used as external ACLs which allow you to query the local Active Directory in order [...]]]></description>
			<content:encoded><![CDATA[<p>A few post ago I wrote about integrating <strong><em>SQUID </em></strong>and <strong><em>Active Directory </em></strong>in order to allow/deny users to access specific webpages depeding on the groups a user belongs.</p>
<p>The windows package of <strong><em>Squid </em></strong>comes with several external programs which can be used as <em><strong>external ACL</strong></em>s which allow you to query the local Active Directory in order to obtain access or not. The one dealing with users and groups is called <em><strong>mswin_check_ad_group.exe </strong><span style="font-style: normal;">which, as all the external ACLs, reads the standard input looking for a user and a group and return whether the user belongs to the given group.</span></em></p>
<p><em><span style="font-style: normal;">This is fine and pretty straight forward it has a PROBLEM, it only works with Groups with scope set to &#8220;Domain Local&#8221;; which turn into a drawback when your users belong to Groups with Global Scope. I haven&#8217;t found any documentation explaining how to achive this so I have created a simple external ACL to peform this task in python.</span></em></p>
<p><em><span style="font-style: normal;">You only need to download <a title="pywin32" href="http://sourceforge.net/projects/pywin32/">pywin32 </a>and the <a title="Active Directory for Python" href="http://timgolden.me.uk/python/downloads/active_directory-0.6.7.zip">active directory plugin</a> for python. After installing just use the following code, which will return OK IFF the user belongs to the given group (non matter which scope):</span></em></p>
<p><em><span style="font-style: normal;"><span id="more-114"></span></span></em></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">os</span>, <span class="kw3">subprocess</span>, <span class="kw3">sys</span>, <span class="kw3">re</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> active_directory</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; squid = <span class="kw3">sys</span>.<span class="me1">stdin</span>.<span class="kw3">readline</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>squid<span class="br0">&#41;</span> == <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; m = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&#8216;(?&lt;=%5C)<span class="es0">\w</span>+&#8217;</span>, squid<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; username = m.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; m = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&#8216;(?&lt;= )[<span class="es0">\w</span><span class="es0">\.</span>]+&#8217;</span>, squid<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; checkgroup = m.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ret = <span class="st0">&quot;ERR&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">user</span> = active_directory.<span class="me1">find_user</span><span class="br0">&#40;</span>username<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> group <span class="kw1">in</span> <span class="kw3">user</span>.<span class="me1">memberOf</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">cmp</span><span class="br0">&#40;</span>group.<span class="me1">cn</span>, checkgroup<span class="br0">&#41;</span> &nbsp;== <span class="nu0">0</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret = <span class="st0">&quot;OK&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span>&nbsp; &nbsp;ret + <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">sys</span>.<span class="me1">stdout</span>.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<div><span style="font-style: normal;">I am new to the Python world so, for sure, this little thing can be improved, feel free to comment anything.</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.advansen.com/2009/09/21/squid-active-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
