<?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>Lukas&#039; Weblog &#187; software &amp; technology</title>
	<atom:link href="http://lukas-prokop.at/blog/category/software-technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://lukas-prokop.at/blog</link>
	<description>tail -f /var/log/web</description>
	<lastBuildDate>Sun, 20 May 2012 09:00:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>xubuntu Pidgin: start with accounts disabled</title>
		<link>http://lukas-prokop.at/blog/2012/04/xubuntu-pidgin-start-with-accounts-disabled/</link>
		<comments>http://lukas-prokop.at/blog/2012/04/xubuntu-pidgin-start-with-accounts-disabled/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 15:05:28 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2251</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2012/04/xubuntu-pidgin-start-with-accounts-disabled/" title="xubuntu Pidgin: start with accounts disabled"></a>I wanted to start pidgin with all accounts disabled per default as far I want to use some of my accounts on my laptop and desktop in parallel (and avoid collisions). A possible way to do this was suggested to &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2012/04/xubuntu-pidgin-start-with-accounts-disabled/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2012/04/xubuntu-pidgin-start-with-accounts-disabled/" title="xubuntu Pidgin: start with accounts disabled"></a><p>I wanted to start pidgin with all accounts disabled per default as far I want to use some of my accounts on my laptop and desktop in parallel (and avoid collisions). A possible way to do this was suggested to me by ploppy on #pidgin-de (freenode IRC): Start pidgin with the &#8220;-n&#8221; option. Therefore&#8230;</p>
<p><code>sudo vim /usr/share/applications/pidgin.desktop</code><br />
Replace <code>Exec=pidgin</code> with <code>Exec=pidgin -n</code>.<br />
When starting pidgin from the menu bar, it will start with the <code>-n</code> option now.</p>
<p>Tested with xubuntu 11.10.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2012/04/xubuntu-pidgin-start-with-accounts-disabled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xubuntu: my &#8220;no sound&#8221; mystery</title>
		<link>http://lukas-prokop.at/blog/2012/04/xubuntu-my-no-sound-mystery/</link>
		<comments>http://lukas-prokop.at/blog/2012/04/xubuntu-my-no-sound-mystery/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 07:40:34 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2234</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2012/04/xubuntu-my-no-sound-mystery/" title="Xubuntu: my &quot;no sound&quot; mystery"></a>xubuntu release: 11.10 (knome from freenode #xubuntu tells me that a bugfix got introduced in 12.04) Okay, this was really a lot of luck that I got that fixed. The are many threads on the web about this issue and &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2012/04/xubuntu-my-no-sound-mystery/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2012/04/xubuntu-my-no-sound-mystery/" title="Xubuntu: my &quot;no sound&quot; mystery"></a><p><strong>xubuntu release:</strong> 11.10 (knome from freenode #xubuntu tells me that a bugfix got introduced in 12.04)</p>
<p>Okay, this was really a lot of luck that I got that fixed. The are <a href="http://google.com/search?q=xubuntu%20no%20sound">many threads</a> on the web about this issue and none of them seemed to be working for me. In general the problem for most people is that the ALSA master channel is muted, but the other component is PulseAudio and that was misconfigured in some way. Okay, let&#8217;s start debugging.</p>
<p>First of all, we want to check that neither ALSA nor PulseAudio is muted. We select the pre-installed &#8220;Multimedia&#8221; &gt; &#8220;Mixer&#8221;. This Mixer shows the channel settings for all sound cards. We can select sound cards from the DropDown menu at the top. If you cannot see channels, &#8220;Select Controls&#8230;&#8221; as described by the &#8220;No controls visible&#8221; tab and check all channels to see their settings. I did this for all channels for all sound cards and everything got unmuted.</p>
<p><a href="http://lukas-prokop.at/blog/wp-content/uploads/2012/04/xubuntu_mixer.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2012/04/xubuntu_mixer-300x178.png" alt="Xubuntu Mixer program" title="xubuntu_mixer" width="300" height="178" class="aligncenter size-medium wp-image-2235" /></a></p>
<p>Okay, I said PulseAudio was misconfigured for me. Well, the above debug report was not successful. It purged all packages, reinstalled them and tried to change all settings. Some guy on the web recommended <code>sudo apt-get install "pulseaudio-*"</code> and all pulseaudio-packages got installed. Now comes the lucky part of the story: &#8220;PulseAudio Volume Control&#8221; got installed and changing its configuration was successful.</p>
<p><a href="http://lukas-prokop.at/blog/wp-content/uploads/2012/04/xubuntu_menubar.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2012/04/xubuntu_menubar-300x277.png" alt="Xubuntu menubar" title="xubuntu_menubar" width="300" height="277" class="aligncenter size-medium wp-image-2240" /></a></p>
<p>I rather recommend to install this package via the Ubuntu Software Center:</p>
<p><a href="http://lukas-prokop.at/blog/wp-content/uploads/2012/04/pulseaudio_control.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2012/04/pulseaudio_control-300x195.png" alt="PulseAudio Volume Control package" title="pulseaudio_control" width="300" height="195" class="aligncenter size-medium wp-image-2237" /></a></p>
<p>In &#8220;Multimedia&#8221; &gt; &#8220;PulseAudio Volume Control&#8221; &gt; &#8220;Configuration&#8221; I had to set &#8220;Profile&#8221; from &#8220;Digital Stereo (HDMI) Output&#8221; to &#8220;Off&#8221; and I immediately heard my music. I can now reset this setting back to &#8220;Digital &#8230;&#8221; and will still hear sound. So I cannot explain it deterministically, but this one worked out. Strange.</p>
<p>Please recognize that this is also related to the &#8220;Flash Player plays videos to fast&#8221; bug some users are experiencing. Once I can hear sound again, Flash&#8217;s playback is also back at normal speed.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2012/04/xubuntu-my-no-sound-mystery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book recommendation &#8220;Extreme Programming Explained&#8221;</title>
		<link>http://lukas-prokop.at/blog/2012/03/buchtipp-extreme-programming-explained/</link>
		<comments>http://lukas-prokop.at/blog/2012/03/buchtipp-extreme-programming-explained/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 18:05:04 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[Bücher]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2227</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2012/03/buchtipp-extreme-programming-explained/" title="Book recommendation &quot;Extreme Programming Explained&quot;"></a>title: &#8220;Extreme Programming Explained: Embrace Change&#8221; author: Kent Beck pages: 224 chapters: 27 ISBN: 978-0201616415 publisher: Addison-Wesley Longman, Amsterdam published: 1991 (1st edition) notesheet: extreme_programming_explained Wow&#8230; it&#8217;s been a long I finished a whole book. I&#8217;ve always been lazy reading &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2012/03/buchtipp-extreme-programming-explained/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2012/03/buchtipp-extreme-programming-explained/" title="Book recommendation &quot;Extreme Programming Explained&quot;"></a><p class="floating"><a href="http://lukas-prokop.at/blog/wp-content/uploads/2012/03/extreme_programming_explained.jpg"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2012/03/extreme_programming_explained-242x300.jpg" alt="Extreme Programming Explained: Embrace Change (Kent Beck, 1999)" title="extreme_programming_explained" width="242" height="300" /></a></p>
<p><b>title:</b> &#8220;Extreme Programming Explained: Embrace Change&#8221;<br />
<b>author:</b> Kent Beck<br />
<b>pages:</b> 224<br />
<b>chapters:</b> 27<br />
<b>ISBN:</b> 978-0201616415<br />
<b>publisher:</b> Addison-Wesley Longman, Amsterdam<br />
<b>published:</b> 1991 (1st edition)<br />
<b>notesheet:</b> <a href="http://lukas-prokop.at/proj/documents/books_notes/extreme_programming_explained">extreme_programming_explained</a></p>
<p>Wow&#8230; it&#8217;s been a long I finished a whole book. I&#8217;ve always been lazy reading a book until the end. Compulsory reading for a course seems to be a valid approach to motivate me. The Book is &#8220;Extreme Programming Explained: Embrace Change&#8221; by <a href="http://www.threeriversinstitute.org/blog/">Kent Beck</a> and please recognize that I am talking about the <em>1st</em> edition.</p>
<p>Extreme Programming is an agile <a href="https://en.wikipedia.org/wiki/Software_development_methodologies">software engineering methodology</a>. He describes the book not as a checklist what someone has to do to apply this paradigm rather than providing an overview to the different elements of it. But in general the reader will be a person unfamiliar with this methodology and requiring a HowTo. The result of this discrepancy is a book consisting of 3 parts (The Problem, The Solution, Implementing XP) and 27 chapters; each explaining one of its associated buzzwords. As far as I would like to carry out this paradigm on a daily basis, I would describe myself as an interested reader and can recommend this book as this number of pages really does not hurt. For german people I also recommend the Chaosradio Express episode about it (<a href="http://cre.fm/cre028">CRE 028 Extreme Programming</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2012/03/buchtipp-extreme-programming-explained/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arch Linux Xfce &#8220;Open Terminal here&#8221; in Thunar</title>
		<link>http://lukas-prokop.at/blog/2012/03/arch-linux-xfce-open-terminal-here-in-thunar/</link>
		<comments>http://lukas-prokop.at/blog/2012/03/arch-linux-xfce-open-terminal-here-in-thunar/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 09:34:45 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2224</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2012/03/arch-linux-xfce-open-terminal-here-in-thunar/" title="Arch Linux Xfce &quot;Open Terminal here&quot; in Thunar"></a>The default configuration of Thunar in Xfce at arch linux allows the user to right-click in a folder and open a terminal at this location. Switching to konsole (because of Unicode problems) instead of xfce-terminal (Terminal), this feature did not &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2012/03/arch-linux-xfce-open-terminal-here-in-thunar/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2012/03/arch-linux-xfce-open-terminal-here-in-thunar/" title="Arch Linux Xfce &quot;Open Terminal here&quot; in Thunar"></a><p>The default configuration of Thunar in Xfce at arch linux allows the user to right-click in a folder and open a terminal at this location. Switching to konsole (because of Unicode problems) instead of xfce-terminal (Terminal), this feature did not work any longer. I figured it out how to solve it:</p>
<p>You can configure this feature in Thunar &gt; &#8220;Configure custom actions&#8230;&#8221; (rather than &#8220;Xfce &gt; Application Menu &gt; Settings &gt; Preferred Applications&#8221;). Select &#8220;Open Terminal here&#8221; and click &#8220;Edit&#8221;.</p>
<p><code>exo-open --working-directory %f --launch TerminalEmulator</code></p>
<p>Change this line to:</p>
<p><code>konsole --workdir %f</code></p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2012/03/arch-linux-xfce-open-terminal-here-in-thunar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[quote] About the state of LuaTeX</title>
		<link>http://lukas-prokop.at/blog/2012/02/quote-about-the-state-of-luatex/</link>
		<comments>http://lukas-prokop.at/blog/2012/02/quote-about-the-state-of-luatex/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 20:54:12 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[TeX]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2217</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2012/02/quote-about-the-state-of-luatex/" title="[quote] About the state of LuaTeX"></a>The sources may or may not compile, depending on the third digit after the comma of the local temperature in Dordrecht, Schwetzingen or Hasselt. via LuaTeX FAQ]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2012/02/quote-about-the-state-of-luatex/" title="[quote] About the state of LuaTeX"></a><blockquote><p>The sources may or may not compile, depending on the third digit after the comma of the local temperature in Dordrecht, Schwetzingen or Hasselt.</p></blockquote>
<p>via <a href="http://luatex.org/faq.html">LuaTeX FAQ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2012/02/quote-about-the-state-of-luatex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Language matters</title>
		<link>http://lukas-prokop.at/blog/2012/02/language-matters/</link>
		<comments>http://lukas-prokop.at/blog/2012/02/language-matters/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 20:04:08 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2212</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2012/02/language-matters/" title="Language matters"></a>&#62;&#62;&#62; The medium obscures the message: why programming languages matter Good article. And just to add the obvious: Use the right tool for the job.]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2012/02/language-matters/" title="Language matters"></a><p>&gt;&gt;&gt; <a href="http://jameso.be/2012/02/11/language-matters.html">The medium obscures the message: why programming languages matter</a></p>
<p>Good article. And just to add the obvious: Use the right tool for the job.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2012/02/language-matters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How FLOSS does not work</title>
		<link>http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/</link>
		<comments>http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 18:28:14 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2037</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/" title="How FLOSS does not work"></a>Pythonists are working on a stackoverflow alternative publicly available in the pypi ([pypi] [website] [github]). At the same time a company is working on a stackoverflow alternative privately for a customer. Please repeat yourself and reinvent the wheel. This is &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/" title="How FLOSS does not work"></a><p>Pythonists are working on a stackoverflow alternative publicly available in the pypi (<a href="http://pypi.python.org/pypi/askbot/0.7.20">[pypi]</a> <a href="http://askbot.org/">[website]</a> <a href="https://github.com/ASKBOT/askbot-devel/">[github]</a>). At the same time a company is working on a stackoverflow alternative privately for a customer.</p>
<p>Please repeat yourself and reinvent the wheel. This is where the software industry is going nowadays. The boundaries between company contexts and voluntary projects are too broad to be crossed in a copyright-driven society.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inkscape PDF Export stopped working</title>
		<link>http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/</link>
		<comments>http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 12:29:29 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2181</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/" title="Inkscape PDF Export stopped working"></a>Save As Copy with extension pdf worked very well for almost a year. Suddenly it stopped working. PDF export resulted in File {FILENAME}.pdf could not be saved. Very uncomfortable for me as far as I am using SVGs on a &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/" title="Inkscape PDF Export stopped working"></a><p><q>Save As Copy</q> with extension pdf worked very well for almost a year. Suddenly it stopped working. PDF export resulted in <q>File {FILENAME}.pdf could not be saved</q>. Very uncomfortable for me as far as I am using SVGs on a regular basis.</p>
<p>The internet is filled up the bug reports&#8230; some are having specific plugin problems, some only get blank PDF pages. Well&#8230; <a href="https://answers.launchpad.net/inkscape/+question/99089">this Inkscape 0.47 bug report</a> got the solution for me. Remove the preferences.xml file (for me ~/.config/inkscape/preferences.xml) and Inkscape will create a new one when starting up.</p>
<p>What is the reason? I think some important package got upgraded and Inkscape is holding some old, conflicting information about this package.</p>
<p><strong>Tags:</strong> Inkscape 0.47 pdf export SVG could not be saved preferences cairo</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>switch/case in assembly</title>
		<link>http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/</link>
		<comments>http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 00:16:46 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2178</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/" title="switch/case in assembly"></a>Because of a discussion with my brother I got curious about the internal handling of switch/case statements in assembly. So I compiled the stuff and studied it. Furthermore I wrote an article about it. I thought an external document is &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/" title="switch/case in assembly"></a><p>Because of a discussion with my brother I got curious about the internal handling of switch/case statements in assembly. So I compiled the stuff and studied it. Furthermore I wrote an article about it. I thought an external document is a better approach:</p>
<p><a href="http://lukas-prokop.at/proj/documents/hashtable.html">&#8220;switch in amd64 assembly&#8221;</a> [HTML]</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twiki and 8 character passwords</title>
		<link>http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/</link>
		<comments>http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 23:55:23 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2150</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/" title="Twiki and 8 character passwords"></a>At university, TWiki is a pretty common software. At least at the second Google search results page (for &#8220;twiki&#8221; as search term) I can see some twiki running at our university&#8217;s webserver. TWiki is written in perl and I will &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/" title="Twiki and 8 character passwords"></a><p>At university, <a href="http://twiki.org/">TWiki</a> is a pretty common software. At least at the second Google search results page (for &#8220;twiki&#8221; as search term) I can see some twiki running at our university&#8217;s webserver. TWiki is written in perl and I will refer to the deprecated 4.1.x version which was my test system. I got annoyed by limited security for passwords. Passwords are limited to 8 characters.</p>
<h4>Login Managers</h4>
<p>During installation you will face a select field like this (in the &#8220;Security Setup&#8221; section):</p>
<p style="text-align:center"><a href="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/twiki_loginmanager.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/twiki_loginmanager-300x148.png" alt="Twiki Loginmanager in Installation" title="twiki_loginmanager" width="300" height="148" /></a></p>
<p>All those selections refer to different password management backends. <code>Twiki::Client::ApacheLogin</code> is implemented by <code>/twiki/lib/TWiki/Users/ApacheHtPasswdUser.pm</code> and <code>Twiki::Client::TemplateLogin</code> is implemented by <code>/twiki/lib/TWiki/Users/HtpasswdUser.pm</code>. In <code>/twiki/lib/TWiki/Users/Password.pm</code> the <a href="http://twiki.org/cgi-bin/view/TWiki04/TWikiUsersPasswordDotPm">interface</a> is defined. You can check out funny source code sequences like this:</p>
<div class="syntax perl"> 86 <span class="cm">&#8212;++ ObjectMethod checkPassword( $user, $passwordU ) -&gt; $boolean</span><br />
 87<br />
 88 <span class="cm">Finds if the password is valid for the given login.</span><br />
 89<br />
 90 <span class="cm">Returns 1 on success, undef on failure.</span><br />
 91<br />
 92 <span class="cm">=cut</span><br />
 93<br />
 94 <span class="k">sub </span><span class="nf">checkPassword</span> <span class="p">{</span><br />
 95    <span class="k" style="margin-left:30px">return</span> <span class="mi">1</span><span class="p">;</span><br />
 96 <span class="p">}</span></div>
<p>Well&#8230; this is our interface. Let&#8217;s have deeper look into the implementation.</p>
<h4>Twiki::Client::ApacheLogin</h4>
<p><a href="http://www.france-vo.org/twiki/bin/view/TWiki/TWikiUserAuthentication#Apache_Login_select_TWiki_Client">ApacheLogin</a> uses the Apache interface to send <a href="http://en.wikipedia.org/wiki/Http_status_codes#4xx_Client_Error">401 HTTP Status codes</a>. If the client receives one of those status codes, a Username and Password Dialog pops up.</p>
<p style="text-align:center"><a href="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/401_password_dialog.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/401_password_dialog.png" alt="Password Dialog for 401 Status Codes" title="401_password_dialog" width="387" height="247" /></a></p>
<p>Using this dialog, the login information will be sent to the server. Using a loop in perl, we can print out what the server receives as CGI variables (the ones defined by the server and given to the perl interpreter). I have put the following source code into <code>/twiki/lib/Twiki/Users/HtPasswdUser.pm</code> subroutine <code>new</code> (don&#8217;t forget to <a href="http://twiki.org/cgi-bin/view/Codev/TWikiDebugging">include Data::Dumper</a>).</p>
<div class="syntax perl">    <span class="k">my</span> <span class="nv">$key</span><span class="p">;</span><br />
    <span class="k">foreach</span> <span class="nv">$key</span> <span class="p">(</span><span class="nb">sort</span><span class="p">(</span><span class="nb">keys</span> <span class="nv">%ENV</span><span class="p">))</span> <span class="p">{</span><br />
        <span class="k">print</span> <span class="bp">STDERR</span> <span class="nn">Data::</span><span class="n">Dumper</span><span class="o">-&gt;</span><span class="n">Dump</span><span class="p">([</span> <span class="nv">$ENV</span><span class="p">{</span><span class="nv">$key</span><span class="p">}</span> <span class="p">]</span><span class="o">,</span> <span class="p">[</span><span class="nv">$key</span><span class="p">]</span>);<br />
    <span class="p">}</span></div>
<p>From the Apache log, we will get the following information.</p>
<pre>[...]
HTTP_COOKIE = 'TWIKISID=d00fe404e65832f9d95658d6d9112bec';, referer: /twiki/bin/logon/TWiki/TWikiRegistration
[...]
REDIRECT_REMOTE_USER = 'LukasProkop';, referer: /twiki/bin/logon/TWiki/TWikiRegistration
[...]
REDIRECT_STATUS = '401';, referer: /twiki/bin/logon/TWiki/TWikiRegistration
[...]
</pre>
<p>Actually I was looking for REMOTE_USER, which is a CGI variable only defined when Authorization was done. The cookie is not really interesting, but REDIRECT_STATUS approves that auth was done. REDIRECT_REMOTE_USER seems to be REMOTE_USER I am looking for&#8230; in some way. Alright&#8230; so what do we have here? Well&#8230; password and username associations are tested automatically by the Apache server and perl will not receive the password itself. Perl can assume that auth was done successfully and does not recognize it any further. Alright. So we have to determine where the passwords are stored.</p>
<p>Passwords for <a href="http://httpd.apache.org/docs/2.0/mod/mod_auth.html">mod_auth</a> are stored in <code>.htpasswd</code> files. A small UNIX <code>find</code> will return <code>/twiki/data/.htpasswd</code>. This file is updated for each change by the perl script.</p>
<pre>LukasProkop:11/Yysc0Op9D2:unixuser@localhost</pre>
<p>So the password is stored as a hash associated with the Login name and the local user name. Now let&#8217;s come to our real topic: Passwords with more than 8 characters. Let us create some additional accounts.</p>
<table style="width:100%">
<thead>
<tr>
<td>Username</td>
<td>Password</td>
</tr>
</thead>
<tbody>
<tr>
<td>KarlOrff</td>
<td>1234567</td>
</tr>
<tr>
<td>CamrinaBurana</td>
<td>123456789</td>
</tr>
<tr>
<td>DiesIrae</td>
<td>123456789123456789</td>
</tr>
<tr>
<td>SixteAjoutee</td>
<td>123456768912345678<strong>0</strong></td>
</tr>
</tbody>
</table>
<p>Well&#8230; our <code>.htpasswd</code> says:</p>
<pre>CarminaBurana:UXjIprwRygc1.:unixuser@localhost
DiesIrae:UtCp6NoUsQdaQ:unixuser@localhost
KarlOrff:7kQC9KJ/39yA.:unixuser@localhost
LukasProkop:11/Yysc0Op9D2:unixuser@localhost
SixteAjoutee:R07ipKyeiYlho:unixuser@localhost</pre>
<p>Now let&#8217;s log in with various accounts. As far as Twiki does not support a Logout button, the most comfortable way is to delete the cookie (see above) and refresh the page. Now we can see our problem: SixteAjoutee and DiesIrae can log in with each other ones password. The strange thing is, that their hashes are different. Our source code journey goes on&#8230;</p>
<h4>Violation of second-preimage resistance?</h4>
<pre>$TWiki::cfg{Htpasswd}{Encoding} = 'crypt';</pre>
<p>Our configuration file at <code>/twiki/lib/LocalSite.cfg</code> defines a variable for the various encoding algorithms. Of course such a variable is a perfect name to search for. The <code>configure</code> uses this variable, but HtPasswdUser.pm is the only other file.</p>
<p>The file encrypting the password is <code>HtPasswdUser.pm</code> at line 134. This file will apply the <a href="http://osix.net/modules/article/?id=571">crypt function</a> with a random salt to the password. The salt is 2 characters in length and stored at the front of the <strong>actually stored password</strong>. A small test script reveals the truth:</p>
<div class="syntax perl"><span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;123456789123456789&quot;</span><span class="p">,</span> <span class="s">&quot;Ut&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;UtCp6NoUsQdaQ&quot;</span><span class="p">;</span><br />
<span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;123456789123456780&quot;</span><span class="p">,</span> <span class="s">&quot;R0&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;R07ipKyeiYlho&quot;</span><span class="p">;</span></div>
<p>So there we have our problem. crypt uses the DES algorithm from the operating system and is limited to an input of 8 characters.</p>
<div class="syntax perl"><span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;12345678B&quot;</span><span class="p">,</span> <span class="s">&quot;Ut&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;UtCp6NoUsQdaQ&quot;</span><span class="p">;</span><br />
<span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;12345678A&quot;</span><span class="p">,</span> <span class="s">&quot;R0&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;R07ipKyeiYlho&quot;</span><span class="p">;</span></div>
<h4>The collision-free solution</h4>
<p>Of course the algorithm is the problem and a selection of another algorithm like sha1 (nope, <strong>no</strong> MD5!) would solve the problem. We do <em>not</em> rely on the <a href="http://google.at/search?q=unix+8+characters+password">operating system</a> or missing implementations of other crypto algorithms.</p>
<div class="syntax perl"><span class="c1">#!/usr/bin/perl -wT</span></p>
<p><span class="nb">require</span> <span class="nn">MIME::</span><span class="n">Base64</span><span class="p">;</span><br />
<span class="nb">import</span> <span class="nn">MIME::</span><span class="n">Base64</span> <span class="sx">qw( encode_base64 )</span><span class="p">;</span><br />
<span class="nb">require</span> <span class="nn">Digest::</span><span class="n">SHA1</span><span class="p">;</span><br />
<span class="nb">import</span> <span class="nn">Digest::</span><span class="n">SHA1</span> <span class="sx">qw( sha1 )</span><span class="p">;</span></p>
<p><span class="k">sub </span><span class="nf">get</span><br />
<span class="p">{</span><br />
    <span class="k">my</span><span class="p">(</span> <span class="nv">$passwd</span> <span class="p">)</span> <span class="o">=</span> <span class="nv">@_</span><span class="p">;</span></p>
<p>    <span class="k">my</span> <span class="nv">$encodedPassword</span> <span class="o">=</span> <span class="s">&#39;{SHA}&#39;</span><span class="o">.</span><br />
    <span class="nn">MIME::Base64::</span><span class="n">encode_base64</span><span class="p">(</span> <span class="nn">Digest::SHA1::</span><span class="n">sha1</span><span class="p">(</span> <span class="nv">$passwd</span> <span class="p">)</span> <span class="p">);</span><br />
    <span class="nv">$encodedPassword</span> <span class="o">=~</span> <span class="sr">s/\s+$//</span><span class="p">;</span><br />
    <span class="k">return</span> <span class="nv">$encodedPassword</span><span class="p">;</span><br />
<span class="p">}</span></p>
<p><span class="k">print</span> <span class="n">get</span><span class="p">(</span><span class="s">&quot;1234568B&quot;</span><span class="p">),</span> <span class="s">&quot;\n&quot;</span><span class="p">;</span><br />
<span class="k">print</span> <span class="n">get</span><span class="p">(</span><span class="s">&quot;1234568A&quot;</span><span class="p">),</span> <span class="s">&quot;\n&quot;</span><span class="p">;</span></div>
<p>This program returns two <strong>different</strong> hashes:</p>
<pre>{SHA}sgDumzcRNpPJL8tCgM18JIR1ayc=
{SHA}RsUxZFkQgYAeTdsPmIixTYEdFgg=</pre>
<h4>Migration</h4>
<p>How can thousands of user accounts be migrated to another algorithm? As far as the hash is stored as a one-way encrypted string, the encryption of the real password with another algorithm is almost impossible. I have written a small crypt() <a href="http://paste.pocoo.org/show/495254/">cracking program</a> in python (sorry, Perl <img src='http://lukas-prokop.at/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ), but of course it is way too slow; even for a single password. So the only solution is to reset all passwords of all users. First call the /twiki/bin/configure script and change the algorithm setting (&#8220;{Htpasswd}{Encoding}&#8221; in the &#8220;Security Setup&#8221; section) [0] and secondly, <a href="http://www.twiki.org/cgi-bin/view/Wiki/BulkResetPassword">BulkResetPassword</a> will help you reset the passwords for all users. It takes some effort and time, but in the end you will gain a higher level of security <img src='http://lukas-prokop.at/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />      </p>
<p>[0] It is also possible to directly modify the <code>$TWiki::cfg{Htpasswd}{Encoding}</code> line in <code>/twiki/lib/LocalSite.cfg</code></p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

