Horde Groupware is Great

I was installing a new mail server and I was sticking with my usual suspects. I usually use Postfix for handling SMTP and Cyrus for IMAP and POP3 access. No surprises there.

But then the people you install a mail server for usually want you to make their mail accessible via some web interface. There, the situation is not so clear in my mind. There are several options to pick from. There is SquirerelMail, a very easy to install program with many plugins and options available. But its functionality can be seen as limited and it has some performance issues on very huge IMAP mailboxes.

On the other hand we have IMP, part of the Horde project. This is a fully featured webmail program that performs really well. The problem with IMP and Horde was that it was really difficult to install and configure. But now we the good people of the Horde project has provided us with a solution.

Horde Groupware Webmail Edition is a package where in one download you get all the pieces that make a good webmail applications. You get extra goodies like shared calendar, address book, notes, etc. The latest release also supports the integration with the Kolab Server.

The best thing of all: the nightmare of installing Horde and all its applications is over! Now you unpack the tarball, run a setup script and your groupware webmail application is up and running in under two minutes. The sheer wealth of functionality that this install provides is a real joy.

Nothing else to say but to congratulate the Horde developers for such a great application. Highly recommended.


Serendipity on Lighty

I have been moving some of my sites around and the turn came to my blog. Since I have decided to try lighttpd on my new server I was wondering how easy would it be to setup Serendipity on it.

Well the basic install went pretty smoothly, but I wanted, of course, to use "friendly" URLs. For that Serendipity supplies .htaccess file with Apache mod_rewrite rules. With a little bit of effort it was possible for me to convert those into rewrite rules that lighttpd would understand:

# Serendipidy rewrites
url.rewrite-once = (
"(archives/([0-9]+)-[0-9a-zA-Z\.\_!;,\+\-]+\.html)" => "index.php?/$1",
"(authors/([0-9]+)-[0-9a-zA-Z\.\_!;,\+\-]+)" => "index.php?/$1",
"(feeds/categories/([0-9;]+)-[0-9a-zA-Z\.\_!;,\+\-]+\.rss)" => "index.php?/$1",
"(feeds/authors/([0-9]+)-[0-9a-zA-Z\.\_!;,\+\-]+\.rss)" => "index.php?/$1",
"(categories/([0-9;]+)-[0-9a-zA-Z\.\_!;,\+\-]+)" => "index.php?/$1",
"archives/([/A-Za-z0-9-]+)\.html" => "index.php?url=/archives/$1.html",
"([0-9]+)[_\-][0-9a-zA-Z_\-]*\.html" => "index.php?url=$1-article.html",
"feeds/(.*)" => "index.php?url=/feeds/$1",
"unsubscribe/(.*)/([0-9]+)" => "index.php?url=/unsubscribe/$1/$2",
"approve/(.*)/(.*)/([0-9]+)" => "index.php?url=approve/$1/$2/$3",
"delete/(.*)/(.*)/([0-9]+)" => "index.php?url=delete/$1/$2/$3",
"(admin|entries)/(.+)?" => "index.php?url=$1/$2",
"admin$" => "index.php?url=/admin",
"archive/?" => "index.php?url=/archive",
"(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml)" => "rss.php?file=$1&ext=$2",
"(plugin|plugin)/(.*)" => "index.php?url=$1/$2",
"search/(.*)" => "index.php?url=/search/$1",
"(serendipity\.css|serendipity_admin\.css)" => "index.php?url=/$1",
"index\.(html?|php.+)" => "index.php?url=index.html",
"htmlarea/(.*)" => "htmlarea/$1",
"(.*\.html?)" => "index.php?url=/$1"

We only need to prevent some files from being sent to the user:

url.access-deny = ( ".tpl.php", ".tpl", ".sql", ".inc.php")

I guess the future will show how many security holes I have opened playing with these regexs :)