Migrating thousands of mailboxes to a new mailbox storage

Years ago we were faced with the following situation: We had thousands of mailboxes that were being served by a proprietary and unsupported version of email software. So we decided to move to a new architecture. While researching I selected a very good (IMHO) commercial product. But for reasons outside the scope of the post I opted for a F/OSS solution, and specifically the UW-IMAP toolkit. For those rushing to judge that price was the decisive factor I only have to reiterate Vladimir Butenko‘s words:

“Bottom line: you always pay. You need a simple thing – you pay a small amount, you need a big thing – you pay more.” (plain message and comp.mail.imap thread)

OK and now for the real question: How do you move thousands of mailboxes without your users noticing?

Since you do not know (and do not want to know) your users’ passwords the only thing you can do is to hack into the source code of your POP3 server (we do not offer IMAP yet). Whether it is the UW-IMAP toolkit, Cucipop, popa3d or any other server that you have access to its source, the server knows the correct password for your users when they authenticate. So when the authentication succeeds you fork(2) a program that logs into the old server and fetches the mailbox from the old server to the new one that runs the F/OSS software that you have selected. This can be fetchmail or any similar program. However I have found out that Net::POP3 is a better choice:

#!/usr/bin/perl
use Sys::Syslog;
use Net::POP3;
use DB_File;
$host = shift or die;
$user = shift or die;
$pass = shift or die;
tie %d, 'DB_File', "/etc/pop3.users.db", O_CREAT|O_RDWR, 0640, $DB_BTREE or die;
if ($d{$user}) {
        untie %d;
        exit 0;
}
$pop = Net::POP3->new($host) or die;
if ($pop->login($user, $pass) >= 0) {
        openlog("pop3cat-tmail", 'pid', 'mail') or die;
        syslog('info', 'fetching mail for user %s', $user);
        closelog();
        $msgnums = $pop->list or die;
        foreach $msgnum (keys %$msgnums) {
                $msg = $pop->get($msgnum);
                open T, "| /usr/bin/tmail $user" or die;
                print T @$msg;
                $pop->delete($msgnum);
                close T;
        }
        $d{$user} = "OK";
        untie %d;
}
$pop->quit;
exit 0;

Where exactly in the server code you fork(2), exec(3) and wait(2) for the script depends on the source code. You need to find where in the server code the authentication procedure succeeds and patch from there, before the server actually opens the user’s mailbox.

This script basically checks whether it has already moved a user’s mailbox from the old server. If it has, then the user is found in /etc/pop3.users.db and the script exits. If not, then the mailbox is moved and the user is inserted in /etc/pop3.users.db. Simply using Net::POP3 allows you to move the old mailbox to the Unix traditional mailbox format. That is why we fork tmail, since I have chosen the mbx mailbox format to store messages (I compile UW-IMAP with CREATEPROTO=mbxproto). If your server supports a format like Maildir, then you have to customize the above script accordingly, since it is written for mbx, which means that the user’s mailbox is a single file.

Όλα όσα θα χρειαστείτε για μια άνετη και επιτυχημένη θητεία

Ένας φίλος ξεκινάει τη στρατιωτική του θητεία σε λίγες μέρες και με την ευκαιρία του δείξαμε μια λίστα με πράγματα που πρέπει να έχει μαζί του. Με την άδεια του φίλου Γιώργου που την ανέπτυξε.

Καλή θητεία Κ.

[via]

The Aurelio

Ελπίζω να μη το δούμε και σήμερα αυτό από τον Taddei.

Από το Wikipedia: “On 18 October 2006 Rodrigo created a new trick called “The Aurelio”, named after AS Roma Assistant Manager, Aurelio Andreazzoli. The move envolves putting your weight on your left foot, while guiding the fooball with your right leg around the back of your left leg and forward again. It is only the second ever football trick to be named after a footballer following the Cruyff Turn.”.

Μου αρκεί που το είδα live την πρώτη φορά που το πέτυχε σε αγώνα.  Δε θέλω κι άλλη.

Οι λεπτομέρειες κάνουν τη διαφορά(;)

Η ανακοίνωση του ΠΣΑΤ για τα επεισόδια λέει μεταξύ άλλων:

Οι υπόλοιποι εκπρόσωποι του Τύπου που κάλυπταν τον αγώνα σώθηκαν χάρη στην παρέμβαση του Αργύρη Καμπούρη, τον οποίο ευχαριστούμε δημόσια για την ενέργειά του.”

Στα βίντεο που έδειχναν τα επεισόδια είμαι σίγουρος πως είδα τον Άκη1 (TV Magic Άκης). Διαβάζοντας την ανακοίνωση του ΠΣΑΤ πίστεψα πως απλά είχα κάνει λάθος (ΟΚ δεν μπερδεύει κανείς εύκολα τον Καμπούρη με τον Άκη). Να όμως που ο Γιάννης Λαμπίρης στην ΟΜΑΔΑ γράφει:

“Αξίζει να σημειωθεί ότι από τα χειρότερα γλίτωσαν τους συναδέλφους της ΕΡΤ ο Αργύρης Καμπούρης και ένα μέλος της «Θύρας 7».”

Θα τους έπεφταν τα μούτρα στον ΠΣΑΤ αν το αναγνώριζαν ε;


[1] Το Wikipedia link για τον Άκη δούλευε μέχρι χτες.

fedoraproject.gr

Αν και χρήστης άλλων διανομών (Ubuntu και Xandros), δε μπορώ παρά να δώσω συγχαρητήρια για την προσπάθεια:

” Το Fedora Core 6 κυκλοφορεί από τις 24 Οκτωβρίου 2006 και περιέχει σημαντικές αναβαθμίσεις αρκετών βασικών προϊόντων και τεχνολογιών. Με νέες προεπιλεγμένες γραμματοσειρές για την επιφάνεια εργασίας και την κονσόλα και μεγάλο αριθμό καινούριων μεταφράσεων, το Fedora είναι πιο εξελληνισμένο από ποτέ.”

(download)

[via]

Ο Διαμαντίδης μέσα από τα μάτια του Σκουντή

(Ακόμα είναι ημίχρονο Τελείωσε ο αγώνας και έχω τα νεύρα μου, αλλά όχι γιατί χάνουσαμε)

Όλοι έχουν δικαίωμα να έχουν personal favorites (π.χ. ο Σωτηρακόπουλος είχε το Λυμπερόπουλο και τώρα τον Κατσουράνη) αλλά εσύ το παράκανες.

Δεν υπάρχει αμφιβολία πως ο Διαμαντίδης είναι τεράστιος παίχτης.

Παιχταράς!

Παιχταράς!

Αλλά όταν μεταδίδεις αγώνα, καλό είναι να μεταδίδεις αγώνα. Αν θέλεις να εκθειάζεις το Διαμαντίδη καλό είναι να του βγάλεις ένα DVD best-of με τίτλο “Βάλ’το αγόρι μου!”.

Διαφορετικά θα πρέπει να μου εξηγήσεις πειστικά σε τι διαφέρουν οι μεταδόσεις σου από το σχολιασμό φάσεων του Ολυμπιακού που κάνει ο Τάκης, ο Άκης και ο Αλέκος. Τουλάχιστον αυτοί είναι οπαδοί και όχι αντικειμενικοί(;) δημοσιογράφοι.

Update: Ότι έκανε ο Σκουντής στο πρώτο ημίχρονο έκανε και ο Ιωάννου στο 2ο ημίχρονο ειδικά όταν ο Ντόμερκαντ άρχισε να βάζει τα συνεχόμενα τρίποντα.  Αυτά τα “Ναι!” δεν είναι αντικειμενική περιγραφή αγώνα.

Οι φίλοι μας τα ζώα και η θεωρία των “άλλων”

Οι φίλοι μας τα ζώα είναι μια σειρά από συμπεριφορές που καταγράφω εν θερμώ, λεπτά σχεδόν αφότου μου έχει συμβεί η ατυχής εμπλοκή με το ζώο. Ο ΠΠΚΠ προσφέρει μια θεωρία (τη θεωρία των “άλλων“) μέσα από την οποία προσπαθεί να εξηγήσει τα αίτια της καφρίλας τους. Ικανοποιητικά θα έλεγα, με μία ένσταση όμως: Οι κάφροι μπορεί να είναι πολλά πράγματα, αλλά η καφρίλα δεν είναι ιδιότητα που τους συνοδεύει. Πρέπει να βρούμε άλλη λέξη.