POP3 AUTH Blocker for Outlook 2007

czyli Microsoft i jego wymysły po raz kolejny…

Wydawałoby się, że w końcu pomyślano o użytkownikach domowych, za całkiem przystępną cenę (ok. 180zł), otrzymujemy najnowszy pakiet biurowy Microsoft Office 2007, który możemy zainstalować aż na 3 komputerach domowych (60 zł na komputer to bardzo atrakcyjna cena). Wraz z nową odsłoną Office’a poza edytorem tekstu (MS Word 2007) i arkuszem kalkulacyjnym (MS Excel 2007) otrzymujemy również aplikacje, której głównym celem jest obsługa poczty elektronicznej (Outlook 2007).

Wszystko pięknie, gdyby nie jedna nowinka, która się pojawiła w tej wersji Outlook’a, mianowicie przy łączeniu do skrzynki przy użyciu protokołu POP3 następuje próba negocjacji obsługiwanych metod autoryzacji (wysyłana do serwera jest komenda AUTH). Nie byłoby w tym nic złego, gdyby nie fakt, że większość serwerów pocztowych nie obsługuje tej metody.

W rezultacie tego, logowanie do skrzynki przebiega długo, a w skrajnych przypadkach jest zupełnie niemożliwy odbiór poczty. Cała sytuacja jest opisana na grupach dyskusyjnych Microsoftu, lecz jak często bywa nie widać z ich strony żadnej odpowiedzi w tym temacie.

+OK Dovecot ready.
AUTH
+OK
PLAIN
LOGIN
.
USER macnow
+OK

Tak wygląda komunikacja z serwerem, który obsługuję te polecenie, jak widać serwer odpowiedział +OK a następnie wypisał listę obsługiwanych metod autoryzacji.

+OK POP3 ready WP
AUTH
-ERR Nieobsługiwany typ autoryzacji. Not supported authentication type.
USER macnow
+OK

Serwer pocztowy Wirtualnej Polski, odpowiedział nam komunikatem, że nie obsługuje tego typu autoryzacji, ale po chwili pozwolił się Outlook’owi zalogować.

+OK Messaging Multiplexor (Sun Java(tm) System Messaging Server 6.2-4.03 (built Sep 22 2005))
AUTH
-ERR invalid command
USER macnow

Natomiast powyższy fragment to negocjacja Outlook’a z serwerem poczty Orange, niestety po otrzymaniu polecenia AUTH ich multiplexor wariuje i nie odbiera od klienta dalszych poleceń.

W związku z tym w celach edukacyjnych napisałem w C++ prosty programik, który pozwala prześledzić transmisję między klientem poczty a serwerem, jak również, zablokować komendę AUTH z klienta i wygenerować domyślną odpowiedź serwera.

Pobierz POP3 AUTH Blocker for Outlook 2007

Perl, a swap… czyli pady amavis’a…

amavisd-new
jest to interfejs miedzy MTA a filtrami antywirusowymi/antyspamowymi… jego autorzy ujęli to w takiej sentencji: „high-performance interface between mailer (MTA) and content checkers: virus scanners, and/or SpamAssassin.”

Został on napisany w całości w Perlu, i osobiście uważam, że to bardzo interesujące rozszerzenie dla MTA, doskonale sprawdza się na średniej wielkości instalacjach Postfix‘owych.
Ale to nie o tym chciałem napisać, życie stawia przed nami coraz to nowe wyzwania…

Przez ostatnie kilka miesięcy walczyłem uparcie z jego stabilnością, co jakiś czas wysypywał się, proces znikał, a poczta gromadziła się w kolejce. Przeinstalowałem praktycznie wszystko, co się z tym wiązało: Perl‘a ze wszystkimi modułami, podbiłem amavisa do najnowszej wersji, ClamAV‘a (antywirus), SpamAssassin‘a (antyspam)… aczkolwiek nawet to nie pomogło, co jakiś czas serwer wymagał restartu i ręcznego przepchnięcia mail z kolejki do mailboxów…

Sprawa wyjaśniła się po kilku miesiącach całkiem przypadkowo, przy rekompilacji kernela, w celu dodania obsługi zaawansowanego routingu (iproute2), zauważyłem, że w systemie nie jest zamontowana partycja swap, którą oczywiście utworzyłem podczas instalacji… otóż to… „Chcesz coś zrobić dobrze? Zrób to od początku do końca sam!”

Zaufałem koledze z pracy, który chcąc mnie troszkę odciążyć zajął się przygotowaniem kernela… zrobił prawie wszystko co powinien… nawet spatchował go grseciem… no ale „prawie” robi różnicę, zapomniał o dokompilowania obsługi SWAPowania…

Wnioski:

  • Perl do prawidłowej pracy wymaga partycji SWAP !
  • „Chcesz coś zrobić dobrze? Zrób to od początku do końca sam!”
  • „And remember TRUST NO ONE…”

Wycinanka z maillog’a, tak dla przybliżenia problemu:

FAILED: run_command (open pipe): Can't fork at /usr/lib/perl5/5.8.8/i486-linux/IO/File.pm line 188

(!!)TROUBLE in check_mail: parts_decode_ext FAILED: run_command (open pipe): Can't fork at /usr/lib/perl5/5.8.8/i486-linux/IO/File.pm line 188. at /usr/local/sbin/amavisd line 2598.

(!)PRESERVING EVIDENCE in /var/amavis/tmp/amavis-20070816T153027-22891
451 4.5.0 Error in processing, id=22891-02-3, parts_decode_ext FAILED: run_command (open pipe): Can't fork at /usr/lib/perl5/5.8.8/i486-linux/IO/File.pm line 188. at /usr/local/sbin/amavisd line 2598. (in reply to end of DATA command))

(!!)TROUBLE in process_request: Can't create file /var/amavis/tmp/amavis-20070816T153027-22891/email.txt: File exists at /usr/local/sbin/amavisd line 4774, line 506.

(!)Requesting process rundown after fatal error
421 4.3.2 Service shutting down, closing channel (in reply to MAIL FROM command))

(!)Net::Server: 2007/08/16-15:30:27 Bad fork [Cannot allocate memory]\n at line 166 in file /usr/lib/perl5/site_perl/5.8.8/Net/Server/PreForkSimple.pm

Rosyjska ruletka dla adminów

Czasami przychodzą takie dni, kiedy trzeba sprawdzić swój „niefart”:

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo "Still alive"

No dobra to może dodatkowo wersja dla zwykłych userów i dla „mietkich” adminów…
aby również fun mieli:

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf ~/* || echo "Still alive"

Super akcja… daj piątaka!

Witam! Pomysł pojawił się na kanale IRC #rootnode@QuakeNET,
gdzie ostatnio przesiaduję sporo czasu…

11:07:17 < macnow> jakby wszyscy ludzie ktorych znam zlozyli sie mi na urodziny po 5 zl
11:07:36 < macnow> to bym mial super zabawki ;p
11:07:59 < devphyl> macnow: podaj numer konta
11:09:35 < macnow> devphyl: 50102055581111161095200086 (inteligo)

Dla zainteresowanych podaje jeszcze mBank:
30114020040000380233245243

Znaleźli się już tacy za których zdrowie wypiję przy najbliższej okazji…

C / PHP / Java – „Hello World” Linux Benchmark!

Zapraszam na małe porównanie wydajności języków programowania ;)

Benchmark:

[macnow@stallman ~]$ time ./Test
hello world
real 0m0.001s
user 0m0.000s
sys 0m0.000s
[macnow@stallman ~]$ time ./Test.php
hello world
real 0m0.025s
user 0m0.012s
sys 0m0.012s
[macnow@stallman ~]$ time java Test
hello world
real 0m0.153s
user 0m0.084s
sys 0m0.008s
[macnow@stallman ~]$

Źródełka:

[macnow@stallman ~]$ cat Test.c

#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}

[macnow@stallman ~]$ cat Test.php

#!/usr/bin/php
<?php echo "hello world"; ?>

[macnow@stallman ~]$ cat Test.java

public class Test
{
  public static void main(String arg[])
  {
    System.out.print("hello world");
  }
}

[macnow@stallman ~]$

  • RSS
  • Blip
  • Flaker
  • Twitter
  • Buzz
  • Facebook
  • GoldenLine
  • LinkedIn
  • NetworkedBlogs
  • Wykop
  • Picasa
  • Flickr
  • YouTube
  • Vimeo
  • Last.fm