<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Stephen Gallagher&#039;s Open-Source Blog</title>
	<atom:link href="http://sgallagh.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sgallagh.wordpress.com</link>
	<description>Keeping the undesirables out of your system</description>
	<lastBuildDate>Fri, 27 Jan 2012 02:42:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sgallagh.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Stephen Gallagher&#039;s Open-Source Blog</title>
		<link>http://sgallagh.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sgallagh.wordpress.com/osd.xml" title="Stephen Gallagher&#039;s Open-Source Blog" />
	<atom:link rel='hub' href='http://sgallagh.wordpress.com/?pushpress=hub'/>
		<item>
		<title>SSSD Tips and Tricks Vol. 2 &#8211; LDAP</title>
		<link>http://sgallagh.wordpress.com/2011/12/22/sssd-tips-and-tricks-vol-2-ldap/</link>
		<comments>http://sgallagh.wordpress.com/2011/12/22/sssd-tips-and-tricks-vol-2-ldap/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 15:03:42 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sgallagh.wordpress.com/?p=66</guid>
		<description><![CDATA[Multiple Search Bases Starting with SSSD 1.7.0, the System Security Services Daemon now has the ability to search for users, groups and netgroups in multiple search bases. Some LDAP deployments divide groups into different trees so that individual clients can &#8230; <a href="http://sgallagh.wordpress.com/2011/12/22/sssd-tips-and-tricks-vol-2-ldap/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=66&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>Multiple Search Bases</h3>
<p>Starting with SSSD 1.7.0, the System Security Services Daemon now has the ability to search for users, groups and netgroups in multiple search bases. Some LDAP deployments divide groups into different trees so that individual clients can receive different &#8220;views&#8221; of a group. (This is especially useful for some application software that restricts access to hard-coded group names. In these cases, you can install the same application in different configurations by providing different views of that group).</p>
<p>In SSSD 1.7.0, we extended the <em>ldap_search_base</em> (and <em>ldap_[user|group|netgroup]_search_base</em>) options so that they will now take three pieces of information instead of one (the base itself). Search bases are specified by the pseudocode regular expression:</p>
<pre>&lt;base_dn&gt;?&lt;search_scope&gt;?&lt;search_filter&gt;</pre>
<p>The search filter can be either an empty string (indicating that no special filtering should be done) or it can be a valid LDAP search filter, which will be ANDed with the standard search filters SSSD uses internally.</p>
<p>&#8220;But that&#8217;s only one search base, you say!&#8221;. And you would be correct. You can add additional search bases by inserting another &#8216;?&#8217; after the search filter of the preceding base.</p>
<p>For backwards-compatibility, a single search base can be specified simply by base_dn, which will be treated as</p>
<pre>&lt;base_dn&gt;?subtree?</pre>
<h3>Paged lookups</h3>
<p>For performance reasons, many LDAP servers limit the number of records that can be retrieved by an LDAP search at one time. Beginning with SSSD 1.6.0, the System Security Services Daemon can now perform paged searches to retrieve responses containing more entries than this limit. This is particularly useful for deployments with large group memberships or those with large numbers of users and groups with enumeration enabled.</p>
<p>SSSD now provides an option <em>ldap_page_size</em> that specifies how many records to request for each individual lookup. The default was set to 1000 records (chosen as it was the lowest common default value of OpenLDAP, 389 DS and Active Directory). However, if your LDAP server has been tuned to have a higher or lower value for this limit, you may wish to update this value to match.</p>
<p>As a general rule, you will want this page size to match the limit on the server, for maximum performance. A larger page size will mean fewer round-trips across the wire to LDAP.</p>
<h3>Password Changes and Read-Only Replicas</h3>
<p>Due to its use of the openldap client libraries, SSSD has a limitation when it comes to performing password changes. Normally, the way that a read-only replica will be set up is that it will be configured to return a referral to a read-write master LDAP server when a password-change attempt occurs. The client is expected to process this referral and then open a new connection to the read-write master.</p>
<p>Unfortunately, due to an open bug in the OpenLDAP client libraries (which SSSD uses internally for much of its LDAP communication), this referral is not processed correctly. As we&#8217;ve not had much traction with the OpenLDAP developers in fixing this bug, SSSD has implemented a workaround. We provide a new option <em>ldap_chpass_uri </em>(valid when using <em>chpass_provider = ldap</em>). It&#8217;s semantics are identical to that of <em>ldap_uri</em>, except that it will only be used when a password-change is implemented. This option allows the system administrator to specify a list of read-write servers against which the password-change should occur. The <em>ldap_uri</em> option can remain pointed at the read-only replicas for performance, without compromising the ability to perform password changes on the client.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=66&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2011/12/22/sssd-tips-and-tricks-vol-2-ldap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>Protected: The Truth About Passwords</title>
		<link>http://sgallagh.wordpress.com/2011/11/19/the-truth-about-passwords/</link>
		<comments>http://sgallagh.wordpress.com/2011/11/19/the-truth-about-passwords/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 02:37:31 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[internetevolution]]></category>

		<guid isPermaLink="false">http://sgallagh.wordpress.com/?p=56</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=56&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This post is password protected. You must visit the website and enter the password to continue reading.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=56&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2011/11/19/the-truth-about-passwords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>SSSD Tips and Tricks vol. 1 &#8211; Kerberos</title>
		<link>http://sgallagh.wordpress.com/2011/09/02/sssd-tips-and-tricks-vol-1-kerberos/</link>
		<comments>http://sgallagh.wordpress.com/2011/09/02/sssd-tips-and-tricks-vol-1-kerberos/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 12:50:04 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sgallagh.wordpress.com/?p=48</guid>
		<description><![CDATA[Automatic TGT Acquisition You probably already know all about how the System Security Services Daemon can make your offline life easier by enabling cached-credential login to your system while you don&#8217;t have access to the central authentication servers. What you &#8230; <a href="http://sgallagh.wordpress.com/2011/09/02/sssd-tips-and-tricks-vol-1-kerberos/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=48&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>Automatic TGT Acquisition</h3>
<p>You probably already know all about how the System Security Services Daemon can make your offline life easier by enabling cached-credential login to your system while you don&#8217;t have access to the central authentication servers.</p>
<p>What you might not know, however, is that when using SSSD to perform Kerberos auth, it&#8217;s also possible to configure it to automatically acquire your network credentials when you go online. By setting the &#8216;krb5_store_password_if_offline&#8217; option to &#8216;True&#8217; in the [domain/DOMAINNAME] sections of sssd.conf, you can configure SSSD to store a user&#8217;s password when they log in while offline (for example, working from home). Then later, if access to the network KDC is restored (for example, connecting to the VPN), SSSD will perform a kinit on your behalf to automatically acquire a TGT for single-sign-on with your network resources.</p>
<p>Now, some of you will be saying to yourselves: &#8220;Wait, doesn&#8217;t this mean that my password is being stored on the system in a readable way?&#8221;. This is true but not the whole story. Yes, the password is stored on the system in such a way that SSSD (and theoretically the root user on the system, with some effort) can read the password. Without doing so, there would be no way for us to acquire the ticket granting ticket on your behalf. However, we do store the password in the most secure way possible: in the kernel keyring. This makes it very difficult for root to gain access to this password and essentially impossible for any non-root process. The risk factor is not zero, which explains why this is an optional feature, disabled by default. However, in the common laptop case (where it&#8217;s assumed that the owner of the laptop is likely to be its only user), this security/convenience trade-off is probably worthwhile.</p>
<h3>Automatic Ticket Renewal</h3>
<p>The second advanced Kerberos feature I&#8217;d like to discuss today is automatic ticket renewal. User processes sometimes need access to the user&#8217;s Kerberos credentials, even when the user is no longer logged in. An example might be a regular cron job that the user wants to run every day a few hours after leaving work. With traditional Kerberos configurations, this user would be forced to remember to manually renew his Kerberos credentials before leaving for the day, to ensure that the expiration time on his TGT did not expire before his cron job completed.</p>
<p>With SSSD 1.5.0 and later, it can be configured to automatically renew Kerberos tickets for the full renewable life of the TGT. This is different from the automatic TGT acquisition above, as we do not need to store the user&#8217;s Kerberos password to accomplish this. It does require some additional configuration on the KDC server, however.</p>
<p>If the KDC permits users to request &#8220;renewable&#8221; TGT tickets, then what it is allowing the user to do is to use their current TGT in place of their password in order to acquire an updated TGT (with a later expiration).</p>
<p>SSSD 1.5.0 and later can set two options to enable it to automatically renew the user&#8217;s TGT for as long as the KDC permits.</p>
<p>The first option is krb5_renewable_lifetime. When set, it specifies the maximum renewable duration that the SSSD will attempt to request from the KDC. Note that this is only a request, and the KDC itself may choose to return a much shorter duration, or disallow renewals entirely.</p>
<p>Assuming that a renewable ticket was granted, the second option is krb5_renew_interval. This option specifies how often the SSSD should poll to see if any of the user TGTs have gone beyond 50% of their current lifetime. If they have, SSSD will perform a TGT renewal on the user&#8217;s behalf, extending the lifetime of the TGT.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/48/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=48&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2011/09/02/sssd-tips-and-tricks-vol-1-kerberos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>Code reviews, collaboration and the SSSD 1.5.0 release</title>
		<link>http://sgallagh.wordpress.com/2010/12/23/code-reviews-collaboration-and-the-sssd-1-5-0-release/</link>
		<comments>http://sgallagh.wordpress.com/2010/12/23/code-reviews-collaboration-and-the-sssd-1-5-0-release/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 15:11:47 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=40</guid>
		<description><![CDATA[Yesterday, the SSSD team hit a major milestone: we released SSSD 1.5.0. This is probably the largest release we&#8217;ve done since 1.0, with over 150 commits. With several new features, particularly related to access-control, we&#8217;ve worked closely with our users &#8230; <a href="http://sgallagh.wordpress.com/2010/12/23/code-reviews-collaboration-and-the-sssd-1-5-0-release/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=40&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday, the SSSD team hit a major milestone: we released SSSD 1.5.0. This is probably the largest release we&#8217;ve done since 1.0, with over 150 commits. With several new features, particularly related to access-control, we&#8217;ve worked closely with our users to ensure that 1.5.0 is the most attuned project to their real-world needs. As I&#8217;ve mentioned in the <a title="past" href="http://blogs.fedoraproject.org/wp/sgallagh/2010/01/04/code-review-methodologies/">past</a>, SSSD relies on a very stringent code-review process for its development. Nothing makes it into the codebase without the close inspection and testing of one of the other developers. Simo Sorce, one of the original designers and developers of the System Security Services Daemon wrote an excellent <a title="blog post" href="http://samba.org/~idra/blog/id_010.html">blog post</a> on how this review policy has enabled us to write very secure code.</p>
<p>One of the major changes we made to our process in SSSD 1.5.0 is that we started using the <a title="Coverity Integrity Manager" href="http://www.coverity.com/products/coverity-integrity-manager.html">Coverity Integrity Manager</a> as part of our continuous-integration environment. By running these scans on the full codebase regularly (twice a day), we were able to keep ahead of common coding mistakes such as resource leaks or missing NULL checks. While this scanning did reveal several legitimate bugs in the SSSD, it also revealed that we had been doing an exceptional job of avoiding serious bugs in the code. For a detailed analysis of our Coverity results, see <a title="Simo's blog post" href="http://samba.org/~idra/blog/id_010.html">Simo&#8217;s blog post</a>.</p>
<p>So, what have we learned from the SSSD 1.5.0 cycle? First, there is no substitute for feedback from real-world users of your project. By maintaining our relationship with our most vocal users, I think we&#8217;ve achieved some truly great things. Secondly, when developing a security product, there&#8217;s no such thing as too many eyes on the code, be they other developers, users or automated scanning technologies.</p>
<pre><span id="more-40"></span>

SSSD 1.5.0 release announcement:

The SSSD team is proud to announce the latest enhancement release of the
System Security Services Daemon.

The source tarball is available at <a href="https://fedorahosted.org/sssd">https://fedorahosted.org/sssd</a>

== Highlights ==
 * Fixed issues with LDAP search filters that needed to be escaped
 * Add Kerberos FAST support on platforms that support it
 * Reduced verbosity of PAM_TEXT_INFO messages for cached credentials
 * Added group support to the simple access provider
 * Added a Kerberos access provider to honor .k5login
 * Addressed several thread-safety issues in the sss_client code
 * Improved support for delayed online Kerberos auth
  * Significantly reduced time between connecting to the network/VPN and
acquiring a TGT
 * Added feature for automatic Kerberos ticket renewal
  * Provides the kerberos ticket for long-lived processes or cron jobs
even when the user logs out
 * Added several new features to the LDAP access provider
  * Support for 'shadow' access control
  * Support for authorizedService access control
  * Ability to mix-and-match LDAP access control features
 * Added an option for a separate password-change LDAP server for those
platforms where LDAP referrals are not supported
 * Added support for manpage translations

== Detailed Changelog ==
Jakub Hrozek (5):
 * Always use uint32_t for UID/GID numbers
 * Internal DNS resolver should check /etc/hosts
 * Allow protocol fallback for SRV queries
 * Make manual pages translatable
 * Add Czech translation

Jan Zeleny (1):
 * Option krb5_server is now used to store a list of KDCs instead of
krb5_kdcip.

Marko Myllynen (1):
 * Fix a typo in sssd-krb5 man page

Moritz Baumann (1):
 * Fix misused SDAP_SEARCH_BASE

Piotr Drąg (1):
 * Updating pl translation

Simo Sorce (6):
 * sss_client: make code thread-safe
 * Pass sdap_id_ctx in sdap_id_op functions.
 * ldap: remove variable that was never assigned nor used
 * ldap: add checks to determine if USN features are available.
 * ldap: Use USN entries if available.
 * Fix wrong test in pam_sss

Stephen Gallagher (58):
 * Write log opening failures to the syslog
 * Improve versioning for automated builds
 * Bumping version to 1.5.0 dev
 * Fix incorrect free of req in krb5_auth.c
 * Don't clean up groups for which a user has it as primary GID
 * Handle errors during log reopening better
 * Properly check the return value from semanage_commit
 * Add utility function to sanitize LDAP/LDB filters
 * Add sysdb utility function for sanitizing DN
 * Sanitize search filters for the sysdb
 * Sanitize sysdb search filters in the IPA provider
 * Sanitize sysdb filters in the LDAP provider
 * Sanitize sysdb DN helpers
 * Sanitize search filters in memberOf plugin
 * Sanitize sysdb dn for memberof lookup
 * Add unit tests for users and groups with odd characters
 * Sanitize search filters in LDAP provider
 * Properly document ldap_purge_cache_timeout
 * Sanitize ldap attributes in the config file
 * Fix cast warning for pam_sss.c
 * Fix const cast warning for sysdb_update_members
 * Fix const cast warning in build_attrs_from_map
 * Fix const cast issue with sysdb_attrs_users_from_str_list
 * Fix const cast warning in confdb_create_ldif
 * Fix const cast warnings in tests
 * Fix incorrect type comparison
 * Log startup errors to syslog
 * Ensure that SSSD shuts down completely before restarting
 * Fix authentication queue code for proxy auth
 * Wait for all children to exit
 * Add signal documentation to sssd(8)
 * Print correct error messages for dp_err_to_string()
 * Make default SIGTERM and SIGINT handlers use tevent
 * Resend SIGTERM if child doesn't terminate
 * Set up signal handlers before initializing sysdb
 * Make sure that sss_obfuscate installs as executable
 * Move sss_* tools into their own subpackage
 * Remove IPA_ACCESS_TIME define
 * Add group support to the simple access provider
 * Fix timeouts for DNS resolver
 * Reschedule the fd timeout for secondary lookups
 * Eliminate possible NULL-dereference in pam_check_user_search
 * Add missing break statement to sss_hash_create
 * Prevent uninitialized value error in monitor_quit
 * Fix invalid sizeof in pidfile
 * Fix segfault for PAM_TEXT_INFO conversations
 * Fix unchecked return value in sss_krb5_verify_keytab_ex
 * Fix unsafe return condition in ipa_access_handler
 * Fix uninitialized value error in set_local_and_remote_host_info
 * Fix unchecked return value in test_sysdb_attrs_to_list
 * Fix unchecked return value in set_nonblocking
 * Start first enumeration immediately
 * Add sysdb_has_enumerated and sysdb_set_enumerated helper functions
 * Pass all PAM data to the LDAP access provider
 * Add authorizedService support
 * Ensure ID is checked in all domains for PAM
 * Update the ID cache for any PAM request
 * Committing new translation updates for release

Sumit Bose (79):
 * Add ldap_deref option
 * Add some missing ldap_memfree()
 * Download only enabled IPA HBAC rules
 * Add netgroups infrastructure to proxy provider
 * Implement netgroups for proxy provider
 * Remove all nss requests after a reconnect
 * Always use talloc_zero() to allocate cmdctx
 * Fix double free issue
 * Allow authentication for referrals
 * Mention ding-libs in BUILD.txt
 * Fix two return value checks
 * Store krb5 auth context for other targets
 * Add infrastructure for Kerberos access provider
 * Add krb5_get_simple_upn()
 * Make krb5_setup() public
 * Add krb5_kuserok() access check to krb5_child
 * Make handle_child_* request public
 * Call krb5_child to check access permissions
 * Add defaultNamingContext to RootDSE attributes
 * Use (default)namingContext to set empty search bases
 * Make ldap_search_base a non-mandatory option
 * Review comments for namingContexts patches
 * Avoid long long in messages to PAM client use int64_t
 * Introduce pam_verbosity config option
 * Add missing error code
 * Fix offline detection for LDAP auth/chpass
 * Fix man page
 * Use a more efficient host search filter
 * Add SIGUSR2 to reset offline status
 * fix typo in get_server_status()
 * Fix a typo on setup_netlink()
 * Daemonize by default
 * Run checks before resetting offline state
 * Fix offline detection in sdap_cli_connect request
 * Add check_online method to LDAP ID provider
 * Add a special filter type to handle enumerations
 * Send authtok_type to krb5_child
 * Add a renew task to krb5_child
 * Check authtok type for krb5 auth and chpass
 * Add krb5_renewable_lifetime option
 * Add krb5_lifetime option
 * Add support for server-side pam response messages
 * krb5_child returns TGT lifetime
 * Add support for automatic Kerberos ticket renewal
 * Allow krb5 lifetime values without a unit
 * Make string_to_shadowpw_days() public
 * Add new account expired rule to LDAP access provider
 * Add ldap_chpass_uri config option
 * Refactor krb5_child to make helpers more flexible
 * Add support for FAST in krb5 provider
 * Mark unavailable Kerberos server as PORT_NOT_WORKING
 * Replace krb5_kdcip by krb5_server in LDAP provider
 * Fix build issue with older Kerberos library
 * Remove check_access_time() from IPA access provider
 * Bye, bye, ipa_timerules
 * Fix unchecked return value in sdap_get_msg_dn()
 * Fix unchecked return value in sdap_parse_entry()
 * Remove unused newauthtok variable in LOCAL_pam_handler
 * Fix improper NULL check in fo_add_srv_server()
 * Fix incorrect return value on failure in resolve_get_domain_send()
 * Fix incorrect return value on failure in check_and_export_options()
 * Fix uninitialized value error in sdap_account_expired_shadow()
 * Fix uninitialized value error in setup_test in fail_over-tests.c
 * Fix improper bit manipulation in pam_sss
 * Fix possible memory leak in sss_nss_recv_rep()
 * Fix uninitialized value error in main() in stress-tests.c
 * Fix possible memory leak in do_pam_conversation
 * Fix another possible memory leak in sss_nss_recv_rep()
 * Fix memory leak of library handle in proxy
 * Fix uninitialized value error in lookup_netgr_step()
 * Fix possible NULL-dereference in lookup_netgr_step()
 * Avoid multiple initializations in LDAP provider
 * Introduce sss_hash_create_ex()
 * Fixes for automatic ticket renewal
 * Serialize requests of the same user in the krb5 provider
 * Update config API files
 * Add all values of a multi-valued user attribute
 * Remove unused member of a struct
 * Fix potential NULL-dereference in krb5_auth_done()

Yuri Chornoivan (1):
 * Updating uk translation</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=40&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/12/23/code-reviews-collaboration-and-the-sssd-1-5-0-release/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>Net Neutrality and you</title>
		<link>http://sgallagh.wordpress.com/2010/10/01/net-neutrality-and-you/</link>
		<comments>http://sgallagh.wordpress.com/2010/10/01/net-neutrality-and-you/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 14:35:46 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[politics]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=30</guid>
		<description><![CDATA[By now, you&#8217;ve probably heard the term &#8220;Net Neutrality&#8221; banded about on the Internet. Perhaps you wonder what it means. Perhaps you&#8217;ve been watching certain biased news networks and have a warped understanding of the term. In either case, I&#8217;d &#8230; <a href="http://sgallagh.wordpress.com/2010/10/01/net-neutrality-and-you/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=32&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>By now, you&#8217;ve probably heard the term &#8220;Net Neutrality&#8221; banded about on the Internet. Perhaps you wonder what it means. Perhaps you&#8217;ve been watching certain biased news networks and have a warped understanding of the term. In either case, I&#8217;d like to try and provide a human-readable explanation of what the positions are on Net Neutrality.</p>
<p>I think the first thing I need to describe is a little bit of how the Internet actually works. When you type in an address in your web browser, you are not connecting directly to that web server. Instead, what happens is that your request travels through intermediaries. First it goes to your Internet service provider that you bought your connection from (e.g. Comcast, Verizon, AT&amp;T, NetZero, etc.). From there, it&#8217;s transmitted through several high-bandwidth providers, sometimes owned by the same company, sometimes another company, until it arrives finally at the server you wanted to talk to. We&#8217;ll call these middle hops (including your ISP, and the backbones that they talk to) &#8220;intermediaries&#8221;. I will use several of these companies as examples below, however they are only hypothetical examples and should not be misconstrued as an endorsement or accusation of misconduct by any particular entity.</p>
<p>Next, lets describe bandwidth a little bit. The classic example is to compare it to modern running-water plumbing. Bandwidth in this case could be described by the diameter of the water pipe. The wider the pipe, the more water than can flow through it each minute. Similar to pipes as well, you have a problem when the amount of water (data) you try to send through the pipe (Internet connection) is greater than its ability to pass it through.</p>
<p>Let&#8217;s try and define the term &#8220;Net Neutrality&#8221;. What does it mean, and how does it affect you?</p>
<p>Net Neutrality is a proposal that the Internet needs to be legislated to guarantee that the intermediaries between you and the server you&#8217;re trying to talk to cannot make deals to disallow access to certain services. For example, lets say that your Internet service provider is Comcast. Comcast owns NBC/Universal, which provides a website for streaming the latest episodes of its television programs. They have other competitors in the television market, so they decide that anyone using their communication lines can only connect at full speed to nbc.com, and that sites like hulu.com, cw.com and cbs.com are going to be limited to 10% speed so that they don&#8217;t use up the available bandwidth that Comcast wants to be used for nbc.com. As mentioned above, Comcast has a certain amount of bandwidth that it can take advantage of. As more and more people get on the Internet with an assortment of devices (computers, smartphones, Internet-enabled televisions, etc.), there is an increased demand on Comcast&#8217;s bandwidth.</p>
<p>From Comcast&#8217;s perspective, it would now have two choices:</p>
<ol>
<li>Increase its bandwidth. This is very expensive, as it involves expending millions of dollars on new equipment</li>
<li>Find ways to divide the bandwidth it already has</li>
</ol>
<p>The second option is where we start to get into Net Neutrality territory. In the example above, I provided the example that, in situations where the available bandwidth is at its limit, Comcast might choose to restrict the passage of data destined for one of its competitors, so that it could reserve a larger part of its available bandwidth for its own services. This is not necessarily a particularly good example, because situations like this might lead to antitrust lawsuits.</p>
<p>There is, however, another case that is the crux of the Net Neutrality argument. It is essentially this: Should Comcast be allowed to sell different tiers of service to different customers. For example, can hulu.com come to Comcast and offer to pay double the going rate for traffic through its network, and be granted a larger percentage of the available pipe? This is the source of the largest piece of confusion in the Net Neutrality debate. Those who do not understand the technologies behind the Internet see this discussion as a free market situation. In other words, if a customer of Comcast can afford to pay more for higher quality of service, then they should be allowed to do so.</p>
<p>However, think back to the plumbing explanation. Comcast is not building brand-new infrastructure to support these new higher-paying clients. They are merely guaranteeing them a higher percentage of the available bandwidth pass-through. This cannot happen without lowering the available bandwidth for those services that cannot afford the higher tier. Furthermore, if large numbers of clients with deep pockets pay for the privilege of higher bandwidth, they are further reducing the available bandwidth for the lower-paying customers.</p>
<p>In other words, no real product is gained by paying for the new service. It is merely redistributed (and how&#8217;s that for socialism, guys?). At the same time, it reduces the ability of smaller players from being able to deliver new, disruptive technologies and products.</p>
<p>Where would the world be if companies like Google and Apple had not been able to do business on the Internet because Yahoo and Microsoft were the big players and owned all of the bandwidth? Without a guarantee of Net Neutrality, the next great invention may never see the light of day because there will be no way to deliver it into the hands of customers.</p>
<p>The guarantee of Net Neutrality is that all bandwidth through an intermediary must be treated with the same priority as any other. There should be no artificial slowing of any customer&#8217;s data simply because another customer has deeper pockets.</p>
<p>Many of the larger telecommunications providers argue that it&#8217;s their right as the owner and maintainer of the communication lines to do with them as they please. There is certainly a point to be made from this, but at this point, the economy of the United States and the world is at stake if the fundamental operation of the Internet changes.</p>
<p>I hope I&#8217;ve explained this issue in a way that is easy to understand. If so, please write your local legislators and tell them that you support Net Neutrality for the rights of consumers and small business.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=32&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/10/01/net-neutrality-and-you/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>On the importance of collaboration</title>
		<link>http://sgallagh.wordpress.com/2010/05/10/on-the-importance-of-collaboration/</link>
		<comments>http://sgallagh.wordpress.com/2010/05/10/on-the-importance-of-collaboration/#comments</comments>
		<pubDate>Mon, 10 May 2010 20:07:21 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=24</guid>
		<description><![CDATA[First of all, thank you. Yup, I was talking to you. People like me tend to get the credit when things go right, and the axe when things don&#8217;t, but in the open-source world it&#8217;s you that ultimately decides the &#8230; <a href="http://sgallagh.wordpress.com/2010/05/10/on-the-importance-of-collaboration/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=24&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>First of all, thank you. Yup, I was talking to you.</p>
<p>People like me tend to get the credit when things go right, and the axe when things don&#8217;t, but in the open-source world it&#8217;s <em>you</em> that ultimately decides the fate of a project. Engineers and managers and designers work hard, this is true. None of that matters unless we have an involved community simultaneously pointing at the shiny object up in the clouds while holding our feet firmly to the ground.</p>
<p>If you&#8217;re confused, please allow me to explain. Engineers, managers and designers tend to have a critical failing: being <em>creators</em> has a tendency to go to our heads, and we assume (when not told otherwise) that our way of doing things is The Right Way. Sometimes, we need to be deflated. It can be oh-so-tempting as an engineer to throw yourself head-first into an exciting new feature, but it&#8217;s our community that reminds us when this just isn&#8217;t the best way to spend our time. Sometimes it&#8217;s not the most glamorous work to play bug whack-a-mole instead of working on the shiny feature, but this doesn&#8217;t make it any less important. So having a community that&#8217;s active (rather than reactive), following our progress and reminding us where our priorities lie is an invaluable advantage.</p>
<p>Similarly, the existence of a proactive community can bring thoughts to mind that we might never have dreamed of on our own. In the last six months, we&#8217;ve had people throw some fantastic ideas at us for the SSSD. Some have appeared in the 1.1.x release and others in the 1.2.x series. We originally approached the SSSD from the perspective of a laptop user being able to maintain a single consistent user account whether connected to their corporate network or not. Thanks to some tips from our community, we&#8217;ve realized that we also have a place in the datacenter, helping servers ride out the occasional internal outage.</p>
<p>These are examples of the true power of open-source. It&#8217;s easy to come out and say &#8220;well, it&#8217;s better because more people can look at the code and find fault with it&#8221;. The <em>true</em> power of open-source is that people can look at the code and make of it anything that they can dream. In a closed development style, the product is always going to be limited by the imaginations of the engineers and product management team in the company, with maybe the occasional support call having some effect (though not often, in my experience in the closed-source world). Not only does open-source welcome such ideas, we encourage them and nurture them. If we don&#8217;t have the time to implement a feature, we&#8217;ll try to hold your hand and guide you to do so for yourself.</p>
<p>Now, that last topic I need to discuss in a bit more detail. It&#8217;s all very good to say &#8220;we appreciate our community&#8221; and &#8220;we welcome patches&#8221;, but sometimes it can be hard to hold to that. There are times when it&#8217;s difficult to include a community-member&#8217;s ideas. Sometimes the reasons are obvious: the community member wants the world, on a silver platter, with the crusts cut off. Providing us with our next great idea is a wonderful thing, but sometimes people expect miracles. We&#8217;re only human (or in some cases, extremely sophisticated shell scripts).</p>
<p>Then there&#8217;s the flip side. Sometimes you have a community member that is so driven to see a feature that they want included that they will spend the time and do the work themselves. Proud with the work they&#8217;ve done, they volunteer a patch. Unfortunately, as I mentioned above, sometimes being creators has gone to our heads. There may be no disagreement that the patch would solve a problem or provide a great new feature, but sometimes it&#8217;s just not feasible to accept a patch as-is. Sometimes this is an innocuous thing: maybe the patch fails to meet the project&#8217;s style guidelines. Sometimes it might get ignored for an extended period because the main team is working under time constraints by someone that&#8217;s paying them for their work. Sometimes the patch may truly be flawed, and no amount of massaging can make it into anything usable (in a reasonable amount of time).</p>
<p>At times like these, communication becomes the key. As I said above, an open-source project lives or dies by its community. It&#8217;s all too easy to alienate people, especially with the aforementioned hubris we developers often suffer from. It should be understood that while contributions in general are always welcome, sometimes specific contributions are not (or at least are not ready for the mainstream). At times like these, it becomes more important than ever to have established a good relationship with your community.</p>
<p>I&#8217;m going to admit here that I don&#8217;t have the answer to many of the difficult questions like &#8220;How do I deal with an unresponsive upstream?&#8221; or &#8220;Why does this person keep submitting the same patch that I told them doesn&#8217;t work?&#8221; It&#8217;s a learning process for everyone involved, on both sides. And come to think on it, maybe thinking of it as sides is part of the problem.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=24&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/05/10/on-the-importance-of-collaboration/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>Why you should use talloc for your next project</title>
		<link>http://sgallagh.wordpress.com/2010/03/17/why-you-should-use-talloc-for-your-next-project/</link>
		<comments>http://sgallagh.wordpress.com/2010/03/17/why-you-should-use-talloc-for-your-next-project/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:36:42 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=18</guid>
		<description><![CDATA[Memory management is hard. This is one of the first things a programmer learns (usually by trial and much error) when they leave academia and get out into the real world. It is very easy to make mistakes when managing &#8230; <a href="http://sgallagh.wordpress.com/2010/03/17/why-you-should-use-talloc-for-your-next-project/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=18&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Memory management is hard. This is one of the first things a programmer learns (usually by trial and much error) when they leave academia and get out into the real world. It is very easy to make mistakes when managing memory, especially when a particular piece of data needs to live beyond the life of the function that created it. It can become difficult to know when the memory is safe to destroy, as well as when it is optimal to destroy it.</p>
<p>In standard C, a programmer would use malloc() and free() to manage their memory. The problem with this is that every section of memory is allocated independently. There are no inherent relationships between bits of data. The programmer is required to maintain any relationships between data in their own code.</p>
<p>Enter <a href="http://talloc.samba.org/talloc/doc/html/index.html">talloc</a>, which is a hierarchical memory-management tool wrapped around C&#8217;s malloc(). The basics of talloc are easy to pick up. With talloc, you have the option of declaring that the memory you are allocating is a child of another piece of memory. The advantage to this approach is that calling talloc_free() on any piece of talloc-allocated memory will not only delete that memory, but will recursively descend through any children of that memory and free them first.</p>
<p>To provide a trivial example, consider that you wanted to create a new struct containing student data:</p>
<pre>struct student {
   char *name;
}
</pre>
<p>In a traditional C approach, you would allocate memory for a new student in this manner:</p>
<pre>student1 = malloc(sizeof(struct student));
student1-&gt;name = strdup("steve");
</pre>
<p>and would sometime later be freed with:</p>
<pre>free(student1-&gt;name);
free(student1);
</pre>
<p>That works fine in the trivial case, but start considering what happens when you have much more complicated data structures. It becomes a challenge to ensure that you free all memory in the proper order so as to ensure that you don&#8217;t leave any dangling memory behind. Traditionally, this would be done by creating a cleanup function for your structure. Internally, this cleanup function would recursively call the cleanup functions for every subordinate structure, until finally it removed the toplevel memory.</p>
<p>The problem with this approach is that it requires the creation and maintenance of large numbers of cleanup functions.</p>
<p>The same problem with talloc is markedly simpler.</p>
<pre>student1 = talloc(NULL, struct student);
student1-&gt;name = talloc_strdup(student1, "Steve");
</pre>
<p>Later, the struct can be freed with the single command:</p>
<pre>talloc_free(student);
</pre>
<p>Now, in the trivial case this doesn&#8217;t look terribly impressive, but try considering when you have nested structs, structs containing large numbers of strings, etc.  talloc_free(&lt;toplevel&gt;) will recursively clean up all of the child memory. No need to write complicated cleanup scripts to ensure that the memory is all gone.</p>
<p>Furthermore, talloc makes it very easy to abort the changes in a function. For example, partway through a complicated function, a fatal error occurs. In a traditional model, one would now need to examine all the memory that has been allocated thus far in the function and free it. A cleanup function may not be of any help here, as it would expect a fully-constructed structure to remove. With talloc, you simply need to delete the parent context and you&#8217;ll be certain to know that it will be completely cleaned up, regardless of its partially-constructed state.</p>
<p>So lets talk about more advanced and useful applications of talloc. Consider the case of asynchronous services. A request comes in (on a pipe, a TCP connection, etc.) requesting some information. Assuming that the service is unable to return a reply without performing additional functions (for example, contacting a remote server for authoritative data), the program would allocate memory to hold the data provided for the request, and then queue it up internally, to be processed when resources allow.</p>
<p>This request might require multiple trips to and from a remote server, it might require memory allocation and deallocation in many places, and it could fail with an error or be cancelled if the requesting process disconnects or otherwise indicates that it no longer cares about the reply.</p>
<p>So now we have a new concept: requests. With talloc, the way one would handle a request would be to create a request context. This request context would be a structure containing all of the data necessary to execute the event. As the event is processed by the mainloop, it may have additional subrequests (such as the example remote server query) attached as children to it. If at any time the request needs to be terminated, such as the original client has disconnected, all that is needed is to call talloc_free() on the original request and it will iterate through all of the allocated memory and clean up after itself.</p>
<p>Now, one thing I&#8217;ve glossed over is the case where just freeing the memory might not be enough. In the case of a request, before freeing memory it might be necessary to send a disconnect command to a remote server, or close a file descriptor. Talloc makes it easy to add a destructor to any allocated memory, such that when talloc_free() is called, it will first invoke this destructor and allow cleanup to commence. So in the case described above, one might add a destructor to the remote server query sub-request that would terminate the server connection in a non-destructive manner (or cancel a transaction but leave the connection in place, etc.)</p>
<p>By now, I think you begin to see the power inherent in the use of talloc over malloc. It&#8217;s five O&#8217;clock &#8211; do you know where your memory is?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=18&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/03/17/why-you-should-use-talloc-for-your-next-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>How NOT to run a community</title>
		<link>http://sgallagh.wordpress.com/2010/03/16/how-not-to-run-a-community/</link>
		<comments>http://sgallagh.wordpress.com/2010/03/16/how-not-to-run-a-community/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 20:56:04 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=14</guid>
		<description><![CDATA[As you probably know, I am generally in favor of community-driven software development. I think being able to work alongside others of similar (or different!) goals can result in excellent progress in many different directions. It&#8217;s a great boon to &#8230; <a href="http://sgallagh.wordpress.com/2010/03/16/how-not-to-run-a-community/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=14&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As you probably know, I am generally in favor of community-driven software development. I think being able to work alongside others of similar (or different!) goals can result in excellent progress in many different directions. It&#8217;s a great boon to development to not be forced to reinvent the wheel in order to move forward.</p>
<p>However, sometimes the naysayers have it right. There are times when, no matter how much you try to be a good citizen of a community, they <em>just won&#8217;t let you</em>.</p>
<p>I&#8217;ve been working for some time now on molding the fantastic <a href="http://www.review-board.org">Review Board</a> software into a deployment for the Fedora Hosted infrastructure. Today, I was doing some testing on the upgrade feature, to make sure we wouldn&#8217;t get bitten in the future. Well, I&#8217;m glad I did, because it didn&#8217;t work.</p>
<p>After a bit of intense Google-searching, I finally happened upon the source of the problem: django_evolution has a long-standing (years) <a href="http://code.google.com/p/django-evolution/issues/detail?id=58">issue</a> when used with PostgreSQL. That bug report, however, has a link to a patch that one intrepid user constructed as a means to work around the problem. I tested it myself and found that it worked. However, this is where we begin our cautionary tale.</p>
<p>Mistake number 1) Offhanded disregard for a community-submitted patch. The response from the upstream maintainers for this godsend of a patch was less than helpful. &#8220;Why did you copy the code from here instead of trying to make a common change?&#8221; and &#8220;Your patch breaks our tests. Go fix it.&#8221; (paraphrased). These are not friendly responses to an obviously helpful individual.</p>
<p>Since the discussion thread on that bug pretty much ended there, I decided to try myself to pick up where the original author left off. I downloaded the patch and modified it so that it would apply cleanly on the HEAD of the django_evolution repository. I tried it out on ReviewBoard, and miracle of miracles: the upgrade completed successfully.</p>
<p>So, armed with the knowledge that I now have a working solution to the problem, I decided to see what I could do to massage the patch into a format that would be accepted by upstream (given their unhelpful replies). So I dug into the source code&#8230; and discovered that I couldn&#8217;t figure out how to run this much-vaunted test suite. So I found my way to the Django IRC channel and started to ask questions about how to set up django_evolution to test my patch.</p>
<p>Mistake number 2) The denizens of that channel were&#8230; less than helpful. In the first place, I was berated for attempting to write a patch for &#8220;a dead project&#8221;. They paid no attention to my assertions that django_evolution worked just fine for ReviewBoard, and I just needed to solve this one little problem to grease the wheels and start the ball rolling again. They continuously insisted that I switch the project over to use a project called South and give up on django_evolution. Now, while I certainly understand the desire to always be using the Next Big Thing, I&#8217;m not actually a developer on the ReviewBoard project. I in fact have very little say about the architectural direction that the project takes. I certainly have no control over the use of django_evolution. These reasoned arguments were ignored, opting instead to extol the virtues of South and why it will work better and cure cancer in the process. (I exaggerated that last part).</p>
<p>Now, this is the behavior shown to an interested participant in their community. Moreso, it was a person who was trying very hard to improve upon a project, and was seeking only enough aid to simplify any review that might need to be done before accepting the patch. If this is how we treat those who are interested in the work we do, is it any surprise at all when our project fails? Why should we expect anyone who isn&#8217;t already intimately familiar with our work to offer even a second glance?</p>
<p>A community needs to be run with an understanding that not every member is going to be a lifelong hacker with three advanced degrees that are all directly applicable to the project. A community needs to be welcoming and understanding. A community needs to be willing to mentor and market itself in a positive light.</p>
<p>A community needs to be communal.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=14&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/03/16/how-not-to-run-a-community/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>The road to SSSD 1.0.3</title>
		<link>http://sgallagh.wordpress.com/2010/01/22/the-road-to-sssd-1-0-3/</link>
		<comments>http://sgallagh.wordpress.com/2010/01/22/the-road-to-sssd-1-0-3/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 21:02:08 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=10</guid>
		<description><![CDATA[So, today we released SSSD 1.0.3. We fixed a few bugs, but more importantly we did it in an open way. I generally assume that anyone reading this blog has heard of open-source before. If not, I suggest you log &#8230; <a href="http://sgallagh.wordpress.com/2010/01/22/the-road-to-sssd-1-0-3/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=10&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, today we released SSSD 1.0.3. We fixed a few bugs, but more importantly we did it in an open way.</p>
<p>I generally assume that anyone reading this blog has heard of open-source before. If not, I suggest you log on to the Internet more. More eloquent bloggers than I have done a better job explaining the open-source concepts. The SSSD is more of a case-study in why open-source works. In this last week, we&#8217;ve done a bit of work on our own inside the core SSSD team headed in the direction of our next feature release, but at the same time we were working with outside developers.</p>
<p>One of these developers took a look at the SSSD and decided that it might come in handy for use on embedded devices like smart routers. So he tried to build the SSSD on the ARM processor. This failed, because most of our development on the SSSD takes place on i686 or x86_64 systems (with some limited testing done on PowerPC). Here we have the first example of why open-source works: someone came in from Outside with an idea: that the SSSD might have a place beyond personal computers. Beyond that, with the source code available to them, they began the effort of implementing this idea. Unfortunately, in its current state of development, the SSSD was unable to run on the ARM platform. This developer then took it upon himself to dive into the code and identify the source of the problem (if you care about the details regarding alignment of memory, feel free to look at our git history. I&#8217;m not going to bore you any more than I have to). Once he identified the issues, he created a patch and submitted it to our mailing list. We reviewed it and included it in the 1.0.3 release today. Open-source works because people like this  not only identify new ideas, but they have the ability to run with them as well. In a traditional, closed-source development team, the process would have looked more like this: 1) Open a bug. 2) Wait to see if the company developing the product agrees with this idea. 3) Wait to see if the company has resources to expend on implementing the idea. 4) Wait for a release including this fix.  With open-source, even had the SSSD team decided not to release 1.0.3 for weeks or months, this gentleman&#8217;s patch was available for anyone to apply atop our public source and get to work on.</p>
<p>The second story I want to tell is about the benefits of cooperation between distributions. Another prominent GNU/Linux distribution recently began work on updating their SSSD package to 1.0.2 (previously they had been running a very old and buggy 0.5.0). They ran into a bit of trouble and contacted us through the usual channels to help them track down what was going wrong. It turned out that one of the differences between these two distributions was this (and I apologize, but there&#8217;s no real way to avoid going into a little bit of detail on this): on Fedora, when you link against a shared library, you automatically inheret any link that this library has. In our case, we linked against libldb, which in turn linked against libkrb5. On the other distribution, however, there is no implicit linking. All links need to be made explicitly. So we tracked down where we needed to link properly and added that. &#8220;But Steve,&#8221; you ask. &#8220;How is this an example of distro cooperation improving the product for both distros?&#8221;.  The answer is this: working with this other distribution helped us to avoid a painfully embarrassing situation in the coming months. The reason for this is because one of the features coming in Fedora 13 is the very same requirement for explicit linking. So thanks to the developers from the other distribution, we were able to fix this ahead of time and save ourselves a lot of trouble (and support calls!) when Fedora 13 arrives.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=10&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/01/22/the-road-to-sssd-1-0-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
		<item>
		<title>Code review methodologies</title>
		<link>http://sgallagh.wordpress.com/2010/01/04/code-review-methodologies/</link>
		<comments>http://sgallagh.wordpress.com/2010/01/04/code-review-methodologies/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 21:14:37 +0000</pubDate>
		<dc:creator>sgallagh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.fedoraproject.org/wp/sgallagh/?p=3</guid>
		<description><![CDATA[One of the most important parts of any development process is probably its least-beloved: the code-review. Any project that entertains a notion of one day being stable and production-ready knows that it needs to do at least periodic reviews of &#8230; <a href="http://sgallagh.wordpress.com/2010/01/04/code-review-methodologies/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=31&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the most important parts of any development process is probably its least-beloved: the code-review. Any project that entertains a notion of one day being stable and production-ready knows that it needs to do at least periodic reviews of the source.</p>
<p>There are many different approaches to the code review process. Some projects allow open commits during the first phase of development, then lock the tree and do in-depth code reviews, followed by a &#8220;hard freeze&#8221; wherein only reviewed and approved changes are further permitted. On the other end of the spectrum, many open-source projects follow the &#8220;hard freeze&#8221; party for their entire development cycle. For these projects (among which the <a href="https://fedorahosted.org/sssd">SSSD</a> is one), every patch is reviewed by at least one gatekeeper.</p>
<p>The former approach can serve a young project quite well. At the start of development, there are usually many small commits, few of which are functional or testable. By the time the code hits its first stable (or at least public) release, I suggest that it&#8217;s time to switch to the gatekeeper approach. The team should examine its membership for a very short list of gatekeepers. These will be the only members from there on that will have privilege to commit to the master repository. These individuals are the final say on what patches are accepted into a particular development branch.</p>
<p>This may sound a bit authoritarian. Perhaps it even sounds contrary to an open development process. I contend that stability should be the ultimate goal of any project, above and beyond &#8220;shiny features&#8221;. To ensure that this remains an open process, it becomes necessary for the code review process to be designed to be completely transparent. For example, it is usually not necessary for the gatekeepers to be the only code-reviewers on a project. In most cases, the reviews can and should be performed by any member of the team. The gatekeepers need be only a sanity check to ensure that the code-review was performed by a qualified individual.</p>
<p>Ok, so that&#8217;s all well and good, but how does one design a transparent and effective code-review system? There are two common approaches, which I will discuss briefly, and then I&#8217;d like to discuss a less-common approach that is gaining traction.</p>
<p>All of the common code-review processes involve somehow getting a patch file in the hands of a reviewer.  One process favored by very well-established projects is the ticket-driven review process. For old and stable projects, it is common for the process to require that all changes to the source correspond to an issue-tracker ticket (such as a Bugzilla or Trac ticket). The code-review process will often be designed around this ticketing system. When a developer has a patch ready for review, it will be attached to the ticket and the appropriate flags/status will be set to indicate that it needs a reviewer. Potential reviewers will then be informed that the patch is ready (perhaps because a saved search will now reveal that the ticket is awaiting review). Code review comments and resubmissions will then be handled within ticket comments. Once the review is passed, a gatekeeper will take the patch and apply it to the master repository.</p>
<p>The second (and probably most popular) code-review process for open-source development is by email. When a patch is ready, a developer will email the patch as an attachment to an email sent to the developer mailing list for the project. Another developer will then take up the review, responding with an ack or nack (indicating corrections that need to be made). The gatekeeper will then take the patch and apply it to the master repository.</p>
<p>Both of these approaches have their merits and disadvantages. The ticket approach works well for well-established projects, providing easy history and a link to every issue or feature that the patches are meant to address. On the other hand, for young projects, the additional overhead of filing a ticket for every change can be unnecessarily heavy. Young projects tend to have a much more rapid development pace and filing a ticket for every change will usually serve only to train engineers to write short, worthless ticket descriptions.</p>
<p>The email approach is much more agile, but it is rather less transparent, as it requires all participants to be subscribed to the relevant list. It adds a barrier to entry for new contributors that may have only a single small patch to submit (and may not want to deal with a heavy-traffic development list). Further, the email approach adds additional effort on the part of the gatekeepers. It is necessary for gatekeepers to develop for themselves a system to ensure that patches are reviewed in a timely manner, as well as not forgotten.</p>
<p>To address these issues, some projects have begun looking to new code-review tools. As an example, I recently contributed to the packaging effort for the ReviewBoard tool. Tools such as this provide many benefits over the above approaches. It has built-in functionality to keep track of pending reviews and their status (approved, awaiting review, needs update etc.) Furthermore, they provide additional user interface enhancements, such as the ability to make review comments attached to the specific code that is being discussed. Such tools provide much greater visibility than the email approach, while retaining the same agility (especially if the tool is configured to announce updates to reviews on the developer mailing list).</p>
<p>As mentioned above, I&#8217;ve been working on packaging ReviewBoard for Fedora and EPEL, with the goal of making ReviewBoard available for projects hosted by the Fedora Hosted project. I think that the advantages provided by such a code-review system would contribute greatly to the security and stability of open-source software.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sgallagh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sgallagh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sgallagh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sgallagh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sgallagh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sgallagh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sgallagh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sgallagh.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sgallagh.wordpress.com&amp;blog=23682126&amp;post=31&amp;subd=sgallagh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sgallagh.wordpress.com/2010/01/04/code-review-methodologies/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21f44c2e10228b54a95583991171616a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sgallagh</media:title>
		</media:content>
	</item>
	</channel>
</rss>
